Solidity

如何從 ReactJS 呼叫以結構為參數的合約函式?

  • February 9, 2022

我正在努力弄清楚如何在將結構作為參數(其中也有另一個結構)的契約中實際呼叫函式(使用 React)?

合約函式如下所示:

function createCampaign(CampaignInput calldata input_) external {
//code here
}

涉及的結構是:

struct ItemInput {
   string name;
   uint256 value;
   uint256 supply;

}

struct CampaignInput {
   string name;
   uint256 campaignType;
   ItemInput[] items; 
}

我已經在 React 中使用 Ethers.js 載入了合約,我試圖使用這段程式碼呼叫它,這顯然是非常錯誤的:

contract.createCampaign({"name",0,[]})

其他沒有 struct 作為參數的方法,使用上面的方法可以正常工作。

我的問題是我需要在上面的行中寫什麼,以便我可以將正確的論點傳遞給契約。

這取決於您用於與合約互動的 js 庫。

對於Ethers(也可能也是web3js),您可以使用帶有鍵的對像或嵌套數組。

所以對於你的例子:

const items = [
 {
   name: "Item 1",
   value: 0,
   supply: 100
 }
]
contract.createCampaign({ name: "name", campaignType : 0, items })

我有一個類似的問題,使用 ethers.js 將結構表示為 dict。如果有人在將結構作為 javascript dict 傳遞時遇到問題,則數組可能會起作用:

[value1, value2]

代替

{key1 : value1, key2: value2} 沒用但是

引用自:https://ethereum.stackexchange.com/questions/118280