使用字节4参数调用约定函数时出错



这似乎是一个很小的问题,我是合同开发的新手。

我在合同原型中有一个功能如下:

function exampleContractFunction(
address somecontractaddress,
bytes4 someCurrencySymbol,
uint[] memory someDetails,
uint16 someTime,
uint8 data1,
bytes32 data2,
bytes32 data3
);

我正在使用乙醚库版本^4.0.33和松露

在合同编译时生成以下接口。

exampleContractFunction: TypedFunctionDescription<{
encode([
somecontractaddress,
someCurrencySymbol,
someDetails,
someTime,
data1,
data2,
data3
]: [
string,
Arrayish,
BigNumberish[],
BigNumberish,
BigNumberish,
Arrayish,
Arrayish
]): string;
}>;

我尝试调用此函数来获取需要签名的合同交互事务的编码数据。当我打这个电话并通过时

const hexCurrency = (web3.utils.toHex('DAI'));

作为以下调用中的someCurrencySymbol:

const data = this.contracts.somecontract.interface.functions.exampleContractFunction.encode([
somecontractaddress, // Can be compound or dydx at the moment
hexCurrency,
someDetails,
someTime,
data1,
data2,
data3,
]);

我得到这个错误与任何货币的变化符号我通过

Error: invalid input argument (arg="someCurrencySymbol", reason="invalid bytes4 value", value="0x444149", version=4.0.42)
at Object.throwError (/packages/types/node_modules/ethers/errors.js:76:17)

如何将此字节4参数发送为currencySymbol?

您是否只尝试过:

web3.utils.toHex('DA')

在我看来,你传递的不仅仅是4个字节,实际上,你得到的值="0x444149"实际上是由6个字节组成的。

最新更新