主页 > 苹果手机imtoken怎么下载 > 【区块链学习】比特币—协议
【区块链学习】比特币—协议
简介:中心化数字人民币双花攻击双花攻击
数字货币的发行仅依靠密码学。
由于文件本身是可以复制的,数字货币本身就是一个文件,我不能修改签名,但是可以直接复制文件。
改进:集中处理
集中式数据库处理数字货币
每次进行交易时,都会请求中央机构。 数字货币的发行和每一笔交易都需要经过中央机关的确认。
去中心化货币
两个主要问题:
谁来发行货币 如何验证交易的有效性 验证交易的有效性 比特币如何交易?
假设A获得coinbase(铸币权),新发行10个比特币(此交易称为铸币交易)。 A转10个比特币给B(5)和C(5),A在交易上签名,交易中需要说明所花费的10个比特币的来源(来自铸币交易)。
之后,B将自己的5个比特币转给C(2)和D(3)。 交易需要B的签名,交易需要说明花费的5个比特币来自第二笔交易。
然后比特币协议,C将自己拥有的7个比特币全部转给E,并在交易上签名,可以发现交易中C的比特币来自两笔交易。 这样,一个简单的区块链就形成了。
两种哈希指针
指向上一个区块:让每个区块形成一条链
指向币种来源:比特币的来源不是凭空捏造的,可以防止双花攻击。
Q:交易中的身份识别
A:
A(付款人)需要知道B(收款人)的地址,这是通过B的公钥计算出来的。
B(收款人)需要知道A(付款人)的公钥,或者所有节点都需要A的公钥来验证交易和验证签名
Q:如何防止恶意签名
如果有B'恶意签署区块并替换A怎么办
A:币源区块有输出,输出包含A的公钥,检查币源输出公钥的哈希值是否与付款人的哈希值一致。
Q:如何查询交易是否合法
A:在比特币系统中,验证过程是通过执行脚本(BitCoin Script)来实现的。 将当前交易输入脚本与上一个交易输出脚本(表示币种来源的交易)拼接执行,若能正确执行,则交易合法。
块的组成
每个区块分为区块头和区块体。
区块头 区块体
版本 比特币协议版本
交易清单 交易清单
前一个区块头的哈希值
默克尔根哈希
目标挖矿难度目标阈值
随机数
区块头的作用
挖矿相关(区块头的作用)
整个区块头的哈希值必须小于目标阈值才能挖矿。
区块头存储目标阈值的编码nBits
阻止链接
使用header链接即可,因为merkle root hash已经可以保证body中的交易列表没有被篡改。
便捷的轻节点存储
轻节点只保存区块头信息。
如何将交易写入区块
账本内容需要获得分布式共识(distributed consensus)
分布式共识
示例:分布式哈希
系统中多台机器共同维护一个哈希表,共识是表中存储哪个key-value
比特币的共识机制
投票,但要根据工作量证明进行投票。
比特币系统采用了一个非常巧妙的方案来解决这个问题。 虽然还是投票,但不是简单的根据账户数量,而是根据算力。
在比特币系统中,每个节点都可以自己组装一个候选区块比特币协议,然后尝试各种nonce值,这就是挖矿。
当节点找到符合要求的随机数时,就获得记账权,这样就可以将该块发布到系统中。 其他节点收到区块后,验证区块的有效性。 如果系统中的大多数节点通过验证,他们将收到该块作为最新块并将其添加到区块链中。
存在的问题
分叉攻击分叉攻击
如图所示,用户A回滚了上述A给B转账的记录,从而非法获取利益。 在两条链上,发现交易都是合法的。 这是典型的双花攻击。 A将钱转给B后,使用分叉攻击将钱转回,覆盖原来的记录。
在比特币系统中,这种情况其实是很难发生的。 因为大多数矿工都认可最长的合法链条,所以他们会沿着上面的链条继续挖矿。 而如果攻击者A想要回滚记录,他必须让下链比上链长。 理论上,攻击者需要达到整个系统51%的算力才能使这次攻击成功。
法律链竞争问题
在区块链的正常运行场景中,也可能会出现分叉。 当两个节点同时获得记账权时,就会有两条等长的合法链。 默认情况下,节点接收它首先听到的块,然后节点继续沿着该块。 但随着时间的推移,必有一条链胜出,从而保证了区块链的一致性。 (被丢弃的块称为“孤儿块”)
比特币激励机制
比特币通过设置区块奖励解决了无人出块的问题。
获得合法区块的节点可以向该区块添加特殊交易(铸币交易)。 事实上,这是生成新比特币的唯一途径。
挖矿就是通过自身的算力计算nonce,获得算力,从而获得增加区块的能力。 而添加区块会得到区块奖励,即拥有比特币。 挖矿挖的是区块,收获的是比特币
点击原文查看原文笔记