简体   繁体   English

为什么我根据自己建立的私有链创建令牌后,以太坊账户的余额仍为零?

[英]Why is the balance of the ethereum account still zero after I create a token based on the private chain I built?

I used the contract codes available on the ethereum official website,[create your own cryto-currency][1] to create an advanced token on the private chain run in geth console. 我使用以太坊官方网站上提供的合同代码,[创建自己的cryto-currency] [1]在geth控制台中运行的私有链上创建高级令牌。 The version of geth is 1.5.5,and the version of solc is 0.4.8. geth的版本为1.5.5,solc的版本为0.4.8。

My steps are: 我的步骤是:

1.initialize my geth: geth init genesis.json then geth --networkid 42 --nodiscover --maxpeers 0 console 1.初始化我的geth: geth初始化 genesis.json,然后geth --networkid 42 --nodiscover --maxpeers 0控制台

2.check the compiler:***eth.getCompilers()***returns:solidity 2.检查编译器:*** eth.getCompilers()***返回:实体

3.I used the online compiling website [Remix][2]to give me the relative abi and code to directly deploy my contract. 3.我使用在线编译网站[Remix] [2]给了我相关的abi和代码来直接部署我的合同。

I input: 我输入:

(1) abi=[{"constant":false,"inputs":[{"name":"newSellPrice","type":"uint256"},…… too long to copy the result; (1) abi = [{“ constant”:false,“ inputs”:[{“ name”:“ newSellPrice”,“ type”:“ uint256”},……太长,无法复制结果;

(2)then create the contract: multiplyContract = web3.eth.contract(abi) (2)然后创建合同: multipliyContract = web3.eth.contract(abi)

(3) multiply= multiplyContract.new(10000,"AKING",2,"AK",0xf32200730fdaca83f18171015c0be2a6342d46c4,{from: primaryAddress, data: 0x+code}) (3) 乘法= multipliContract.new(10000,“ AKING”,2,“ AK”,0xf32200730fdaca83f18171015c0be2a6342d46c4,{来自:primaryAddress,数据:0x + code})

the first parameter means the initial supply,the second one represents the name of the token, the third one means the decimalUnit,the forth one is the address which can have the initial supply of tokens. 第一个参数表示初始供应,第二个参数表示令牌的名称,第三个参数表示小数单位,第四个参数是可以初始提供令牌的地址。

4.check whether my contract has deployed: 4.检查我的合同是否已经部署:

I input : txpool.status 我输入: txpool.status

then I got:pending:1 然后我得到:等待:1

5.I began to mine the contract: 5.我开始开采合同:

input: miner.start() and miner.stop() 输入: miner.start()miner.stop()

then I input: eth.getBlock(5319) 然后我输入: eth.getBlock(5319)

I found that transaction. 我发现了那笔交易。

6.Interact with my contract: 6.与我的合同互动:

Input: MyContract = eth.contract(abi) 输入: MyContract = eth.contract(abi)

Then: myContract = MyContract.at(multiply.address) 然后: myContract = MyContract.at(multiply.address)

  1. Start mining for a while. 开始采矿一段时间。

The whole process went well, however when I input 整个过程进展顺利,但是当我输入

myContract.balanceOf(0xf32200730fdaca83f18171015c0be2a6342d46c4) (the address is the eth.account[0]and also the address which possesses the tokens I created. myContract.balanceOf(0xf32200730fdaca83f18171015c0be2a6342d46c4) (地址是eth.account [0],也是拥有我创建的令牌的地址。 I also tried some other addresses , they all returned to zero. 我还尝试了其他一些地址,它们都归零。 And I also tried some other expressions like myContract.balanceOf(eth.accounts[0], {from: eth.accounts[0]}) or myContract.balanceOf.sendTransaction(eth.accounts[0], {from: eth.accounts[0]}) 我还尝试了其他一些表达式,例如myContract.balanceOf(eth.accounts [0],{来自:eth.accounts [0]})myContract.balanceOf.sendTransaction(eth.accounts [0],{来自:eth.accounts [0]})

If I used : eth.getBalance(eth.accounts[0]) it only returns the ethers in my account which is not what I want to see. 如果我使用: eth.getBalance(eth.accounts [0]),它将仅返回我账户中的以太币 ,这不是我想要看到的。

So,is there anything wrong with my process? or is there anything important that is missed ? What's the point? 那么,我的过程有什么问题吗?或者有什么重要的事情值得错过?有什么意义?

The whole codes are as follows: 整个代码如下:

 pragma solidity ^0.4.2;
    contract owned {
    address public owner;

    function owned() {
        owner = msg.sender;
    }

    modifier onlyOwner {
        if (msg.sender != owner) throw;
        _;
    }

    function transferOwnership(address newOwner) onlyOwner {
        owner = newOwner;
    }
}

contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); }

contract token {
    /* Public variables of the token */
    string public standard = 'Token 0.1';
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;

    /* This creates an array with all balances */
    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;

    /* This generates a public event on the blockchain that will notify clients */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /* Initializes contract with initial supply tokens to the creator of the contract */
    function token(
        uint256 initialSupply,
        string tokenName,
        uint8 decimalUnits,
        string tokenSymbol
        ) {
        balanceOf[msg.sender] = initialSupply;              // Give the creator all initial tokens
        totalSupply = initialSupply;                        // Update total supply
        name = tokenName;                                   // Set the name for display purposes
        symbol = tokenSymbol;                               // Set the symbol for display purposes
        decimals = decimalUnits;                            // Amount of decimals for display purposes
    }

    /* Send coins */
    function transfer(address _to, uint256 _value) {
        if (balanceOf[msg.sender] < _value) throw;           // Check if the sender has enough
        if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows
        balanceOf[msg.sender] -= _value;                     // Subtract from the sender
        balanceOf[_to] += _value;                            // Add the same to the recipient
        Transfer(msg.sender, _to, _value);                   // Notify anyone listening that this transfer took place
    }

    /* Allow another contract to spend some tokens in your behalf */
    function approve(address _spender, uint256 _value)
        returns (bool success) {
        allowance[msg.sender][_spender] = _value;
        tokenRecipient spender = tokenRecipient(_spender);
        return true;
    }

    /* Approve and then comunicate the approved contract in a single tx */
    function approveAndCall(address _spender, uint256 _value, bytes _extraData)
        returns (bool success) {    
        tokenRecipient spender = tokenRecipient(_spender);
        if (approve(_spender, _value)) {
            spender.receiveApproval(msg.sender, _value, this, _extraData);
            return true;
        }
    }

    /* A contract attempts to get the coins */
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
        if (balanceOf[_from] < _value) throw;                 // Check if the sender has enough
        if (balanceOf[_to] + _value < balanceOf[_to]) throw;  // Check for overflows
        if (_value > allowance[_from][msg.sender]) throw;   // Check allowance
        balanceOf[_from] -= _value;                          // Subtract from the sender
        balanceOf[_to] += _value;                            // Add the same to the recipient
        allowance[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;
    }

    /* This unnamed function is called whenever someone tries to send ether to it */
    function () {
        throw;     // Prevents accidental sending of ether
    }
}

contract MyAdvancedToken is owned, token {

    uint256 public sellPrice;
    uint256 public buyPrice;
    uint256 public totalSupply;

    mapping (address => bool) public frozenAccount;

    /* This generates a public event on the blockchain that will notify clients */
    event FrozenFunds(address target, bool frozen);

    /* Initializes contract with initial supply tokens to the creator of the contract */
    function MyAdvancedToken(
        uint256 initialSupply,
        string tokenName,
        uint8 decimalUnits,
        string tokenSymbol,
        address centralMinter
    ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {
        if(centralMinter != 0 ) owner = centralMinter;      // Sets the owner as specified (if centralMinter is not specified the owner is msg.sender)
        balanceOf[owner] = initialSupply;                   // Give the owner all initial tokens
    }

    /* Send coins */
    function transfer(address _to, uint256 _value) {
        if (balanceOf[msg.sender] < _value) throw;           // Check if the sender has enough
        if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows
        if (frozenAccount[msg.sender]) throw;                // Check if frozen
        balanceOf[msg.sender] -= _value;                     // Subtract from the sender
        balanceOf[_to] += _value;                            // Add the same to the recipient
        Transfer(msg.sender, _to, _value);                   // Notify anyone listening that this transfer took place
    }


    /* A contract attempts to get the coins */
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
        if (frozenAccount[_from]) throw;                        // Check if frozen            
        if (balanceOf[_from] < _value) throw;                 // Check if the sender has enough
        if (balanceOf[_to] + _value < balanceOf[_to]) throw;  // Check for overflows
        if (_value > allowance[_from][msg.sender]) throw;   // Check allowance
        balanceOf[_from] -= _value;                          // Subtract from the sender
        balanceOf[_to] += _value;                            // Add the same to the recipient
        allowance[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;
    }

    function mintToken(address target, uint256 mintedAmount) onlyOwner {
        balanceOf[target] += mintedAmount;
        totalSupply += mintedAmount;
        Transfer(0, this, mintedAmount);
        Transfer(this, target, mintedAmount);
    }

    function freezeAccount(address target, bool freeze) onlyOwner {
        frozenAccount[target] = freeze;
        FrozenFunds(target, freeze);
    }

    function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner {
        sellPrice = newSellPrice;
        buyPrice = newBuyPrice;
    }

    function buy() payable {
        uint amount = msg.value / buyPrice;                // calculates the amount
        if (balanceOf[this] < amount) throw;               // checks if it has enough to sell
        balanceOf[msg.sender] += amount;                   // adds the amount to buyer's balance
        balanceOf[this] -= amount;                         // subtracts amount from seller's balance
        Transfer(this, msg.sender, amount);                // execute an event reflecting the change
    }

    function sell(uint256 amount) {
        if (balanceOf[msg.sender] < amount ) throw;        // checks if the sender has enough to sell
        balanceOf[this] += amount;                         // adds the amount to owner's balance
        balanceOf[msg.sender] -= amount;                   // subtracts the amount from seller's balance
        if (!msg.sender.send(amount * sellPrice)) {        // sends ether to the seller. It's important
            throw;                                         // to do this last to avoid recursion attacks
        } else {
            Transfer(msg.sender, this, amount);            // executes an event reflecting on the change
        }               
    }
}

Enclose the address in quotes. 地址用引号引起来。

change this myContract.balanceOf(0xf32200730fdaca83f18171015c0be2a6342d46c4) to this myContract.balanceOf("0xf32200730fdaca83f18171015c0be2a6342d46c4") 将此myContract.balanceOf(0xf32200730fdaca83f18171015c0be2a6342d46c4)更改为此myContract.balanceOf("0xf32200730fdaca83f18171015c0be2a6342d46c4")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用以太坊RPC获取令牌余额? - Get token balance with Ethereum RPC? 如果在以太坊地址中发现任何余额,我该如何设置停止? - how can I set to stop if found any balance in ethereum addresses? 如何在JAVA中为帐户确认邮件创建Web令牌 - How can I create a web token for account confirmation mail in JAVA 我已经删除了“ Cookies”的令牌和csrftoken,为什么还有它们? - I have removed the `Cookies`'s token and csrftoken, why still have them? 以太坊ERC20代币合约通过重新混合部署的合约地址添加到钱包时返回0.00代币余额 - Ethereum ERC20 Token contract returns 0.00 token balance when it added to wallet by remix deployed contract address 如何检查API令牌是否仍然有效 - How can I check if an API token is still valid 我如何在 Corda 中将令牌从节点移动到帐户 - How can i move token from node to account in Corda 如何使用Vimeo访问令牌访问令牌执行私有视频搜索,但不知道如何使用它 - How do I perform a private video search with the Vimeo access token access token but no idea how to use it 如何在Drupal 7中创建自定义标记? - How do I create a custom token in Drupal 7? Facebook访问令牌在注销后仍然有效 - facebook access token still valid after logout
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM