一句话:提出 EtherDiffer,对以太坊节点的 RPC 服务进行差分测试,自动生成有效与无效测试用例并揭露实现偏差。
以太坊节点实现官方 RPC 规范并暴露统一接口,但规范对非确定性事件处理与非法参数缺乏说明,导致不同实现出现偏差。本文提出 EtherDiffer,对四种主流节点的 RPC 服务进行自动差分测试:先以多并发交易和传播延迟生成非确定性链,再用基于属性的生成与类型保持变异构造语义有效及无效但可执行的测试用例,执行后报告错误处理或返回值差异。评估中两种生成技术成功率分别为 98.8% 和 95.4%,检测到 48 类偏差,含崩溃、拒绝服务等 11 个实现缺陷;报告 44 类后获确认与补丁,且全面优于官方测试工具。
Blockchain is a distributed ledger that records transactions among users on top of a peer-to-peer network. Among all, Ethereum is the most popular general-purpose platform and its support of smart contracts led to a new form of applications called decentralized applications (DApps). A typical DApp has an off-chain frontend and on-chain backend architecture, and the frontend often needs interactions with the backend network, e.g., to acquire chain data or make transactions. Therefore, Ethereum nodes implement the official RPC specification and expose a uniform set of RPC methods to the frontend. However, the specification is not sufficient in two points: (1) lack of clarification for non-deterministic event handling, and (2) lack of specification for invalid arguments. To effectively disclose any deviations caused by the insufficiency, this paper introduces EtherDiffer that automatically performs differential testing on four major node implementations in terms of their RPC services. EtherDiffer first generates a non-deterministic chain by multi-concurrent transactions and propagation delay. Then, it applies our key techniques called property-based generation and type-preserving mutation to generate both semantically-valid and semantically-invalid-yet-executable test cases. EtherDiffer executes the test cases on target nodes and reports any deviations in error handling or return values. The evaluation showed the effectiveness of our test case generation techniques with the success ratios of 98.8% and 95.4%, respectively. Also, EtherDiffer detected 48 different classes of deviations including 11 implementation bugs such as crash and denial-of-service bugs. We reported 44 of the detected classes to the specification and node developers and received acknowledgements as well as bug patches. Lastly, it significantly outperformed the official node testing tool in every technical aspect. We believe that our research findings can contribute to more stable DApp ecosystem by reducing the inconsistencies among nodes.