美文网首页以太坊
以太坊发token最佳实践

以太坊发token最佳实践

作者: 流芳不待人 | 来源:发表于2018-04-01 01:13 被阅读49次

发代币历经波折,现在将过程记录如下。win适用,mac/linux更适用。

必备技能:1.科学上网条件。2.会使用npm 3.有足够的以太坊(0.2eth足矣)

发token其实是部署智能合约。要经历5个步骤:

  • 搭建编译环境
  • 编写智能合约
  • 编译合约
  • 部署合约
  • 与合约交互

准备工作

搭建编译环境

写智能合约用的最多的是solidity语言,然而编译环境实在是懒得吐槽。有在线编译,有框架编译。不过最推荐的是搭建在本地的在线编译

在线编译

online版本 可能卡,可能慢

最好用最不好用的都是这个东西……好用是因为确实好用,不好用是因为科学上网都解决不了他慢的问题。所以最好下载本地版的。

#安装remix
cnpm install remix-ide -g

#导入有eth的账户,要用这个账户来部署合约呢
geth account import private.key

#本地启动geth 开启rpc和控制台
#这里起的是一个孤立节点,是为了不与其他节点同步数据
geth --nodiscover console --rpc --rpcapi 'web3,eth,debug' --rpcport 8545 --rpccorsdomain '*'

#另开一个控制台!另开一个控制台!另开一个控制台!
#启动remix,默认链接本地8545端口的geth的rpc(就是上面启动那个)
remix-ide

浏览器访问 http://127.0.0.1:8080 就能看到编译器了。虽然也是比较慢,但总算是能用了。

其他编译器

truffle

开发框架,不仅带编译功能,还带部署功能。然而东西略复杂。不推荐用。如果非要用。自行google

solc

之前没调通,现在调通了,有空补上。这个也蛮好用的。

编写智能合约

官方推荐的solidity

solidity更新了好几版了。学起来不算太难。不过以发币为目的就不需要学太深入了。直接用ERC20官方模板就可以。

合约就在https://github.com/ConsenSys/Tokens/tree/master/contracts/eip20

编译

浏览器访问 http://127.0.0.1:8080 打开编译器。

左上角有个文件夹的标识,打开到下载的目录。选中三个文件一起打开。

点击右上角start to compile

可能会报一些黄色的warning 不需要理会,只要不是红色error就可以。

然后在start to compile下面的选择框中选中EIP20,然后点击旁边的Details按钮(可能要等几秒钟)。

然后弹出框展示的就是部署需要的数据。需要的是BYTECODEABI。而WEB3DEPLOYBYTECODEABI包装成了js脚本,可以直接在geth控制台执行来部署合约。只需要稍加修改就可以使用。

接下来开始部署。

部署

部署合约是要消耗eth的,消耗的eth被称为gas,又叫汽油,手续费。部署由矿工来搞定,gas就是要支付的酬劳。

部署合约的操作要转换成多个step,每个step的执行都要消耗gas。最终消耗的eth量由两个参数来控制:gasPricegas。前者表示每个step消耗的eth,后者表示限定step的最多执行数。最终消耗的eth是 step * gas

本文部署gasPrice设定的是2GWei,略慢,可设定到4GWei。

但是gas的值一定要足够大,因为gas限定了执行step数,如果step执行完而合约没部署完,那么操作回滚,gas不退。

这是第一个坑,我第一次设置的gas为50000,结果gas清零,部署失败!因此gas不妨设置得尽可能大。之所以说尽肯能,是因为gas的上限受限于两个条件:1.以太坊规定的上限,2.持有的eth量

gas设置的前提是要求账户有足够的eth,eth保有量必须大于设置的gas*gasPrice。用不完的gas会退回来。这就意味着部署系统的账户,必须能用eth.getBalance()查到余额,并且余额大于gas*gasPrice

假设由eth.accounts[0]来部署,我们称为部署账户

部署分两步:

  1. 加入变量,生成部署的操作码
  2. 支付gas,将操作码广播

不仅是部署,任何在以太坊网络的操作都分两步:生成操作码,广播操作码。

部署有两种方式:

  1. 在以太坊节点,执行上面复制的WEB3DEPLOY代码
  2. 在以太坊节点获取部署的操作码,用metamask广播部署

