Web3js
如何傳遞編碼參數來呼叫合約 getter 函式
我有一個包含
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])