Page 236 - 《软件学报》2025年第7期
P. 236
张孝 等: 区块链测试基准综述 3157
存在着耗费大量资源的问题. 2011 年, 一位名为 Quantum Mechanic 的网友在 Bitcointalk 论坛首次提出了权益证
明 (proof of stake, PoS) 机制 (https://en.bitcoin.it/wiki/ProofofStake). PoS 是 PoW 的变种, 通过引入币龄这一概念,
在一定程度上解决 PoW 耗费大量算力的问题. 各个分布式节点的币龄越大, 获得记账权的可能性就越大. PoS 不
再需要投入巨量资源来求解无实际意义的数学难题, 但币龄决定记账权也在一定程度上削弱了区块链去中心化特
质. 目前以太坊系统已经从 PoW 全面转向 PoS.
另一类重要的共识协议称为 BFT (Byzantine fault tolerance) 协议. 此类协议的特点是一般不需要竞争记账权,
但是区块发布之后, 所有节点要通过多轮投票来决定是否接受. 与 PoX 不同的是, 区块一经上链就不会被分叉.
BFT 协议的核心思想来源于 Paxos 协议 [56] , 通过多轮投票的方式达成共识. Paxos 采用简单多数的方式来确定投
票结果, 也不考虑故意作恶的情况, 因此不能容忍拜占庭类错误. 尽管如此, Paxos 仍然是分布式系统的经典协议,
由 Paxos 衍生出很多协议, 如 Raft [57] , 仍然被广泛用于分布式数据库系统、DNS 等应用中. 值得一提的是, 不少区
块链系统出于对性能和安全的综合考虑也采用 Raft [57] . 1999 年, Castro 等人 [58] 提出了实用拜占庭容错 (PBFT) 算法,
通过调整投票确认机制以及引入 View Change 实现了容忍不超过 (N–1)/3 的拜占庭节点, 其中, N 为全部节点数.
PBFT 是目前许可链主流的共识协议.
2.1.4 智能合约
智能合约由跨领域学者 Nick Szabo [59] 在 1996 年提出, 含义是“一种可以实现合同条款的计算机程序”, 其执行
过程可以不依赖于任何中间媒介. 智能合约的概念被提出之后, 技术层面无法实现不依赖第三方的执行合约程序,
因此一直未能真正地落地. 直到区块链技术的出现, 提供了一个去中心的分布式执行环境, 满足了智能合约的要
求, 才使得此项技术得以真正地实现.
在区块链社区, 通常认为智能合约是运行在区块链系统之上的一段计算机代码, 由共识机制确保代码的正确
执行 [60] . 但多方参与的计算机程序, 在实际中往往意味着多方共同遵守的协议或规范, 仍然是广义“合约”的范畴.
目前, 智能合约没有统一的编程语言和运行模型. 比特币的智能合约采用了简单的脚本语言, 表达能力受限. 以太
坊智能合约采用了图灵完备 Solidity 语言. 在 Hyperledger Fabric 中将智能合约称为链码 (chaincode), 对区块链的
读写操作都需要经过链码来完成. 无论采用哪种语言, 智能合约都可视为一个运行在区块链平台上的状态机. 智能
合约实现好合约内容, 当用户部署或调用交易时修改智能合约的值和状态, 智能合约生成区块, 对链上数据进行修
改, 链上数据的修改会更新智能合约的世界状态. 而所有外部的数据源都应当来自可信的预言机 (oracle machine).
2.1.5 区块链安全威胁
根据被攻击的模块, 可以将区块链安全威胁分为攻击网络、攻击共识以及攻击智能合约这 3 类, 可能造成系
统性能下降甚至崩溃、链分叉、网络分区以及用户财产损失 [61,62] . 测试基准主要考虑针对网络或共识层面的攻
击. 针对智能合约代码漏洞的攻击, 比如算数溢出、可重入漏洞等 [63,64] , 通常采用漏洞扫描工具来检测, 因此并不
包含在测试基准中.
常见针对网络的攻击主要包括 DNS 劫持 (DNS hijack) [65] 、日蚀攻击 (eclipse attack) [66] 和 DDoS 攻击 (DDoS
attack) [67,68] 等.
(1) DNS 劫持: 新的节点加入区块链网络时, 依赖特定的 DNS 服务来发现已有的成员节点, 从而与区块链网
络其他节点取得联系. 如果 DNS 服务器被劫持, 新的节点可能得到错误的成员节点地址, 也就不能正常参与共识.
(2) 日蚀攻击: 如果一个节点 A 的邻居全部为恶意节点, 这些恶意节点可以屏蔽 A 与网络其他节点的通信. 这
样对于网络中其他节点来说, 节点 A 也就成为拜占庭节点. 日蚀攻击可以增大区块链网络中拜占庭节点的比例,
降低系统性能, 甚至造成系统崩溃.
(3) DDoS 攻击: 即分布式拒绝服务攻击, 这是常见的网络攻击方式. 通过利用合理的请求消耗节点资源, 使得
节点不能对外正常服务 (比如参与共识). 针对区块链网络的 DDoS 攻击可能造成系统性能下降.
常见针对共识的攻击主要包括女巫攻击 (sybil attack) [69,70] 、自私挖矿 (selfish mining) [71] 、分叉攻击 (fork
attack) [72,73] 和提案延迟 [74] 等. 其中, 前 3 类攻击主要是针对公有链.
(1) 女巫攻击: 攻击者通过创建或控制多个账户来操纵共识协议的结果.

