预感 flashMint 会发生出许多闪电代新玩法。 _balanceOf[msg.sender] -= value;
_balanceOf[msg.sender] -= value;
require(_balanceOf[msg.sender] >= value, “!balance”);
挪用链
depositToAndCall 的第 2 个参数 data 是通报给方针函数的参数。方针函数的挪用利用 ERC677 尺度[5]。
emit Transfer(msg.sender, address(0), value);
}
ERC677Receiver(to).onTokenTransfer(msg.sender, value, data);
flashMint函数会在挪用者地点上挪用executeOnFlashMint,flashMint 还支持吸收一个特另外bytes参数通报给executeOnFlashMint,flashMint 的实现如下:
以上实现和 WETH9 根基一致,WETH10 还可觉得指定的账号存款,挪用 depositTo :
ERC677Receiver(to).onTokenTransfer(msg.sender, msg.value, data);return true;
}
WETH10 和 WETH9 一样实现和以太币的包裹,实现 WETH 与以太币的 1:1 交流
别的尚有withdrawFrom函数,用来从其他的账号以取款到指定的账号,, 虽然需要资金的所有者提前approve, withdrawFrom 实现如下:
emit Transfer(msg.sender, to, value);emit Transfer(address(0), msg.sender, value);
WETH10 还实现了存款加挪用 depositToAndCall,通过depositToAndCall可以把资金存入合约,并当即挪用合约自界说的实现onTokenTransfer,以往利用 WETH9 大概需要多笔生意业务才气完成的事情此刻只需要一笔生意业务完成。
require(_balanceOf[msg.sender] >= value, “!balance”);
WETH10 合约答允通过flashMint 来增发任意数量的 WETH,而不消存入真实的以太币,只需要在生意业务竣事前将其销毁掉。
存款:Ether -> WETH
玩过 DEFI 的应该都知道,许多项目是通过 WETH 把以太币代币化[1],再接入到 ERC20 为主的 DEFI 生态中。
function depositToAndCall(address to, bytes calldata data) external payable returns (bool success) {
require(to != address(this), “!recipient”);
function flashMint(uint256 value, bytes calldata data) external {
FlashMinterLike(msg.sender).executeOnFlashMint(value, data);
进级的 WETH10 也支持在转账时(利用 transferAndCall 转账),同样支持在吸收者地点上挪用 onTokenTransfer,transferAndCall 实现如下:
_balanceOf[to] += msg.value;
WETH9 上线至今快有 3 年了,此刻社区小同伴实现了进级版本:WETH10[3],已经陈设在 Kovan 测试网 [4]
depositToAndCall 实现如下:
仔细查察以上代码, 你还可以看到授权量的优化,假如授权量是最大值type(uint256).max 时,将不再淘汰授权量,从而低落 gas 本钱。这个优化也同样应用到了 transferFrom 中。
function transferAndCall(address to, uint value, bytes calldata data) external returns (bool success) {
离线授权
取款 WETH -> Ether
emit Transfer(address(0), to, msg.value);
详细是挪用deposit存入以太币(或发送到合约),可吸收到 WETH:
_balanceOf[to] += value;WETH10 新特性
闪电铸币
以上实现和 WETH9 根基一致,WETH10 还可以取款到指定的账号,挪用withdrawTo:
进级的 WETH10, 实现了离线授权成果(实现EIP2612[6]),可以参考文章:通过链下签名授权实现更少 Gas 的 ERC20 代币[7],利便合约归并授权与转账生意业务,淘汰 gas 耗损。
}
require(_balanceOf[to] + value >= value, “overflow”);
在前面 depositAndCall 函数已经提到过,在用户执行存款时,可以当即在用户界说的合约中执行一笔挪用, 这样存款和合约挪用产生在一次生意业务中。
_balanceOf[msg.sender] += value;
取款通过挪用 withdraw 来完成,withdraw 要领如下:当前利用最遍及的 WETH 实现是WETH9[2],有乐趣的可以点击链接查察实现。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。