将以太坊封装为 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)publicreturns (bool success){allowance[msg.sender][spender] = value;emit Approval(msg.sender, spender, value);return true;}function transferFrom(address from, address to, uint256 value)publicreturns (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进行处理了.

转载于:https://www.cnblogs.com/baizx/p/9174862.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript高级程序设计学习之数值转换 |Number(),parseInt(),parseFloat()

2019独角兽企业重金招聘Python工程师标准>>> 将非数值转换成数值的函数有三个&#xff1a;Number(),parseInt(),parseFloat(); 小记tip&#xff1a;Number()可以用于任何数据类型&#xff1b;parseInt(),parseFloat()针对的是将字符串&#xff1b; Number()的转换规…

软件的可维护性

可以把软件的可维护性定性地定义为&#xff1a;维护人员理解、改正、改动或改进这个软件的难易程度。 提高可维护性是支配软件工程方法学所有步骤的关键目标。

服务器内存延迟,内存带宽、延迟性能测试

内存带宽、延迟性能测试华为FusionServer 2488H V5服务器主板集成了48个内存插槽&#xff0c;但送测机器配备有限。由于送测机型整合了四通道内存控制器&#xff0c;这样使得平台的内存带宽得到了明显的提升。SiSoftware Sandra Lite 2011中提供了内存带宽、内存延迟和缓存性能…

Git学习的最佳教程

身为网页设计师或者网页开发者的你&#xff0c;可能已经听说过Git这个正快速成长的版本控制系统。它由GitHub维护&#xff1b;GitHub是一个开放性的、存储众人代码的网站。如果你想学习如何使用Git&#xff0c;请参考本文。在文章最后&#xff0c;我们罗列了其他Git学习资源。 …

如何使用idea快速创建SpringBoot项目

文章目录一、二、三、四、五、一、 二、 三、 四、 五、

解决pip安装模块报错Cannot fetch index base URL http://pypi.python.org/simple/

产生这个问题的原因呢和github一样,因为他们用的cdn被墙.经小伙伴反馈,解决办法如下. 通过指定国内镜像源来安装: pip --trusted-host 镜像源 install 模块名 -i 镜像源路径 例如:pip --trusted-host pypi.doubanio.com install paramiko -i http://pypi.doubanio.com/simple 注…

闪光css,CSS实现的一闪而过的图片闪光效果

只需要两个html元素和一个css变换&#xff0c;我就能创造出我自己的闪光效果。让我们来实现它&#xff01;呈现光泽图片下面就是这张addy在他博客上使用的图片&#xff1a;比我需要的要大一些&#xff0c;但你可以把它裁剪一些。注意&#xff1a;左边的那张是纯白色的&#xff…

什么是可重用性

所谓重用&#xff08;reuse&#xff09;是指同一事物不做修改或稍加改动就在不同环境中多次重复使用。大量使用可重用的软件构件来开发软件&#xff0c;可以从下述两个方面提高软件的可维护性。 (1) 通常&#xff0c;可重用的软件构件在开发时都经过很严格的测试&#xff0c;可…

MATLAB矩阵操作和算术运算符

矩阵的表示 矩阵之间用空格或者是逗号间隔 矩阵可以拼接&#xff08;可以用矩阵拼接&#xff09; 实部矩阵和虚部矩阵构成复数矩阵&#xff0c;一一对应。 冒号表达式&#xff1a; 格式&#xff1a; e1:e2:e3 e1表示初始值 e2表示步长 e3表示终止值 e2省略则e2为1 lins…

循序渐进学好编程,不要太急!!!

软件开发人员是一个日新月异的领域—–IT中的大师&#xff0c;今天的编程方式与明天的编程或许截然不同&#xff0c;技术在不断地革新&#xff0c;新语言、新平台的如雨后春笋般出现、更好的解决方案的冒出&#xff0c;因此我们需要跟得上节奏&#xff0c;我们别无选择&#xf…

django学习之路

1. 菜鸟教程 http://www.runoob.com/django/django-first-app.html 2. https://blog.csdn.net/Sunshine_ZCC/article/details/73918408转载于:https://www.cnblogs.com/haimishasha/p/9189199.html

x230无线网卡驱动服务器版,ThinkPad X230网卡驱动

ThinkPad X230网卡驱动是一款专为ThinkPad X230打造的无线网卡驱动程序&#xff0c;当然&#xff0c;这款驱动也支持其他机型&#xff0c;包括ThinkPad X220,X220i,X220 Tablet,X220i Tablet等等&#xff0c;如果您的笔记本电脑属于下列所列机型中的一款&#xff0c;欢迎您来欧…

文档

文档是影响软件可维护性的决定因素。由于长期使用的大型软件系统在使用过程中必然会经受多次修改&#xff0c;所以文档比程序代码更重要。软件文档应该满足下述要求&#xff1a; (1) 必须描述如何使用这个系统&#xff0c;没有这种描述时即使是最简单的系统也无法使用。 (2)…

学成在线--0.项目概述

文章目录0.前言1.功能架构2.技术架构3.技术栈4.开发步骤0.前言 当前市场的在线教育模式多种多样&#xff0c;包括&#xff1a;B2C、C2C、B2B2C等业务模式&#xff0c;学成在线采用B2B2C业务模式&#xff0c;即向 企业或个人提供在线教育平台提供教学服务&#xff0c;老师和学生…

【Java学习】JDBC可以再深一点理解

JDBC驱动程序 JDBC驱动程序是JDBC API中实现定义的接口。JDBC是java语言中的与数据库连接的接口。也就是说JDBC是Java API&#xff0c;使得Java可以与数据库进行连接&#xff0c;而JDBC驱动程序是JDBC API&#xff0c;驱动JDBC进一步与数据库进行交互。 例如&#xff1a;使用JD…

想成为优秀的技术人员你必须做到的几件事情

找工作的这几天&#xff0c;收获颇多。思考得最多的问题可能就是对未来的一个规划。无意中看到下面几条经验&#xff0c;发现和自己想的也差不多&#xff0c;就分享出来。我要求自己做到这些&#xff0c;同时也希望对您也有所帮助。 1、保持学习 一个非常重要的观点是&#x…

第 五 课 golang语言变量

1 变量三种声明&#xff1a; &#xff08;第一种的var和类型都是多余&#xff1b; 第二种最简洁&#xff0c;但是第二种只能用在函数中&#xff0c;不能是全局变量的声明&#xff09; 第一种&#xff1a; var v_name v_type&#xff08;注意顺序&#xff09;v_name value pack…

wordpress 评论ajax,WordPress教程 WordPress实现提交评论ajax翻页效果教程

WordPress提交评论ajax翻页的效果会很大的提高用户体验度&#xff0c;虽然我们一般的个人WordPress博客评论也不会有很多&#xff0c;但是用户体验至上嘛&#xff0c;所以WordPress主题站小编为大家分享WordPress实现提交评论ajax翻页效果教程&#xff0c;希望能给大家能用得上…

Lombok的使用方法

文章目录0.Lombok简介1.在项目中添加Lombok的依赖2.在IDEA开发工具中添加Lombok插件0.Lombok简介 Lombok是一个实用的java工具&#xff0c;使用它可以消除java代码的臃肿&#xff0c;Lombok提供一系列的注解&#xff0c;使用这些注解可 以不用定义getter/setter、equals、构造…

【Python3网络爬虫开发实战】4-解析库的使用-3 使用pyquery

在上一节中&#xff0c;我们介绍了Beautiful Soup的用法&#xff0c;它是一个非常强大的网页解析库&#xff0c;你是否觉得它的一些方法用起来有点不适应&#xff1f;有没有觉得它的CSS选择器的功能没有那么强大&#xff1f;如果你对Web有所涉及&#xff0c;如果你比较喜欢用CS…