基于以太坊发行代币TOKEN

字数 1408阅读 454

一、背景说明

在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

在发布页面,将自已以太坊账户的地址复制到文本中发布
[图片上传失败...(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

三、编写&&部署智能合约

在智能合约的界面中,我们选择部署一个新的智能合约
[图片上传失败...(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的账户中。

五、思考

通过上述步骤,我们可以发现基于以太坊发行代币是一件多么简单的事情,但是代币发行之后可以用来干嘛,怎么与我们的实际应用相结合,这才是我们需要思考的问题。

推荐阅读更多精彩内容