区块链学堂(18):Mist 4–代币Token合约详解

た 入场券 2022-06-02 05:13 387阅读 0赞

代币合约代码如下:

  1. pragma solidity 0.4.8;
  2. contract Token {
  3. mapping (address => uint) public balancesOf;
  4. address public owner;
  5. function Token() {
  6. owner = msg.sender;
  7. balancesOf[msg.sender] = 10000;
  8. }
  9. function transfer(address _to, uint _value) {
  10. if (balancesOf[msg.sender] < _value) throw; //避免转移出去的代币超过当前的存货
  11. if (balancesOf[_to] + _value < balancesOf[_to]) throw; //避免自己调用自己,或者递归调用
  12. balancesOf[msg.sender] -= _value;
  13. balancesOf[_to] += _value;
  14. }
  15. function mint(uint _amount) {
  16. balancesOf[owner] += _amount;
  17. }
  18. }
  • 从上面的代码中我们可以看到,总共有两个属性balancesOfowner
  • 另外还有两个方法mint()transfer()

智能合约的属性balancesOf & owner

我们在合约界面点开Token合约。

  • 可以看到左侧是该合约两个属性balancesOf & owner
    import_mist3_09.png
  • 构造函数中写了代码owner=msg.sender,因此谁创建合约,owner这个变量就是msg.sender。此处owner=account1 也就是account 1创建了本合约。
  • balancesOf[msg.sender] = 10000; 所以owner在数组balancesOf中的值就是10000
  • 同理的balancesOf[Main Account] 就应该为0,我们从geth中可以轻松得到eth.accounts[0] & eth.accounts[1]的地址。

    eth.accounts
    [“0x48ad44beba68a981e103d28b2bd5777ef21ba0e3”, “0x66f44c178a2337e40355bd4b5442229cda24f803”]

然后查看变量balancesOf["0x48ad44beba68a981e103d28b2bd5777ef21ba0e3"] 如图所示:
import_mist4_01.png

智能合约的方法 mint()

  • 方法 mint() 中的代码是 balancesOf[owner] += _amount;, 因此无论输入多少,增加值都只会增加到balancesOf[owner]的数据上去。
  • 我们选择右侧的方法Mint, 设置amount = 1000, 如下图所示

import_mist4_02.png

  • 点击Execute按钮, 如下图所示

import_mist4_03.png

  • 带锁icon的是以太坊普通账户,而带合约的是智能合约账户。之前说过智能合约也是一个特殊的账户。
  • 同样执行任何transaction都需要gas,谁执行谁承担gas,在上面选择中,我们选择了main account那么相应的gas就由main account承担
  • raw data: 是代表传递给该合约的具体数据,这个里面的包含了一个短地址, 代表执行function mint(),还有一个传递的数据1000,也就是16进制0x3e8.
  • 输入密码后,点击send transaction,然后等待一段挖矿的时间之后,结果如下图所示, 可以看到balancesOf[owner] 增加了1000;

import_mist4_04.png

智能合约的方法 transfer()

  • 方法transfer() 中的核心代码是

    1. balancesOf[msg.sender] -= _value;
    2. balancesOf[_to] += _value;

    也就是说msg.sender的账户会减少一定数额,而_to会增加一定数额
    因此我们调用transfer密码,并设置如下

import_mist4_05.png

  • 点击execute后,输入账号密码,执行该方法transfer()
  • 执行的结果如下:balancesOf[account1]=10700, balancesOf[main account]=300
  • 如下图所示:

import_mist4_06.png

import_mist5_07.png

至此我们已经介绍了Mist中的账户页面,合约页面,以及部署合约和合约的属性和方法

下一章我们将重点介绍一下以太坊的另一个核心:Transaction


QQ群:559649971 (区块链学堂粉丝群)
个人微信:steven_k_colin

stevenkcolin.jpg

获取最新区块链咨询,请关注《以太中文网》微信公众号:以太中文网

ethchinese.jpg

发表评论

表情:
评论列表 (有 0 条评论,387人围观)

还没有评论,来说两句吧...

相关阅读