Web3j 和 Uniswap Router V2,将 wei 转换为 uint256

Web3j and Uniswap Router V2, converting wei to uint256

我遇到的问题是我试图将 wei 中的值发送到 swapExactETHForTokens,但它 returns 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();

我会尝试什么:

所以一些问题是:

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

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

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

关注此错误以获取更多信息:https://github.com/web3j/web3j/issues/1268

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

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

无论如何,我会把它打开,以防有人想提供更多见解。