大概了解了一下,可能有问题。
主要来自ppt(github)
有一些内容来自网络
另外可以到知乎搜索相关内容
https://blog.csdn.net/kaihuiguoji/article/details/91974530
https://www.jianshu.com/p/7d86785496c6
https://blog.csdn.net/jsjwk/article/details/81671619
中本聪的区块链算法。
每个user有一对公匙私匙(多对,一人多身份)-->问题,某节点被截获则可能会被冒充
重要的概念是交易,块
挖矿:
随机数+HASH->256位前10位是0.(这是一个难问题),找到随机数就是解开了这个问题,会被奖励比特币
问题:
双重支付问题,拜占庭将军问题。
双重支付问题:比如同一付款码在不同地点同时支付。(微信限制了此时不能截屏,同时短时间内就会改变图案)
过程
两个对象做交易时将交易广播,验证(比如A给B支付比特币,其他节点根据记录验证A是否有足够的比特币),其他节点验证成功会将交易记录到自己的块(非区块链中的块,是临时的一个记录一段时间的交易的块),然后对该块做算法(区块+nonce)(上面说的HASH),成功后广播全网,其他节点验证这个块和该节点算出来的随机数是否正确,若正确(多数节点验证正确),则将该块加入区块链。
例子:
A->B的交易,A在支票上用B的公匙加密,然后用A的私匙签名,这是一条交易,这样所有节点都可以知道是A发送的交易,就可以验证A的余额是否充足,是否存在重复支付,但是只有B可以获得货币。
当交易被A广播,大部分节点认为没问题,则整体上认为该交易没问题,则每个节点写入自己的记录的块。
这样每个节点都有块,记录着还没有加入区块链的很多交易。
而先做出来算法的节点的块,广播全网(包括块和一些信息用于验证),验证后会被加入区块链,该节点被认为拥有该块。然后所有的节点都保存了这个被认为是正确的块,相当于这一段时间被记录的交易被保存到区块链中(所有节点都保存该块,都保存了相关交易记录)。
块的结构:
prev block 区块链上前一块的hash值
merkle root 当前块交易信息的hash值
Nonce,算出随机数的节点,将随机数记录到Nonce
timestamp 时间戳
....
Txh Txh Txh... (该块记录的交易)
验证时根据根据区块链中该块的merkle root 和该块中交易的hash值相等即可。