[英]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)
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.