使用 Web3 为 Uniswap 池添加流动性

Posted

技术标签:

【中文标题】使用 Web3 为 Uniswap 池添加流动性【英文标题】:Add liquidity to Uniswap pool with Web3 【发布时间】:2021-05-26 21:53:59 【问题描述】:

我正在尝试使用 Web3 在 Ropsten 网络上为 Uniswap 添加流动性。

我的 javascript 代码如下:

  (async () => 
  console.log("account: ", this.state.account);
  const deployedContract = await new web3.eth.Contract(
    UniswapRouter02Contract.abi,
    "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D"
  );
  console.log(web3.currentProvider);
  console.log("pair address ", this.state.pairAddress);
  console.log(this.state);
  const liq = await deployedContract.methods
    .addLiquidity(
      this.state.firstAddress,
      this.state.secondAddress,
      1000,
      1000,
      0,
      0,
      this.state.pairAddress,
      200
    )
    .send(
      
        from: this.state.account,
        gas: "2000000"
      ,
      function(error, transactionHash) 
    )
    .on("error", error => 
      console.log("my error", error.message);
    );

  //console.log("Events", pairCreated.events);
)();

我的错误:

Transaction has been reverted by the EVM:  "blockHash": "0xc4bcbfe7c4e6045d20b466f7eab2a7af1693cb3e11be7a197722855876554eaa", "blockNumber": 9707061, "contractAddress": null,
"cumulativeGasUsed": 4110545, "from": "0xe3a6752cf416bd9fb766b046782a21b8722bcc3c", "gasUsed": 23341,
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "status": false, "to": "0x7a250d5630b4cf539739df2c5dacb4c659f2488d", "transactionHash": "0xf23421d4a6cba30515e01e288893e8ecda482fccc1e3b969966187855298120c", "transactionIndex": 8, "events":  

我还有一个问题:我必须在 Uniswap addLiquidity 函数的“to”参数中输入地址和截止日期?

功能:

function addLiquidity(
   address tokenA,
   address tokenB,
   uint amountADesired,
   uint amountBDesired,
   uint amountAMin,
   uint amountBMin,
   address to,
   uint deadline ) external returns (uint amountA, uint amountB, uint liquidity);

【问题讨论】:

【参考方案1】:

您在 ropsten.etherscan.io 中的错误显示为已过期,这可能意味着交易执行时间超过 20 分钟(假设您使用的是默认截止日期)所以它失败了。

请参阅以下https://ethereum.stackexchange.com/questions/98678/fail-with-error-uniswapv2router-expired。

在我看来像是一个时间戳问题。

另外,对于 v2,您必须确保

    你先调用approve方法 以 UTC 格式提供时间戳,比当前时间戳早 20 分钟。在您的情况下,时间戳是 200,这肯定会导致问题。将“200”替换为当前时间戳 + 20 分钟

【讨论】:

【参考方案2】:

通过 Date.now() 作为截止日期而不是 200 的参数。这解决了我的问题。实际上它期待一个日期,而您正在传递一个整数。

【讨论】:

以上是关于使用 Web3 为 Uniswap 池添加流动性的主要内容,如果未能解决你的问题,请参考以下文章

虎符推出AMM资金池 增加用户收益通道

如何使用 web3 js 在 uniswap 上交换令牌

区块链去中心化金融Defi无偿损失及解决策略

使用 web3.py 和 infura.io 监听 Uniswap 合约事件

Uniswap v3 详解:创建交易对/提供流动性

放弃「内卷」 Uniswap死磕流动性