这似乎是一个很小的问题,我是合同开发的新手。
我在合同原型中有一个功能如下:
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个字节组成的。