LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 行走笔记:刘昌用讲解比特币白皮书(二)比特币从交易到转账

行走笔记:刘昌用讲解比特币白皮书(二)比特币从交易到转账

2020-08-03 行走 来源:区块链网络

今天继续为大家分享刘昌用老师对比特币白皮书的拆解分析。笔记来自巴比特学院公开课。

第一篇笔记在这里

以下,Enjoy:

五、比特币转账于UTXO的意义

1、UTXO是什么

下面我们来分析中本聪是如何实现比特币的支付的。物理现金不需要第三方信用,一手交钱一手交货。在网络世界,就是要将网络货币采取物理现金的方式实现。

物理现金毕竟有实物,但网络货币最终只是一个记账货币。中本聪没有用经济学思维思考这个问题就在于他没有直接说,自己要做借助物理现金特点的网络的记账货币。但实际上是这样的。

人类历史上很早就有两类货币存在。一种从小麦、黄金到纸币,是实物货币,由实物从一人到另一人手里,表示货币财产的转移;另外一种方式是记账。银行转账时什么也没给我们,就是记账,你的帐减少10元,我的增加10元。

记账货币的历史也可以追溯到原始人在墙壁上刻杠杠。甚至于可以追溯到结绳记事。打一个绳结就可以记录养的羊又生了一只小。

记账货币和实物货币本都是早就存在的。中本聪是发现了记账货币存在的问题:总是要依赖于一个中心,中介方来记账才能有权威。但依赖于第三方就会有很多问题。

因此中本聪想做不依赖第三方的,参照实物货币,做有实物货币好处——不依赖于第三方的记账货币。

中本聪实现记账货币的方式就是常说的UTXO。未花费交易支出。

在比特币的世界里,最小的一笔钱从数字上上是一聪,就是小数点后第八位(8个零)后一个一。系统设计时精度只能表示到这个精度,记账的最小单位是一聪。但在交付中最小单位就是UTXO。相当于你钱包里的一张钞票。

我们把放地址的软件叫钱包,实际上应该是把一个地址当作一个钱包。打开钱包后有不同面值,不同数量的钱,这些是以前别人付给你的,你装在钱包里了。每个钱包就是一个地址,而每张钞票就是你还没有花掉的以前的收入。

2、比特币支付、转移与物理钞票的不同

比特币在支付的时候,实际支付的就是一张张的钞票。每张钞票都是别人给你的钞票。比特币的钞票和实物钞票有两个不同:

钞票不是整数的。没有规定好面额。钞票的数字是之前的人写上去的,有点像支票。那个人写上去多少,这个“钞票”面值就是多少;

比特币的钞票是记名的。不是写的你的名字,而是写的你的地址。这是比特币像电子现金的地方。你的地址上有100个比特币,一定要么是一张100个比特币的钞票,要么是由很多个这种钞票构成的。

比特币的币,其实是一个一个的UTXO。写着地址,标着不同的金额。

比特币这样设计的好处是,使得记账货币更不容易出错。有点像物理现金,交给别人了就是交出去了,不容易出错。

那这一张张的钞票想要花出去怎么办呢?这张钞票是上一个人给你的,已经留有谁给你的信息,你要花这笔钱时,要签上你想转给的地址信息。严格的说,和物理钞票转移不同,物理钞票转移时是同一张钱,比特币电子现金会分两步:

假设我要转给别人30比特币,我有一张50比特币的UTXO。

1.我是要销毁记有50比特币的UTXO;

2. 再新写总量不超过50比特币的UTXO,比如我写一张30比特币的UTXO转给对方,然后写一张20的放回钱包。

要把未花费支出签上名,证明是你要花,因为上面有你的名字(地址),只有你能销毁它。然后再写上比如张三的地址,30个。 以上这个花比特币的过程就都记在了账本上。

归根结底比特币还是记账货币,只是转账的方式和过程尽可能模仿了纸质的货币,安全性极高,容易追溯。

因为每一笔都是前面签了名才产生出来,且都记在账上。所以可以追溯到我的比特币是从哪来的。

3、防止双花

任何货币要解决的根本问题是不能双花。我有50块钱,不能买完东西,转手再去买另外的东西。在物理世界不会发生。但数字世界要解决一串数字符号,支付给了一个人之后,如何不能再支付给其他人的问题。这是电子记账货币面临的核心问题。

在比特币之前的电子货币采取的措施是“造币厂”的方式,其实就是中心化的方式。是由发行电子货币的公司用私钥签发一笔一笔的电子货币,转账时要先告知这个中心要转给谁,中心把币收回来,再创造新的币给到对方。真个过程时靠造币厂,就是中心来完成的。

去中心化的情况下如何保证不双花?中本聪的方式是,让整个币的来龙去脉完全是任何人都可以查看的。这样有人想要双花一个币,另外的人拿到就会去查一查,如果发现已经花出去了就不会接受。通过人人都可以查询账本的方式,避免了双花。

