Javascript

動態呼叫合約上的函式

  • October 23, 2017

我正在嘗試使用單個函式呼叫契約的不同函式,該函式將函式名稱作為參數傳遞給它。

var Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io'));
var myContract = new web3.eth.Contract(JSON.parse(data.abi), data.address);

var method = data.method // 'getWord'
myContract.methods.getWord().call().then(function(value) {
       console.log(value)
   }, function(error) {
       console.log(error)
   });

上面我創建了一個名為 method 的變數,它的值已設置為getWord我正在呼叫的下面的行getWord()

我想要做的是呼叫 data.method 中命名的任何函式……

   myContract.methods.[data.method].call().then(function(value) {
       console.log(value)
   }, function(error) {
       console.log(error)
   });

但當然它會中斷,我更喜歡不eval()這樣使用

   var myContract = new web3.eth.Contract(JSON.parse(data.abi), data.address);
   eval('myContract.methods.'+data.method+'().call()')  
   .then(function(value) {
       console.log(value)
   }, function(error) {
       console.log(error)
   });

還有其他方法嗎?

它應該只是:

myContract.methods[data.method]().call()

(你在那裡有一個額外的點。)

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