将以太坊封装为 ERC20
将以太坊封装为 ERC20 TOKEN
很多 DAPP 都是在处理 ERC20接口的 token, 其实很容易将以太坊封装为 ERC20,这样就可以统一处理,
至少我目前在做的雷电网络就是这么处理的.
主要内容复制在网络
https://programtheblockchain.com/posts/2018/05/26/wrapping-ether-in-an-erc20-token/
直接上代码,核心部分是
pragma solidity ^0.4.24;
import "baseerc20token.sol";
contract EtherToken is BaseERC20Token {
constructor(string _name, string _symbol)
BaseERC20Token(0, 18, _name, _symbol) public
{
}
function buy() public payable {
balanceOf[msg.sender] += msg.value;
totalSupply += msg.value;
emit Transfer(address(0), msg.sender, msg.value);
}
function sell(uint256 amount) public {
require(balanceOf[msg.sender] >= amount, "Insufficient balance.");
balanceOf[msg.sender] -= amount;
totalSupply -= amount;
msg.sender.transfer(amount);
emit Transfer(msg.sender, address(0), amount);
}
}
它提供了以太坊和 ERC20互换的接口,换成 ERC20以后就很简单了.
实际上baseerc20token.sol只是一个非常标准的 ERC20实现
pragma solidity ^0.4.23;
contract BaseERC20Token {
mapping (address => uint256) public balanceOf;
string public name;
string public symbol;
uint8 public decimals;
uint256 public totalSupply;
event Transfer(address indexed from, address indexed to, uint256 value);
constructor (
uint256 _totalSupply,
uint8 _decimals,
string _name,
string _symbol
)
public
{
name = _name;
symbol = _symbol;
decimals = _decimals;
totalSupply = _totalSupply;
balanceOf[msg.sender] = _totalSupply;
emit Transfer(address(0), msg.sender, _totalSupply);
}
function transfer(address to, uint256 value) public returns (bool success) {
require(balanceOf[msg.sender] >= value);
balanceOf[msg.sender] -= value;
balanceOf[to] += value;
emit Transfer(msg.sender, to, value);
return true;
}
event Approval(address indexed owner, address indexed spender, uint256 value);
mapping(address => mapping(address => uint256)) public allowance;
function approve(address spender, uint256 value)
public
returns (bool success)
{
allowance[msg.sender][spender] = value;
emit Approval(msg.sender, spender, value);
return true;
}
function transferFrom(address from, address to, uint256 value)
public
returns (bool success)
{
require(value <= balanceOf[from]);
require(value <= allowance[from][msg.sender]);
balanceOf[from] -= value;
balanceOf[to] += value;
allowance[from][msg.sender] -= value;
emit Transfer(from, to, value);
return true;
}
}
这样简单部署,就可以在雷电网络中将以太坊当做普通的 ERC20 TOKEN进行处理了.
将以太坊封装为 ERC20的更多相关文章
- 以太坊智能合约[ERC20]发币记录
以太坊被称为区块链2.0,就是因为以太坊在应用层提供了虚拟机,使得开发者可以基于它自定义逻辑,通常被称为智能合约,合约中的公共接口可以作为区块链中的普通交易执行.本文就智能合约发代币流程作一完整介绍( ...
- 以太坊上发行ERC20代币
ERC20 代币生成 环境 虚拟主机: ubuntu 18虚拟机 宿主主机: win10; ip:192.168.0.160 1.部署以太坊 1.1 安装GO 安装go,并编译geth 将下载好的go ...
- 以太坊ERC20代币开发
以太坊ERC20代币开发首先需要对以太坊,代币,ERC20,智能合约等以太坊代币开发中的基本概念有了解.根据我们的示例代码就可以发行自己的以太坊代币. 什么是ERC20 可以把ERC20简单理解成以太 ...
- 一键创建以太坊ERC20代币教程
30秒极速创建以太坊ERC20代币 傻瓜式创建,界面化创建,自动创建代币,简单好用 合约采用新版 5.10 新版合约编译器,合约代码100%安全无任何漏洞 下面是详细的使用和创建教程 1.点击创建ER ...
- 通过以太坊发行代币(token)
2017年开始,区块链ICO项目层出不穷,市场热度一波更胜一波,很多ICO都是通过以太坊智能合约发行自己的代币(token),具体怎样才能发行代币呢?本文进行具体详细的介绍. 准备工作 以太坊官网ER ...
- 零门槛,包教会。让你在5分钟内使用以太坊ERC20智能合约发行属于自己的空气币
前言 目前区块链是互联网中最最火的风口,没有之一.我周围的很多朋友也加入了“炒币”行列,但很不幸,几乎都被“割韭菜”了.而经过我的几天研究,发现,如果自己要发行一种空气币,简直太简单了.只需要下面几个 ...
- 以太坊 ERC20 与 ERC721 深度解密
去年11月份的一段时间,Ethereum网络突然变的特别拥堵,原因是兴起了一款以太坊养猫的Dapp游戏,超级可爱的猫形象,再加上配种,繁殖和拍卖等丰富的玩法,风靡了币圈. 一时间币圈大大小小的人都在撸 ...
- 以太坊erc20转账失败的情况和原因
以太坊erc20转账失败的情况和原因 eth转账失败有多种情况,除了手续费过低以外(Out of gas),众筹额度满了(Bad instruction)也会失败链上转账有可能失败,转账失败转账的币退 ...
- 以太坊ERC20代币合约案例
一.ERC20代币合约与web3调用 ERC20代币合约在小白看来觉得很高大上,但其实就是一个代币的定义标准,方便其他dapp统一调用各种代币的方法.如图: 二.ERC20合约标准 [官方链接] co ...
随机推荐
- java.输入水果的编号,求它对应的单价
总结:可以if-else 循环或switch循环 package com.b; import java.util.Scanner; /*以下4种水果的单价分别是3.00元/公斤,2.50元/公斤,4. ...
- selenium自动化浏览器后台运行headless模式
通过selenium做WEB自动化的时候,必须要启动浏览器, 浏览器的启动与关闭会影响执行效率. 当我们在自己电脑运行代码时,还会影响做别的事情. 鉴于这种情况,Google针对Chrome浏览器新增 ...
- datatables ajax异步分页
$('#sample_1').dataTable({ "sAjaxSource": "../table/data", // "bProcessing& ...
- 如何安装pip
1.安装python之后进入到python的安装目录,里面有个Scripts文件夹,打开文件夹里面有个easy_install.exe的文件 2.打开控制台,到easy_install.exe的文件地 ...
- zabbix的sendEmail配置
zabbix的sendEmail配置 [root@hongquan scripts]# yum install sendmail[root@hongquan soft]# tar xvzf sendE ...
- Dynamics CRM 2011 Web Service
Data Services: SOAP Endpoint REST Endpoint Capabilities Assign Records Retrieve Metadata Execute M ...
- Kali下Ahmyth的使用
项目地址:https://github.com/AhMyth/AhMyth-Android-RAT 下载后打开 安装nodejs,nodejs在官网下载,下载完后解压,切到bin目录下 设置全局 ro ...
- leetcode690
class Solution { public: int getImportance(vector<Employee*> employees, int id) { ; map<int ...
- Eclipse 代码风格配置
代码风格配置:
- sql合并列
oralce写法: select WM_CONCAT(A.title) as citys from tmpcity A sql server写法: select stuff((select ','+A ...