以太坊- Ethereum

以太坊开发(十)Mist使用:调用合约

2018-03-04  本文已影响492人  yuyangray

这篇文章来自以太中文网:区块链学堂(18):Mist 4–代币Token合约详解,我会对使用过程中自己遇到的问题进行补充。

pragma solidity 0.4.20;
contract Token {
  mapping (address => uint) public balancesOf;
  address public owner;
  function Token() public {
    owner = msg.sender;
    balancesOf[msg.sender] = 10000;
  }

  function transfer (address _to, uint _value) public {
    require (balancesOf[msg.sender] > _value);  //避免转移出去的代币超过当前的存货
    require (balancesOf[_to] + _value > balancesOf[_to]);  //避免自己调用自己,或者递归调用
    balancesOf[msg.sender] -= _value;
    balancesOf[_to] += _value;
  }

  function mint(uint _amount) public {
    balancesOf[owner] += _amount;
  }
}

智能合约的属性balancesOf & owner

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

> eth.accounts
["0x48ad44beba68a981e103d28b2bd5777ef21ba0e3", "0x66f44c178a2337e40355bd4b5442229cda24f803"]

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

智能合约的方法 mint()

方法 mint()中的代码是 balancesOf[owner] += _amount;, 因此无论输入多少,增加值都只会增加到balancesOf[owner]的数据上去。

我们选择右侧的方法Mint, 设置amount = 1000, 如下图所示

点击Execute按钮, 如下图所示

(注:所有的交易都需要在Geth挖矿,等待所有区块确认。)

智能合约的方法 transfer()

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

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

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

点击execute后,输入账号密码,执行该方法transfer()

执行的结果如下:
balancesOf[account1]=10700,
balancesOf[main account]=300

如下图所示:

(注:可以看到这两个账户的金额,在钱包中并没有变化,变化的是在该合约中的余额。)

参考:区块链学堂(18):Mist 4–代币Token合约详解
作者:以太中文网

上一篇下一篇

猜你喜欢

热点阅读