林大师讲区块链之价值转移

在互联网的世界里,我们可以很方便快速的生成信息,并且将其轻易复制到任何一个地方,所有的信息在互联网上都是可以高效传播的,也正是因为如此,随着互联网的高速发展和普及,我们进入到了一个信息爆炸的时代。而为了满足人们对各种爆炸式信息的渴求,信息传输技术开始遍地开花,并且不断创新,比如我们常见的云盘、断点传输技术等等。

尽管因为互联网的发展使得信息的传播更加的便捷和快速,而且很多信息仅仅是通过简单的复制粘贴就可以使用,比如互联网上常见的音频、视频、图片、文字等等。但是仍然有些信息是没有办法复制的,甚至即使是复制了,也没有任何实际的意义。比如我们支付宝钱包里的钱,是没有办法直接复制给对方的,而是首先要在一个账户里减去一部分的钱,在另一个账户里才能增加一些钱,进而完成支付的过程。而一个视频或者图片则可以通过复制粘贴到另外一个网站上,这个时候两个网站都可以看到相关的内容。而且人和人都可以分享。像支付宝里的钱这样只能转移无法分享的信息往往需要一个信用背书,传统的互联网非常擅长新的处理,但是却无法解决价值的转移。

那么,什么是价值转移?

比如想要将一部分的价值从A转移到B,那么就必然要求从A减少多少,B就增加多少。在整个转移的过程中,涉及到A和B这两个独立的参与者,那这个过程就必然要求同时得到A和B的认可,而且最终的结果还不能受到A和B任何一方的操控,目前的互联网协议是不支持这种价值转移的功能的,因此目前的价值无法直接进行传输,而是需要一个中心化的第三方来做信用背书。现实中的第三方信用机构一般由一些政府组织或者一些大型集团公司来担任。 参考:https://baijiahao.baidu.com/s?id=1601359028442729329&wfr=spider&for=pc

eg:小明在建设银行转账200人民币给小张,那么这其中要进行的大致操作就是,银行在小明的账户上减去200元,然后在小张的账户上加200元。其中银行就是权威的中心化机构。

那么,如果没有中心化机构,那么比特币系统是如何在没有中心化机构的情况下完成价值转移的呢?又是如何防止假币(电子现金领域称为:双花攻击)的呢?

比特币系统的交易流程简化来说可以分为以下几步:

  1. 1.某人发出交易请求

  2. 2.广播交易请求到 P2P 网络

  3. 3.验证,miners验证交易正确性

  4. 4.多个交易组成一个区块

  5. 5.新的区块加入到一个已经存在区块链中

  6. 6.交易完成

一笔交易=输入+数额+输出

如果 A 给 B 发送一些比特币,那么这个交易就有三项信息:

  • 输入。这里面记录了最初 A 拥有的这些币是从哪个地址转给她的,假设她是从她的朋友 E 那里得到的币。

  • 数目。这个就是 A到底给 B转了多少个比特币。

  • 输出。B 的比特币地址。

  • 比特币如何发送呢?

  • 你需要两个东西,一个是比特币地址另一个是对应的私钥。比特币地址跟银行账号不一样,你不需要签署一堆文件去申请,它们是随机生成的,就是一串由字母和数字组成的字符串。私钥也是类似的一个字符串,但是这个是要严格保密的。比特币地址就好像一个透明的存钱罐,每个人都可以看到里面有什么,但是只有拥有私钥的人才能打开它。

  • 当 A想要给 B 转币的时候,就用私钥来签署一段信息,其中包括输入,数目和输出这三项前面已经提过的内容。这样,信息广播到比特币网络上,矿工就可以验证这次交易,把交易加入区块链中了。

在转账操作提交后,10分钟的等待时间里,都发生了什么?

因为交易需要经过矿工的验证确认之后才能写到区块链之中,所以你必须要等待一下,等待他们挖矿成功。

比特币协议里面设置了挖矿完成的大概时间是10分钟。所以商家可能会等到你的交易所在的区块被确认之后才会给你发货。但是也有商家不会让你去等,基于对你的一个信任,相信你不会在交易没有得到确认之前有去拿同一笔钱花在别的地方。不过一般这只适用于小额交易。

前面提到,比特币没有余额,他是从过往的交易记录里找到足够支付这笔交易的交易信息,比如Jane 发送给了 Alice 40个比特币,Lucy 给了40个,Eve 给了20个,这些都是不同时间的不同的交易,他们并没有被合成到 Alice 的一个钱包里形成一个有100个币的文件,而是仍然作为独立的各个交易记录存在。

当 Alice 想要给 Bob 转币的时候,她的钱包就会找到几个交易,让它们的数额加起来正好是 Alice 想要转的数目。 当然,很可能在 Alice 想要给 Bob 转币的时候,她没有办法找到几个交易加起来正好是转账数额。也许她想要转 30 个币,但是钱包中根本没有一个交易或是多个交易的和正好是这个数目。

同时,她没有办法把一个交易切割成小的数额。就是这样,你没有办法切割一个大的交易成为多个小数额,每次都必须花掉整个交易。但是不用担心,系统会给她把多发送出去的币作为找零还给你。

