【从0学习Solidity】41. WETH
【从0学习Solidity】41. WETH
- 博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。
- 关注我们的主页,探索全栈开发,期待与您一起在移动开发的世界中,不断进步和创造!
- 本文收录于 不写代码没饭吃 的学习汇报系列,大家有兴趣的可以看一看。
- 欢迎访问我们的微信公众号:不写代码没饭吃,获取更多精彩内容、实用技巧、行业资讯等。您关注的是我们前进的动力!
这一讲,我们将学习WETH
–带包装的ETH
。
什么是WETH
?
WETH
(Wrapped ETH)是ETH
的带包装版本。我们常见的WETH
,WBTC
,WBNB
,都是带包装的原生代币。那么我们为什么要包装它们?
在2015年,ERC20标准出现,该代币标准旨在为以太坊上的代币制定一套标准化的规则,从而简化了新代币的发布,并使区块链上的所有代币相互可比。不幸的是,以太币本身并不符合ERC20
标准。WETH
的开发是为了提高区块链之间的互操作性 ,并使ETH
可用于去中心化应用程序(dApps)。它就像是给原生代币穿了一件智能合约做的衣服:穿上衣服的时候,就变成了WETH
,符合ERC20
同质化代币标准,可以跨链,可以用于dApp
;脱下衣服,它可1:1兑换ETH
。
WETH
合约
目前在用的主网WETH合约写于2015年,非常老,那时候solidity是0.4版本。我们用0.8版本重新写一个WETH
。
WETH
符合ERC20
标准,它比普通的ERC20
多了两个功能:
-
存款:包装,用户将
ETH
存入WETH
合约,并获得等量的WETH
。 -
取款:拆包装,用户销毁
WETH
,并获得等量的ETH
。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract WETH is ERC20{// 事件:存款和取款event Deposit(address indexed dst, uint wad);event Withdrawal(address indexed src, uint wad);// 构造函数,初始化ERC20的名字和代号constructor() ERC20("WETH", "WETH"){}// 回调函数,当用户往WETH合约转ETH时,会触发deposit()函数fallback() external payable {deposit();}// 回调函数,当用户往WETH合约转ETH时,会触发deposit()函数receive() external payable {deposit();}// 存款函数,当用户存入ETH时,给他铸造等量的WETHfunction deposit() public payable {_mint(msg.sender, msg.value);emit Deposit(msg.sender, msg.value);}// 提款函数,用户销毁WETH,取回等量的ETHfunction withdraw(uint amount) public {require(balanceOf(msg.sender) >= amount);_burn(msg.sender, amount);payable(msg.sender).transfer(amount);emit Withdrawal(msg.sender, amount);}
}
继承
WETH
符合ERC20
代币标准,因此WETH
合约继承了ERC20
合约。
事件
WETH
合约共有2
个事件:
Deposit
:存款事件,在存款的时候释放。Withdraw
:取款事件,在取款的时候释放。
函数
除了ERC20
标准的函数外,WETH
合约有5
个函数:
- 构造函数:初始化
WETH
的名字和代号。 - 回调函数:
fallback()
和receive()
,当用户往WETH
合约转ETH
的时候,会自动触发deposit()
存款函数,获得等量的WETH
。 deposit()
:存款函数,当用户存入ETH
时,给他铸造等量的WETH
。withdraw()
:取款函数,让用户销毁WETH
,并归还等量的ETH
。
Remix
演示
1. 部署WETH
合约
2. 调用deposit
,存入1 ETH
,并查看WETH
余额
此时WETH
余额为1 WETH
。
3. 直接向WETH
合约转入1 ETH
,并查看WETH
余额
此时WETH
余额为2 WETH
。
4. 调用withdraw
,取出1.5 ETH
,并查看WETH
余额
此时WETH
余额为0.5 WETH
。
总结
这一讲,我们介绍了WETH
并实现了WETH
合约。它就像是给原生ETH
穿了一件智能合约做的衣服:穿上衣服的时候,就变成了WETH
,符合ERC20
同质化代币标准,可以跨链,可以用于dApp
;脱下衣服,它可以1:1兑换ETH
。
如果这份博客对大家有帮助,希望各位给作者一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给作者的意见,欢迎评论区留言。
相关文章:
![](https://img-blog.csdnimg.cn/830f40d884774d34bdbb472ba2e8942e.gif#pic_center)
【从0学习Solidity】41. WETH
【从0学习Solidity】41. WETH 博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。关注我们的主页,探索全栈开发…...
![](https://img-blog.csdnimg.cn/6088238931264b9881acd9a6506e7aa4.png)
微信小程序的无限瀑布流写法
微信小程序的无限瀑布流实现总算做完了,换了好几种方法,过程中出现了各种BUG。 首先官方有瀑布流的插件(Skyline /grid-view),不是原生的我就不想引入,因为我的方块流页面已经搭好了,引入说不定…...
![](https://img-blog.csdnimg.cn/5b0aa0d2e3674056969f922300b90697.gif)
前有CAP理论,后有BASE理论,分布式系统理论基石
🧑💻作者名称:DaenCode 🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…...
![](https://img-blog.csdnimg.cn/fe458e7a067f41e18f98efb018247431.jpeg)
HTTP、TCP、SOCKET三者之间区别和原理
7层网络模型 网络在世界范围内实现互联的标准框架 7层为理想模型,一般实际运用没有7层 详细内容 HTTP属于7层应用层 BSD socket属于5层会话层 TCP/IP属于4成传输层 TCP/IP协议 三次握手 笔者解析: 第一次握手:实现第一步需要客户端主动…...
![](https://www.ngui.cc/images/no-images.jpg)
flutter项目中常用第三方模块
flutter项目中常用第三方模块 持续更新中序言关于第三方模块安装flutter_native_splash使用方式模块配置 flutter_localizations模块配置使用方式 get_storage模块配置使用方式 get模块配置使用方式 持续更新中 序言 本章介绍项目中常用第三方模块,方便快速构建项目…...
![](https://img-blog.csdnimg.cn/6290b656e33445dbbd2fabd752ef981c.png)
Android 混淆使用及其字典混淆(Proguard)
1.使用背景 ProGuard能够通过压缩、优化、混淆、预检等操作,检测并删除未使用的类,字段,方法和属性,分析和优化字节码,使用简短无意义的名称来重命名类,字段和方法。从而使代码更小、更高效、更难进行逆向工程。 Android代码混淆…...
![](https://img-blog.csdnimg.cn/ad7b5367eb924c8eb427833944f7ed53.png)
laravel 阿里云短信发送
示例 一、安装 安装:composer require mrgoon/aliyun-sms dev-master 二、打开config/app.php,添加配置代码 1、‘providers’ 配置组下添加 Mrgoon\Aliyunsms\AliyunsmsServiceProvider::class, 2、‘aliases’ 配置组下添加 Aliyunsms>Mrgoon…...
![](https://www.ngui.cc/images/no-images.jpg)
算法----LRU缓存机制
题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返…...
![](https://img-blog.csdnimg.cn/24d7edf08029484bae4964590ebad39a.png)
基于springboot+vue的旅游系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...
![](https://www.ngui.cc/images/no-images.jpg)
什么是堆栈和队列?如何实现它们?
堆栈(Stack)和队列(Queue)是两种常见的线性数据结构,用于组织和管理数据。它们分别具有不同的特点和用途。本文将详细解释堆栈和队列的概念、特点以及如何实现它们。 堆栈(Stack) 什么是堆栈&…...
![](https://img-blog.csdnimg.cn/901c64d236674bd5be718a4544328e36.png)
编译器自动生成的构造函数
背景 作为一个C小白,最近在看深度解析对象模型的时候,发现一个很久以来的认知错误:编译器会为没有定义构造函数的class生成一个默认构造函数。其实这个观点是错误的,编译器只会在四种情况下生成。 相关知识 一定要明确一个事情…...
![](https://img-blog.csdnimg.cn/img_convert/3a092050bd3689fce54794e4f60fdac4.png)
SpringSecurity - 认证与授权、自定义失败处理、跨域问题、认证成功/失败处理器
SpringSecurity 文章目录 SpringSecurity一、 简介二、快速入门2.1 maven坐标2.2 访问请求 三、认证与授权3.1 认证3.1.1 登录检验流程3.1.2 SpringSecurity 完整流程3.1.3 认证流程详解3.1.4 校验3.1.5 要解决的问题3.1.6 准备工作3.1.7 实现3.1.7.1 数据库校验用户3.1.7.1.1 …...
![](https://img-blog.csdnimg.cn/8e20004c222544a0868c3508bb6f6137.png)
自定义映射resultMap
自定义映射resultMap 自定义映射resultMap 自定义映射resultMapresultMap处理字段和属性的映射关系字段名和属性名不一致的情况,如何处理映射关系?1、为查询的字段设置别名,和属性名保持一致2、核心配置文件(mybatis-config.xml)中设置一个全局配置3、使…...
![](https://img-blog.csdnimg.cn/2e3d1f57d8cc4b689c0ec284120b1acc.gif#pic_center#pic_center)
Android修行手册 - Android Studio去掉方法参数提示、变量类型提示、方法引用Usage提示
点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…...
![](https://img-blog.csdnimg.cn/be680ae7efff49f6b915f46ad2404967.jpg)
【车载开发系列】ECU Application Software程序刷新步骤
【车载开发系列】ECU Application Software程序刷新步骤 ECU Application Software程序刷新步骤 【车载开发系列】ECU Application Software程序刷新步骤一. Boot Software(引导软件)1)boot manager(启动管理器)2&…...
![](https://www.ngui.cc/images/no-images.jpg)
inject和provide的使用
官网介绍用法 V2.2.0 新增的方法 类型 provide:Object | () > Object inject:Array<string> | { [key: string]: string | Symbol | Object }介绍 这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
2023年中国研究生数学建模竞赛D题
一、背景介绍 2021年9月22日,中共中央国务院正式发布《关于完整准确全面贯彻新发展理念做好碳达峰碳中和工作的意见》(以下简称《意见》),明确了中国双碳行动的顶层设计。 我国是世界上最大的发展中国家,为实现中华民…...
![](https://img-blog.csdnimg.cn/73ec4169be99410ab51e567ce72440cb.png#pic_center)
Unity制作曲线进度条
unity制作曲线进度条 大家好,我是阿赵。 在使用Unity引擎做进度条的时候,有时会遇到一个问题,如果进度条不是简单的横向、纵向或者圆形,而是任意的不规则形状,那该怎么办呢?比如这样的: 一…...
![](https://www.ngui.cc/images/no-images.jpg)
面试:C++ 11 智能指针
查询内存泄露方法 啥是内存泄露 内存泄露在维基百科中的解释如下: 在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误&…...
![](https://www.ngui.cc/images/no-images.jpg)
设计模式——3. 抽象工厂模式
1. 说明 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一组相关或依赖对象的方式,而无需指定它们的具体类。抽象工厂模式是工厂模式的扩展,它关注于创建一组相关的对象家族,而不仅仅是一个单一的对象。 抽象工厂模式通常涉及以下几个角…...
![](https://img-blog.csdnimg.cn/063eebd3571f4f059d1600d92d499a73.png)
vscode 无法使用 compilerPath“D:.../bin/arm-none-eabi-g++.exe”解析配置。
最近在使用vscode搭建ODrive STM32开发环境,依次安装了以下内容: 1.Python3: 用于运行工程构建脚本 2.ST-Link/V2 Drivers: STLink/v2编程器的驱动 3.Visual Studio Code: 轻量级但功能强大的源代码编辑器 …...
![](https://img-blog.csdnimg.cn/45dcc351292a4384b63c02af366b71c9.gif)
Vue.js入门模板语法[上] 及Vue.js实现购物车---详细讲解
前言 前面我们学习了Vue的基础入门,接下来我们学习有关Vue的模板语法,学习Vue语法能提高我们的前端开发效率 Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML &a…...
windows下gvim的配置
一、vim配置文件 "查看自己的vimrc所在的目录 "在命令模式下 :echo $MYVIMRC"打开自己的vimrc文件 "在命令模式下 :e $MYVIMRC 二、排版 "查看自己当前的字体及大小 "在命令模式下 :set guifont?"设置默认的字体为仿宋_GB2312ÿ…...
![](https://img-blog.csdnimg.cn/dd33285aab534affb4d9ec57e30e91f1.png)
基于复旦微的FMQL45T900全国产化ARM开发开发套件(核心板+底板)
TES745D是我司自主研制的一款基于上海复旦微电子FMQL45T900的全国产化ARM核心板(模块)。该核心板将复旦微的FMQL45T900(与XILINX的XC7Z045-2FFG900I兼容)的最小系统集成在了一个87*117mm的核心板上,可以作为一个核心模…...
![](https://www.ngui.cc/images/no-images.jpg)
Leetcode Top100(23)环形链表
给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索…...
![](https://img-blog.csdnimg.cn/b9faf5e0151d40ecb63d5c09f730ab1f.png)
线性代数基础-行列式
一、行列式之前的概念 1.全排列: 把n个不同的元素排成一列,称为n个元素的全排列,简称排列 (实际上就是我们所说的排列组合,符号是A,arrange) 2.标准序列: 前一项均小于后一项的序列…...
![](https://img-blog.csdnimg.cn/b67afcc471a74aa7a61e985bacfd8979.png)
RT-Thread(学习)
RT-Thread是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过16个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。 RT-Thread概述 RT-Threa…...
![](https://www.ngui.cc/images/no-images.jpg)
【MySQL】 MySQL 死锁问题分析优化器特性及优化方案
MySQL 死锁问题分析优化器特性及解决方案 MySQL 锁机制介绍 1、MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级…...
![](https://img-blog.csdnimg.cn/d7f3419af68d4a2e9fd2020fb19797c4.png)
【C++面向对象侯捷】8.栈,堆和内存管理
文章目录 栈,堆stack object的生命周期static local object的生命周期global object的生命周期heap objects 的生命期new:先分配memory,再调用构造函数delete: 先调用析构函数,再释放 memory动态分配所得的内存块,in V…...
![](https://img-blog.csdnimg.cn/img_convert/b460b1a1372ed882821fcb6a858e2232.png)
在比特币上使用可检索性证明支付存储费用
我们为用户开发了一种为云存储付费的新方法。 与亚马逊的 S3 等传统云存储相比,用户不必信任服务器。 我们使用比特币智能合约来确保支付取决于服务器的可检索性证明 (PoR),该证明只能在数据仍然可用且需要时可以检索的情况下生成。 可检索性证明 (PoR)…...
![](/images/no-images.jpg)
wordpress 外教 缩略图/网站搭建平台都有哪些
第二章 掌握临界知识的底层思维与方法 跳出"低水平勤奋陷阱"...
![](/images/no-images.jpg)
给网站做镜像/北京口碑最好的教育机构
切片不是数组,切片可以当作是没有长度的数组。更准确地理解是动态数组,底层实现和java的ArrayList一样是数组列表,底层数组的长度是切片的cap,切片目前拥有的元素数量构成了切片的len属性。当超出cap后,切片会扩容。 …...
培训机构网站模板/湖南网站设计外包服务
今天给大家科普:什么是傅里叶变换?什么是红黑树?希望能帮助到大家啦~下方图片可以单独保存收藏,也可以分享给朋友哦每日福利 点击公众号菜单:今日福利即可免费获得课程<玩转Linux:常用命令…...
![](/images/no-images.jpg)
网站是先解析还是先备案/国外新闻最新消息
微型计算机工作过程微机原理与接口技术 西安邮电大学计算机学院 王忠民 第一章 微型计算机系统导论(第二讲) 微型计算机硬件系统 1 2 微型计算机软件系统 微型计算机的工作过程 3 本讲主要内容 第一章 微型计算机系统导论—微型计算机硬件系统 硬件 微型机系统 外围设备 过程控…...
![](https://img-blog.csdnimg.cn/fcbf6e3dc81e4ce6976ddafe053c63af.png)
网站建设 风险/网络营销sem培训
文章目录1. NOSQL简介1.1 Nosql的作用1.1.1 解决CPU及内存压力1.1.2 减少IO的压力1.2 什么是NoSQL1.3 NoSQL适用场景1.4 常见NoSQL数据库2. Redis概述安装2.1 安装步骤2.2 前台启动(不推荐)2.3 后台启动(推荐)2.4 redis的关闭2.5 …...
![](https://img-blog.csdnimg.cn/img_convert/92317e8eddc43d47c60311828f6cf94f.png)
一个新网站怎么做seo/360推广登录入口官网
win7系统使用久了,好多网友反馈说win7系统共享虚拟机提示VMware Workstation Server共享服务不能启动的问题,非常不方便。有什么办法可以永久解决win7系统共享虚拟机提示VMware Workstation Server共享服务不能启动的问题,面对win7系统共享虚…...