六、时间戳、工作量证明和区块链

1、时间戳

历史记录,人人可查,就是去中心化记账。但历史记录需要保证是没有被篡改的,每笔记录是真实发生的。因此每笔记录是在什么时间发生的就一定要被记录下来,才能保证历史记录是准确的。

中本聪采用的方式是加盖时间戳

时间戳类似以前我们写信,在信封上加盖邮戳,既有时间又有地点,证明这封信是在什么时间,什么地点发出的。

后来我们旅游的时候,喜欢在当地去加盖邮戳,也是证明我在什么时间到了什么地方。这就被中本聪拿来证明某个数据什么时间存在了。

在电子世界中,加盖的过程是将比特币的交易数据和当时的时间放在一个数据块中。相当于在区块中盖上时间戳。然后再进行哈希,就是随机散列。

哈希是将任何数据压缩成一个很短的数据,而且压缩出的短数据是唯一的。中本聪将交易的数据和时间放在一起,代入到哈希函数中压缩加工,得出的短数据中既包含了交易的数据也包含了时间的数据。

但仅仅将时间和交易绑定在一起,并不能保证交易无法更改。因为对方可以将这个区块丢掉重新做一个区块。真正保证不可篡改的是去中心化。

加盖了时间戳哈希出来的区块和哈希值,是被大家都保存着的。任何人把这个区块废除了,用新的时间加盖时间戳算出来的哈希值跟大家的就不一样,证明是改过的就不能用了。真正的不可篡改是通过去中心化的账本实现的。每个人都保留账本。哈希和时间戳只是实现工具。只要大家都记账,任何一个人就无法更改了。

另外一项安全措施是,每十分钟将交易数据打成一个包,也就是一个数据块。通过嵌套哈希的方式来组织区块,每十分钟所有的交易计入一个帐页。一个区块产生后,盖上时间戳,哈希后产生哈希值。下一个十分钟也会产生新的区块。

新的区块也要把上个区块的信息拿过来放在一起再来哈希。后面区块在哈希时,既包括了本区块的所有信息,也包括了区块形成的时间,同时也包括了上一个区块的摘要值。上一个区块的摘要值是上一个区块哈希出来的。哈希值相当于一个摘要,相当于人的指纹一样,代表了数据。

后面的区块包含前面区块的信息缩写。下一个区块还是如此,后面的区块是包含了前面所有区块的信息的。这就使得账本很难篡改,也比较容易核对。不同人核对账本,只需要核对最后一个帐页就行,因为其包含了前面所有信息。也会让篡改数据非常难,因为都带有时间戳。

其实白皮书这部分内容已经涉及了区块和区块链,只是没有清晰地说出来。在中本聪时,并没有觉得区块链有多么重要,他认为重要的是时间戳,让时间和数据绑定在一起。确定交易在某个时间确实发生了。

2、工作量证明

当每个人都保存账本,都要加盖时间戳,并且保证账本完全一致的情况下。如果大家同时记账,记账时间是不一样的,哈希出来的哈希值就不一样,帐就会不一样。对帐不一样整个系统就崩溃了。

所以就要解决记账如何保持记账完全一致。这就涉及每十分钟记新的帐页时,该如何保持账本的一致性。

中本聪在这个地方又没有给我们解释为什么,而是直接说“工作量证明”。所以会让小白不理解工作量证明到底要干什么。

实际上工作量证明解决的是,十分钟出现了新的交易之后,我们该如何保证记账的一致性。

中本聪的原则是,系统是开放的,谁都可以记账。但是为了保证账本完全一致,要想办法让十分钟内只有一个人记账成功。成功后大家都复制这个帐页,复制就不会不一样了。

问题是,凭什么决定十分钟内只有一个人记账,这个记账人是怎么产生的呢?中本聪想出的办法是猜谜的方式。

因为记录数据时最后一步是哈希数据。哈希不同的信息得出的哈希值可以理解为是随机的。如果施加一个要求,哈希出来的值必须小于一千万,那就不一定每次哈希出来的数据都符合要求了。条件越严格,哈希出来结果的时间就会越长。比如小于1000万,可能全世界一分钟就有人能找到这个哈希值。就再要求哈希的哈希值要小于100万,一下难度就增大了,可能刚好全世界要十分钟才有人能找到。

就是通过这种方式,在记账的最后一步,哈希的时候,要让你找到满足要求的哈希值。但你记的帐,收集的时间戳都是确定的,出来的哈希值也是确定的,不会再改了,那怎么办?

中本聪就在确定的哈希值之外加了一个随机数。加了随机数哈希值就会变一下,看满足不满足要求,不满足再换随机数,这样就靠不断换随机数的方式去解哈希,直到找到符合要求的,比如小于100万的哈希值。

