区块链1.0学习心得(下)

比特币深入:

 

  • 独立验证:

产生的交易将被发送到比特币网络临近的节点, 在交易传递到临近的节点时,每一个收到交易的比特币节点将会先验证该交易,以确保只有有效的交易才会在网络中传播,而无效的交易将会在第一个节点处被废弃。

每一个节点在校验每一笔交易时,都需要对照一个长长的标准清单:

交易的语法和数据结构必须正确。
▷输入与输出列表都不能为空。
交易的字节大小是小于MAX_BLOCK_SIZE (1Mbyte)。
▷每一个输出值,以及总量,必须在规定值的范围内 (小于2,100万个币,大于0)。

▷没有哈希等于0,N(序号)等于-1的输入。

▷对于每一个输入,如果引用的输出存在于池中任何的交易,该交易将被拒绝(double spend)。
▷对于每一个输入,在主分支和交易池中寻找引用的输出交易。如果输出交易缺少任何一个输入,该交易将成为一个孤立的交易。如果与其匹配的交易还没有出现在池中,那么将被加入到孤立交易池中。

▷对于每一个输入,引用的输出是必须存在的,并且没有被花费。

▷每一个输入的解锁脚本必须能解开相应输出的锁定脚本。

……

 

 

  • ​​​​​​ 采矿竞赛:

 采矿节点时时监听传播到比特币网络的新区块,对于矿工们来说,获得一个新区块意味着某个参与者赢了,而他们则输了这场竞争。然而,一轮竞争的结束也代表着下一轮竞争的开始。

采矿节点验证此新区块,区块头哈希值是否小于难度目标,若是,则将此区块串入区块链中,结束目前采矿工作。

 新一轮采矿开始,将交易池中交易依优先级纳入候选区块中,加上创币区块,求得Merkle根值,将父区块哈希值、新难度目标、时间戳、及Merkle根值等放入此区块头中,形成完整的候选区块。改变候选区块头的4byte nonce值使区块头哈希值小于难度目标。同时继续接收新交易,验证后将交易纳入交易池中。

若算出小于难度目标的Hash,即采矿成功,则将此成功候选区块加入区块链并广播到比特币网络,结束此回合采矿。若收到比特币网络传送来新区块,表示输了,结束此回合采矿。无限循环。

难度目标:

  • 难度目标在区块头中以“尾数-指数”的格式编码并存储,这种编码的首字节表示指数,后面的3字节表示尾数(系数)。
  • 例如:难度目标值   0x1903a30c

      0x19是指数的十六进制格式,后半部0x03a30c是系数。

难度目标值 系数* 2^(8 * (指数– 3))= 0x03a30c * 2^(0x08 * (0x19 -0x03)) = 238,348*2^176

=22,829,202,948,393,929,850,749,706,076,701,368,331,072,452,018,388,575,715,328

转化为十六进制后为:难度目标值 = 0x0000000000000003A30C00000000000000000000000000000000000000000000

这个数字

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值