我很困惑我是如何写一份关于WETH转换的合同的。
当我们编写一份智能合同,将用户资金存入合同时,我们是否应该在保存之前编写一些将eth转换为weth的代码?还是自动转换而不做任何事情?
我已经在uniswap的路由器合约()上找到了关于WETH的描述,当用户为uniswap池提供流动资金时调用它。
IWETH(WETH).deposit{value: amountETH}();
assert(IWETH(WETH).transfer(pair, amountETH));*https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/UniswapV2Router02.sol
另一方面,例如MakerDAO的保险库合同上的join.sol( functions ),复合的Ctoken合同上的CEther.sol(),虽然它们似乎是将eth存放到合同中的函数,但我看不到weth的任何信息。
*https://etherscan.io/address/0x2f0b23f53734252bda2277357e97e1517d6b042a#code
function join(address usr) external payable note {
require(live == 1, "ETHJoin/not-live");
require(int(msg.value) >= 0, "ETHJoin/overflow");
vat.slip(ilk, usr, int(msg.value));*https://github.com/compound-finance/compound-protocol/blob/master/contracts/CEther.sol
function doTransferIn(address from, uint amount) internal returns (uint) {
// Sanity checks
require(msg.sender == from, "sender mismatch");
require(msg.value == amount, "value mismatch");
return amount; }在我确定上面的问题之后,我想要做的是写一个合同,用户可以通过与这个合同的交互将ETH存入另一个合同中。我知道如果用户有WETH,bc很容易,我所要做的就是编写函数转移,但我不知道如何使用ETH本身。
发布于 2020-10-20 00:01:52
WETH是一个ERC20令牌,它具有从醚到WETH的1:1映射。
要获得WETH,您必须使用要转换为WETH的以太值调用函数deposit。在javascript中,如下所示:
WETH.methods.deposit().send({
value: etherAmount,
from: userAddress
});相反,要提取以太,则必须调用函数withdraw,并使用要检索的WETH值。
WETH.methods.withdraw(wethAmount).send({
from: userAddress
});有些合同,如Uniswap或MakerDAO,使用WETH来简化其工作流程,因为它是一个ERC20,它们不需要为处理以太而设置例外。
https://ethereum.stackexchange.com/questions/89490
复制相似问题