Web3js
如何在函式中傳遞參數,該參數將用作帶有 web3.js 的 web3 實例中的方法名稱?
我正在嘗試創建一個函式,該函式將使用 web3.js 的契約方法的名稱作為參數。這是原始功能:
async function estimateGas() { const w3 = await new Web3(window.ethereum); window.contract = await new w3.eth.Contract(myContr.abi, myContr.addr); window.contract.methods.buy().estimateGas({from: ethereum.selectedAddress}); }
這個函式像這樣工作得很好,但我想修改它,以便我可以使用合約上的所有其他方法(例如 .claim()、.transfer() 等)作為參數,比如所以:
async function estimateGas(argumentName) { const w3 = await new Web3(window.ethereum); window.contract = await new w3.eth.Contract(myContr.abi, myContr.addr); // I want to change here below what was the ".buy()" method with my argument as if it would have been ".argumentName()" window.contract.methods.argumentName().estimateGas({from: ethereum.selectedAddress}); }
我怎樣才能做到這一點?
你可以用 Javascript 明確地做到這一點。看看另一種訪問 js 對象屬性的方法,
obj["property"]
語法如下:async function estimateGas(argumentName) { const w3 = await new Web3(window.ethereum); window.contract = await new w3.eth.Contract(myContr.abi, myContr.addr); // I want to change here below what was the ".buy()" method with my argument as if it would have been ".argumentName()" window.contract.methods[argumentName]().estimateGas({from: ethereum.selectedAddress}); }
例如,看一下這個答案,我使用這種方法動態呼叫 js web3 對象的函式:有沒有辦法從 ABI 中提取函式並在前端顯示它?
const result = await counter.methods[functionName](...args).call();