web3 balanceOf始终为0

时间:2018-01-22 20:48:41

标签: ethereum solidity web3

我试图使用web3在我的智能合约上获得地址的余额,但余额始终为0.在Rinkeby上使用元掩码,因为我的合同是在rinkeby上部署的。 https://rinkeby.etherscan.io/address/0x8e3a88be716ce7c8119c36558ec97bc634592255

您可以将钱包放在etherScan上的balanceOf功能中来验证钱包是否有余额。使用地址0x8b54A82a12bD5A7bA33B4842cA677E55f78a8612

let provider = web3.currentProvider;
web3 = new Web3(provider);
let abi = 'too long of a string to post here';
let MyContract = web3.eth.contract(JSON.parse(abi));
let myContractInstance = MyContract.at('0x8e3a88be716ce7c8119c36558ec97bc634592255');
let address = '0x8b54A82a12bD5A7bA33B4842cA677E55f78a8612';

function balanceOf(address) {
    if (!address) {
        return;
    }

    this.myContractInstance.balanceOf.call(address, function(error, balance) {
      if (error) {
        return;
      }

      alert(balance.c[0] + ' RHC');
    });
}

balanceOf(address);

这是我的合同上的getBalance函数

function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
}

http://robinhoodcoin.net/metamask.html上实施的网站
代码https://github.com/robinhoodcoin/robinhoodcoin.github.io/blob/master/metamask.html

修改的 当我将提供者更改为以下内容时:

var web3 = new Web3(new Web3.providers.HttpProvider('https://rinkeby.infura.io/'));

我能够取得平衡。因此,使用元掩码作为提供者有一些东西。

1 个答案:

答案 0 :(得分:1)

https://github.com/robinhoodcoin/robinhoodcoin.github.io/blob/master/metamask.html#L118处的行有拼写错误。它写着:

self.contractAddress

但地址存储在self.myContractInstance = self.MyContract.at(self.contractAddress); ,因此应显示为:

wmic qfe get hotfixid | find "KBDDDDDDD"

完成修复后,使用MetaMask页面可以正常使用。