我希望以编程的方式为安全事务(特别是来自伪造脚本)创建调用数据,然后将其复制/粘贴到UI中。为了做到这一点,我希望能够:
execTransaction
并指定每个输入,或但是,我似乎无法在UI中完成任何一种操作。因此,给定我想要执行的原始调用数据,在UI中排队的最简单方法是什么?(我愿意以编程的方式排队,但这似乎是一种不值得付出的开销)
发布于 2022-12-31 20:59:16
通过API发布事务非常值得,特别是当您需要以编程方式生成事务和/或使用复杂的操作时。
首先,您应该知道如何使用任何选择的web3库在EVM网络上构建事务。您可以在网上找到您所选择的语言和库的许多例子,所以我将考虑这个问题的范围之外。
一旦您可以在本地生成一个事务,您就可以将详细信息直接发布到TXS
(注:忽略气体估算部分和签署txn的“延迟方式”。使用有效密钥(签名者或委托)对消息进行签名,并将gas设为0,这将在执行时计算。文档中的核心概念仍然有效。)
将此调用数据直接发布到execTransaction()
将要求每个人脱机签署事务,并与事务数据一起提供这些签名。这是您可以使用的选项,但我个人认为使用安全API提交和其他所有者签署UI更为方便。
事务生成器( Transaction )是一个稍微不同的东西。虽然典型的Multicall契约只是接受一个调用数据数组,但是已部署的多发送契约需要更多的事务元数据,并且在如何格式化事务数据方面有自己的规则。
据我所知,这不是公开和明确的文档,但要点是您生成一个或多个“元事务”(一个由uint8 operation
组成的keccak打包对象(仅为call
或delegatecall
的Enum,但由于当前的合同不接受delegatecall
s,这应该永远是0),地址to
、uint256 value
、uint256 calldata length
和字节calldata
),然后将它们连接在一起,作为合同multiSend(bytes)
方法的论据。
有几种实现可以帮助您入门:
例如,如果您使用的是Ethers.js,那么Safe就有一个完整的多发送库。
安全合同回购有一些通用类型标码
我找到了Python实现,也在外管局的回购处。
通过一些工作,您可以将逻辑提取到任何支持库或语言中。
https://ethereum.stackexchange.com/questions/141629
复制相似问题