我遇到的问题是我试图将 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 中做到这一点而不被黑客攻击并添加尾随零?
提前谢谢你,祝你有美好的一天,索林