日常生活中,相互转账是如何实现的?
我提交了一笔转账申请,对方收到转账。之所以可以成功是因为有人在帮你记账,而目前的记账人是中国人民银行。有没有想过?当有一天没有了可信任的第三方帮我们记账,那么我们只能回归现金和手工记账。手工记账又涉及到有可能作假账,所以记账、谁来记账是个大问题。
区块与区块链
区块链中有很多账本,一个账本就是一小块,把所有的账本连接到一起就成了区块链。区块链的货币是比特币。在区块链中记账的人会都有一个实时更新内容和其他记账人一样的账本。
谁来记账?
以中本聪的共识机制为例,做题。谁先把答案做出来,谁就有资格记账。区块的内容主要包括区块头、交易数量和交易详情。
区块头主要包括:父区块的哈希值、时间戳、随机数、Merkle根哈希值
把这个区块的区块头做哈希运算就可以得到本区块的哈希值,等于下一个区块的区块头的父区块的哈希值
当发生交易的时候,区块头里的随机数会改变,那么意味着需要重新计算本区块的哈希值。上面的做题就是看谁能算出来这个哈希值。现在难度大概是1/2^76。通俗理解,用一块RTX 2080显卡计算大概需要计算1400年。如果你计算出来了,其他区块可以瞬间验证你算没算对,算对了你的这个区块就可以连接到区块链上了。你就是记账人。
为了鼓励记账,第一个完成计算的人会有奖励,大概12个比特币。这个过程也叫做挖矿。
如何保证区块内容不被记账人随意篡改?
上述提到,每个区块有自己的哈希值,和上一个区块的哈希值也称哈希指针(父区块的哈希值)
当你修改A区块的内容,那么这个区块的哈希值肯定变了。导致下一个B区块的哈希指针(父区块的哈希值)对应不上,从而断开了与上一个区块的连接。
就算你修改了B区块的哈希指针,那么B区块的哈希值就会改变。那么下一个连接B区块的区块C的哈希指针又会断开与B区块的连接。
所以修改区块的内容是不现实的。
抛开哈希指针,每笔交易的每个人都有自己的电子签名,根本也无法伪造转账记录。
两个人同时计算出一个区块,哪个权威?
最长链优先。当两个区块同时出现,后面的记账人可以选择链接在哪一个块的后面,通常6轮就可以比较出谁长谁短。端的链会消失,上面的交易被撤回。
51%攻击
当你的算力大于全网你就可以改写历史。
交易者先是把价值1000W的BTC转给了BTG交易所,这笔交易被记在了区块A上。同时交易者秘密准备了和区块A相同的区块B,唯一的不同就是区块B上没有这笔1000W的交易。
当BTG交易所确认收到BTC之后,交易者把1000W提现。因为交易者的算力大于全网的51%,所以B区块后面的区块长度始终比A区块后面的区块长。
这时交易者向全网广播自己的B链,历史被改写。那笔1000W的BTC转账被撤回,BTC重新回到了交易者的手里。交易者白赚1000W
参考:回形针