将以太坊封装为 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进行处理了.

最新文章

  1. webpack初体验
  2. 转:Android开发环境搭建
  3. 自己写的一个关于Linq to Entity 动态查询的例子
  4. php header setcookie headers_sent函数 函数检查 HTTP 标头是否已被发送以及在哪里被发送
  5. IO端口和IO内存
  6. js上传图片及预览功能
  7. EasyUI的DataGrid 分页栏英文改中文解决方案
  8. GPS定位,经纬度附近地点查询–C#实现方法
  9. Ant快速入门(四)-----Ant的任务(Task)
  10. windows7环境下 硬盘安装ubuntu 12.04 server版
  11. highcharts:根据Y的数值范围,动态改变图形的填充颜色
  12. 转:c语言EOF是什么?(及getchar()和putchar用法)
  13. Java web入门
  14. 竞赛基础篇---部分和问题(DFS)
  15. 【原创】NVIC中断
  16. 动画之一:视图动画 View Animation
  17. PHP 中解析 url 并得到 url 参数
  18. glove理解
  19. github如何删除新建仓库(致新手)
  20. .NetCore Cap 结合 RabbitMQ 实现消息订阅

热门文章

  1. 1126 Eulerian Path
  2. Linux的启动级别
  3. python开发mysql:Pymysql模块
  4. DVWA平台v1.8-SQL注入(low级别)
  5. maven 安装 过程
  6. ASP.NET Core应用到Windows Service中
  7. Just a Hook(树状数组)
  8. Ant 执行 exec cmd.exe 时路径包含空格的问题
  9. 如何用CURL将文件下载到本地指定文件夹
  10. OSCache简介