主页 > 苹果手机imtoken怎么下载 > 区块链技术分析

区块链技术分析

苹果手机imtoken怎么下载 2024-01-04 05:14:20

零知识证明和一个小故事

零知识证明是一种认证技术,是指证明者在不向验证者提供任何有用信息的情况下,可以使验证者相信某个断言是正确的,证明者向验证者证明并说服验证者知道某个消息或拥有某个物品,但证明过程不需要(也不可能)向验证者公开。

早在16世纪文艺复兴时期,两位意大利数学家就利用零知识证明的方法,角逐了求一变量三次方程的根公式发现者的桂冠。 当时数学家Tartaria和Feo都声称自己掌握了求根公式。 为了证明他们没有撒谎,也没有透露公式的具体内容,他们设置了一个挑战赛:双方各出30块钱给对方三次方程的解法,谁能解出全部就意味着那谁掌握了公式。 比赛结果显示,塔尔塔利亚解出了费奥的全部30个方程,而费奥一个也解不出来。 于是人们认为,塔塔利亚是求一元三次方程根的公式的真正发现者,尽管当时除了塔塔利亚以外,没有人知道这个公式长什么样子。

区块链概念

技术原理 以比特币为例

区块链工作原理概述

1.交易的产生(区块结构)

2. 交易的传播(如何传播)

3、交易验证(交易的合法性、谁来记账、记账原则)

4.验证结果P2P网络传播

5.交易写入账本(如何达成共识,账本一致性问题)

1. 交易生成 区块链结构交易信息创建

传统金融交易中,交易的身份和合法性由金融机构认证,A向B发起转账,金融机构保证交易的合法性并创建交易流程,而区块链交易是去中心化的如何保证交易双方身份的合法性?

在密码学中,数字签名用于确保身份。 在使用数字签名时,每个人都可以自己生成一对秘钥。 这个秘钥对包含一个私钥和一个公钥:私钥必须严格保密,不能泄露给他人; 公钥可以向任何人公开。

当私钥持有者A用自己的私钥对消息进行签名,然后发送消息、签名和自己的公钥时,其他任何人都可以通过小明的公钥验证签名。 ,可以肯定这条消息是小明发的。

交易信息在网络中广播,每个节点将接收到的交易信息合并到一个区块中。

电子签名

发件人对数据进行哈希处理以获得摘要(Digest)

使用自己的私钥对摘要进行加密,生成签名(Signature),然后在不受信任的公网上传播

接收方使用发送方的公钥解密签名,得到摘要[1]

散列数据内容以获得摘要[2]。

如果 Digest[1] = Digest[2],则说明是发件人发送的,没有任何改动。

未交易输出

UTXO(Unspent Transaction Outputs)是未花费的交易输出,是比特币交易过程中的基本单位。 除创世区块外,所有区块中的交易(Tx)都会有若干个输入(Tx_in,又称资金来源)和若干个输出(Tx_out,又称资金去向)。 另外,在比特币系统中,某笔交易的输入一定是另一笔交易未使用的输出,而这个输入还需要有一笔之前的交易。 输出地址对应的私钥被签名。 当前整个区块链网络中的UTXO都会存储在各个节点中,只有满足源自UTXO和数字签名条件的交易才是合法的。 因此,区块链系统中的新交易不需要追溯整个交易历史来确认当前交易是否合法。

1)001号交易为Coinbase交易,系统直接奖励发行比特币。 爱丽丝得到12.5个比特币的奖励比特币技术原理通俗,放在001号交易的“输出”部分。此时,对于拥有这12.5个比特币控制权的爱丽丝来说,这12.5个比特币的输出可以作为下一笔交易的“输入”,而这个“输出”称为Alice未来的Spend输出,也就是Alice的UTXO的意思。

2)在002号交易中,Alice转了6个比特币到Bob的地址,Alice找到了自己的UTXO(如果Alice有多个UTXO,可以按照一定的规则选择,比如先花掉小的),因为Just需要转6个比特币,但是​​UTXO里面有12.5个,所以需要把6.5改成自己的地址,这样就生成了002号交易输出。注意Alice在002号交易输出中的地址是可以不同的Alice的地址在001号,只要是属于Alice自己的钱包地址即可。

