区块链学堂(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的核心功能,包括构造,挖矿、转账等。
但是,我们知道以太坊的核心是账户体系和智能合约,真正有意义的是在各个账户之间可以流通的代币合约。有了这些代币,我们才能用于众筹、众包等各种商业应用的实现。
下篇将介绍一个包含账户的代币合约
相关文章推荐
- 区块链学堂(13):Browser-solidity 4–Token代币合约
- 区块链学堂(12):Browser-solidity 3–数组增删改查的合约
- 区块链学堂(14):Browser-solidity 5–Token基于账户的代币合约
- 区块链学堂(14):Browser-solidity 5–Token基于账户的代币合约
- 区块链学堂(10):Browser-solidity
- 区块链学堂(4):以太坊基本概念及工具Geth、Browser-solidity、Mist
- 区块链学堂(11):Browser-solidity 2–右侧的奥秘
- 区块链学堂(4):以太坊基本概念及工具Geth、Browser-solidity、Mist
- 区块链学堂(11):Browser-solidity 2–右侧的奥秘
- 区块链学堂(10):Browser-solidity
- 区块链学堂(4):以太坊基本概念及工具Geth、Browser-solidity、Mist
- 区块链学堂(11):Browser-solidity 2–右侧的奥秘
- 区块链学堂(18):Mist 4–代币Token合约详解
- 区块链智能合约solidity入门
- 区块链学堂(28):用Mapping来实现一个简单的代币合约
- 区块链入门(5)Truffle 项目实战,Solidity IDE, 智能合约部署
- 区块链学堂(17):Mist 3–合约页面&部署合约
- 以太坊笔记 使用 Browser-solidity 在 Go-Ethereum1.7.2 上进行简单的智能合约部署
- 区块链学堂(2):最简单的智能合约
- 区块链智能合约solidity语言实现AVL树的插入