这似乎是一个简单的问题,但是如果您想在外部合约中调用一个函数,该函数采用动态大小的数组/元组,那么如果您需要构建参数,那么似乎有关于它的文档 -链(寻求帮助的人们最终重写了他们的代码,因此要调用的函数仅使用固定大小的争论)。
就我而言,我需要使用大量现有的 Solidity 代码来为
multiplexMultiHopSellEthForToken
函数构建参数,该函数是 0x 交换的复用功能的一部分,这意味着我无法重写它:
function multiplexMultiHopSellEthForToken(
address[] memory tokens,
MultiHopSellSubcall[] memory calls,
uint256 minBuyAmount
) public payable override returns (uint256 boughtAmount)
由于函数需要对一些参数进行加密签名,我如何使用 Solidity 进行 abi.encode/Serialize 来构建
MultiHopSellSubcall[] memory calls
参数?
在 Solidity 中,调用以动态大小的结构体数组作为参数的函数可以通过对参数进行正确编码或序列化来实现。一种常见的方法是单独对数组元素进行编码,然后以适合作为函数参数传递的格式将它们打包在一起。以下是如何实现这一目标的总体概述:
编码每个结构元素:将每个结构元素单独序列化为字节数组。您可以通过定义一个函数来对每个结构进行编码来做到这一点。
打包序列化元素:将序列化结构元素打包到单个字节数组中,确保正确对齐和填充。
将序列化字节数组作为参数传递:在调用接受动态大小的结构数组的函数时,使用打包字节数组作为参数。