Error encoding arguments: Error: types/values length mismatch

Error encoding arguments: Error: types/values length mismatch

似乎无法理解此错误的原因。我有以下结构:

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)

我做错了什么?

您的表达式中几乎没有语法错误。你应该:

  • 使用方括号 [ 而不是常规括号 ( 来包装结构
  • 也将 Record 结构包裹在方括号 [
  • 将地址用引号引起来"
[[["0xD7ACd2a9FD159E69Bb102A1ca21C9a3e3A5F771B", [5, 55, 125], 0]], "0xd9145CCE52D386f254917e481eB44e9943F39138", 123456]

预览:

[  // start of `Book` struct
    [  // start of `records[]` array
        [  // start of `Record` struct
            "0xD7ACd2a9FD159E69Bb102A1ca21C9a3e3A5F771B",
            [
                5,
                55,
                125
            ],
            0
        ]
    ],
    "0xd9145CCE52D386f254917e481eB44e9943F39138",
    123456
]