[英]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.