# 比特币和数字货币技术 第二周总结 **Published by:** [markchern](https://paragraph.com/@markchern/) **Published on:** 2022-11-09 **URL:** https://paragraph.com/@markchern/gDK5IitDJzgBI0MC8cTb ## Content 比特币是如何实现去中心化? 1. 中心化和去中心化的比较 以货币为例,我们可以从五个方面来看 中心化 去中心化 谁记录交易 少数参与者 所有参与者 谁决定交易合法 少数参与者 所有参与者 谁发行新货币 少数参与者 创建合法区块的少数参与者 谁决定规格变更 少数参与者 所有参与者 谁决定货币价值 少数参与者 所有参与者的相互交易 例子:邮件的底层协议的是SMTP,所有任何电脑都可以作为邮件的服务器。但实际上少数几个邮件服务提供商提供大部分的邮件服务器供人使用。所以邮件处于完全去中心和完全中心化之间。 2.2 分布式共识 分布式共识出现的背景。一个服务一般需要多个服务器共同提供服务。由于网络延迟,中断等原因,它们之间的数据可能产生不一致,需要进行同步,例如用户的状态。因此它们需要对数据达成共识。 分布式协议的定义 有n个节点,其中一些节点可能是有问题的或恶意的。当它们接收相同的输入,分布式协议应该有的性质是 1.协议可以给出所有诚信节点都同意的值 2.所有的值都应该由诚信节点给出。 Alice向点对点的网络发送交易信息。 用户向网络广播自己的交易,每隔一段时间,节点收集交易信息成块,称为区块。通过分布式协议决定区块是否合法。所有合法的区块由哈希链表储存,这个链又叫区块链。 不可能结果 拜占庭将军问题说如果存在1/3及以上的节点不诚信,那么无法达成共识。 Fischer-Lynch-Paterson 不可能说不存在一个确定性算法使得即使只有一个节点失效也可以达成共识。确定性算法对于相同输入,会已知给出相同输出。 突破传统假设 虽然上述结论给分布式共识协议带来麻烦,不过它们都是基于一些特殊的模型。比特币通过两个创新解决上述难题。首先引入了激励机制。其次还引入了随机。 2.3 基于区块链的无需身份的共识 由于比特币无需个人身份,所以可能遭受女巫攻击。女巫指控制大量账号,伪装成不同个人,以此牟利。 如果由个人身份,共识将简化。首先我们可以做出至少50%的节点是诚信的,然后基于此推出某些有用性质。因此缺乏身份给共识带来困难。 为了解决身份缺失带来的困难,比特币引入随机。假设我们可以随机选出一个节点,并且即使女巫控制许多节点,在一个时段只能添加一个区块。 隐性共识 比特币共识算法 1.新的交易广播给所有节点 2.每个节点收集交易到一个区块。 3.每一轮,一个随机选中的节点有权广播它的区块。 4.其它节点决定是否接受这个区块。 5.节点通过将区块的哈希包含进它们的下一个区块表示同意。 窃取比特币 黑客可以从一个地址窃取比特币吗?例如黑客从一个地址转比特币到自己的地址。但这不仅需要将这个交易包进区块,还要有那个地址的私钥。不然其它节点可以很容易验证这个交易是非法的,并不把它添加到自己区块链。 拒绝服务攻击 假设黑客得到广播区块的机会,决定不添加某些地址的交易。这可以,但是黑客无法阻止交易广播给其它节点。因此这笔交易只需要等其它节点添加就可以了。 双花攻击。 黑客可以先创建一个合法的交易。随后如果获得广播区块的机会,再将之前的交易的输出换成自己的地址。从技术角度看,这两笔交易都合法。虽然从直觉上我们认为第二笔交易非法,但是在比特币网络中,不存在全球时间。也就是说其它接受这两笔交易的节点有可能第二笔交易先收到。 双花攻击 回到被转账的一方,由于双花不可能同时存在在一条链上。因此,被转账的一方可以等待一段时间,当其它区块被加入区块链后,再同意交易。随着确认区块数的增加,包含交易的区块的有效的可能性指数上升。一般等待6个区块。因为区块链遵循最长原则,区块添加到最长链。黑客为了使双花交易有效,需要保持链的长度最长。从被转账的一方看,如果链长了,那么黑客想要将第二条链变成更长,需要至少6次抽中广播区块的机会。并且在这段时间,第一条链还在增加长度。因此,如果没有看见第一条链生成,那么就放弃交易。 2.4 激励和工作量证明 我们可以惩罚发动双花攻击的人吗?如果有身份,那么很容易。由于比特币没有身份,所有我们无法惩罚。反过来,我们可以奖励那些诚信的节点吗?也就是创建的区块最终在最长的区块链。将共识视为货币,我们可以赋予创建区块的节点特殊生成特殊交易的的权力,将一个比特币转到自己指定的地址。 区块奖励 每创建一个区块,就可以获得一定数量的比特币。比特币就是这样被生成的。还有区块奖励每四年减半,同时区块的生成速率是固定的,所以比特币总数是固定的。 交易费 第二种激励是交易费,每笔交易可以使自己的输入稍微大于输出,以便提高被包进区块的服务的机会。在第一种耗尽后,第二种将成为主要激励方式。 挖矿和工作量证明 工作量证明,为了获得广播区块的机会,每个节点需要解答一道哈希题,即H(nonce|| prev hash || tx || …||tx)