ERC20 代币生成

环境

虚拟主机: ubuntu 18虚拟机

宿主主机: win10; ip:192.168.0.160

1.部署以太坊

1.1 安装GO

安装go,并编译geth

将下载好的golang包上传到root目录。

sudo apt-get install -y build-essential golang

1.2 下载源代码编译

git clone https://github.com/ethereum/go-ethereum
cd go-ethereum
make geth
# 添加快捷访问
cp build/bin/geth /usr/bin/geth

1.3 部署节点

1.3.1 创建节点目录

创建数据存储目录,分别为8001-8002以此类推

mkdir -p /node/node8001
mkdir -p /node/node8002

1.3.2 创建账号

geth  account  new - -datadir  "/node/node8001"

执行后会要求设置账户的unlock口令,请记住配置的口令. 会生成一个密码保存文件夹(keystore), 内含一个密码保存文件,名字如下

UTC--2018-12-13T02-58-07.160085261Z--f8c5cad127f7053e143204450c18b6bc1f353c9b

1.3.3 生成创世文件

生成文件名为genesis.json的文件, 内容如下:

{
"config": {
"chainId": 115,
"homesteadBlock": 0,
"byzantiumBlock": 12,
"eip155Block": 0,
"eip158Block": 0
},
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty":"0x0001",
"alloc":{"f8c5cad127f7053e143204450c18b6bc1f353c9b":{"balance":"990000000000000000000000000000"}},
"timestamp":"0x5b3bcd2f",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData":"",
"gasLimit":"0xffffffff"
}

1.3.4 根据创世文件信息,创建节点

/usr/bin/gethfw --datadir /node/node8001 init ./genesis.json
/usr/bin/gethfw --datadir /node/node8002 init ./genesis.json

1.3.5 启动节点

单独启一个终端来启动节点

/usr/bin/geth --targetgaslimit 4294967295 --identity "node8001" --datadir /node/node8001  --port 8801 --rpc --rpcaddr "0.0.0.0" --rpcport 8145 --rpccorsdomain "http://192.168.0.160:8081" --rpcapi "admin,debug,eth,net,personal,shh,txpool,web3"  --networkid 115  --nodiscover --mine

单独启一个终端来启动节点

/usr/bin/geth --targetgaslimit 4294967295 --identity "node8002" --datadir /node/node8002  --port 8802 --rpc --rpcaddr "0.0.0.0" --rpcport 8546 --rpccorsdomain "http://192.168.0.160:8081" --rpcapi "admin,debug,eth,net,personal,shh,txpool,web3"  --networkid 115 --nodiscover

此时,节点已经启动OK, 我们可以来查看一下节点状态了:

先前的两个终端就让他们挂在那里执行程序,另外开启一个终端,执行如下命令:

/usr/bin/gethfw attach ipc:/node/node8001/geth.ipc

然后会自动进入控制台了, 输入admin命令,可以查看当前链的信息,输出类似如下:

