在Wisdom Chain里 交易是怎样被打包进区块的?_区块链_

2022-01-19 区块链达人

在之前的文章里,我们也阐述过Wisdom Chain的挖矿过程,以及区块是如何形成的,然而值得一提的是,区块的产生最终的目的是保存信息,只不过这些信息是通过一笔交易来体现的,所以我们要理解这些信息是如何被打包进入区块链中的。

 

输入和输出

 

一个交易在系统里被输入和输出表示。输入是指这笔交易所要进行转移的币来自之前的哪些输出。输出是指这些币将会被发送给哪些地址。在区块链上记账,不是告诉你一个账号现在有多少钱,而是告诉你这个账号当前得到了哪些输出。比如一个地址XX15cBzoEQPhL83EitxCqLFKnoMe43VreRuX它的相关记录里面,有A、B、C三个输出的目标地址是它,那么它实际上的余额就是这三个输出的金额的总和。

 

但是现在这个地址的用户要转账了,转账过程不是直接从总和数字中取出一部分进行转移,而是分别从A、B、C三个输出中取出部分或全部,加起来为想要转移的总和的币,进行转移。这个“取出”过程中,A、B、C就变成了输入,转账目标记录才是这次交易的输出。

 

这样的设计,保证了区块链中的钱从哪里来,到哪里去,一清二楚,绝不含糊。

 

Hash

 

将交易加入到区块里面需要涉及三个hash,一个是交易本身的hash,另一个是当前这个区块所有交易的merkle hash root,还有一个就是区块hash。

 

上面已经说过输入与输出了,一个交易可能包含多个输入输出,通过将这些输入输出信息进行排列并进行hash运算,就得到一个交易的唯一hash值。所有交易的信息都体现在了一个区块的hash里面。

 

挖矿

 

挖矿过程就是计算上述区块hash的过程,几乎所有的机器都可以挖矿成功。关键在于谁先挖到矿,因为当一台机器挖矿成功就向网络广播,其他挖矿在对这个hash进行校验之后,就停止自己的挖矿,开始基于这个区块挖新的矿。而每一个被挖到区块中记录的第一笔交易是给挖到这个区块的矿工自己的奖励金,所以抢到第一个挖矿成功名额对于矿工来说至关重要。

 

挖矿时,矿工会事先从自己本地的交易信息里面提炼出merkle hash root,也就是说,在挖矿之前,对于当前这个矿工来说,新区块会包含哪些交易就已经确定好了的。

 

Wisdom Chain采用了DPoS+PoW的混合机制,DPoS委托权益证明机制的加入,通过社区节点抵押投票动态的选出每一个纪元的前15位矿工候选人,然后在将PoW工作量证明机制的难度设置为1,然后每个矿工候选人,进行一个哈希计算,哈希计算出来的值小于难度目标值就算是获得了打包权。而这个哈希计算,是一个计算公式,具体来说,是将如下参数连接起来。

 

version + previous_block_hash + merkle_root + time +target_bits + nonce

 

进行两次256哈希计算,如果计算出的值小于目标难度值,就成功

代码结构如下:

 

block_header=version+previous_block_hash+merkle_root+time+target_bits+nonce

foriinrange(0,2**32):

   ifsha256(sha256(block_header))

       break

    else:

       continue

 

挖矿成功之后,矿工需要将完整的区块向网络广播,这个时候,这个区块里面就打包了所有上述对应的交易。