3)在交易003中比特币技术原理通俗,Bob转了2个比特币到Lidy的地址。

多种交易类型

n 一般交易

输入 0(来自 Alice,由 Alice 的私钥签名)==> 输出 0(给 Bob)

==>输出1(爱丽丝,改变)

n集体交易****--明显增加交易的矿工费

输入 0

输入 1 ==> 输出 0

...输入 N

n 去中心化交易

==>输出0

输入 0 ==> 输出 1

==>输出2

平衡

UTXO模型将所有交易的输入和输出以链式方式组织起来,每笔交易的输出最终都可以追溯到一个Coinbase,即当前比特币被挖出时区块中的第一笔交易。

比特币没有平衡的概念。 账户余额是该账户所有未支付交易输出条目的总和,是区块链计算的结果。 如果从创世块开始计算余额,成本会很大,所以一些比特币客户端的实现还维护了一个UTXO数据库,也称为UTXO池,它是区块链中所有未支付交易输出的集合. “UTXO池”这个名字听起来和交易池很像,但它代表的是不同的数据集。 UTXO 池不同于交易池和孤儿交易池,它在初始化时并不是空的,而是包含数百万个未花费的交易输出条目,其中一些甚至可以追溯到 2009 年。UTXO 池可能被放置在在本地内存 ze'kai'xi 中,或作为永久存储中的索引数据库表。

2.交易传播P2P网络

P2P网络不同于传统的C/S结构。 每个节点既可以是客户端也可以是服务器。 因此,不适合使用HTTP协议进行节点间的通信。 一般直接使用Socket进行网络编程。 P2P主要有四种不同的网络模型,也代表了P2P技术的四个发展阶段:集中式、纯分布式、混合式和结构化模型。

混合型。 混合型实际上是集中式和分布式结构的混合体。 网络中有多个超级节点组成分布式网络,每个超级节点有多个普通节点与其组成局部中心化网络。 当一个新的普通节点加入时,首先选择一个超级节点进行通信,超级节点再向新加入的节点推送其他超级节点的列表,由加入的节点根据具体情况决定选择哪个超级节点作为父节点。到列表中超级节点的状态。 这种结构的泛洪广播只发生在超级节点之间,可以避免大规模泛洪的问题。 在实际应用中,混合结构是一种比较灵活有效的组网架构,实现难度较小。 因此,目前很多系统都是基于混合结构开发和实现的。 这就是今天比特币网络的结构。

3. 交易验证去中心化记账

在分布式系统中,多台主机通过异步通信形成一个网络集群。 在这样的异步系统中,需要在主机之间进行状态复制,以保证每台主机达成一致的状态共识。 由于分布式系统中节点的不可靠性。 因此,需要在默认不可靠的异步网络中定义一个容错协议,以保证每台主机达成安全可靠的状态共识。

从去中心化账本系统的角度来看,每个加入系统的节点都必须保存一个完整的账本,但每个节点不能同时记账,因为节点处于不同的环境,接收的信息不同。 如果同时记账,难免会造成账目不一致,混乱不堪。 因此,需要达成共识,确定哪个节点有记账权。

拜占庭将军问题

拜占庭将军问题是 Leslie Lamport 在 1980 年代提出的人工制品问题。 拜占庭是东罗马帝国的首都。 由于当时拜占庭罗马帝国幅员辽阔,各军驻军相距甚远,将军们只能靠使者传递消息。 当战争爆发时,将军们必须制定统一的行动计划。 然而,这些将领中却有叛徒,他们希望通过影响统一行动计划的制定和传播,破坏忠诚将领的一贯行动计划。 因此,将领们必须有一个预定的方法协议,让所有忠将都能够同意,而少数的叛徒不能让忠将们做出错误的计划。 也就是说,拜占庭将军问题的本质是想办法让将军在有叛徒的非信任环境下就作战计划建立共识。 在分布式系统中,尤其是在区块链网络的上下文中,它也类似于拜占庭一般环境,有健康的服务器(如忠诚的拜占庭将军)、故障服务器和破坏者服务器(如叛逆的拜占庭将军)。 共识算法的核心是在正常节点之间形成对网络状态的共识。

