区块链学堂(13):Browser-solidity 4–Token代币合约

先从最小化的Token合约开始;

pragma solidity 0.4.9;
contract Token {
  function Token() {

  }
}

之前有说过,solidity是类js的语言,和所有的面向对象语言一样,solidity也拥有最基本的构造函数。
上面的代码就是一个最简单化的一个Token合约,function Token() {}是该contract 的构造函数。

该合约在browser-solidity上可以执行成功,这里就不演示了。

我们给这个Token代币合约添加一个数字数组,并赋予一个初值。

pragma solidity 0.4.9;

contract Token2 {
  uint[] public balancesOf;
  function Token() {
    balancesOf.push(100);
    balancesOf.push(200);
  }
}

这个合约很简单,先定义了一个public的变量balancesOf, 然后在构造阶段,就给这个变量添加两个初始值。100 & 200

用户先点击Token这个构造函数,然后再输入0和1,然后点击balancesOf 可以分别看到两个数值。

给该Token合约添加一个账户转账功能 transfer()

pragma solidity 0.4.9;
contract Token3 {
  uint[] public balancesOf;
  function Token() {
    balancesOf.push(100);
    balancesOf.push(200);
  }

  function transfer(uint _from, uint _to, uint _amount) {
    balancesOf[_from] -= _amount;
    balancesOf[_to] += _amount;
  }
}

transfer功能的代码就是把一定量_amount 从_from转移到_to;

该功能在browser solidity调试成功,如下图所示:

给Token代币合约,增加一个挖矿方法 mint()

如上面的代码所示,我们可以看到,只有在构造函数的时候balancesOf才有赋值,之后的transfer无论如何操作,总量始终不变。因此我们可以增加一个挖矿方法,增加的金额默认都归纳到第一个账号中 balancesOf[0]中。

pragma solidity 0.4.9;

contract Token4 {
  uint[] public balancesOf;
  function Token() {
    balancesOf.push(100);
    balancesOf.push(200);
  }

  function transfer(uint _from, uint _to, uint _amount) {
    balancesOf[_from] -= _amount;
    balancesOf[_to] += _amount;
  }

  function mint(uint value) {
    balancesOf[0] += value;
  }
}

通过mint() 我们就可以随意的给balancesOf[0] 增加代币了。该代码有兴趣的同学,请在browser-solidity上实验。

注意以上代码只用于学习使用,很多场景还未考虑,例如transfer中没有考虑_amount>当前账户余额的场景。不可用于商业化应用。

本文初步介绍了Token的核心功能,包括构造,挖矿、转账等。

但是,我们知道以太坊的核心是账户体系和智能合约,真正有意义的是在各个账户之间可以流通的代币合约。有了这些代币,我们才能用于众筹、众包等各种商业应用的实现。

下篇将介绍一个包含账户的代币合约

你可能感兴趣的:(区块链)