《区块链技术与应用》--笔记【4-6】
BTC-协议
双花攻击
双花攻击是指在区块链网络中,一个用户试图花费同一笔加密货币两次的行为。(数字货币本身为带有签名的数据文件,可以进行复制)
解决方法
中心化:依赖于一个权威机构来管理货币的唯一标识,并确保货币的真实性。每当进行货币交易时,参与者需要向该机构查询货币标识以验证其真伪,以防止重复使用货币或使用伪造的货币。虽然这种方法可以提高货币的安全性和可追溯性,但也增加了交易的复杂性和依赖性,因为每次交易都需要与第三方机构进行通信和确认
去中心化 :采用验证交易合法性,依赖于系统中由所有用户共同维护的数据结构,记录了货币的使用情况,从而保证了交易的有效性
去中心化需要解决的问题
1、货币的发行。(数字货币的发行由谁执行?如何发行?发行多少?什么时候发行?)
在传统的中心化货币体系中,这些问题通常由第三方机构(比如中央银行)来处理。然而,当引入去中心化理念后,系统中的节点都是平等的,交易不依赖于第三方。这就提出了一个问题:在这样的系统中,货币的发行权应如何分配?在比特币系统中,货币的发行是由挖矿决定的。拥有发行货币的权利叫做铸币权。
2、验证交易合法性。(如何防范双花攻击)
在比特币系统中,区块链充当着一个由所有用户共同维护的数据结构,用于跟踪货币交易的历史记录,来检测货币有没有进行过交易,交易方是谁。每笔交易都被记录在区块链上,并包含两个关键部分:输入和输出。输入部分要注明币的来源和发币者的公钥,,输出部分指定了收款人的公钥的哈希(地址),可以将其视为银行账户(虽然公钥可以公开,但实际中更多公开的是公钥的哈希)。区块链由一系列区块组成,这些区块通过哈希指针连接成链表。此外,每个区块中的交易也通过哈希指针链接到先前的交易,为了说明币的来源,目的是为了证明交易的来源、币的合法性和防范双花攻击。
案例
假设A获得了比特币的铸币权,他发布了一笔铸币交易,生成了10个比特币并将其转移给了B(5个比特币)和C(5个比特币)。A对这笔交易进行了签名,并在交易中说明了这10个比特币的来源是铸币交易。接着,B将他收到的5个比特币中的一部分(2个比特币)转给了C和另一部分(3个比特币)转给了D。B对这笔交易进行了签名,并在交易中说明了这5个比特币的来源是前一笔交易。然后,C将他拥有的全部7个比特币都转移到了E。C对这笔交易进行了签名。可以看出,这笔交易中的7个比特币来自于两笔交易,通过这些交易的链接,构成了一个简单的区块链。
如何防止别人伪造交易的发起者,然后签上伪名,从而骗取发起者的财产?
在交易中,收款方需要知道付款方的公钥,从而验证A签名是否有效。即A需要提供自己的公钥,如果所提供公钥与铸币交易中。(实际上其他节点都需要知道付款方公钥,验证交易合法性)实际中A转账时候提供的公钥需要和铸币交易中公钥对的上,这样就防止了恶意节点伪造A的公钥来"偷"走A的比特币。验证过程通过执行脚本实现,将当前交易输入脚本与前一个交易输出脚本拼接(币的来源),如果能成功执行,则交易合法。
注意:
在比特币中交易收款地址是通过公钥推算出来的。 比特币系统没有功能可以查询某个指定账户的比特币地址,需要其他渠道来获得,例如某个用户公开自己的比特币地址。
比特币的区块信息
| block Header | 作用 |
|---|---|
| version | 版本协议 |
| Hash of previous block header | 指向前一个区块的指针(仅是前一区块块头的哈希) |
| Merkle root hash | 默克尔树根哈希值 |
| target | 挖矿难度目标阈值 |
| nonce | 随机数 |
1.挖矿求解问题:Hash(block header)<= target
2.Hash of previous block header 只计算区块块头部分的哈希( Merkle root hash保证了block body内容不被篡改,所以只需要计算block header即可保证整个区块内容不会被篡改)
3.区块链系统中,轻节点(只存储区块block header信息)只利用区块链,但并不参与区块链系统维护和构造。
4.全节点(full node):保存所有的节点信息,验证每一个交易,全节点也叫做fully validating node
轻节点(light node):只保存块头的信息。
分布式共识
分布式共识是指在分布式系统中,通过一致的方式来达成对系统状态的共同认知或决策的过程。在一个分布式系统中,可能存在多个节点,它们之间相互通信并协作完成各种任务。分布式共识的目标是确保这些节点能够就系统状态达成一致,即使在存在故障或恶意节点的情况下也能保持系统的可靠性和安全性。
在区块链领域,分布式共识机制是确保所有参与节点就交易的顺序和有效性达成一致的关键。常见的分布式共识算法包括工作量证明(Proof of Work, PoW)、权益证明(Proof of Stake, PoS)、权益份额证明(Proof of Authority, PoA)等。这些算法通过不同的方式确保网络中的节点达成共识,并在其中引入了激励机制,以鼓励节点遵守规则和诚实参与网络的运行。
在分布式系统中有很多经典的不可能问题(impossibility result)
FLP impossibility result:FLP不可能性定理是分布式系统领域的一个基础定理,由Fischer、Lynch和Patterson在1985年提出。该定理指出,在异步分布式系统中,存在着一个不可能解决的问题,即在存在网络延迟和节点故障的情况下,不可能设计一个可以保证在有限时间内达成共识的分布式算法。具体来说,FLP不可能性定理表明,在一个异步分布式系统中,即使只有一个节点失败,也无法设计一个能够保证在有限时间内达成共识的算法。这是因为在异步系统中,节点之间的消息传递可能会受到不可预测的延迟,导致无法确定何时接收到其他节点的消息,从而无法达成共识。
CAP Theorem(Consistency一致性、Availability可靠性、Partition tolerance容错性):CAP定理指出,在分布式计算中,不可能同时满足一致性、可用性和分区容错性这三个属性,任何分布式系统只能同时满足其中的两个,而牺牲其中一个。
CAP具体内容
- 一致性(Consistency):所有节点在同一时间看到的数据是一致的。换句话说,所有的读操作都应该返回最近一次写操作的结果。
- 可用性(Availability):系统能够对用户的请求做出即时响应,即系统能够在有限的时间内返回一个非错误的响应。
分区容错性(Partition - Tolerance):系统能够在遭遇网络分区的情况下仍然能够正常运行,即系统能够容忍节点之间的通信中断或失败。
