我遇到的问题是,我试图将wei中的一个值发送到swapExactETHForTokens,但它返回Fail with error 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT'。如果我将1ETH转换为wei (在代码中),它将以1000000000000000000的形式出现。当从Uniswap进行交换时,它会将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,而无需在之前调用其他函数。
因此,一些问题是:
怎样才能将1 ETH的值转换为表示number?
new DefaultGasProvider()
const MIN_TOKENS = web3.utils.toHex(0.2 * 10 ** 18)的事情,我如何才能在Web3中做到这一点而不被黑客攻击并添加尾随零呢?发布于 2021-04-27 21:01:23
有趣的是,在这里发布一个问题对逃避橡胶是有帮助的,不是吗?
看了看合同,上面写着msg.value。你猜怎么着,我们不会发这个的。即使swapExactEthForTokens是可支付的,包装器也不会为它生成参数。
请跟踪此bug以获得更多信息:https://github.com/web3j/web3j/issues/1268
我基本上是用0以太发送了一个事务,它返回了INSUFFICIENT_INPUT_AMOUNT。认为如果Java包装器只给了我第一个数量,它就会自动处理它,但不会。
我要做的是手动将weiValue添加到executeRemoteCallTransaction(function, weiValue),因为包装器没有这样做,请看上面的bug报告。
不管怎么说,我会留着这个,以防有人想加入更多的洞察力。
https://stackoverflow.com/questions/67287219
复制相似问题