译文出自:登链翻译计划
译者:翻译小组
校对:Tiny熊
Uniswapv3的新内容及集成
如果你还不熟悉Uniswap,它是一个去中心化的交易所,依靠外部流动性提供者将代币添加到流动池配对中,用户可以直接交易这些代币。
由于它在以太坊上运行,可以交易的是以太坊ERC-20代币。每种代币都有自己的智能合约和流动资金池。Uniswap--作为完全的去中心化--对哪些代币可以添加没有限制。如果一个代币对还没有流动池合约存在,任何人都可以Uniswap的工厂创建一个,任何人都可以向池子提供流动性。每笔交易有0
else{require(daiToken
//dosomethingwiththatDAI...}
在你的函数的开头做一个简单的检查就足够了。现在,对于convertEthToExactDai函数,它将看起来像这样的东西。
functionconvertEthToExactDai(uint256daiAmount)externalpayable{require(daiAmount>0,"Mustpassnon0DAIamount");require(msg
这里有几件事情需要解读。
SwapRouter:SwapRouter将是一个由Uniswap提供的包装合约,它有几个安全机制和便利功能。你可以使用ISwapRouter(0xE592427A0AEce92De3Edee1F18E0157C05861564)为任何主网或测试网实例化它。接口代码可以在这里找到。
WETH:你可能注意到,我们在这里使用ETH。在Uniswap中,不再有直接的ETH对,所有的ETH必须首先转换为WETH。在我们的案例中,这是由SwapRouter完成的。
exactOutputSingle:该函数可用于使用ETH并接收准确的代币数量。任何剩余的ETH将被退还,但不是自动!我自己没有第一时间意识到这一点,ETH最后在路由器合约中。所以不要忘记在兑换后调用uniswapRouter
但是请注意,我们没有把它声明为视图函数,但是不要在链上调用这个函数。尽管它可以作为一个视图函数来调用的,但它会采用非视图方式来获得计算结果。由于Solidity的特性,所以这里也不可能将它本身声明为一个视图函数,仅能使用场景如Web3的call()功能来读取前端的结果。
现在我们可以在前端调用getEstimatedETHforDAI。为了确保我们发送了足够的ETH,并且交易不会被退回,我们可以将估计的ETH数量增加一点。
constrequiredEth=(awaitmyContract
contractUniswap3{IUniswapRouterpublicconstantuniswapRouter=IUniswapRouter(0xE592427A0AEce92De3Edee1F18E0157C05861564);IQuoterpublicconstantquoter=IQuoter(0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6);addressprivateconstantmultiDaiKovan=0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa;addressprivateconstantWETH9=0xd0A1E359811322d97991E03f863a0C30C2cF029C;functionconvertExactEthToDai()externalpayable{require(msg
functionconvertEthToExactDai(uint256daiAmount)externalpayable{require(daiAmount>0,"Mustpassnon0DAIamount");require(msg
//donotusedon-chain,gasinefficient!functiongetEstimatedETHforDAI(uintdaiAmount)externalpayablereturns(uint256){addresstokenIn=WETH9;addresstokenOut=multiDaiKovan;uint24fee=3000;uint160sqrtPriceLimitX96=0;returnquoter
//importanttoreceiveETHreceive()payableexternal{}}
ExactInput和ExactOutput的区别
一旦你执行这些函数并在Etherscan中查看它们,区别就会立即变得很明显。这里我们是用exactOutput进行交易。我们提供1个ETH,希望收到100个DAI作为回报。任何多余的ETH都会退还给我们。
以准确的DAI购买
而下面,我们正在使用exactInput进行交易。我们提供1个ETH,并希望得到多少DAI,而这恰好是196个DAI。
用精确的ETH购买
请注意,如果你困惑为什么价格会如此不同,这是测试网的一个小池子,第一个交易严重影响了池子里的价格。没有多少人在测试网中进行套利交易:)
本翻译由CellNetwork赞助支持。
来源:https://soliditydeveloper.com/uniswap3
参考资料
登链翻译计划:https://github.com/lbc-team/Pioneer
翻译小组:https://learnblockchain.cn/people/412
Tiny熊:https://learnblockchain.cn/people/15
Uniswap:https://uniswap.exchange/
一篇文章:https://soliditydeveloper.com/uniswap2
v3自2021年5月5日起在主网上运行:https://uniswap.org/blog/launch-uniswap-v3/
文件:https://docs.uniswap.org/
白皮书:https://uniswap.org/whitepaper-v3.pdf
这里:https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/interfaces/ISwapRouter.sol
exactOutputSingle:https://docs.uniswap.org/reference/periphery/interfaces/ISwapRouter#exactoutputsingle
quoteExactOutputSingle:https://docs.uniswap.org/reference/periphery/interfaces/IQuoter#quoteexactoutputsingle
call():https://web3js.readthedocs.io/en/v1.3.4/web3-eth-contract.html#methods-mymethod-call
exactInput:https://docs.uniswap.org/reference/periphery/interfaces/ISwapRouter#exactinput
exactOutput:https://docs.uniswap.org/reference/periphery/interfaces/ISwapRouter#exactoutput
Multi-collaterizedKovanDAI:https://oasis.app/borrow?network=kovan
exactOutputSingle:https://docs.uniswap.org/reference/periphery/interfaces/ISwapRouter#exactoutputsingle
exactInputSingle:https://docs.uniswap.org/reference/periphery/interfaces/ISwapRouter#exactinputsingle
CellNetwork:https://www.cellnetwork.io/?utm_souce=learnblockchain
免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。
本文来源于非小号媒体平台:
登链社区
现已在非小号资讯平台发布105篇作品,
非小号开放平台欢迎币圈作者入驻
入驻指南:
/apply_guide/
本文网址:
/news/10040915.html
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场
上一篇:
对标AGIX、欧易AI板块的黑马——CNTM
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。