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();
我会尝试什么:
- 尝试将金额转换为 uint256,尾随零和所有(不确定如何)
- 看看前端是怎么做的,不确定我是否应该直接调用
swapExactETHForTokens
,而不是先调用其他函数
所以一些问题是:
- 如何将 1 ETH 的值转换为表示该 uint256 数字的 BigInteger?
- 我应该提前调用其他函数吗?
- 如何设置气体?我猜通过
new DefaultGasProvider()
- 我在 Javascript 中看到他们做了类似
const MIN_TOKENS = web3.utils.toHex(0.2 * 10 ** 18)
的事情,我怎样才能在 Web3 中做到这一点而不是 hackish 和添加尾随零?
提前谢谢你,祝你有美好的一天,
索林
有趣的是,在这里发布问题有助于躲避橡皮擦,不是吗?
查看了合同,上面写着 msg.value。你猜怎么着,我们不会发送那个。即使 swapExactEthForTokens
是应付账款,包装器也不会为其生成参数。
关注此错误以获取更多信息:https://github.com/web3j/web3j/issues/1268
我基本上是用 0 个以太币发送交易,当然它返回了 INSUFFICIENT_INPUT_AMOUNT
。认为如果 Java Wrapper 只给我第一笔金额,它会自动处理它,但没有。
我必须做的是手动将 weiValue 添加到 executeRemoteCallTransaction(function, weiValue)
,因为包装器不会这样做,请查看上面的错误报告。
无论如何,我会把它打开,以防有人想提供更多见解。
我遇到的问题是我试图将 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();
我会尝试什么:
- 尝试将金额转换为 uint256,尾随零和所有(不确定如何)
- 看看前端是怎么做的,不确定我是否应该直接调用
swapExactETHForTokens
,而不是先调用其他函数
所以一些问题是:
- 如何将 1 ETH 的值转换为表示该 uint256 数字的 BigInteger?
- 我应该提前调用其他函数吗?
- 如何设置气体?我猜通过
new DefaultGasProvider()
- 我在 Javascript 中看到他们做了类似
const MIN_TOKENS = web3.utils.toHex(0.2 * 10 ** 18)
的事情,我怎样才能在 Web3 中做到这一点而不是 hackish 和添加尾随零?
提前谢谢你,祝你有美好的一天, 索林
有趣的是,在这里发布问题有助于躲避橡皮擦,不是吗?
查看了合同,上面写着 msg.value。你猜怎么着,我们不会发送那个。即使 swapExactEthForTokens
是应付账款,包装器也不会为其生成参数。
关注此错误以获取更多信息:https://github.com/web3j/web3j/issues/1268
我基本上是用 0 个以太币发送交易,当然它返回了 INSUFFICIENT_INPUT_AMOUNT
。认为如果 Java Wrapper 只给我第一笔金额,它会自动处理它,但没有。
我必须做的是手动将 weiValue 添加到 executeRemoteCallTransaction(function, weiValue)
,因为包装器不会这样做,请查看上面的错误报告。
无论如何,我会把它打开,以防有人想提供更多见解。