您的位置:首页 > 其它

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

2018-01-04 16:42 316 查看


先从最小化的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的核心功能,包括构造,挖矿、转账等。

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


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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  以太坊