比特币吸金之道系列文章,由计算机黑客发明的网络货币,无国界,无政府,无中心。没有政府滥发货币,没有通货膨胀。在全球计算机网络中,自由的实现货币兑换和流通。
本系列文章只讲程序和策略,不谈挖矿…
关于作者:
- 张丹(Conan), 程序员/Quant: Java,R,Nodejs
- blog: http://blog.fens.me
- email: bsspirit@gmail.com
转载请注明出处:
http://blog.fens.me/bitcoin-eth-ropsten-token
前言
2017年,不断出现各种ICO项目,大量的币其实都是基于以太坊的公链,包装一个智能合约,远看很高深,近看很简单。以太坊作为区块链2.0时代的奠基者,功不可没,确实极大程度上推动了数字货币的兴起。
作为一个程序员,要关注新的领域和新的技术,区块链就是需要了解的一个新领域。自己把发币流程操作一遍,会有新的感悟。Ropsten是一个以太坊的测试网络,我们在这个网络进行发币实验。
目录
- 以太坊上发token
- 完成转账交易
1. 以太坊上发token
基于以太坊的公链发币,真的不难!工具已经被高度自动化地集成了,唯一花时间的事情,就是我们了解发token的操作原理。那么接下来,就让我们开始发token吧。
直接在正式的以太坊网络发币是要花钱的,我们先在测试网络上,把这个流程跑一遍,之后再用正式网络进行发币。
在以太坊上发token,操作步骤有如下几步进行:
- 打开VPN,建立国际访问通道。
- 打开Chrome浏览器,安装MetaMask插件
- 在MetaMask中,切换到Ropsten Test Network,并创建钱包
- 从测试网络中,获得测试的eth。
- 打开Remix 在线合约编程环境
- 编写 solidity 智能合约代码
- 编译,配置,提交ABI到测试网络
- 切换到 MetaMask 进行付费
- 生成合约,发币成功。
我们开始具体执行每个步骤的操作:
1.1 打开VPN,建立国际访问通道。
程序员都知道,不多说了。VPN服务器搭建,请参考文章在Ubuntu上安装IPSEC VPN服务,在Ubuntu上安装PPTP VPN服务
1.2 打开Chrome浏览器,安装MetaMask插件。
安装好后,启用插件就行了,在chrome浏览器右上角会出现的一个小狐狸的图标。
1.3 在MetaMask中,切换到Ropsten Test Network,并创建钱包
打开MetaMask钱包,进行注册和登录。
然后,从 Main Ethereum Network 切换到测试网络 Ropsten Test Network 连接成功。
1.4 从测试网络中,获得测试的eth。
由于发token是需要进行付费(Gas),我们要先从测试网络中获得ETH。在MetaMask中,点击buy,就会弹出一个新的网页,用于获得测试网络中的token。点击faucet栏目下面的,request 1 eth from faucet的按钮,申请ETH。在user栏目中,会自动匹配我们的钱包地址(address)和余额(balnacen)。
在最下面transcation栏目中,会产生一笔ETH的转账信息,从faucet测试网络中,生成一笔转账到我们自己的钱包中。同时,我们可以查看这笔的完整转账信息。
我们多点几次,在钱包中就会获得多个ETH,现在我们钱包就4个ETH了,就可以用来付发币的费用了。
1.5 打开Remix 在线合约编程环境
Remix是一个在线的以太合约的编程环境,https://remix.ethereum.org/。
Remix分为4个部分:
- 文件管理:用于管理文件结构
- 代码编写:是一个编辑器,用于编写 solidity 代码
- 日志输入:运行可以后,用打印出运行日志
- 命令控制:支持各种命令,如 编译,运行,发布等
1.6 编写 solidity 智能合约代码
我们可以定义一个自己的智能合约,如果不熟悉,可以找到一个已经发币的合约的例子,基于他合约代码的改一下。从etherscan上找一个合约。
复制它的代码,然后改一下名字。:-) (这种做法仅限于测试用,你不知道他的合约中有没有什么漏洞,所以最好还是仔细读读代码)
// Abstract contract for the full ERC 20 Token standard
// https://github.com/ethereum/EIPs/issues/20
pragma solidity ^0.4.23;
contract Token {
uint256 public totalSupply; // 供给总量
function balanceOf(address _owner) public constant returns (uint256 balance);
function transfer(address _to, uint256 _value) public returns (bool success);
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
function approve(address _spender, uint256 _value) public returns (bool success);
function allowance(address _owner, address _spender) public constant returns (uint256 remaining);
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
library SafeMath { // 安全计算函数
function add(uint256 a, uint256 b) internal constant returns (uint256) {
uint256 c = a + b;
assert(c>=a && c>=b);
return c;
}
}
// 省略
contract FENS is StandardToken { // 符合ERC20标准
function () public {
revert();
}
using SafeMath for uint256;
string public name = "fens.me Token";
uint8 public decimals = 18;
string public symbol = "FENS";
// 省略
在代码中,contract FENS is StandardToken 这里,定义自己的合约的名字,叫FENS,同时简称symbol叫FENS。基于以太坊普遍要求遵守的规律,都符合ERC20的标准,有统一的命名规范,使用一致的变量和函数等,方便之后的交易所或钱包等其他应用的接入。
1.7 编译,配置,提交ABI到测试网络
接下来,通过reminx的命令控制的操作界面,进行是代码编译,做配置定义总发行量,然后生成ABI(Application Binary Interface)文件,用于部署到以太坊网络中。
按照上图所示,从左到右的操作顺序。
右1图,写完代码后,使用Compile标签中,点击start to compile进行代码编译,如果有错误,会直接显示错误信息。
在2图,编译完成后,切换到Run标签,看到Account对应的地址为,MetaMask中钱包的地址,这个插件让操作变得方便。FENS下拉框,显示的是这个Token的名字,在Deploy右边有一个文本框,是需要我们设置总供给量的,我在这个填入1,000,000,000,那么Token的总发行量为1亿。点击Deploy按钮,进行程序部署。
在3图,切换到 MetaMask会提示付费,这是由于我们使用ETH的网络,每一次的操作对应底层操作来说,是会经过矿工打包和确认的过程,所以不管是新发token还是转账,都是需要给矿工支付一定费用的。这里我自己输入5 GWei,以目前我的ETH市场价,这个大约值7.85USD。因为是在测试网络,所以多点少点,都无所谓啦。然后点击SUMBIT,确认支付,矿工进行打包。
在Remix的日志界面,就出现程序进行打包的日志。
1.8 生成合约,发币成功。
通过上面的链接,我们查看在以太坊测试网络中的执行情况,生成合约地址为:0xc6b08f0d67948854dff544b2093ccf726b7b17fd”
回到MetaMask界面,选择 ADD TOKEN 把刚才的生成的合约地址加入到当前创建者的钱包中,这样在钱包中就会出现已生成的token。
同时,我们也可以在以太坊的测试网络中,查到这个token的情况,0xc6b08f0d67948854dff544b2093ccf726b7b17fd”
这样就实现了,合约生成,完成了发token的整理流程。
2. 转账交易
接下来,我们就是发刚刚发的FENS代币,进行转账,转给别人的账户。由于MetaMask没有太多的转账功能,那么还需要使用一个在线转账的工具myetherwallet,用来完成转账的操作。
导出私钥 & 新建钱包
- Account1 钱包地址:0xbA390993F3Ee624528c7EE9F280e2656613c7A81
- Account2 钱包地址:0x35C8aEC449a8dE933C2d4beEFCc4490933F9f122
在myetherwallet,选择Network Repsten(infura.io)测试网络上进行注册和登录
选择 Send Ether & Tokens 的标签,通过私钥的方式导入账户。
接下来进行转账,输入Account2的钱包地址,和转账数量,选择FENS的代币,并设置Gas的消耗。
网页上,会弹出查看交易确认的选项。点击Yes,就开始进行交易。
完成进行交易确认后,查看2个账户的信息,FENS币,Account1账户少了50000币,Account2账户中多的50000个币。
我们可以通过以太坊网络,找到这条确认的消息。
发Token听起来很Cool,其实操作一遍还是觉得很Cool。你要不要自己也来发个Token?新的视角和新的思考方式,一起迎接新的挑战吧。