在 Etherscan 上使用 Uniswap V3 SwapRouter
我正在嘗試直接在 Rinkeby Etherscan 上與 Uniswap 的 SwapRouter 智能合約進行互動,但沒有成功。例如,我想將 ETH 換成 DAI 或將 ETH 換成 WETH。
這是我想要做的。
- 前往Rinkeby Etherscan 上的 Uniswap SwapRouter 智能合約,開啟智能合約的寫入功能。
- 然後我擴展功能
exactInputSingle
。
- 在第一個欄位上,
payableAmount (ether)
我輸入了 0.00000001- 在第二個欄位中
params (tuple)
,我輸入了以下數據:{ "tokenIn": "0xc778417E063141139Fce010982780140Aa0cD5Ab", // WETH address "tokenOut": "0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735", // DAI address "fee": 3000, // Liquidity providers fee "recipient": "my-wallet-address", "dealline": 1633596832, // Timestamp in seconds "amountOut": 1000, // Desired out amount 1000 DAI in this case "amountInMaximum": 0.00000001, // Same value that I use on the first field payableAmount "sqrtPriceLimitX96": 0 }
- 現在,當我點擊寫入時,我收到以下錯誤:
無效的 BigNumber 值(argument=“value”,value=undefined,code=INVALID_ARGUMENT,version=bignumber/5.1.1)
顯然價值是不確定的,我的問題是:
我應該如何傳遞價值?
我試圖把
value
裡面的參數元組 - 不工作。我試圖在第一個輸入(payableAmount)中傳遞值,比如
{"value": 0.00000001}
- 不工作。我試圖在這樣的元組之前傳遞它:
{"value":0.00000001}({"tokenIn": "...", "tokenOut": "...", ...})
但它失敗並顯示另一條消息:
({value:1e-8}) 不是函式
我看到使用 Solidity,人們正在做這樣的事情:
uniswapRouter.exactInputSingle{ value: msg.value }(params);
是否可以使用 Etherscan 進行這樣的呼叫?
任何幫助將不勝感激,在此先感謝您!
我不熟悉程式碼是如何在 Etherscan 上編寫的,但這裡有些方面可能會有所幫助。
- 為了成功地將 WETH 兌換成 DAI,Rinkeby 上必須有一個可用的 Uniswap 池。我找到了一個使用以下 WETH 和 DAI 地址的池
地址公共常量 WETH = 0xc778417E063141139Fce010982780140Aa0cD5Ab;// WETH 在 Rinkeby 測試網上
地址公共常量 DAI = 0x5592EC0cfb4dbc12D3aB100b257153436a1f0FEa;// Rinkeby 測試網上的 DAI 2. Uniswap 礦池可以有 3 種不同的礦池費用(500 WEI、3000 WEI、10000 WEI)——你必須找到你正在使用的礦池的費用——在這種情況下是 500 WEI 3. 我不知道您如何使用 Etherscan 輸入乙太幣數量,但關於您的參數元組,您似乎已將參數用於exactOutputSingle 函式。對於exactInputSingle,參數是:
tokenIn: DAI, tokenOut: WETH9, fee: poolFee, recipient: msg.sender, deadline: block.timestamp, amountIn: amountIn, amountOutMinimum: 0, sqrtPriceLimitX96: 0
有關更多資訊,請查看 uniswapV3 文件https://docs.uniswap.org/protocol/guides/swaps/single-swaps
希望這可能會有所幫助
你檢查過 Rinkeby 是否為 (WETH, DAI) 提供了一個池子嗎?我在 Ropsten 上遇到了問題,即 (WETH, ENS) 不可用。你可能會遇到同樣的問題。