2

我遇到的问题是我试图将 wei 中的值发送到swapExactETHForTokens,但它返回了Fail with error 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT'。如果我将 1 ETH 转换为 wei(在代码中),它会输出为1000000000000000000. 从 Uniswap GUI 进行交换时,它将 1 ETH 变为1059503741842561918508100943433. 我会把我的代码放在下面,我想我会研究 Uniswap 前端项目,看看它如何将 GUI 中的 1 ETH 转换为那个值(猜想它还在调用智能合约之前添加了费用)

  web3j = Web3j.build(web3jService);
        UniswapV2Router02 uniSwapRouter = UniswapV2Router02.load(UNISWAP_V2_RINKEBY, 
                web3j, 
                credentials, 
                new DefaultGasProvider());
        uniSwapRouter.swapExactETHForTokens(
                Convert.toWei("1", Convert.Unit.ETHER).toBigInteger(),
                Arrays.asList(WETH_ADDRESS, DAI_ADDRESS),
                credentials.getAddress(),
                BigInteger.valueOf(DEADLINE_TIMESTAMP)).send();

我会尝试什么:

  • 尝试将金额转换为 uint256,尾随零和所有(不知道如何)
  • 看看前端是怎么做的,不知道是不是应该swapExactETHForTokens直接调用,之前不调用其他函数

所以有些问题是:

  • 我怎样才能将 1 ETH 的值转为代表该 uint256 数字的 BigInteger?
  • 我应该事先调用其他函数吗?
  • 如何设置气体?我猜通过new DefaultGasProvider()
  • 我看到在 Javascript 中他们做了类似的事情const MIN_TOKENS = web3.utils.toHex(0.2 * 10 ** 18),我怎样才能在 Web3 中做到这一点而不被黑客攻击并添加尾随零?

提前谢谢你,祝你有美好的一天,索林

4

1 回答 1

0

有趣的是,在这里发布问题如何有助于橡皮擦,不是吗?

查看合同,它显示 msg.value。你猜怎么着,我们不会发送那个。即使swapExactEthForTokens是应付账款,包装器也不会为其生成参数。

按照这个错误了解更多信息:https ://github.com/web3j/web3j/issues/1268

我基本上是用 0 以太币发送交易,但它返回了INSUFFICIENT_INPUT_AMOUNT。以为如果 Java Wrapper 只给了我第一笔金额,它会自动处理它,但不是。

我必须做的是手动添加 weiValue,executeRemoteCallTransaction(function, weiValue)因为包装器不这样做,请查看上面的错误报告。

无论如何,如果有人想加入更多见解,我会保持开放状态。

于 2021-04-27T21:01:23.173 回答