先从最小化的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的核心功能,包括构造,挖矿、转账等。
但是,我们知道以太坊的核心是账户体系和智能合约,真正有意义的是在各个账户之间可以流通的代币合约。有了这些代币,我们才能用于众筹、众包等各种商业应用的实现。