Web3js

如何傳遞編碼參數來呼叫合約 getter 函式

  • December 18, 2019

我有一個包含functionNames[]我的契約的 getter 函式名稱的數組(即finalGettersParams)和另一個包含該 getter 函式的編碼參數(已從 填充web3.eth.abi.decodeParameters)的數組(即)。

 finalGettersParams = [ Result { __length__: 0 },
 Result {
   '0': '0x0000000000000000000000000000000000000000',
   __length__: 1 },
 Result {
   '0': '0x0000000000000000000000000000000000000000',
   '1': '0x0000000000000000000000000000000000000000',
   __length__: 2 } 
   ]

現在我想用上述可用資訊呼叫所有 getter 函式。是否可以?我正在嘗試的一種可能的解決方案(但它不起作用,不完整)….

for(j=0; j<functionNames.length; j++) {
     myFunc = functionNames[j].funcName;
     try {
       res = await myContractInstance.methods[myFunc](...finalGettersParams[?????????]).call({from: account1}) // here i need help 
       console.log("Getter output", res);
     } catch (error) {
        console.log("Getter ERROR", error);
     }

任何人都可以建議我如何進行,進一步?

這通常對您有用:

...Object.values(finalGettersParams[j]).slice(0, -1)

但是,它隱含地假設值將始終按其鍵的遞增順序出現,並且鍵的值__length__將始終出現在最後。

所以為了“打消疑慮”,你也可以這樣用:

...[...Array(finalGettersParams[j].__length__).keys()].map(key => finalGettersParams[j][key])

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