以太坊代币合约的发布与调用

1.进入控制台

geth --datadir data console

2.编写合约

s='contract zhaoxiCoin{address public minter;mapping(address=>uint) public balances;event Sent(address from,address to,uint amount);function zhaoxiCoin(){minter=msg.sender;}function mint(address receiver,uint amount){if(msg.sender!=minter) return;balances[receiver]+=amount;}function send(address receiver,uint amount){if(balances[msg.sender]<amount)return;balances[msg.sender]-=amount;balances[receiver]+=amount;Sent(msg.sender,receiver,amount);}}'

D42BC942-63DD-4CD6-9C50-3F6455863C2E.jpg

3.编译合约

compiled=web3.eth.compile.solidity(s);

FB72B872-FC95-4E8F-8AF8-02C51CB37795.jpg

4.部署合约

contract=web3.eth.contract(compiled.zhaoxiCoin.info.abiDefinition);

8208BF0B-A639-4734-8E5E-AC313058D047.jpg

2.准备两个账户并解锁账户
要在区块链上创建一个合约,要把以太坊虚拟机代码作为数据给空地址发送交易。需要准备一个有余额并激活的以太坊账户。

如果以前没有账户,就用personal.newAccount('123456')回车创建账户,123456是密码

如果已经有账户了
user1=eth.accounts[0] personal.unlockAccount(user1) user2=eth.accounts[1] personal.unlockAccount(user2)

EC896DF7-B525-4E9E-8AD6-6040EA4878AE.jpg

查看一下user1里面是否有以太币,如果没有的话,就挖一下矿(miner.start() miner.stop()就可以了,有的话就不用挖矿了)
eth.getBalance(user1)

demo=contract.new({from:web3.eth.accounts[0],data:compiled.zhaoxiCoin.code, gas:1000000});

CE93D6D3-E5BC-4B83-B042-F6DA322D9868.jpg

注意:1.在没有挖矿之前倒是第二行address是没有地址的
2 最后一行这个是合约部署的交易地址)

4.启动挖矿
miner.start()

9B074002-A893-49C6-B688-14CBB6ED9B0E.jpg

注意:1.true下边那一行表示在第238个区块上提交了一个智能合约
5.停止挖矿
miner.stop()

这个时候合约就已经部署到区块链上了,下面对这个合约进行调用

5 调用合约

1.查看一下合约信息
demo

854088F0-196D-4B51-9FC6-B275D8D45609.jpg

2.记录合约的地址
address="0x9867a3fd2d9e9e261af20a961777d5e910b6e888"
3.调用合约
g=eth.contract(demo.abi).at(address)

E45D05F5-79FC-42B1-877C-A520D6AC768B.jpg

4.终于开始转账啦

(1)首先注意以下两点


2F2C35EC-005B-4E74-8846-DB9C5E6B1827.jpg

注意 有这种错误就再解锁一下账户

DB72566A-2F56-4625-8A6D-BB5C2B2B3FFE.jpg

这个时候两个账户里面的代币都是0
(2)先给自己的账户转点钱
g.mint(user1,10000,{from:user1}) miner.start() miner.stop()
注意:一定要挖矿,不然balance一直都是0,不会变的

D6542B80-E5CD-4175-995D-E84D8EB43195.jpg

(3)看一下自己的账户是否有钱了
g.mint(user1,10000,{from:user1}) g.balances(user1)

5965272E-22E5-40EF-A3B8-541C6294C45F.jpg

(4)往别的账户转账并查看结果
`
g.send(user2,10,{from:user1})
miner.start()
miner.stop()
g.balances(user2)

`


05D4B759-407F-41E2-8809-7686AB43D277.jpg

就这样,最简单的代币合约就完成了。巨开心。

以太坊初学者,一些区块链的概念我还不是很清楚,不过,磕磕绊绊终于把这个代币合约完成了发布和调用,感谢帮助过我的qq群大神们,希望这篇文章能给以太坊刚入门的您一些帮助。希望能和区块链爱好者们多交流,文章有问题的地方欢迎大家指出。
ps 如果账户转账的话,
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(1, "ether")})
miner.start()
miner.stop()
查询余额,就会发现从0账户转账到了1

geth版本1.5.4 ,
代币的代码来源于http://wangxiaoming.com/blog/2016/05/03/blockchain-tech-introduciton-to-smart-contracts/
过程参考了http://www.devutil.cn/353.html

推荐阅读更多精彩内容