通过这种方式,虽然全世界有很多人记账,但可以保证10分钟内只有一个人能够记账成功,大家复制他的帐页就可以了。

实际上,工作量证明就是往区块链上加新的区块的过程。通过机制设计确定谁有权利加新的区块。

如果一下参与竞猜的人多了,同时猜的次数多了,也许之前定的难度可能一分钟就猜出来了。也就是现在所说的,如果算力大了,时间缩短,我们就增加难度。比如原来是小于100万,现在要小于50万才算成功。这就是通过难度调整,调整出块的时间

难度越高,出块时间越长,难度越低,出块时间越短。

最早,比特币网络中没有ASIC矿机,都是用电脑挖矿。中本聪强调用电脑挖矿记账的方式很好,还是因为去中心化,因为一CPU一矿。大家参与系统的人就是靠算力,但一个电脑的算力就是那么多,是比较公平的。

一个人、一台电脑、一个CPU的挖矿是公平的,去中心化的。这是2012年之前的状态。

后面就出现了专用的矿机,电脑里所有其他设备,甚至CPU都不要,就要CPU里专门做哈希计算的小的电路,原来CPU里可能只有一个电路,现在一个CPU大小的芯片里可以集中十几个这样的电路,那运算速度就会快几十倍。我再在一个机箱里集中二十个、五十个卡的芯片。可能ASIC矿机就会是家用计算机挖矿效率的几万倍。

ASIC矿机出现后,比特币价格出现过一次大的暴跌。大家认为ASIC矿机出现后普通人就挖不了矿了,就中心化了。有一大批人那时候就认为比特币要死了,就抛掉了。

现在ASIC矿机是趋势,中心化算力问题依然存在,比特币也没死。这个说起来又是一个很长的故事了。

下面这张图说的就是,把上面一个区块哈希,放在这个区块再哈希,再放到下一个区块。就是嵌套哈希的方式。做工作量证明的时候,就是来猜哈希。

3、点对点网络

中本聪能够实现去第三方的信任,对点对的网络是核心。是由分布式节点构成的去中心化的网络。

中本聪白皮书中没有介绍去中心化、分布式这些,只是介绍了点对点网络的过程。

首先是转账,将原来的UTXO支票签名、销毁,写一个新的支票,比如原来50个比特币,三十个给张三,十个给李四,十个给自己。形成了三张新的UTXO,这个过程就是转账的过程。

转账后要告诉给所有的节点,这个过程就是广播,因为是去中心化的系统,所以要告知所有节点;

节点记账者收到很多条广播后,就要打包,准备哈希。本来哈希一下就可以结束,但为了保障十分钟只有一个人能记账成功,需要竞猜。设置条件哈希值要小于多少。这时大家都开始不断塞随机数,不断猜。

猜成功的人把猜中的哈希值,打包的区块,用的随机数再广播给所有人。所有人收到后会检查交易有没有错的,有没有凭空发行和双花的情况,没有签名的等等,就是检查交易;

然后再检查,交易加时间戳加上一个区块的哈希加随机数之后是不是广播出来的哈希值。是的话就同意了,认为你记的是正确的,就将这个新的区块或者帐页加到自己的账本里。

这样全世界的账本就又增加了新的一页。区块链往前延长了一个。这就完成了比特币从转账到记账成功的过程。

过程中有两次广播环节,是在去中心化的网络中形成的。

白皮书这个部分也没有专门讨论区块链。只是谈到由于网络运行时间不同,或者有人恶意攻击,可能同一时间,有两个或以上的人说是自己找到了新的帐页,而且都是没有错误的。但这是同一个高度,别的矿工收到后检查也没错。但因为是同时收到的,该保留哪个呢?

白皮书给出的方式是先都保留,过一会会看到一个区块后面会产生新的帐页。这时作为矿工,就应该选择更长的链,即算力更多的链继续记账和计算,这样对矿工而言是安全的。这就是最长链原则

当你在同一高度有不同两个区块,就看谁的后面跟的区块更多,你就跟着那条链继续竞猜和记账。大家都按这个原则就可以保持账本的唯一性,而不至于从同一高度的两个区块开始就出现两个账本。

而比特币现金BCH的出现,就因为涉及到了永久性的分叉。这是因为两个链出现了巨大差别,导致有些人就是喜欢这条链,有些人就是喜欢那条链。这种情况下,相当于分裂成两个共识了。在正常的情况下,是因为特殊的技术原因导致的分叉,回到最长链就对了。

以上就是第二部分笔记的分享。

本部分涉及了比特币交易、记账、打包的全过程,可以说是比特币网络运行最核心和硬核的一块内容。如果你看了笔记,还有哪部分还没能理解,建议可以趁热打铁,一方面可以找一本区块链相关的书籍做做阅读,另一方面可以评论区留言,我们一起讨论和研究一下

—-

编译者/作者:行走

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...