Solidity

instance.balanceOf(…).call 不是函式

  • February 18, 2022

我的程式碼中有 ERC20 標準令牌函式…我正在嘗試使用 trufflebalanceOf(address _owner)上的 javascript 測試來測試該函式,但我遇到了以下問題:

TypeError: ovxet.balanceOf(...).call is not a function
 at test/test1.js:48:46

這很奇怪,因為我總是關注如何在程式碼中定義函式以及如何呼叫它們……

我在我的測試中嘗試了兩種方式(async/await 和 promise chaning),但結果是相同的“不是函式”:

it("should call balance", function() {
   account1 = accounts[0];
   return OVXET.deployed().then(function(instance) {
       ovxet = instance;
       return ovxet.balanceOf(account1).call({from: account1});
   }).then(function(balance){
       console.log(balance);
   });
});

而這個 async/await 呼叫在另一個 Promise 中:

   var balance2 = await ovxet.balanceOf(account1).call({from: account1});
   console.log("balance using erc20 function: " + balance2.toNumber());

這裡有 .sol 腳本中的程式碼:

function balanceOf(address _owner) public constant returns (uint balance) {
   return _sumBalances(_owner);
}

這真的很奇怪,因為它是如此簡單的編碼功能……所以我對這種情況真的很沮喪……

這是與此功能相關的 ABI 部分:

{
     "constant": true,
     "inputs": [
       {
         "name": "_owner",
         "type": "address"
       }
     ],
     "name": "balanceOf",
     "outputs": [
       {
         "name": "balance",
         "type": "uint256"
       }
     ],
     "payable": false,
     "stateMutability": "view",
     "type": "function"
   },

在 Truffle v4.xx 中,您應該能夠呼叫這樣的函式

return OVXET.deployed().then(function(instance) {
   ovxet = instance;
   return ovxet.balanceOf.call(account1, {from: account1});
}).then(function(balance){
   console.log(balance);
});

語法是contract.method.call(param1, param2, ..).

您可以使用 Let balance = Token.balanceOf(accountB).then(b => { return b.toNumber() })

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