我们可以用一个time33来解释一下hash值是怎么计算的。计算123 的hash值的话,初始的hash值是0,那么第一个“1”的hash值就是33×0 1等于1,“12”的hash值就是1×33 2等于35,“123”的hash值就是35×33 3等于1158,所以在不同的节点,如果都是“123”这个字符串的话,算出来的hash值就都是1158,同样的数据他们的hash值就是一致的。
张三给李四100元有一个hash值,张三给李四101元则是完全不同的hash值,所以两段数据中只要有微小的差别,他们的hash值就是完全不一致的,hash值可以校验两段数据是否一致。
区块链的原理
这里有高度0、高度1和高度2三个高度的区块。第一个高度0,它的交易数据和余额数据是小写的hash0,先生成一个大写的HASH0。大写的HASH0到高度1里面和小写的hash1的数据串联以后,再形成一个大写的HASH1,那么大写的HASH1则包含了高度1里面的交易数据以及前面所有区块数据的哈希值。
第二个高度的区块又包含了大写的HASH1和小写的hash2的hash值,就形成了一个大写的HASH2,那么如果十个节点的服务器的HASH2都一致的话,这就说明他们的数据都是一样的。
私钥签名,公钥验证
私钥是什么呢?私钥其实就是一个随机数或一个坐标。比如2的6次方有64个数字,你若选其中的37作为你的坐标。如果把它想象成一块地的话,你把你的金子藏在37号地,要挖多少块地才能找到金子呢?如果我们的区块链比特币它私钥的数字是2的256次方,相当于宇宙的原子数,你随机找一个坐标把金子放上去,其他人几乎是不可能找到得。
在这里私钥经过椭圆曲线加密和两次hash后,会生成公钥地址,就是区块链上记录你的钱或资产的帐户。我们也可以把私钥比喻成信箱的钥匙或密码,张三给李四转帐30元就用张三的私钥进行签名。大家可以看到,你改这个签名的字符串或者是改收款人或金额都是没有办法做到的,因为这个签名必须是用张三的私钥签名,才能被记账节点验证通过。
然后张三会把他对交易的签名发送给记帐节点去验证。如果十台服务器有七台验证通过以后,这个转帐就会成功,张三的余额就少了30,余额变为70,李四的余额就会增加30,变成130。