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笔交易.

 

 
posted @ 2022-10-18 22:04  wuqio  阅读(166)  评论(0)    收藏  举报