Web3js

如何使用帶有嵌套、數組或非字元串參數的 encodeFunctionCall?

  • August 11, 2021

Web3.js 有一個名為encodefunctioncall的方法,其簽名如下:

encodeFunctionCall(abiItem: AbiItem, params: string[]): string;

第一個參數是該函式的 ABI 介面,第二個參數是函式參數的字元串數組。我的問題是第二個參數,它只接受字元串數組,而我的方法獲取一個結構和一些地址和整數數組作為輸入。如果我使用encodeParameters對輸入參數進行編碼,它會返回一個無法傳遞的字元串,encodefunctioncall因為它只接受字元串數組作為其第二個輸入:

encodeParameters(types: any[], paramaters: any[]): string;

如何使用 web3.js 使用非字元串(例如嵌套結構或數組)創建函式呼叫?

解決方法是使用 web3 ABI 編碼器函式分別計算函式簽名和參數,然後簡單地連接它們:

const callData = web3.eth.abi.encodeFunctionSignature(abiItem) + web3.eth.abi.encodeParameters(types, params).substr(2)/* remove preceding 0x */;

此連結提供更多資訊。

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