青岛区块链12月26号:比特币背后的密码学原理(三)

  三、 区块链

  区块链可以理解为数据结构概念中的链表(和线性表略有不同的是可能有分叉),这里我们只需要大致了解区块数据结构以及每一块大致的意思,这些结构信息将会在交易和挖矿部分进行详细讲解。

  区块链可以理解为运行在去中心化网络中的,所有节点(挖矿节点)共同维护的交易数据库,这个数据库是以链式的形式组织交易数据的,每一个链表的块被称为区块或者block。

  3.1区块结构

  区块是一种被包含在公开账簿(区块链)里的聚合了交易信息的容器数据结构。它由一个包含元数据的区块头和紧跟其后的构成区块主体的一长串交易组成。

  

  上表中的1-9应该是1-9个字节,否则会引起歧义。

  3.2区块头

  区块头由三组区块元数据组成。首先是一组引用父区块哈希值的数据,这组元数据用于将该区块与区块链中前一区块相连接。第二组元数据,即难度、时间戳和nonce,与挖矿竞争相关。第三组元数据是merkle树根(一种用来有效地总结区块中所有交易的数据结构)。

  

  Nonce、难度目标和时间戳会用于挖矿过程,Merkle根用来索引和组织该区块所有的交易信息,其结构见下一节。

  因此区块头之间的连接大约像下图所示:

  

  从上图我们可以知道如何避免双重支付问题,因为收款人有办法对这笔支付之前的所有消息进行检索直至追溯到原始的挖矿区块,实际上比特币世界里的每一枚比特币都是被标记可溯源,双重支付是可以避免的。

  3.3Merkle Tree

  Merkle Tree,是一种树(数据结构中所说的树),网上大都称为Merkle Hash Tree,这是因为 它所构造的Merkle Tree的所有节点都是Hash值。Merkle Tree具有以下特点:

  1、它是一种树,可以是二叉树,也可以多叉树,无论是几叉树,它都具有树结构的所有特点;

  2、Merkle树的叶子节点上的value,是由你指定的,这主要看你的设计了,如Merkle Hash Tree会将数据的Hash值作为叶子节点的值;

  3、非叶子节点的value是根据它下面所有的叶子节点值,然后按照一定的算法计算而得出的。如Merkle Hash Tree的非叶子节点value的计算方法是将该节点的所有子节点进行组合,然后对组合结果进行hash计算所得出的hash value。

  例如,下图就是一个Merkle Hash Tree形状,如果它是Merkle Hash Tree,则节点7的hash value必须是通过节点15、16上的value计算而得到.

  

  在处理比对或验证的应用场景中时,特别是在分布式环境下进行比对或验证时,Merkle Tree会大大减少数据的传输量以及计算的复杂度。例如,就拿图一举例,假如是 15,16.......30是一个个数据块的hash值,我把这些数据从A传输到B,数据传输到B后,我想验证下传输到B上的数据的有效性型(验证数据是否在传输过程中发生变化),只需要验证A 和 B上所构造的Merkle Tree的root节点值是否一致即可,如果一致,表示数据是有效的,传输过程中没有发生改变。假如在传输过程中,15对应的数据被人篡改,通过Merkle Tree很容易定位找到(因为此时,节点0,1,3,7,15对应的hash值都发生了变化)

  需要解释的是交易数据是怎么构建成数的呢,其实很简单:首先将所有交易作为叶子节点,两两相邻分组(总的交易数量如果是奇数就把单个的那个复制一份),然后对每一对交易分别计算哈希并依此向上构建树直至根节点,如下图所示

  4、交易

  再次强调的是,比特币网络中流转的是交易信息,每个账户的余额是通过交易信息推算出来的,交易信息是双向的,有一个输入必定对应一个输出。

  4.1交易输入输出

  每一笔交易,out的总额应该等于in的总额。但是,在这个交易单里,只会有out的Value,没有in的Value,而是通过in的Pervious与index,追溯到上一个交易单的某一个out,获得Value。

  一次send bitcoin,剩下的钱,应该out给自己,否则这个钱就丢了。

  情况列举:

  我有10个BTC,是某一次交易获得的,我要送给朋友A,10个BTC。这时候,有一个in,一个out。

  我有10个BTC,是某一次交易获得的,我要送给朋友A,5个BTC,这时候,有一个in,两个out,一个指向朋友5个BTC,一个指向我自己,得到剩下的5个BTC。

  我有10个BTC,是以前的两次交易获得的,我要送给朋友A,10个BTC,这时候,有两个in,一个out。

  我有10个BTC,是以前的两次交易获得的,其中一次获得了6个BTC,另一次获得了4个BTC,我要送给我的朋友7个BTC,这时候,有两个in,两个out。

  比特币交易的基本单位是未经使用的一个交易输出,简称UTXO。UTXO是不能再分割、被所有者锁住或记录于区块链中的并被整个网络识别成货币单位的一定量的比特币货币。这句话什么意思呢?比特币交易除了挖矿获取以外,都是零和的,因为区块链不维护余额信息也没有余额概念,区块链只有交易信息。举个例子,你有10个比特币现在需要支付2个出去,那么交易数据维护的是一个输入(未经使用的10个比特币)和2个输出(一个是2个币对应的地址),还有一个是8个币对应地址是你自己的地址。

  4.2交易过程

  交易的基本诉求,是付款人(payer)汇款给收款人(payee)。技术挑战是加密(cryptography),目的是不让第三者截获甚至篡改汇款金额。

  下图解释了 Owner0 给 Owner1以及后续 汇款的交易机制,截图如下。

  

  1、Owner0 先查到 Owner1 的公钥。用 Owner1 的公钥(Public Key)把汇款详情加密。这样,只有 Owner1 本人用自己的私钥(Private Key),才能打开加了密的汇款详情。在图例中,没有画汇款详情。不过这个小小的叙述的疏忽无妨大雅。

  2、为了方便 Owner1 验证这笔汇款的确来自 Owner0,而不是别人,Owner0 发出的汇款单里,除了有加了密的汇款详情,还有 Owner0 的数字签名(Signature)。Owner1 拿到汇款时,为了验证这笔汇款的确来自 Owner0,他可以用 Owner0 的公钥,来验证汇款单中 Owner0 的数字签名。

  3、Owner0 发出汇款单时,汇款单不仅仅投递到 Owner1,而且还要广而告之,任何人只要愿意参与 BitCoin 审计,都可以收到全球所有人发出的所有汇款单。

  4、沿用 1、2、3 的原理,Owner1 给 Owner2 汇款,然后 Owner2 给 Owner3 汇款。BitCoin 通过 Hash 机制,把涉及同一枚 BitCoin 的所有汇款交易(Tranaction)串连起来,目的是为了追查重复付款(double spending)的欺诈行为。

  单独来看交易创建过程:

  

  收款方对交易进行验证:

  

  四、挖矿原理

  挖矿的本质意义是挖矿节点争夺记账权!主观上来说,挖矿节点获得了挖矿奖励及交易费,客观上来说,这保证了区块链按照特定规则持续稳定的被维护。

  挖矿的具体实现就是在难度一定的情况下通过暴力双SHA256哈希运算获取满足难度taget的Nonce值,所谓的工作量证明就是无数次哈希运算穷举并比对的过程。

  挖矿算法我们可以参考区块头结构解说如下:

  

  第一步:找到区块版本号version。

  第二步:找到上一个区块的hash值(父区块哈希值):prev_hash。

  第三步:输入记录交易的hash树的根节点hash值(Merkle根):root_hash。

  第四步:更新的时间(时间戳):time。

  第五步:全网当前难度(难度目标):difficulty

  针对难度目标需要说明:

  难度在区块中以“尾数-指数”的格式,编码并存储,这种格式称作“难度位”。这种编码的首字节表示指数,后面的3字节表示尾数(系数)。以区块277316为例,难度位的值为0x1903a30c,0x19是指数(exponent)的十六进制格式,后半部0x03a30c是系数(coefficient)。

  第六步:自己找一个随机数Nonce:这个就是反复试的部分,不断递增该数字并做哈希运算直到对应哈希值小于难度指定的taget值。

  把以上6个参数作为输入,做二次SHA256运算,形似于SHA256(SHA256(version , prev_hash , root_hash , time , difficulty, random))最终得到结果result。最后把结果result提交给系统,由系统判断这个计算结果是否有效(result

  target通过difficulty可以计算得到:

  target=coefficient * 2^(8 * (exponent – 3))

  算法规定:一个新的区块的第一笔交易必须将特定数目的比特币发到某个地址,当然这个地址肯定会设成挖矿人自己的比特币地址,从而获得系统的比特币奖励。

  五、总结

  比特币理论以密码学为支撑,构建了一个完备、安全、去中心化的数字货币体系,解决了数字资产所有权问题、双重支付问题、现实世界的通货膨胀问题甚至还预留了机制使得构建在资产转移之上的智能合同成为可能。比特币当然是伟大的创造,期待比特币有更好的未来。

  更多专栏文章:http://www.qukuaiwang.com.cn/zhuanlan

  声明:本文由入驻区块网专栏作者撰写,观点仅代表作者本人,绝不代表区块网赞同其观点或证实其描述。

文章内容系本站作者个人观点,不代表本站对其观点赞同或支持,文章的版权归该作者所有。如需转载,请注明文章来源。本文地址:http://www.cis.net.cn/kejikuaixun/44318.html
留言与评论(共有 条评论)
验证码:

最新文章

比特币背后的密码学原理(三)

科技快讯
三、区块链区块链可以理解为数据结构概念中的链表(和线性表略有不同的是可能有分叉),这里我们只需要大致了解区块数据结构以及每一块大致的意思,这些结构信息将会在交易和挖矿部分进行详细讲解。区块链可以理解为运行在去中心化网络中的,所有节点(挖矿节点)共同维护的交易数据库,这个数据库是以链式的形式组织交易数据的,每一个链表的

爱尔兰区块链妇女组织正在提高对分布式分类账技术的认识

科技快讯
最近成立了一个爱尔兰妇女区块链小组,目的是宣传和教育妇女了解区块链技术。据《爱尔兰时报》报道,爱尔兰百联集团有许多实力雄厚的创始成员,他们渴望与其他女性分享新兴的区块连锁行业,这将是一个巨大的新职业机遇。区块链集团吸引强大的创始成员《爱尔兰时报》指出

比特币核心更新可以解决据报道可能会以80,000美元的价格破解网络的漏洞

科技快讯
比特币核心发布之后,近期检测软件中的一个漏洞的更新,根据9月18日新闻稿由比特币核心项目。根据声明,比特币核心0.16.3发布时修复了拒绝服务(DoS)漏洞。据报道,如果他们尝试处理试图花费相同金额两次的块事务,则该漏洞可能会导致旧版比特币核心崩溃。根据新闻稿,这些区块只能由矿工创建,因为它们无效。为了制

你是属于没上车,还是被甩下车的哪一类人?5月4日行情解析!

科技快讯
这两天行情很好,如果这个时候你还没赚到钱,或者还在犹豫买哪个币,只能说明你被甩下车了,或者是还没上车。昨天发完分析完还没两个小时,莱特币开始拉升,ETH今天更是达到800的压力位置。如果跟着我的分析走的朋友,这几段从HSR、ONT到LTC、ETH都应该赚到钱了。还有5月2日推荐的EDU/BTC,推荐位置是在左边那个

云哥看币7-22数字货币行情解析:比特币上攻乏力,沉寂5日何时爆发

科技快讯
大盘走势今天比特币走势还是一样,处于很规则的箱体横盘震荡中,量能相对于昨天有一定的减少,横盘中出现缩量是很正常的现象。MA30线价格为6577,说明近一个月内筹码的平均价格在6577,这部分人获利已经很高,如果直接进行拉升,低位建仓的会进行抛售,从而引起下

比特币(BTC)价格再次跌破8000美元

科技快讯
自从谷歌发布了加密广告的禁令FUD之后,数字货币市场就持续低迷,导致比特币价格一度跌破到8000美元以下。比特币目前的交易价格约为7729美元,在24小时内按时间下跌近7%。自新年以来,比特币市场价格不断下跌,但是比特币市场的主导地位却一直在缓慢上升,导致比特币价格下跌的速度低于CoinMarketCap的其他顶级货币。在新闻发布结

区块链趣评:证券时报称虚拟货币炒作该谢幕了

科技快讯
1、证券时报:虚拟货币炒作该谢幕了证券日报发文指出,虚拟货币的炒作是时候谢幕了,一是这些所谓的虚拟货币不过就是一个骗局,打着“区块链”的幌子发行代币,本身就与区块链核心理念相违背;二是这些市面上交易的代币,一旦禁止炒作,价值瞬间归零,变成了一串

王健林新目标转向区块链:与新西兰公司合作 不涉ICO

科技快讯
前言继王健林两年前宣布进军区块链业务之后,现在又宣布和一家区块链公司进行合作。正文3月12日,总部位于新西兰的区块链公司CentralityNZ宣布,万达网络科技集团与CentralityNZ公司开展了战略技术合作。此次合作不涉及投融资,第一阶段主要是双方

区块链三国游戏《去!快练三国志》全新玩法正式揭晓

科技快讯
战神吕布强势来袭,这次定将横夺天下!区块链崭新极致动态三国游戏《去!快练三国志》全新版本磅礡登场,战神吕布从全新开放的城池”天水”出阵!各君主期盼的全新”据点系统”也将惊艳亮相,掌握属于自己的江山,打下一代霸业之翘楚!群雄势力正式参战战

国外“挖矿”合法,出海行为盛行

科技快讯
继2017年监管重拳打击下掀起的“出海”潮后,又一轮大型挖矿企业开始准备“出海”。比特大陆继成功在新加坡设立区域总部,在瑞士和以色列开展挖矿业务之后,正在美国德克萨斯州Rockdale建厂,预计明年初开始挖矿业务。比特大陆宣布将在未来七年内投资5亿美元在美国建立新的数据中心,作为其