{

datadir: "/node/node8001",

nodeInfo: {

​ enode: "enode://9e7c5f604f49638524b3d95078bb4644e4e379f6fa532094ccd1bbd9c975e81a1e66fd602530c274240ee0f563f917fc4de0665e3e5abeaf021f3efaa0565eeb@[::]:8801?discport=0",

​ ip: "::",

​ listenAddr: "[::]:8801",

​ name: "Geth/node8001/v1.8.3-stable/linux-amd64/go1.10.4",

​ ports: {

​ discovery: 0,

​ listener: 8801

​ },

​ protocols: {

​ eth: {

​ config: {...},

​ difficulty: 78940001,

​ genesis: "0xa6ebc49109d376f9afc21fb6ab9d4b62da2442c6d81e6ab90633a03e851693d6",

​ head: "0xafe6c156e1920039334e4a470aa80c7d8ad9202fdf62a38ed2ec27e076685949",

​ network: 115

......

至此, 以太坊私链算是启动完成了。

2.部署Remix

参考https://github.com/ethereum/remix-ide 文档, 开始部署。

2.1 下载Remix-IDE源码

git clone https://github.com/ethereum/remix-ide.git

2.2 安装Remix-IDE

cd remix-ide

2.3 启动Remix-IDE

npm start

此时,就可以在localhost:8080访问RemixIDe了。

3.部署ERC20代币

通过在浏览器打开localhost:8080地址, 进入Remix-IDE.

3.1 在新建智能合约

加入如下代码

pragma solidity ^0.4.16;

interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; }

contract TokenERC20 {
string public name;
string public symbol;
uint8 public decimals = 18; // 18 是建议的默认值
uint256 public totalSupply; mapping (address => uint256) public balanceOf; //
mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public {
totalSupply = initialSupply * 10 ** uint256(decimals);
balanceOf[msg.sender] = totalSupply;
name = tokenName;
symbol = tokenSymbol;
} function _transfer(address _from, address _to, uint _value) internal {
require(_to != 0x0);
require(balanceOf[_from] >= _value);
require(balanceOf[_to] + _value > balanceOf[_to]);
uint previousBalances = balanceOf[_from] + balanceOf[_to];
balanceOf[_from] -= _value;
balanceOf[_to] += _value;
Transfer(_from, _to, _value);
assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
} function transfer(address _to, uint256 _value) public {
_transfer(msg.sender, _to, _value);
} function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(_value <= allowance[_from][msg.sender]); // Check allowance
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
} function approve(address _spender, uint256 _value) public
returns (bool success) {
allowance[msg.sender][_spender] = _value;
return true;
} function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) {
tokenRecipient spender = tokenRecipient(_spender);
if (approve(_spender, _value)) {
spender.receiveApproval(msg.sender, _value, this, _extraData);
return true;
}
} function burn(uint256 _value) public returns (bool success) {
require(balanceOf[msg.sender] >= _value);
balanceOf[msg.sender] -= _value;
totalSupply -= _value;
Burn(msg.sender, _value);
return true;
} function burnFrom(address _from, uint256 _value) public returns (bool success) {
require(balanceOf[_from] >= _value);
require(_value <= allowance[_from][msg.sender]);
balanceOf[_from] -= _value;
allowance[_from][msg.sender] -= _value;
totalSupply -= _value;
Burn(_from, _value);
return true;
}
}

3.2 编译智能合约

在compile页中, 选中Auto Compile, 进行自动编译智能合约, (应用不会出现红色错误提示)

3.3 部署合约

在Run页中, Environment中,选中inject web3(前提是, 已经安装好了metamash插件,并且已经导入了账号,配置后账号环境)。

在account项, 选择一个有币的账号

最后通过点击deploy按钮来部署合约, 在部署前, 可填写构造函数的参数如 20000000, "TESTINT COIN", "TC"

最终完成部署

以太坊上发行ERC20代币的更多相关文章

  1. 以太坊智能合约[ERC20]发币记录

    以太坊被称为区块链2.0,就是因为以太坊在应用层提供了虚拟机,使得开发者可以基于它自定义逻辑,通常被称为智能合约,合约中的公共接口可以作为区块链中的普通交易执行.本文就智能合约发代币流程作一完整介绍( ...

  2. 一键创建以太坊ERC20代币教程

    30秒极速创建以太坊ERC20代币 傻瓜式创建,界面化创建,自动创建代币,简单好用 合约采用新版 5.10 新版合约编译器,合约代码100%安全无任何漏洞 下面是详细的使用和创建教程 1.点击创建ER ...

  3. erc20代币合约

    看这篇文章需要对以太坊,智能合约,代币等概念有基本的了解. 什么是ERC20 可以把ERC20简单理解成以太坊上的一个代币协议,所有基于以太坊开发的代币合约都遵守这个协议.遵守这些协议的代币我们可以认 ...

  4. 以太坊ERC20代币开发

    以太坊ERC20代币开发首先需要对以太坊,代币,ERC20,智能合约等以太坊代币开发中的基本概念有了解.根据我们的示例代码就可以发行自己的以太坊代币. 什么是ERC20 可以把ERC20简单理解成以太 ...

  5. 10分钟 5步 发布以太坊 ERC20 代币

    1.安装 METAMASK Brings Ethereum to your browser 一个可以浏览器上进行操作的以太坊钱包,推荐 Chrome. Chrome 插件安装地址: https://c ...

  6. 以太坊ERC20代币合约案例

    一.ERC20代币合约与web3调用 ERC20代币合约在小白看来觉得很高大上,但其实就是一个代币的定义标准,方便其他dapp统一调用各种代币的方法.如图: 二.ERC20合约标准 [官方链接] co ...

  7. 将以太坊封装为 ERC20

    将以太坊封装为 ERC20 TOKEN 很多 DAPP 都是在处理 ERC20接口的 token, 其实很容易将以太坊封装为 ERC20,这样就可以统一处理, 至少我目前在做的雷电网络就是这么处理的. ...

  8. ERC20代币(ETH)空投工具-创建代币

    代币空投工具地址:http://tool.ethhelp.cn 适用币种: ETH和ERC20代币 使用建议: ERC代币空投,直投,ETH批量转小号 优势介绍: 1.可节省30%手续费 2.转几千地 ...

  9. Solidity合约间的调用 -Solidity通过合约转ERC20代币

    Solidity通过合约转ERC20代币   ERC20代币并不能像Ether一样使用sendTo.transfer(amt)来转账,ERC20代币只能通过token中定义的transfer方法来转账 ...

随机推荐

  1. C++ 命名管道 与Winform跨进程通信

    以下是.NET命名管道解决方案中几个主要的类. NamedPipeNative:这个类和kernal32.dll联系实现命名管道的通信,其中包含一些常用方法和常量. NamedPipeWrapper ...

  2. JS前端编码规范

    转自<前端编码规范之JavaScript>,网址:http://www.cnblogs.com/hustskyking/p/javascript-spec.html 一个是保持代码的整洁美 ...

  3. LeGO-LOAM编译、运行

    LeGO-LOAM Github 地址:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM 相关依赖安装 1. ROS 2.GTSAM 下载gtsa ...

  4. gevent模块学习(三)

    3. Group类,常用于不限制数量的管理异步任务的分组且可搜集运行结果 g = gevent.pool.Group(*args) -> Group 说明: 创建一个组对象,其实就是一个不限gr ...

  5. springboot国际化

    Session方式的国际化/** * @descripte 请求中如果有{@Param lang},则按照lang的格式国际化 * @descripte 请求中如果无{@Param lang},但se ...

  6. 转发:Webstorm 2017 破解激活下载

    有用过一下,但是觉得比sublime重量太多,但是随着后来用node的开始,发现需要打造个web前端神器才能满足我的需求,于是乎重拾webstorm,目前发现11是新的版本,对node,npm支持性更 ...

  7. learning makefile string example

  8. eregi

    eregi (PHP 4, PHP 5) eregi — 不区分大小写的正则表达式匹配 说明 int eregi ( string $pattern , string $string [, array ...

  9. go ethereum源码分析 PartIV Transaction相关

    核心数据结构: core.types.transaction.go type Transaction struct { data txdata // caches hash atomic.Value ...

  10. python之路-变量

    变量定义的规则: - 变量名只能是字母.数字.或下划线的任意组合 - 变量名的第一个字符不能是数字 - 以下关键字不能声明为变量名  ['and','as','assert','break','cla ...