Alice 这时就可以把 Jane 给她发送过来的两个币发送给 Bob,这样 Jane 就是“输入”,Bob 就是“输出”,“数额”是30个币,这时 Alice 真正想要转账的数目。这样,Alice 的钱包就会自动给她的这次交易创建两个输出:把30个币给 Bob,剩下的30放到一个新的地址中,这个是找回的零钱。

如何防止双花攻击? 参考:http://www.sohu.com/a/225010836_100116865

在比特币系统中本聪使用UTXO技术防止双重支付。

先翻译UTXO是什么意思:

TX : Transaction 翻译为:交易

O:Output 翻译为:输出 TXO : TX output 翻译为:交易输出比特币系统中TXO包含一个value(价值)值和一段脚本,该脚本规定了谁有权使用这笔交易(比如需要私钥签名)。 UTXO:Unspent TXO 翻译为:未花费的交易输出比特币系统规定:只有对“尚未使用过”的交易签名才能是有效签名。

我们通过之前的文章知道,比特币系统中所有的每一笔交易信息都以统一固定的机制以固定的时间戳被写在区块上。

我们把每一笔交易理解为一张汇款单,把比特币系统上每个区块比如成一本账簿。那么账簿上就会贴满所有每一笔交易的汇款单。每一笔交易的汇款单简单理解就是UTXO。

说白了,UTXO就是一个数据结构,包含交易数据和执行脚本(Pubkey s)。这个数据结构包含每一笔的交易信息和未花费的交易输出。

以现实的钱包举例,一个钱包中有一个10元、1个5元,1个1元,一共16元。比特币一个账户的余额,也是根据这个账户UTXO计算的。

当花12元买东西时,可以把10元和5元拿出去,然后得到找零的3元, 那这个时候之前的10元和5元因为已经花出去了就不再是UTXO了,新找零的3元成为新的UTXO,再加上之前未动的1元UTXO,目前的余额是4元。这次新的交易记录在了新的区块上,但没有改变历史区块的数据。

比特币使用前后链接的区块链记录所有交易记录,当之前的UTXO出现在后续交易的输入时,就会被检查这笔交易的来源已经不在UTXO列表中,也就是说这笔钱已经被花过,这个UTXO已花费掉,不再是UTXO了。 如果你用同一笔UTXO构造了两笔分别付给A和B的交易。那么bitcoin-core客户端(比特币系统节点)的规则是只转发先侦听到的那个。但至于哪笔交易会被包含进未来的区块,则取决于矿工。

矿工的挖矿程序一般是定制开发的,矿工可以自主任意选择这两笔交易里的一笔。比如有的矿工会选择先看到的交易,有的矿工会选择交易手续费更高的那个。

当这两笔相矛盾的交易中的一笔被写入区块链,并且深度达到6后(6个确认后),可以认为这笔交易获得了最终的确认。等待6个确认的情况下,比特币是几乎绝对不可能被双花的。每笔交易都有若干交易输入,也就是资金来源,也都有若干笔交易输出,也就是资金去向。一般来说,每一笔交易都要花费(spend)一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”,也就是 UTXO。所有的资金来源都必须来自前面某一个或者几个交易的 UTXO,就像接水管一样,一个接一个,此出彼入,此入彼出,生生不息,钱就在交易之间流动起来了。

其实比特币系统曾经页遭受过双花攻击,攻击过程大致如下:  

名恶意矿工正在利用双花漏洞从加密货币交易所窃取资金。

为了实施双花攻击,这名矿工获得了至少51%的BTG网络总算力,这让他能够临时控制BTG区块链。即使在像BTG这样的小型网络上,获得这么大的哈希算力也是非常昂贵的,但他可以通过双花攻击来获利。

在获得对网络的控制之后,攻击者开始向加密货币交易所充值BTG,同时也试图将这些BTG发送到他们控制下的钱包。通常情况下,区块链仅把第一笔交易加上链来解决此问题,但现在攻击者能够撤销交易,因为他们拥有网络的多数控制权。

因此,他们能够向交易所充值后再迅速提币,然后撤回初始交易,以便他们可以将原先存入的BTG发送给另一个钱包。

bitcoin-gold-double-spend-51-percent-attack.jpg

涉及此次攻击的比特币黄金地址 来源:BTG Explorer

自从5月16日以来,涉及此次攻击的比特币黄金地址已收到超过388200个 BTG(绝大部分是它发送给自己的交易)。假设所有这些交易都与双花相关,攻击者可能已经从交易所窃取了价值高达1860万美元的资金。

最后一笔交易发生在5月18日,但攻击者理论上可以恢复它,如果他们仍然有足够的算力来获得对区块链的控制权。

比特币黄金的开发者建议交易所可以通过将资金转入客户账户前增加确认次数来解决此类攻击。区块链数据表明,攻击者成功逆转了22个区块,导致开发者建议将需要确认的次数提高到50个区块。参考:http://www.bitcoin86.com/news/22846.html

猜你喜欢

转载自blog.csdn.net/q602968956/article/details/84971442
今日推荐