主页 > imtoken限制中国用户该咋办 > 比特币如何运作

比特币如何运作

讨论一个完整的去中心化比特币(货币)系统的运行机制,需要结合技术和金融。 下面是几个简单的问题:

谁来发行新的比特币,谁来记账/维护账本(交易记录),谁来审批交易的有效性,谁来制定比特币的运行规则

下面,结合比特币交易来简单了解一下整个系统。

考虑业务场景:拥有一定数量比特币的A需要支付m数量的比特币给B。因为在比特币系统中,每个参与者都不知道对方的身份,如何赢得对方的信任:证明他们拥有一定数量的比特币或已经支付/收到了 m 数量的比特币? 比特币的所有权以何种方式转移?

首先,交易者根据密码学知识生成一对密钥对。 其中,公钥的Hash值作为收币的地址addr; 私钥用于签署数据。 当A向B发送m个币时,本次交易的内容主要包括:

A证明自己有足够数量的币nA发送m个币到B的地址,并通过自己的地址addr找零(实际支付的币可能不等于拥有的币,找零地址可以是发送地址addr)

比特币钱包找零机制_比特币挖矿机制pow_比特币系统的运行机制

要证明一个地址有足够的比特币,可以使用区块链指针来判断一个地址是否有足够的比特币。 要证明A对地址的所有权,只需使用对应的私钥进行签名,当签名信息通过验证后,即可证明A的所有权。

地址addr有n个币,也就是说之前一笔交易的输出地址是addr,币的个数是m。 因此,当A将地址addr中的币发送到B的地址时,需要将之前的交易信息作为输入参数,然后指定输出地址和对应的金额。 这将创建一个事务。 创建完成后,A需要使用地址addr对应的私钥对交易进行签名,然后发送到比特币网络。

当比特币网络中的一个节点收到交易,并且当一个“被选中”的具有区块链数据写入权的节点将交易打包成一个区块并添加到区块链中,然后其他节点(一般等待6个节点的确认) 并接受区块,交易被认为在比特币网络中完成。

在密码学知识没有漏洞的情况下,将交易发送到比特币网络之前的操作是无懈可击的。 那么如何确认是哪个节点负责将新区块添加到链上呢? 这涉及分布式共识和激励。

所谓共识,从技术上讲是指一个有N个节点的系统,每个节点都可以输入,部分节点有故障或恶意,所以一个分布式协议有以下两个属性:

比特币系统的运行机制_比特币挖矿机制pow_比特币钱包找零机制

输入值的中止必须由所有诚实节点决定 输入值必须由诚实节点生成

从理论研究的结果来看,分布式共识在某些情况下是不可能实现的。 比如业界有一个著名的拜占庭问题。 当超过1/3的节点是“叛徒”时,无法达成共识。 还有Fischer-Lynch-Paterson不可能结果的结论:简单来说,在多进程异步系统中,只要有一个进程不可靠,就不可能在限定时间内让所有进程都一致。 当然,研究人员通过妥协某些条件,提出了一些算法来达成共识,比如Paxos算法。 但以上关于分布式共识的内容是理论研究的结果。 比特币是一个实用的系统。 通过奖励机制和良好的随机性,在实践中实现了分布式共识,并且运行良好。

简化版的比特币共识可以理解为:

一个交易被广播到所有节点,每个节点将监听到的交易放入一个区块中。 在每一轮中,一个随机节点可以广播它的块。 其他节点验证通过后,可以选择接受该区块。 所有节点将区块的哈希值放入自己的区块,代表该区块所在链上达成的共识

通过将上一个区块的哈希值打包到要创建的区块中比特币系统的运行机制,就意味着该节点对上一个区块进行了确认,简而言之,达成了共识。 当大多数节点自动对确认的区块进行下一次共识时,区块链就会变得越来越长。

比特币系统的运行机制_比特币钱包找零机制_比特币挖矿机制pow

然后思考为什么节点愿意接受一个区块,并将该区块的哈希值放入自己的区块中(这种行为是指节点将该区块视为区块链的终点,当前节点的行为在链中扩张)? 这就涉及到比特币的奖励机制。

奖励机制不仅仅是一个技术问题。 显然,分布式网络中肯定存在恶意/坏节点——好像不是每个人都是守法/道德高尚的。 由于比特币网络的匿名性——只知道一个哈希地址,恶意节点的行为无法受到惩罚。 但是,对于遵守规则的节点,我们可以对其进行激励。 当一个节点成功扩容区块链时,系统会奖励一定数量的比特币(比特币从2009年开始运行,开始奖励50个比特币,每4年减半,2018年大约是12.5个)。 在这种情况下,为了维护自身利益,各节点会尽量遵守奖励规则:

还需要提到的是,比特币的另一种奖励形式是交易手续费:一笔交易的输入和输出之间的差额就是对节点的奖励。 理论上,输入不必大于输出,但节点会优先将交易费用高的交易放入区块。

接下来,回到第一个奖励机制。 由于比特币奖励可以通过创建区块获得比特币系统的运行机制,“随机”的节点不一定能服众,各个节点会争先恐后地抢夺资格。 那么,如何制定规则来选择节点出块呢? 这涉及工作证明。

随机选择一个节点出块是绝对不可能的。 我们希望找到这样一种方式来决定某个节点随机出块:

比特币钱包找零机制_比特币挖矿机制pow_比特币系统的运行机制

在比特币中,工作量证明意味着找到一个随机数,使得:

H(nonce||prev_hash||tx||...||tx) < target

根据前面提到的哈希函数的谜题友好性,没有比一个一个地计算更好更快地找到随机数的方法了。 因此,哈希函数的特性决定了算力越高的节点有更高的概率有资格出块。 而更高的概率并不代表确定性,所以它在某种意义上带有轻微的随机性。 当找到这个随机数后,其他节点很容易验证它,而不会消耗太多资源。

此外,比特币的另一个特点是会动态调整出块难度,从而保证在10分钟左右产生一个新的区块。

比特币挖矿机制pow_比特币系统的运行机制_比特币钱包找零机制

想象一下检查比特币系统安全性的几次攻击。

A 谎称拥有地址 addr,并试图将地址中的币转移到另一个地址 A 必须提供用该地址对应的私钥签名的信息来证明所有权

多次支付:A发送m个比特币给B,再发送给C

A 拒绝 B 的交易 除非 A 可以控制所有节点,否则其他节点可能会将 B 的交易打包并添加到区块中

区块链技术驱动金融

比特币源代码

精通比特币:这本书有网友翻译的中文版,很好找,但翻译质量一般,最好对照原文阅读。