跳到正文
技术笔记 · 区块链入门
从创世区块到智能合约:用比特币和以太坊理解区块链
2009 年 1 月,比特币的第一个区块中,出现了一条关于银行救助的新闻。这条文字与一个特殊的区块一起,成为比特币账本的起点。沿着这本账本往后看,区块、挖矿、51% 攻击和智能合约这些概念,便能逐渐串起来。
这本账本的第一页,叫作创世区块。它的高度为 0,时间戳是 2009 年 1 月 3 日 18:15:05 UTC,对应北京时间 1 月 4 日凌晨。因为没有前一个区块,它的“前一区块哈希”字段全为零。其中包含一笔产生 50 BTC 的特殊奖励交易,但这笔输出没有进入可花费记录,所以无法花费。Bitcoin Core 创世区块代码
中本聪在这笔交易中留下了当时《泰晤士报》的标题:
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
意思是:“《泰晤士报》2009 年 1 月 3 日:财政大臣即将第二次救助银行。”
这条新闻为区块的创建时间提供了外部参照,也把比特币的起点与当时的金融危机联系起来。人们常将它解读为对金融体系的评论,但仅凭这句话,无法确定中本聪选择它的完整动机。标题原文
理解这本账本,先要理解它解决的问题。银行转账由银行维护记录,确认付款人有多少钱、资金是否已经转出。比特币希望在没有银行统一记账的情况下,让人们直接进行电子支付,于是必须解决双重支付:同一笔钱如果被同时付给两个人,网络怎样确定哪笔付款有效?数字签名可以证明谁有权支配资金,但还需要一套机制,让参与者认可共同的交易历史。比特币白皮书
区块链是一种将记录打包成区块、通过密码学方法连接,并由多个节点按共同规则维护的账本技术。在比特币中,交易被收录进区块,后一个区块保存前一个区块的哈希,由此形成连接。可以把它想象成一页页相互引用的账本:
创世区块(高度 0)→ 区块 1 → 区块 2 → 区块 3 → ……
哈希可以理解为数据的“指纹”。交易经过哈希运算形成摘要,这些摘要进一步组成默克尔树,其根摘要保存在区块头中。后一个区块引用前一个区块头的哈希。如果历史交易被修改,相应摘要和区块哈希也会改变,后续区块原来的引用便对不上。比特币区块结构文档
但哈希连接本身并不能阻止人重新计算指纹。比特币还引入了工作量证明(PoW):矿工不断尝试不同的区块头数据,寻找低于难度目标的哈希。找到合格结果后,矿工广播区块,由其他节点检查。这个过程就是挖矿,通常需要大量计算尝试,而验证结果相对容易。比特币挖矿开发者指南
矿工提出新区块,全节点独立验证交易签名、资金是否已花费等规则。即使矿工算力很大,包含无效交易的区块也不会因此获得认可。比特币交易中的输入引用先前的交易输出;已经花费的输出,不能在同一条有效链上再次花费。比特币交易开发者指南
如果出现竞争分支,节点在符合规则的链中选择累计工作量最大的一条。这比“最长链”更准确,因为比较的是累计工作量,而非单纯区块数量。比特币的出块目标是长期平均约十分钟一次,并非固定每十分钟出块。比特币区块链开发者指南
区块时间戳也不是精确的现实世界时钟,链上顺序不等于交易发起时间的绝对排序。比特币区块结构文档
交易被当前链上的区块收录,便有了 1 次确认;每增加一个后续区块,确认数再加 1。攻击者若想替换这段历史,必须重做相应的工作量证明,并追赶仍在增长的另一条链。在诚实算力占多数的前提下,确认越多,成功改写历史的概率通常越低。因此,“难以篡改”比“绝对不可篡改”更准确。比特币白皮书
这种安全性也解释了51% 攻击。如果攻击者持续掌握超过一半的挖矿算力,其分支在长期平均上就能比其余矿工的分支增长得更快。这里衡量的是算力,持有多数比特币或运行多数节点,都不等于掌握多数挖矿算力。比特币区块链开发者指南
假设攻击者用自己的 10 BTC 向商家购买商品,同时从付款之前的共同区块秘密挖出另一条分支:
共同历史:…… → 区块 100
├─ 公开分支:付款给商家 → 后续区块……
└─ 秘密分支:同一笔钱付给自己 → 后续区块……
商家确认收款后交货。如果秘密分支的累计工作量后来超过公开分支,攻击者就可以将其公布。节点验证后切换分支,发生链重组。商家的收款交易失去确认,而它所引用的资金已在新链中被另一笔交易花费,原收款交易无法再被确认。这就是双花:攻击者拿到了商品,同时保住了资金。比特币白皮书,第 11 节
多数算力可以用于重组历史、双花自己控制的资金,或排除某些交易;它无法伪造别人的签名,也无法让遵守原规则的全节点接受任意增发。比特币常见问题
攻击者无需从创世区块重新挖起,但越久远的历史通常意味着越多需要重做的工作。超过 50% 也不意味着立即成功;不足 50% 仍可能凭运气成功,只是更多确认通常会降低这种风险。比特币白皮书
当共同账本可以记录资金流转后,一个自然的延伸是:能否让账本同时执行处理资金的程序?以太坊提供了更通用的链上程序执行环境。比特币本身也有脚本和条件支付能力;以太坊进一步扩展了可编程能力,支持更丰富的应用。比特币交易指南、以太坊虚拟机文档
这些部署在链上的程序,就是智能合约。它们拥有地址、代码和保存的数据,可以根据规则管理链上资产。用户发送交易调用合约,网络中的节点按照统一环境执行程序、验证结果,并更新账本中的状态。这个统一环境叫作以太坊虚拟机,简称 EVM。智能合约简介、EVM 文档
例如,可以设计一个期限为 30 天、目标为 10 ETH 的众筹合约。参与者向合约出资,程序记录每人的金额。截止后,如果达到目标,发起人可以调用合约领取资金;如果没有达到目标,出资人可以调用合约退回自己的出资。这些处理规则预先写入程序,调用时由代码检查和执行。
这里的“智能”指按照程序执行规则。合约通常需要交易触发,不会到期后自行醒来退款;它也可以在一笔交易的执行过程中被其他合约调用。是否允许管理员暂停、升级或转移资金,同样取决于代码中的权限设计。智能合约简介、合约升级文档
以太坊、ETH 和 Gas 分别承担不同角色:以太坊是网络,ETH 是原生资产,Gas 则是衡量执行操作所需计算工作的单位。部署合约、调用合约修改状态,都需要支付交易费用,以太坊主网上的费用用 ETH 支付。Gas 让计算资源有明确成本,也限制了一笔交易能够消耗的计算量。以太坊 Gas 文档
以太坊的共识方式也与比特币不同。它在 2022 年由工作量证明转向权益证明(PoS),由质押 ETH 的验证者参与区块提议与共识。因此,分析以太坊的攻击风险,需要考虑有效质押权益、投票和惩罚机制,不能直接套用比特币的“51% 挖矿算力”模型。以太坊 PoS 文档
智能合约仍然有边界。它可以检查链上的众筹金额,却无法直接知道现实中的商品是否送达。这类外部信息需要通过预言机等机制输入,其可靠性仍取决于数据来源。代码漏洞和管理员权限也可能影响资金安全。区块链让程序的执行和记录可以被共同验证,而应用是否可靠,仍需要具体检查它采用的数据、代码与权限。智能合约的局限、智能合约安全文档

Comments NOTHING