Lamport 对拜占庭将军问题的研究表明,当叛徒数量 m 小于将军总数 n 的 1/3 时,将军们可以通过口头同步通信(假设通信可靠)达成共识命令。 但如果通信是可验证的、防篡改伪造的(如使用PKI认证、消息签名等),在任意数量的叛徒(至少两个忠诚的将军)的情况下都可以找到解决方案。

POW 工作证明

谁将占上风? Proof-of-Work机制定义如下:一般需要用户进行一些耗时复杂的计算,答案可以被服务器快速校验,并以消耗的时间、设备和能量作为保证确保服务和资源被实际需要使用的成本。 工作量证明机制的原理就是前面提到的零知识证明。

比特币区块链通过竞争记账解决了去中心化记账系统的一致性问题。 比特币系统设计了一种机制,通过每个节点的计算能力,即“算力”来竞争记账权。 在比特币系统中,大约每10分钟进行一轮算力竞赛,竞赛获胜者将获得一次记账权,并将新的账本信息同步到其他节点。 工作量证明(PoW)机制用于实现比赛结果的确定。

1. 生成一个Coinbase交易并与所有其他要打包到区块中的交易形成交易列表,并生成一个Merkle hash;

2. 将Merkle hash和其他相关字段组装成区块头,将区块头(Block Header)作为工作量证明的输入。 区块头包含前一个区块的哈希值,区块头一共80字节。 数据;

3、不断改变区块头中的随机数,即nonce的值,即暴力搜索,对每一个改变的区块头,即SHA256(SHA256(Block_Header)))进行双重SHA256运算,以及转换结果值与当前网络的目标值比较,如果小于目标值,则问题成功解决,工作量证明完成。

默克尔根

将要包含在区块中的交易信息按顺序排序,并对每笔交易信息进行哈希处理,从第0笔交易开始,将每两笔交易的哈希(hash)结果之和进行哈希处理,如果交易的个数为奇数,则last transaction复制自己的hash值进行hash,然后迭代直到最后只有一个hash值,就是Merkle root,整个树结构数据就是默认的Kerr树。

如果任何一个叶子节点的交易被修改,叶子节点的哈希值都会发生变化,最终根节点的哈希值也会发生变化。 因此,确定的根节点的哈希值可以准确地作为一组交易的唯一摘要。

Merkle树的典型应用是在对等网络中使用P2P下载进行数据传输时验证数据的完整性。

4.交易传播交易池

比特币内存池包含尚未被纳入区块链的交易,也称为交易池。

几乎比特币网络上的每个节点都维护着一个临时的未确认交易列表,称为内存池、mempool_ 或 _transaction pool。 节点使用池来跟踪网络已知但尚未包含在区块链中的交易。

当用户使用比特币发起一笔交易时,会通过P2P网络广播给各个节点,各个节点将这笔交易放入交易池中。 然后矿工在挖矿的时候,也就是在出块的时候,从交易池中选择一部分交易进行打包。 当一个区块产生时,相关交易将从交易池中移除。

节点需要为内存池中的每笔交易分配优先级,并选择更高优先级的交易记录构建候选区块。 交易的优先级由交易输入花费的 UTXO 的交易创建时间决定。 交易输入值高、创建时间早的交易比输入值新、输入值小的交易优先级高。 用于存储块中交易的前 50K 字节保留给更高优先级的交易。 如果区块中有足够的空间,高优先级交易将不需要矿工费。 矿工费越高,正在处理的交易的优先级越高。

孤儿池

一些节点实现还维护一个单独的孤立交易池。 如果一个交易的输入引用了一个未知的交易,就像缺少父交易一样,孤儿交易将暂时存储在孤儿池中,直到父交易到来。

当一个交易被添加到交易池时,孤儿交易池将被检查是否有任何孤儿(后续交易)引用了这个交易输出。 然后验证任何匹配的孤儿。 如果有效,它们将从孤立交易池中移除并添加到交易池中,完成从父交易开始的链。 给定不再是孤儿的新交易,该过程会递归地重复寻找更多的后代,直到找不到更多的后代。 通过这个过程,父交易的到来触发了整个链中相互依赖的交易的级联重建,使孤儿与其父母重新融合。

交易池和孤立交易池都存储在本地内存中,不持久化在持久化存储上; 此外,它们是根据传入的网络消息动态填充的。 当节点启动时,两个池都是空的,并逐渐填充网络上收到的新交易。

账单验证

各节点收到用户广播的账单后,需要验证账单的合法性和真实性。 这里的合法性是指节点会根据付款人的地址来验证付款人的比特币是否足够。 比特币是去中心化的,所以需要一种机制来推动每个节点主动记账。比特币每个区块奖励前四年50个BTC,之后每四年减半,总量为2100万个

5.交易记录打包

在第 n 笔交易被验证后,每个节点通过 POW 工作量证明执行找到一个满足难度条件的随机数的工作。当一个节点找到一个随机数时,它向全网广播

nHash 验证随机数是否有效,有效则识别。 只有当该区块只包含前一个区块中不存在的交易信息时,该区块才会被识别。

n 通过在块的末尾创建一个新块来接受该块。 (最长链原理,比特币分叉)

n6个区块被确认后(比特币的默认值),交易被确认并永久写入区块链。 当一个区块被“确认”超过 6 次时,它被认为是不可撤销的,因为撤销和重建 6 个区块需要大量的计算,并且将交易打包在一起并放入区块需要大量的时间。 证明是计算密集型的,但事实证明,它们只需要少量的计算就可以得到验证。

上述行为在比特币交易中也被称为“挖矿”。 矿场的出现违背了去中心化的初衷。

最长链原理

如果两个矿工各自同时找到一个有效的区块,那么这两个区块是不同的,因为coinbase交易不同,所以Merkle Hash不同,block hash也不同。 但只要满足难度值,都是有效的。 此时,网络上的其他矿工应该接收哪个区块并将其添加到区块链的末尾? 答案是,两者皆有可能。

通常,矿工首先收到有效的区块。 由于P2P网络广播的顺序是不确定的,不同的矿工可能先收到不同的区块。 这时候我们就说这个区块有分叉了。 在分叉的情况下,一部分矿工继续在绿叉上挖矿,一部分矿工继续在蓝叉上挖矿。

但最终,总会有一个分叉先挖出后续区块。 此时,由于比特币网络采用最长分叉的共识算法,绿分叉获胜,蓝分叉被放弃。 会在最长链上继续挖矿。

虽然区块链最终会保持数据的一致性,但一笔交易可能会被打包到一个后续的孤立区块中。 因此,要确认一笔交易永久记录在区块链中,就需要对交易进行确认。 如果将后续区块附加到区块链中,原来的交易实际上会被确认,因为链越长,修改就越困难。 一般来说,6 个区块后确认的交易几乎不可能被修改。

区块打包难度

比特币区块平均每 10 分钟生成一次。 这是发行比特币和进行交易的汇率的基础,必须始终保持不变。 随着技术的发展,计算机的性能将迅速提高。 此外,参与挖矿的人员和计算机也在不断变化。 为了以每 10 分钟一个的速度产生新区块,必须根据这些变化调整挖矿难度。

2009年12月30日,比特币挖矿难度首次增加。 寻找一个比特币区块需要全网处理10分钟,每找到2016个区块,难度根据前2016个区块的完成时间调整。

新难度=旧难度*(最后2016个区块的实际时间/20160分钟)

区块链安全问题

n 双花问题(double payment):假设Fred给了Alice 2 BTC,Ted给了Alice 3 BTC,我们把这两个发给Alice:现在Alice有两个UTXO,可以作为他以后转账给别人的输入。 如果Alice现在想转给Bob 5个BTC,他需要用前两个总和正好为5的UTXO作为本次交易的输入。 矿工需要验证的是,在上一个区块中没有其他交易使用过这个 Unspent Output。 如果已经发送了相同的输出,则它不是未花费的,这就是比特币防止双花支付的方式。

n51%攻击:POW算法下,节点挖出区块的概率与算力成正比。 一旦出现矿池联盟,总算力超过全网的51%,就会导致区块链系统出现安全问题。 如果有这样的攻击者,它故意将第一笔交易广播给一半网络,将第二笔交易广播给另一半网络,然后两边的两个矿工几乎同时获得记账权,各自记账的区块广播给所有人。 这时候你可以选择任何一本账本。 这时,原来的统一账本出现了叉子。