Solidity
instance.balanceOf(…).call 不是函式
我的程式碼中有 ERC20 標準令牌函式…我正在嘗試使用 truffle
balanceOf(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() })