以太坊智能合约开发学习03-- 区块链的理解以及什么是挖矿

链接区块

区块 1 会按照时间顺序从第一笔交易开始记录,直到数据量达到 1 MB 为止,之后的交易会记录在区块 2 中,直到数据量达到 1 MB 为止,以此类推。这些区块就是数据块。它们一个接着一个联系在一起。为此,每个区块会根据其内部数据串生成一个特殊的(数字)签名。如果这个区块中的数据发生任何变动,即使只改变了一个数字,这个区块的签名也会发生改变。

即使区块 1 中存储的数据改动了一个数字,也会得到一个完全不同的签名 !只要将区块 1 的签名添加到区块 2 中,就可以将区块 1 的数据与区块 2 关联起来。区块 1 的签名也包含在区块 2 的数据串内,因此这个签名与区块 2 中的其它数据一样,成了区块 2 签名的数据基础

区块链的不可篡改性

如果篡改者修改了数据,签名改变,这条链上的其他用户就会知道区块中的数据被更改了。为了维护区块链的不可变性,其他用户会拒绝同步更改后的交易信息,依旧维持原有的交易记录不变,整条链依旧保持完整。

数据签名(ASH-256),只要当前一位数据发生改变,其生成的签名就会发生改变,因此如果篡改者修改了数据,则签名将改变,而后面的区块中始终保持着前一个区块原始的签名,此时签名改变,两个区块的链接断开,以此类推,如果篡改者想要修改某个区块的数据,就必须保证篡改之后的区块仍然都联系在一起,他需要重新计算当前区块以及后面的所有区块的签名,可以认为这几乎是不可能的(计算一个链的签名需要矿工有足够大的算力,甚至超过全网其他人的总算力,否则他永远赶超不了其他矿工)。

密码学哈希函数:将任意数据串作为输入值代入公式,可以得到一个独一无二的 64 位输出值

挖矿

并非所有的签名都符合要求。区块链协议会预先确定一些要求,为了获得符合条件的区块签名,需要反复改变输入的数据串,但由于交易数据和元数据(区块编号、时间戳等等)需要保持原样,每个区块里面还另外添加了一段特定长度的、可以改动的数据。想把区块添加到链上时,可以不断改变这段数据,直到找到一个合格的签名,然后确定下这段数据的具体值。这段数据就是区块的 nonce 。nonce 不是预先确定的数据,而是应实际需要而找出的一串完全随机的数字。

综上所述,区块包含:1、交易数据;2、上一个区块的签名;3、nonce 。这种通过反复更改 nonce、对区块数据进行哈希运算、寻找合格签名的过程就叫做 挖矿 ,也就是 矿工 所做的事。矿工投入大量电力,转化成算力,不断代入 nonce 进行哈希运算,直到找到合格的签名(输出)为止。矿工手中掌握的算力越多,哈希运算的速度就越快,抢先找到合格签名的可能性就越高。这是一种 反复试错 的过程。

如何防止矿工将伪造的交易数据添加到区块链上?

只有私钥掌控者才能花费相应地址中的资金,而矿工并不知道你的私钥,他人只能通过你公开的公钥来验证某笔交易是不是你发起的。所以伪造交易并不可行

猜你喜欢

转载自blog.csdn.net/weixin_43958804/article/details/108636606