比特币技术笔记(4)区块链&公共账簿

  • by

1.   双重支付问题

根据电子签名定义的比特币存在一个致命问题:货币的重复使用。即发生如下情况:

收款人B的bitcoin =发送者私钥加密(付款人A的货币bitcoin,收款人B公钥)
收款人C的bitcoin =发送者私钥加密(付款人A的货币bitcoin,收款人C公钥)

此时,按照上文定义的验证方法,收款人B与收款人C所收到的货币均有效。一种直观的解决方案就是比较交易时间:如有双重交易问题,那么先发生的交易有效,后发生的交易无效。但是在互联网中,每台电脑的时间都可能不一样,利用时间的先后来验证不太可行。

比特币的解决方案是,维护一个公共账簿来确保每一笔交易的有效性。为了保证账簿是去中心化的(防止任何个人篡改),这个账簿并不是存储在某个中心服务器上,而是存储在网络中的每一个节点中。

这样的公共账簿通过称为『区块链』的数据结构来实现。

2.   作为公共账簿的区块链

『区块链』(Block Chain)由多个『区块』(Block)形成的链式结构所组成,每一个『区块』包含了若干条有效的交易记录。『区块链』上的第t个区块的数据内容如下:

block(t) = {
前一个区块block(t-1) 的散列值,即hash( block(t-1) )
本区块所包含的交易信息
}

凡是记录在有效『区块』中的交易,均视为有效交易。那么只要证明一笔交易的资金存在于有效『区块』中,且未被有效使用,则可认为这笔支付是有效的。

但请注意,由于『区块链』的去中心化特征,这个『区块链』结构储存于比特币网络的任意节点中。那么任一网络节点都有资格生成完全不一样的『区块链』数据库。这个问题通过工作量证明(Proof-of-Work)机制来解决。

3.   工作量证明

『工作量证明』(Proof-of-Work)机制规定,任何一个区块链都必须包含一个随机数,使得这个区块链的散列值小于特定的值。用伪代码表达为:区块链中第t个区块的结构因该是

block(t) = {
前一个区块block(t-1) 的散列值,即hash( block(t-1) )
本区块所包含的交易信息
}

通常而言,计算一个数据的hash值很容易,但是要构造一个hash值满足特定条件的数据就很难了。因此,创建一个区块链变得非常困难,网络节点不得不反复尝试各种随机数,来得到符合规则的区块。

此时,区块的创建成为了一个小概率随机事件。当比特币网络中随机的出现一个运气好的计算节点,得到了一个有效区块后,它就会在网络中广播它所得到的区块。大家可以自由选择接受或者拒绝。

其他网络节点表达接受的方式,就是在这个被认可的区块上开始新一轮的工作量证明,即在现有区块链上创建新区块 block(t+1)。

当然,其他网络节点也可以选择拒绝承认, 花费更多时间创造自己的区块,即产生区块链的分叉,即从某一个『区块』开始,产生两条可选的『区块』序列。但是,区块链网络还规定了:任意节点遇到区块链分叉的情况下,优先选择更长的那个。这个规则能够有效地处理在大多数的分叉问题。

4.   区块激励

以上设计的区块链会消耗大量的CPU机时(即所消耗的电能)。为了鼓励网络中的节点参与计算,区块链网络设计了区块激励制度,来奖励创造了新区块的计算节点。

具体的实施方式是:规定任意区块所记录的交易中,第一笔交易可以没有付款人,只有收款人(即区块创建者的钱包地址),但是金额为公认的一个数值。伪代码表达如下:

block(t) = {
前一个区块的散列值,即hash( block(t-1) )
区块所包含的交易信息
第一笔交易只有收款人地址,区块奖励金额
任意随机数:随机数满足 hash(block(t)) < 特定值
}

所有初始的比特币的来源就是所有这些区块奖励。区块奖励金额通常由两部分组成:区块奖励和交易手续费。

为了确保比特币总量固定(即21,000,000,000个bitcoin),区块链网络规定,每增加210,000个区块(大约需要4年时间),单个区块的奖励减少一半。在2009年1月开始时为 每个区块奖励50个比特币,然后到2012年11月减半为每个区块奖励25个比特币。之后将在2016年再次减半为每个新区块奖励12.5个比特币。[1]

除了区块链激励外,矿工还可以获得手续费收入。在一个『区块』所记录的交易中,收款金额可能小于付款金额:差额即交易手续费。当然,比特币的用户可以选择不支付手续费,但没有手续费的交易很可能会被矿工抛弃而不被记录到任何『区块』中,成为无效交易。因此在实践中,大多数人都会支付一个非常低的手续费,比如0.001比特币。

5.   规则的遵守

尽管网络中的节点可以自由选择遵守或者违反比特币和区块链的规则,但事实上所有的善良节点都会选择遵守规则。因为如果大部分节点都违反规则,区块链将难以延续,毕竟仅凭单个节点的计算能力很难完成有效区块的计算。

这种设计蕴含了博弈论的原理:任何节点拒绝合作都是无利可图的,而只要大多数节点选择合作,那么在这个比特币网络中任何节点选择合作都是唯一理性的选择。

[1] http://www.bitebi988.com/229

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.