IBATCH(批处理智能合约调用)
文献标题:IBATCH: Saving Ethereum Fees via Secure and Cost-Effective Batching of Smart-Contract Invocations
来源:Proceedings of the 29th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. 2021.

本文提出的IBATCH,添加了Batcher与Dispatcher两个角色。本文实验中,在与以太坊网络同步的以太坊节点(例如,Geth客户端)上运行Batcher中间服务。
IBATCH的挑战及解决方案:
(1)以太坊本身并不支持批处理。本文提出,在调用账户(caller account)和被调用的智能合约(callee smart contract)中间引入两个中介:Batcher与Dispatcher。
(2)调用方(callers)不需要信任Batcher。为实现安全及经济高效的批处理,本文提出了一种安全协议。模拟Batcher发起攻击,在批处理事务中修改、伪造、重放或忽略调用请求。
(3)requests需要达到一定数量才会开始处理,会有延迟发生。本文提出,使用交易价格的高低(也就是gas)来确定生成批处理交易的顺序,价高者,交易能更快上链处理,能消除延迟。
研究方法

本文以IDEX为平台,举出一个实例,指出了四种批处理策略:S1)一对一,即上图中的4 trade;S2)多对一,即上图中的deposit调用;S3)一对多;S4)多对多,上图中的approve调用所示。本文基于S4做阐述,并设计了两个其他模型(baseline)来做对比。
baseline B1:(考虑批处理的一种特殊情况)假设账户A要转代币给N个账户B1、B2...本方案设计账户A创建一个智能合约C,将N个tranfer()函数封装到一笔交易中发送给智能合约C。
baseline B2:通过检查dispatcher智能合约中每个账户中的nonce值来阻止重放攻击。
安全协议
协议执行步骤
1. 在批处理时间窗口中,某个调用者提交第 i 个调用请求(记为 calli )给Batcher服务,请求 calli 包含以下内容:
调用者的地址或公钥accounti、被调用智能合约地址cntri、函数名字funci、参数列表(argument list)argsi. i∈ [1, N]
2. 在批处理时间窗口结束时,Batcher准备批处理消息bmsg,并发送给调用者进行验证和签名。
验证:1)Each of the callers checks if there is one and only one copy of its invocationcall1in the batch message.
2)nonce值与本地维护的nonce值是否相等
PS:CA为智能合约Dispatcher的地址


安全型性分析
1)伪造调用:签名很难伪造。
2)漏掉调用:若略掉一个调用,需要有足够数量的“假块”(区块链固有特性,类似双花问题)
3)调用重放:有以下几种情况,分别为
- 相同的批处理交易中,多次发起调用。解决:无法出现在 bmsg 中,很容易被发现。
- 相同的nonceB,重放某一批处理交易。解决:相同的nonceB会被以太坊自由的重放保护发现。
- 不同的nonceB,重放某一批处理交易。解决:相同的nonceB已经被签名 bmsg_sign。
- 故意生产小批量。如:一批10次调用,生成两个较小的批,每个批都是5次调用。操作需要耗费gas,每块有gas limit。
- 在两次批处理交易中重放调用。解决:最后处理步骤与1)相同,属于伪造调用。
4)拒绝服务(DoS)的调用者(caller):Batcher强制设置了一个timeout,在这个时间内会等待批处理中各个caller的签名,超过这个时间的caller,Dispatcher将不会将它的调用请求转发给被调用的智能合约。
Batch's policies
这部分主要讲了如何设计Batcher的批处理调用,需同时兼顾成本和延迟问题。
用低延迟来优化成本
bpool是一个内存缓冲区,存储提交的调用。txpool是一种数据结构(交易缓存在这里面)。
bpoolEvict生成要发送到以太坊网络的批处理事务。程序bpoolEvict要做两个基本决定:
C1) 哪些调用要从bpool中驱逐出来并放入批处理中。
本文提出的解决方案:在bpool中选择Gas价格高于ℎ的调用,从而使价格高于ℎ的交易和调用的总Gas低于区块限制。此外,价格高于ℎ-1的交易和调用的总Gas高于区块限制。(似懂非懂)
C2)在批量交易中应该设置什么Gas-price值。
本文提出的解决方案:
- Batch-X%: The Gas price of a batch transaction is set to beabove X% of the invocations in the batch.
- Block-X%: The Gas price of a batch transaction is set to be above X% of the transactions in the block (also including the
invocations in the batch).
后面的应该是不会看下去了。
结论
This paper presents IBATCH, a security protocol and middleware system to batch smart-contract invocations over Ethereum. The design of IBATCH addresses the tradeoff between security, cost effec-tiveness and delay. The result shows that compared with the baseline without batching,IBATCH effectively saves cost per invocation with small block delay.
补充知识
IDEX
Decentralized Exchange 简称 DEX。IDEX是一个基于以太坊的分散式智能合约交易平台,提供实时交易,即时订单放置和处理,免费取消订单,实时订单簿更新等服务。IDEX由一个智能合约,一个交易引擎和一个交易处理仲裁器组成,所有交易必须由用户的私钥授权。
思考
1. batching smart-contract invocations 是什么意思?
资讯:安永利用Zk-SNARKs扩展以太坊,一次可批量处理20笔交易.


浙公网安备 33010602011771号