【发布时间】:2021-04-25 17:52:32
【问题描述】:
似乎无法理解此错误的原因。我有以下结构:
enum RecordType {ONE, TWO, THREE}
struct Record {
address recordmaker;
uint256[] recordIds;
RecordType recordType;
}
struct Book {
Record[] records;
address bookmaker;
uint256 salt;
}
基本上,有一个Book 结构可以容纳多个Record 结构。现在,我需要创建一个新的 Book 哈希,为此我使用以下代码:
bytes32 constant BOOK_TYPEHASH = keccak256(
"Book(Record[] records,address bookmaker,uint256 salt)"
);
function hashBook(Book calldata book) external pure returns (bytes32) {
return keccak256(abi.encode(
BOOK_TYPEHASH,
book.records,
book.bookmaker,
book.salt
));
}
为了测试散列,我将以下内容传递给函数:
([0xD7ACd2a9FD159E69Bb102A1ca21C9a3e3A5F771B, [5, 55, 125], 0], 0xd9145CCE52D386f254917e481eB44e9943F39138, 123456)
或预览:
(
[
0xD7ACd2a9FD159E69Bb102A1ca21C9a3e3A5F771B,
[
5,
55,
125
],
0
],
0xd9145CCE52D386f254917e481eB44e9943F39138,
123456
)
调用函数时,我得到:transact to BookContract.hashBook errored. Error encoding arguments: Error: types/values length mismatch (count={"types":1,"values":3}, value={"types":["tuple(tuple(address,uint256[],uint8)[],address,uint256)"],"values":["([0xD7ACd2a9FD159E69Bb102A1ca21C9a3e3A5F771B, [5,",", 125], 0],",", 123456)"]}, code=INVALID_ARGUMENT, version=abi/5.0.7)
我在这里做错了什么?
【问题讨论】:
标签: solidity