Blockchain Mechanics#
Hashes#
哈希函数(如 SHA-256)接收一个数据块,并生成一个有效的随机固定大小整数。
数据块的任意改变都会影响哈希值。
Hash-based Proof of Work#
- 无法从输出计算输入
- 要查找输入开头有 N 个零的哈希值,需要 2N 次 Nonce 是一个在加密通信只能使用一次的数字。计算 —— 证明计算功
- 如果我们对递增的 “nonce” 进行哈希处理作为哈希输入,(Nonce 是一个在加密通信只能使用一次的数字)我们可以去寻找零:
The chain race#
- 参数 N 设置游戏难度。(哈希值开头有 N 个零)
- Players get a list of blocks, with:
- A block number
- A winner number
- A nonce value
- A hash of the previous block with N zeros
- Players accumulate points by creating blocks
– Hash the previous block
– Find a hash of the new block with enough zeros
– They then transmit this block to everyone
设置 N=3,目的是找到一个 nonce,结合 winner、parent hash 等,使得生成的 hash 值满足开头 N 个零。
The algorithm to make a new block:
- Verify the hashes of all the previous blocks
- Build a new block with a random nonce
- Hash the new block. Does it have N zeros?
– No? Go back to Step 2
– Yes? Send your new block to everyone!
对于 N 个 0,因为 SHA-256 输出实际上是随机的,所以得到 N 零位 = 与抛硬币并连续获得 N 个正面相同。对于 N 个零,必须尝试 2N/2 个随机数。N=1,尝试 1 个随机数;N = 16,尝试 32768 个随机数;N = 32,试用 20 亿个 nonce。
cheaters#
一个作弊方法:编造一个假哈希。
Then:
- Step 1 in the algorithm will fail for all the other
players. - Other players will not use your block, making it
not part of the chain.
Signatures#
Bitcoin Account and Signature#
Make player ID = public key
We can now make trades by signing messages and sending them to everyone
Signed trades are:
• Unalterable
• Verifiable by anyone
• From key to key, not tied to a “real” identity
The Race with Trades#
我们不能保证 public_key1 确实有 50 点,这造成了过度交易。解决方法,把交易信息放进区块中。
“过度交易” 问题难以解决,原因是没有一个绝对不可改变的时间来源。在防止过度交易的过程中,时间戳是一种常用的手段,用于确定交易的先后顺序和时间限制。但如果没有一个绝对可信且不可篡改的时间源,玩家可能会利用时间上的漏洞来绕过对过度交易的限制。例如,玩家可能通过操纵本地时间或利用时间记录的不确定性,在短时间内进行远超规则允许数量的交易,而系统由于缺乏可靠的时间依据,难以有效识别和阻止这种过度交易行为。
• Players expend effort to get points
• Players can trade points securely
– Signatures prevent alteration of trades
– Signatures authenticate the origin of trades
• Players can detect overtrading
– Players will decline to extend the game on blocks
with overtrades
– If they do, they are wasting effort, since other
players will not extend the game on their blocks
每个区块都包含一个时间戳,用于记录该区块被创建的时间。当交易被打包进区块时,它们会按照时间顺序被记录下来。这使得系统可以清晰地看到交易的先后顺序,从而判断是否存在短时间内的过度交易行为。在区块链网络中,当矿工将交易打包进区块后,该区块需要经过其他节点的验证。节点会检查交易的合法性,包括交易的签名是否正确、发送方是否有足够的余额等。对于试图进行过度交易(即交易金额超过其实际拥有的点数或余额)的交易,节点会拒绝将其包含在有效的区块中。只有当所有节点都验证通过后,该区块才能被添加到区块链上,从而保证了交易的合法性和真实性,防止了过度交易的发生。
为什么要费心将交易放在您的区块中?
・让我们通过在交易中增加费用来解决这个问题
– 通过每增加一笔交易给他们积分来激励玩家添加交易
– 获得积分的两种方法!
・为什么要限制玩家交易?
– 让玩家向任何拥有公钥的人发送积分....
– 这现在是一个全球交易系统
Simplified Bitcoin#
• Players = “miners”, points = “Bitcoins”
• Transactions send value (bitcoins) from key to key
• The chain race game (blockchain) prevents
overspending without a central authority
• Game rules = Bitcoin node code, changes by
miner consensus
• Player consensus replaces authority
– Number of coins (limit to 21 million)
– Reward per block
– How difficulty grows
请注意,玩家 / 矿工可以与非玩家互动
・一旦创建了积分,接收者就可以创建对任何公钥的交易・现在可以扩展到与非矿工 / 玩家的交易
・所有积分仍然来自某个区块 / 矿工
像是一个存折。
Attacks#
- 比特币(或任何区块链)的规则由矿工节点决定
矿工节点的核心作用:在比特币或其他区块链系统中,矿工节点扮演着至关重要的角色。矿工节点负责验证交易、打包区块,并通过共识机制将新的区块添加到区块链上。区块链的规则实际上是由这些矿工节点共同遵循和执行的。例如,在比特币网络中,矿工节点需要按照特定的算法(如工作量证明)来竞争记账权,只有符合规则的区块才能被其他节点接受并添加到区块链中。 - 多数决定原则:“Whatever 51% of the miners are running will win” 这句话体现了区块链中的多数决定原则。在许多区块链的共识机制中,当超过 51% 的矿工节点达成一致时,它们所认可的规则和区块将被整个网络接受。这是因为区块链是一个去中心化的系统,没有单一的权威机构来决定规则,而是依靠多数节点的共识来保证系统的一致性和安全性。
- 大多数参与者叛变会发生什么
51% 攻击:当区块链网络中超过 51% 的矿工节点出现叛变或被恶意控制时,就可能发生 51% 攻击。在这种情况下,攻击者可以利用其掌握的多数算力来延长恶意的区块链分支(“extend bad blocks”)。攻击者可以通过重新排列交易顺序、撤销已经确认的交易等方式来破坏区块链的正常运行。例如,攻击者可以在完成一笔交易后,通过 51% 攻击撤销该交易,然后将相同的资产再次转移到其他地址,实现双重花费。 - 对系统的影响:51% 攻击会严重破坏区块链的安全性和信任机制。用户将无法信任区块链上的交易记录,因为攻击者可以随意篡改它们。这可能导致整个区块链系统的崩溃,用户对该区块链的信心丧失,进而影响其价值和应用。
- 叛变所需的节点比例
- 不同网络的差异:并非所有的区块链网络都需要 51% 的节点叛变才会受到攻击。根据不同的区块链网络设计和共识机制,实际需要叛变的节点比例可能会低至 30% 或更少。一些新型的共识算法在设计上试图降低对多数节点的依赖,以提高系统的安全性和抗攻击能力。然而,即使叛变节点比例较低,攻击者仍然可能对区块链网络造成严重的破坏。
- Sybil 攻击:Sybil 攻击是一种在计算机安全领域中针对对等网络(peer - to - peer networks)声誉系统的攻击方式。在区块链网络中,攻击者可以通过伪造大量的虚假节点身份(Sybil 节点)来控制网络中的部分算力或投票权。这些虚假节点可以协同工作,模拟出多数节点的意见,从而干扰区块链的共识过程,实现对区块链网络的攻击。例如,攻击者可以利用 Sybil 节点在权益证明(PoS)共识机制中获取更多的记账权,进而实施恶意行为。
Operational Realities#
- 假设廉价的存储和网络条件
- 节点存储所有交易记录:区块链系统假定存储和网络成本相对较低,在这样的前提下,每个节点都能够存储区块链上发生过的每一笔交易。这种设计是为了保证区块链的去中心化和数据的完整性。每个节点都有完整的账本副本,使得任何节点都可以独立验证交易的合法性和区块链的状态。例如,在比特币网络中,全节点会存储从创世区块以来的所有交易信息,这有助于维护网络的安全性和透明度。
- 交易和区块广播:当新的交易发生或者新的区块被创建时,这些信息会在整个网络中进行广播。每个节点都会接收到这些广播消息,并对其进行验证。交易广播确保了所有节点都能及时知晓新的交易请求,而区块广播则使得新的区块能够被添加到区块链上。然而,这种广播机制可能会对网络的扩展性产生一定的限制。随着区块链上交易数量的不断增加,广播和同步这些信息所需的网络带宽和时间也会相应增加,从而可能导致网络拥堵,影响系统的性能和扩展性。
- 交易速度慢
- 依赖公共区块验证:在区块链中,要验证一笔交易是否有效,需要等待该交易被打包进一个公共区块,并经过一定数量的确认。由于区块链的共识机制(如工作量证明)需要一定的时间来完成,因此交易确认的过程相对较慢。例如,在比特币网络中,平均每 10 分钟生成一个新的区块,而且为了确保交易的安全性,通常需要等待 6 个区块的确认,这意味着一笔交易可能需要大约 1 个小时才能得到较为可靠的确认。这种延迟在一些对交易速度要求较高的场景中(如日常购物支付)可能会成为一个显著的问题。
- 私钥控制至关重要
- 丢失私钥导致资金无法使用:私钥是用户控制其区块链资产的关键。私钥是一个随机生成的数字,只有拥有私钥的人才能对相应地址中的资产进行操作。如果用户丢失了私钥,就意味着失去了对该地址中资金的控制权,这些资金将变得无法花费。由于私钥的性质是不可恢复的(除非有备份),一旦丢失,用户将面临永久性的资产损失。例如,早期比特币持有者可能因为忘记私钥存储位置或存储设备损坏等原因,导致大量比特币无法被使用。
- 私钥被盗导致资产被盗:私钥的安全性直接关系到用户资产的安全。如果私钥被窃取,攻击者就可以使用该私钥签署交易,将用户地址中的资金转移到自己的地址。黑客可能通过各种手段获取用户的私钥,如网络攻击、恶意软件感染等。因此,用户必须采取严格的安全措施来保护自己的私钥,如使用硬件钱包、设置强密码、定期备份等。
Bitcoin Wallet and Address#
- A user can get multiple wallets like bank accounts
- Each wallet can have many addresses
地址的作用:比特币地址类似于银行账户的账号,是用户接收比特币的具体标识。每个钱包都可以生成多个不同的地址,这些地址都与该钱包相关联,但彼此独立。
满足多样化需求:多个地址可以满足用户在不同场景下的使用需求。比如,用户在不同的交易平台、不同的合作伙伴之间进行交易时,可以使用不同的地址来接收比特币。这样可以方便用户对不同来源的资金进行区分和管理。 - A user uses an address to receive bitcoins
交易流程:当用户想要接收比特币时,只需将自己的比特币地址提供给发送方。发送方在发起交易时,将比特币发送到该地址对应的区块链上的账户中。一旦交易被网络确认并记录在区块链上,用户就成功收到了比特币。
地址的唯一性:每个比特币地址都是唯一的,这确保了比特币能够准确无误地发送到指定的用户账户。同时,地址的生成是基于密码学算法,具有很高的安全性,保证了交易的可靠性。 - Each address is generally used only once
增强隐私和安全:为了提高交易的隐私性和安全性,比特币地址一般建议只使用一次。如果一个地址被多次使用,攻击者可以通过分析区块链上的交易记录,更容易地追踪该地址所有者的交易行为和资金流向,从而泄露用户的隐私信息。而每次使用新的地址接收比特币,可以使交易记录更加分散,增加了追踪的难度,保护了用户的隐私。
防止地址被标记:在区块链网络中,某些地址可能会因为参与了特定类型的交易(如非法交易)而被标记。如果用户一直使用同一个地址,就有可能受到这些标记的影响,导致自己的账户被限制或调查。使用一次性地址可以避免这种风险。 - Using addresses to receive bitcoins makes trading
more private
减少信息暴露:比特币交易的一个重要特点是其相对匿名性。使用地址接收比特币时,发送方和接收方的真实身份并不会直接暴露在交易记录中,只有地址信息被记录在区块链上。而且,由于每个地址通常只使用一次,进一步增加了交易的隐私性,使得外界难以通过区块链数据直接关联到具体的用户身份。
保护商业秘密:对于企业或商家来说,使用比特币地址接收款项可以保护其商业秘密。交易对手无法通过交易记录轻易了解到企业的财务状况、交易规模等敏感信息,有助于维护企业的竞争优势和商业利益。
Beyond bitcoin#
- Transactions don’t have to just be transactions
- Transactions can contain:
- –Executable code
- In fact, BTC transactions are scripts
- Scripts specify when outputs can be spent–Contracts
- Set conditions for allowing outputs to move–Random data to be timestampe
Private Chains#
- Change the game to require signed blocks
- Limit miners to some authorized set
- Useful for adding other rules or preventing block “takeovers”
- Approach being used to trade securities on a blockchain
- Same crypto physics apply…
Blockchain Properties#
Transactions#
• As with enterprise transactions today, Blockchain is a
historical archive of decisions and actions taken.
• Proof of history provides provenance.
Immutable Ledgers#
- 区块链通过交易来保存数据
- 与传统数据库的共性:和现有的数据库一样,区块链也是一种数据存储和管理的方式,它通过记录交易来保存数据。交易是区块链中数据的基本载体,每一笔交易都包含了特定的信息,如资产的转移、合约的执行等。这些交易数据在区块链中被有序地组织和存储,形成了一个完整的数据集,类似于传统数据库中存储的各种业务记录。
- 区块链数据写入后的不可更改性
- 修改难度极大:一旦数据以区块的形式被写入区块链,就变得极其难以更改。这是因为区块链采用了链式结构,每个区块都包含了前一个区块的哈希值。哈希值是对区块内所有数据进行哈希运算得到的一个固定长度的字符串,它具有唯一性和敏感性,只要区块内的数据有任何微小的变化,哈希值就会完全不同。如果要修改某个区块中的数据,就必须同时修改该区块以及其后所有区块的哈希值,因为后续区块的哈希值是基于前面区块的内容计算得到的。
- 需要达成共识:除了要重新计算大量的哈希值外,修改区块链中的数据还需要得到网络中大多数节点的共识。在区块链网络中,节点通过共识机制(如工作量证明、权益证明等)来验证和确认区块的合法性。如果要修改已有的区块,就需要说服网络中超过一定比例的节点接受这个修改,而这在一个去中心化的网络中是非常困难的,因为节点之间往往是相互独立且利益不同的,很难达成一致来修改已经确认的交易记录。
- 交易的不可变性
- 交易记录永久保存:“The transaction is, immutable, or indelible” 强调了区块链交易的不可更改性和永久性。一旦一笔交易被记录在区块链上,它就成为了不可磨灭的历史记录,无法被篡改或删除。这种特性保证了交易的真实性和可信度,使得区块链在金融、供应链管理等领域具有重要的应用价值,因为它可以提供一个可靠的、可追溯的交易历史。
- 区块链是只读和只写的数据库
- 读写特性:从数据库的角度来看,区块链可以被看作是一种只读和只写的数据库。“只写” 意味着新的交易数据可以不断地被添加到区块链上,而且一旦写入就无法修改;“只读” 表示用户只能读取区块链上已经存在的交易记录,而不能对其进行修改或删除操作。这种特性与传统数据库有所不同,传统数据库通常允许对数据进行更新、删除等操作,而区块链的设计更侧重于保证数据的安全性和不可篡改性。
- 处理错误的方式
- 类似账本纠错:就像用墨水书写的账本一样,如果在区块链上记录的交易出现错误,不能直接擦除或修改原有的记录。而是需要通过创建一个新的交易来纠正错误。例如,如果在一笔资产转移交易中出现了金额错误,那么可以通过发起一笔新的交易来调整资产的数量,使账户余额恢复到正确的状态。这种处理错误的方式保证了区块链交易记录的完整性和可追溯性,所有的操作都有迹可循。
Decentralized peers#
Encryption Process#
Standard encryption practices
- Some Blockchains allow for “BYOE” (Bring Your Own
Encryption) - All blocks are encrypted
- Some Blockchains are public, some are private
- Public Blockchains are still encrypted, but are viewable to the public, e.g. https://www.blockchain.com/explorer
- Private Blockchains employ user rights for visibility, e.g.
- Customer – Writes and views all data
- Auditors – View all transactions
- Supplier A – Writes and views Partner A data
- Supplier B – Writes and views Partner B data
我们可以将 hash value 视为一个 real number,设置一个 target bar,找出满足小于 bar 的 hash value。可以提高 bar 来降低难度。
Consensus Mechanisms#
- Ensures that the next block in a blockchain is the one and only version of the truth
- Keeps powerful adversaries from derailing the system and successfully forking the chain
- Many Consensus mechanisms, each with pros and cons
Proof of Work#
Proof of State#
- Stakeholders invest their coins into POS mechanism
- Faster and friendlier to the environment than PoW
- More coins -> Higher chance of creating the next block
- A transaction fees is given to the miner that creates a
block
Proof of Elapsed Time#
• Each node generates a random wait time
• Each node waits for the duration of its randomly determined period before
attempting to propose a new block.
• After the waiting period elapses, the node that has waited the longest is eligible to propose the next block.
• One of the fairest blockchain consensus algorithms
Smart Contract#
- Computer code
- Smart Contract
- Provides business logic layer prior to block submission