将以太坊封装为 ERC20 TOKEN

很多 DAPP 都是在处理 ERC20接口的 token, 其实很容易将以太坊封装为 ERC20,这样就可以统一处理,

至少我目前在做的雷电网络就是这么处理的.

主要内容复制在网络

https://programtheblockchain.com/posts/2018/05/26/wrapping-ether-in-an-erc20-token/

直接上代码,核心部分是

  1. pragma solidity ^0.4.24;
  2. import "baseerc20token.sol";
  3. contract EtherToken is BaseERC20Token {
  4. constructor(string _name, string _symbol)
  5. BaseERC20Token(0, 18, _name, _symbol) public
  6. {
  7. }
  8. function buy() public payable {
  9. balanceOf[msg.sender] += msg.value;
  10. totalSupply += msg.value;
  11. emit Transfer(address(0), msg.sender, msg.value);
  12. }
  13. function sell(uint256 amount) public {
  14. require(balanceOf[msg.sender] >= amount, "Insufficient balance.");
  15. balanceOf[msg.sender] -= amount;
  16. totalSupply -= amount;
  17. msg.sender.transfer(amount);
  18. emit Transfer(msg.sender, address(0), amount);
  19. }
  20. }

它提供了以太坊和 ERC20互换的接口,换成 ERC20以后就很简单了.

实际上baseerc20token.sol只是一个非常标准的 ERC20实现

  1. pragma solidity ^0.4.23;
  2. contract BaseERC20Token {
  3. mapping (address => uint256) public balanceOf;
  4. string public name;
  5. string public symbol;
  6. uint8 public decimals;
  7. uint256 public totalSupply;
  8. event Transfer(address indexed from, address indexed to, uint256 value);
  9. constructor (
  10. uint256 _totalSupply,
  11. uint8 _decimals,
  12. string _name,
  13. string _symbol
  14. )
  15. public
  16. {
  17. name = _name;
  18. symbol = _symbol;
  19. decimals = _decimals;
  20. totalSupply = _totalSupply;
  21. balanceOf[msg.sender] = _totalSupply;
  22. emit Transfer(address(0), msg.sender, _totalSupply);
  23. }
  24. function transfer(address to, uint256 value) public returns (bool success) {
  25. require(balanceOf[msg.sender] >= value);
  26. balanceOf[msg.sender] -= value;
  27. balanceOf[to] += value;
  28. emit Transfer(msg.sender, to, value);
  29. return true;
  30. }
  31. event Approval(address indexed owner, address indexed spender, uint256 value);
  32. mapping(address => mapping(address => uint256)) public allowance;
  33. function approve(address spender, uint256 value)
  34. public
  35. returns (bool success)
  36. {
  37. allowance[msg.sender][spender] = value;
  38. emit Approval(msg.sender, spender, value);
  39. return true;
  40. }
  41. function transferFrom(address from, address to, uint256 value)
  42. public
  43. returns (bool success)
  44. {
  45. require(value <= balanceOf[from]);
  46. require(value <= allowance[from][msg.sender]);
  47. balanceOf[from] -= value;
  48. balanceOf[to] += value;
  49. allowance[from][msg.sender] -= value;
  50. emit Transfer(from, to, value);
  51. return true;
  52. }
  53. }

这样简单部署,就可以在雷电网络中将以太坊当做普通的 ERC20 TOKEN进行处理了.

将以太坊封装为 ERC20的更多相关文章

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

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

  2. 以太坊上发行ERC20代币

    ERC20 代币生成 环境 虚拟主机: ubuntu 18虚拟机 宿主主机: win10; ip:192.168.0.160 1.部署以太坊 1.1 安装GO 安装go,并编译geth 将下载好的go ...

  3. 以太坊ERC20代币开发

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

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

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

  5. 通过以太坊发行代币(token)

    2017年开始,区块链ICO项目层出不穷,市场热度一波更胜一波,很多ICO都是通过以太坊智能合约发行自己的代币(token),具体怎样才能发行代币呢?本文进行具体详细的介绍. 准备工作 以太坊官网ER ...

  6. 零门槛,包教会。让你在5分钟内使用以太坊ERC20智能合约发行属于自己的空气币

    前言 目前区块链是互联网中最最火的风口,没有之一.我周围的很多朋友也加入了“炒币”行列,但很不幸,几乎都被“割韭菜”了.而经过我的几天研究,发现,如果自己要发行一种空气币,简直太简单了.只需要下面几个 ...

  7. 以太坊 ERC20 与 ERC721 深度解密

    去年11月份的一段时间,Ethereum网络突然变的特别拥堵,原因是兴起了一款以太坊养猫的Dapp游戏,超级可爱的猫形象,再加上配种,繁殖和拍卖等丰富的玩法,风靡了币圈. 一时间币圈大大小小的人都在撸 ...

  8. 以太坊erc20转账失败的情况和原因

    以太坊erc20转账失败的情况和原因 eth转账失败有多种情况,除了手续费过低以外(Out of gas),众筹额度满了(Bad instruction)也会失败链上转账有可能失败,转账失败转账的币退 ...

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

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

随机推荐

  1. java.输入水果的编号,求它对应的单价

    总结:可以if-else 循环或switch循环 package com.b; import java.util.Scanner; /*以下4种水果的单价分别是3.00元/公斤,2.50元/公斤,4. ...

  2. selenium自动化浏览器后台运行headless模式

    通过selenium做WEB自动化的时候,必须要启动浏览器, 浏览器的启动与关闭会影响执行效率. 当我们在自己电脑运行代码时,还会影响做别的事情. 鉴于这种情况,Google针对Chrome浏览器新增 ...

  3. datatables ajax异步分页

    $('#sample_1').dataTable({ "sAjaxSource": "../table/data", // "bProcessing& ...

  4. 如何安装pip

    1.安装python之后进入到python的安装目录,里面有个Scripts文件夹,打开文件夹里面有个easy_install.exe的文件 2.打开控制台,到easy_install.exe的文件地 ...

  5. zabbix的sendEmail配置

    zabbix的sendEmail配置 [root@hongquan scripts]# yum install sendmail[root@hongquan soft]# tar xvzf sendE ...

  6. Dynamics CRM 2011 Web Service

    Data Services:   SOAP Endpoint REST Endpoint Capabilities Assign Records Retrieve Metadata Execute M ...

  7. Kali下Ahmyth的使用

    项目地址:https://github.com/AhMyth/AhMyth-Android-RAT 下载后打开 安装nodejs,nodejs在官网下载,下载完后解压,切到bin目录下 设置全局 ro ...

  8. leetcode690

    class Solution { public: int getImportance(vector<Employee*> employees, int id) { ; map<int ...

  9. Eclipse 代码风格配置

    代码风格配置:

  10. sql合并列

    oralce写法: select WM_CONCAT(A.title) as citys from tmpcity A sql server写法: select stuff((select ','+A ...