基于以太坊发行代币TOKEN
一、背景说明
在2015年11月份,以太坊推出了目前通行的ERC20token标准,按照这个标准,每个团队都可以开发出自己的基于以太坊的代币,然后通过公开发售这些代币,筹集资金,这就是我们所说的ICO。
具体来说,其实每一种代币本身就是一个智能合约,像其它智能合约一样运作,只是限定了合约内容:这个合约维护着相关的数据库,当外部账户或者合约账户发送消息要求从A转账到B,它就执行相应的操作。或者说,它就是一个账本。同时,它是兼容以太坊钱包的。所以团队只要照着ERC20写好程序,就能拥有自己的基于以太坊的代币。
ERC20协议
ERC20和代币一同出现, ERC20是以太坊定义的一个代币标准。是一种发行代币合约必须要遵守的协议,该协议规定了几个参数——发行货币的名称,简称,发行量,要支持的函数等,只有支持了该协议才会被以太坊所认同。
ERC20标准代码如下:
// https://github.com/ethereum/EIPs/issues/20
contract ERC20 {
function totalSupply() constant returns (uint totalSupply);
function balanceOf(address _owner) constant returns (uint balance);
function transfer(address _to, uint _value) returns (bool success);
function transferFrom(address _from, address _to, uint _value) returns (bool success);
function approve(address _spender, uint _value) returns (bool success);
function allowance(address _owner, address _spender) constant returns (uint remaining);
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);
}
其中
function totalSupply() constant returns (uint totalSupply);
以上方法表示获取总的发行量
function balanceOf(address _owner) constant returns (uint balance);
以上方法表示获取_owner的账户余额
function transfer(address _to, uint _value) returns (bool success);
以上方法表示当前账户转_value数量的代币至_to
function transferFrom(address _from, address _to, uint _value) returns (bool success);
以上方法表示从_from账户转_value数量的代币至_to
function approve(address _spender, uint _value) returns (bool success);
以上方法表示允许_spender从你的账户转_value数量的代币
function allowance(address _owner, address _spender) constant returns (uint remaining);
以上方法表示_spender被允许从_owner提取的金额数量,是一个查询函数
event Transfer(address indexed _from, address indexed _to, uint _value);
以上事件在转账的时候被触发
event Approval(address indexed _owner, address indexed _spender, uint _value);
以上事件表示在调用approve方法时被触发
二、环境准备
前提:科学上网工具
1、下载以太坊钱包
进入ethereum下载钱包
[图片上传失败...(image-3c8339-1535797918908)]
2、选择测试网络
由于在以太坊上部署执行智能合约是需要真实的ETH作为gas燃料费的,所以我们选择在测试环境进行,测试环境的ETH可以通过其他手段获取到
打卡钱包主页面是长这样的,我们可以在开发——网络中选择Rinkeby - Test network测试网络
[图片上传失败...(image-dd0df6-1535797918908)]
3、创建账户
点击上图中的ADD ACCOUNT,设置密码即可完成账户的创建
[图片上传失败...(image-ace0ac-1535797918908)]
4、获取测试ETH
我们可以在https://www.rinkeby.io/#faucet中获取测试的以太币
[图片上传失败...(image-1a5580-1535797918908)]
获取的方式有三种,我选择的是Google Plus,操作步骤如下:
进入https://plus.google.com/,没有账户的创建一个账号即可,新鲜事分享
在发布页面,将自已以太坊账户的地址复制到文本中发布
[图片上传失败...(image-c6b612-1535797918908)]
发布完成之后,在首页点击转发,进入转发详情页,复制详情页的URL
[图片上传失败...(image-9566ef-1535797918908)]
[图片上传失败...(image-95410d-1535797918908)]
在https://www.rinkeby.io/#faucet的输入框中填入上个步骤获取到的URL,再选择送币的类型,我们选择3 Ethers/8 hours,表示此次领取3ETH,8个小时之后可再次领取。
[图片上传失败...(image-4fc2fc-1535797918908)]
领取完之后,回到我们的钱包界面就可以看到3ETH已经到账了
[图片上传失败...(image-607d3e-1535797918908)]
此次交易转账在etherscan中也是能查询到的
三、编写&&部署智能合约
在智能合约的界面中,我们选择部署一个新的智能合约
[图片上传失败...(image-3ed459-1535798174106)]
在https://www.ethereum.org/token复制THE CODE下方的那段完整代码,粘贴到SOLIDITY CONTRACT SOURCE CODE栏目
[图片上传失败...(image-8e5de2-1535798174106)]
粘贴过去之后,它会自动编译,可以看到是有报错的,可能是语法和版本有冲突,我们按照提示把function TokenERC20改为constructor即可。
[图片上传失败...(image-b62042-1535798174106)]
在编译完成之后,我们填写好token的相关信息,再把下面的手续费拉到FASTER,这样做的原因是能更快的被打包,然后再点击DEPLOY,在弹出的界面中输入密码即可。
接下来要做就是稍等几分钟等待合约部署完成
[图片上传失败...(image-8c84df-1535798174106)]
四、基于发行的代币在账户之间的转账
我们可以在钱包中再创建一个账户,基于这两个账户之间做转账,当然,也可以转给你的同事朋友的账户地址
[图片上传失败...(image-12692b-1535798174106)]
点击左上方的SEND,在页面中选择填写好相关信息即可开始转账,在TO的输入框中输入收款方的账户地址,AMOUNT为此次转账的金额,在ETHER的一栏,我们选择自已发行的代币,同样的,手续费越高转账越快,点击SEND完成转账
[图片上传失败...(image-f8eb93-1535798174106)]
[图片上传失败...(image-98df9d-1535798174106)]
可以看到,我们转入的1000MTK币已经到account2的账户中。
五、思考
通过上述步骤,我们可以发现基于以太坊发行代币是一件多么简单的事情,但是代币发行之后可以用来干嘛,怎么与我们的实际应用相结合,这才是我们需要思考的问题。