簡體   English   中英

與 solidity 智能合約交互時出現無效類型 ( struct ) 錯誤

[英]I am getting invalid type ( struct ) error while interacting with the solidity smart contract

這是錯誤消息:

未捕獲(承諾)錯誤:無效類型(argument="type", value="Proof", code=INVALID_ARGUMENT, version=abi/5.7.0)

這是堅固的功能


function createOffer(
        address _requestorAddress,
        address[] memory _requestedNftAddress,
        uint[] memory _requestedNftId,
        address[] memory _offeredNftAddress,
        uint[] memory _offeredNftId,
        Proof[] memory _proofsRequested,
        Proof[] memory _proofsOffered
)

這是結構

    struct Proof {
        address nftAddress;
        bytes32[] proof;
    }

這是打字稿代碼


    const tx = await contractWithSigner.createOffer(
        address,
        [counter_party_nfts_addresses[0]],
        [counter_party_nft_ids[0]],
        [my_nft_addresses[0]],
        [my_nft_ids[0]],
        [
            [
                counter_party_nfts_addresses[0],
                getMerkelProof(counter_party_nfts_addresses).proof,
            ],
        ],
        [[my_nft_addresses[0], getMerkelProof(my_nft_addresses).proof]]
    );

這是 getMerkleProof 函數:

    const getMerkelProof = (addresses: string[]) => {
        const leaf = keccak256(addresses[0]);
        const leaves = addresses.map((x: any) => keccak256(x));
        const tree = new MerkleTree(leaves, keccak256, { sortPairs: true });
        const proof = tree.getProof(leaf, 0);
        const root = tree.getRoot().toString("hex");
        return {
            proof,
            root,
        };
    };

由於該結構接受兩個參數 1 nftAddress 和 2nd 是 merkleProof,即

[[address,proof]]

但無法找到正確的方法。

    Proof[] memory _proofsRequested,
    Proof[] memory _proofsOffered

參數類型應該是 Proof 結構數組,但您傳遞的是數組數組

      [
        [
            counter_party_nfts_addresses[0],
            getMerkelProof(counter_party_nfts_addresses).proof,
        ],
    ],
    [[my_nft_addresses[0], getMerkelProof(my_nft_addresses).proof]]

反而

    [// convert the inner array to obj
        {
            nftAddress: counter_party_nfts_addresses[0],
            proof    :getMerkelProof(counter_party_nfts_addresses).proof,
        {,
    ],
    [ 
        {
         address: my_nft_addresses[0], 
         proof: getMerkelProof(my_nft_addresses).proof
        }
    ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM