我遇到的问题是我试图将 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();
我将尝试什么:
swapExactETHForTokens
,而不是先调用其他函数所以一些问题是:
new DefaultGasProvider()
const MIN_TOKENS = web3.utils.toHex(0.2 * 10 ** 18)
的操作,我如何才能在 Web3 中执行此操作而不会被黑客攻击并添加尾随零?提前谢谢你,祝你有美好的一天, 索林
答案 0 :(得分:0)
有趣的是,在此处发布问题如何有助于回避问题,不是吗?
查看合约,上面写着 msg.value。你猜怎么着,我们不会发送那个。即使 swapExactEthForTokens
是应付款项,包装器也不会为其生成参数。
关注此错误以获取更多信息:https://github.com/web3j/web3j/issues/1268
我基本上是用 0 以太币发送交易,它返回 INSUFFICIENT_INPUT_AMOUNT
。认为如果 Java Wrapper 只给我第一个金额,它会自动处理它,但没有。
我必须手动将 weiValue 添加到 executeRemoteCallTransaction(function, weiValue)
因为包装器没有这样做,请查看上面的错误报告。
无论如何,如果有人想提供更多见解,我会保持开放状态。