第1种方法要求节点必须能查到eth.accounts[0]的余额。因为广播时会检查广播人的余额。如果查不到是无法广播的。只有节点数据同步到一定程度才能查到余额。所谓的一定程度是指:账户所在的数据块被同步。一般来说这是个短时间内无法完成的事情。

所以只能看第2个部署的方法

生成操作码

WEB3DEPLOY中是直接部署的语句,需要修改成获取操作码的语句。先看下WEB3DEPLOY的代码

var _initialAmount = /* var of type uint256 here */ ; //要发的token的数量
var _tokenName = /* var of type string here */ ; //token的名字
var _decimalUnits = /* var of type uint8 here */ ; //token精度
var _tokenSymbol = /* var of type string here */ ; //token的symbol
var eip20Contract = web3.eth.contract([{...}]); //contract括号内是abi,此处有省略
var eip20 = eip20Contract.new(                  //部署语句
   _initialAmount,
   _tokenName,
   _decimalUnits,
   _tokenSymbol,
   {
     from: web3.eth.accounts[0], 
     data: '0x6060604xxxxxxb0029',  //bytecode,此处有省略
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })

在上面我们已经把部署账户的私钥添加进来,就用这个账户来生成操作码。然后在上面打开的geth终端中执行下面命令。

这里要注意精度。假设发行100万个token,最小单位是0.01。那么精度就是100,token的总量应该是 100万*100,即 100000000。

//从上面获取abi(第5行)和bytecode(第12行)赋值到下面两个变量
> var abi = [{.....}]
> var bytecode = '0x6060604xxxxxxb0029'
> var c = eth.contract(abi)
> var cData = {from:eth.accounts[0], data:bytecode} //部署账户
> var dcode = c.new.getData('100000000', 'myEth', 100, 'METH', cData)

执行过后上面的dcode就是要广播的操作码了。

metamask部署

chrome安装metamask插件后,导入账户。然后点击send。

  • Recipient Address 留空
  • amount 填0
  • transaction Data中填上操作码。点击next
  • GasLimit: 5000000 GasPrice:3Gwei 点击submit 等待成功

部署需要一段时间。部署完成后点击部署成功的合约,可以跳到etherscan.io查看区块。这里要拿到合约地址。

查看token

还是因为数据同步的问题,只能在metamask中查看。

buy和send按钮下面有个token。点开后选择add token,填上获取到的合约地址,就能查看token余额了。

与合约交互见原文

相关文章

  • 以太坊发token最佳实践

    发代币历经波折,现在将过程记录如下。win适用,mac/linux更适用。 必备技能:1.科学上网条件。2.会使用...

  • 以太坊发token教程

    2017年出现了非常多的数字货币。但是这种货币是如何产生的,作为一个程序员。怀着对发币的好奇,自己动手把发币的流程...

  • 常见的几大主流公有链(上)

    以太坊 Token:ETH 数量:9000万+ 以太坊Token每年通胀1000多万,从最开始的7200万到现在的...

  • 99%的token都在归零ing

    以太坊给了人人发token的机会, 也给了骗子大肆敛财的机会。 人人都在说通正,人人都在发token,人人都认为t...

  • 通证和代币

    通证和代币 1.Token 是代币吗? 因为以太坊的 ERC20 协议,人们都可以在以太坊上发行自己的 token...

  • 007-043-越写越快乐之浅谈以太坊Token标准

    今天越写越快乐系列的文章为大家分享以太坊的Token标准,也就是在以太坊平台上发行Token的实现标准,目前从EI...

  • 2018-04-26新闻

    昨日部分币所发出公告,暂停基于以太坊ERC-20发行的Token的充值功能。 据了解好像是SMT的Token的问题...

  • 手把手教你发行自己的以太坊ERC20 Token

    前言: 发行以太坊ERC20 Token。网络上其他的文章,不太详细,以下是我对本次讲座内容的实践 一、安装环境 ...

  • ETH以太坊发布 ERC20 Token 步骤

    目标 在以太坊测试网络中发布自己的Token代币,做转账测试。 用到的工具: chrome 下以太坊钱包 Meta...

  • 教你如何创建自己的数字货币

    前言 目前市场上很多token都是基于以太坊的ERC-20代币,ERC20是以太坊定义的一个代币标准。通过以太坊智...

网友评论

    本文标题:以太坊发token最佳实践

    本文链接:https://www.haomeiwen.com/subject/yffocftx.html