【区块链基础】2——BTC区块结构

区块 block

BTC中的区块结构大致如下:
区块结构

其中,一个完整的区块由块头(block header)和块体(block body组成),下面将对其中的数据结构进行说明。

全节点与轻节点

全节点:保存区块的全部内容,包括header和body,在本地硬盘维护完整的区块链信息。
轻节点:只保存区块的header。

区块链系统中,轻节点的数量要多于全节点,轻节点的使用限制也相对更少。

哈希指针 hash pointers

哈希指针是应用在区块链技术中的一种数据结构。普通的指针储存了一段数据的内存位置,而哈希指针除了储存数据位置之外,还储存了这段数据的哈希值。

区块链即为哈希指针组成的链表(Block chain is a linked list using hash pointers)。每个区块的header都包含指向下一个区块的哈希指针,走到底的区块是系统中产生的第一个区块,叫创世纪块(genesis block),而开头的区块是系统中最近产生的区块(most recent block),最近产生的区块前面没有别的区块,但是也会有一个哈希指针,保存在系统里。由此,哈希指针组成的链表应为无环链表,否则将产生循环依赖。
哈希指针

通过后一个区块的哈希指针,不仅能找到前一个区块,而且能够防止有人篡改数据,具有防篡改日志(tamper-evident log)属性。如果有人妄想修改某个区块的数据,那么它后面的那个区块的哈希指针,不能够和篡改数据后的区块生成的哈希指针匹配。
防篡改日志
区块链中轻节点可以不保存整个区块链的内容,需要时可向全节点进行获取,根据防篡改日志属性,轻节点可对获取到内容的正确性进行验证。

实际在网络中,哈希指针只是一种形象的说法,在header中只保存上个区块header的哈希值,并无指针。全节点一般将区块存在key-value数据库中,key保存区块的哈希,value保存区块的内容,只要掌握了最后一个区块的哈希值,即可查找到之前各个区块的数据。

默克尔树 merkle tree

默克尔树是一种哈希二叉树,其叶节点存储的是数据文件,而非叶节点存储的是其子节点的哈希值,只要查看根哈希值,就能检测出树中是否有地方被篡改,效率较高。
默克尔树

其中,交易列表保存于区块的body中,根哈希值则保存在区块的header中。

默克尔证明 mekle proof

假设有这样一种场景需要用到数字货币支付,支付完成后本人需要证明这笔交易已经写到区块中,比较容易想到的办法就是拿到打包交易的对应区块,然后对比区块中的所有交易来确认是否已经被打包其中。但是在比特币或者以太坊的场景下,一个区块大概有两三千笔交易,一个交易又包含若干字段,如果逐一比较交易不仅速度慢,而且不安全,因为拿单一的区块无法知道拿到的块的真伪。

merkle proof是一种仅需链中全量header就可以证明交易是否存在(proof of membership)某一区块中的方法。
默克尔证明
如图所示,绿色块为轻节点已知的header信息,黄色块为轻节点接收到其它节点发送过来的交易信息和路径中部分哈希值。轻节点可自下而上计算蓝色块中的哈希值,并将最终计算得到的哈希值与header中的跟哈希值比较,以验证交易生否真正存在。这一点也利用了哈希函数collision resistance的特性,其时间复杂度为O(logN)。

优点

  • 无需知道其他节点的值是什么就可以证明特定节点是否在集合中。
  • 仅存储默克尔证明消耗很小的空间。
  • 判断一笔交易是否在区块中的消耗很低。

使用场景:
轻节点只包含区块头,也就是只有交易树的根哈希值,当需要向轻节点证明一笔交易已经打包到指定区块时,只需要提供这笔交易和对应路径上的哈希值即可,这样轻节点就可以在不保存区块体的情况下证明了这笔交易已经上链不可更改了。

Target 和 Nonce

target 就是一个 256-bit 的数,计算 nonce 值的过程就是对区块 header 不断的运算哈希,直至找到能使区块哈希小于 target 的 nonce:
H ( b l o c k h e a d e r ) < = t a r g e t H(block header) <= target H(blockheader)<=target根据nonce计算得到哈希值就去跟 target 对比,如果哈希值大于 target ,更改nonce,再次计算 header 哈希;反之如果哈希小于等于 target,那么运算过程就结束了,当前 nonce 值会被最终记录到 header 中。

哈希值只计算header中的数据即可,由于body中交易列表的根哈希值存于header,可由此验证交易列表是否被篡改。

矿机每秒能做多少次nonce 求解过程为算力的代表,其单位Hash/s,显然算力越大,就有更大的概率率先找到 nonce 值,也就是宏观意义上抢到的记账权。争夺记账权的过程成为挖矿,争夺记账权的节点成为矿工,挖矿使用的计算机成为矿机



参考资料
区块链基础系列

欢迎打赏Σ(っ°Д°;)っ

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用: 如果要使用docker容器中的btc节点,请取消注释fdocker-compose文件的btcd-testnet部分,并在cmd/multy.config BTCNodeAddress字段中设置其地址。 引用:通过统一的界面获取300多种加密货币的钱包余额。 与:可选的API密钥支持,用TypeScript编写,使用node-fetch而不是弃用的request,较小的图书馆。 根据以上引用内容,btc钱包 node是指在docker容器中的btc节点,可以通过设置docker-compose文件中的btcd-testnet部分,并在cmd/multy.config 的BTCNodeAddress字段中设置节点的地址获取。该节点可以用于获取多种加密货币的钱包余额,并且支持可选的API密钥。这个节点是用TypeScript编写的,并使用了node-fetch库,相对较小。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [Multy-back:Multy的后端-移动Multy区块链钱包](https://download.csdn.net/download/weixin_42134168/14974063)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [balance-crypto:with通过统一的界面获取300多种加密货币的钱包余额](https://download.csdn.net/download/weixin_42169245/15910733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值