Java Web3j和Uniswap路由器V2,将wei转换为uint256
我遇到的问题是,我试图将wei中的值发送到Java Web3j和Uniswap路由器V2,将wei转换为uint256,java,ethereum,smartcontracts,web3,web3-java,Java,Ethereum,Smartcontracts,Web3,Web3 Java,我遇到的问题是,我试图将wei中的值发送到swapExactETHForTokens,但它返回失败,并出现错误“UniswapV2Library:输入量不足”。如果我将1eth转换为wei(在代码中),结果是10000000000000000。从Uniswap GUI进行交换时,它会将1ETH变为105950374184256191850810094333。 我将把我的代码放在下面,我想我将查看Uniswap前端项目,看看它如何将GUI中的1 ETH转换为该值(我想它在调用智能合约之前还会添加费
swapExactETHForTokens
,但它返回失败,并出现错误“UniswapV2Library:输入量不足”
。如果我将1eth转换为wei(在代码中),结果是10000000000000000
。从Uniswap GUI进行交换时,它会将1ETH变为105950374184256191850810094333
。
我将把我的代码放在下面,我想我将查看Uniswap前端项目,看看它如何将GUI中的1 ETH转换为该值(我想它在调用智能合约之前还会添加费用)
我将尝试:
- 尝试将金额转换为uint256、尾随零和全部(但不确定如何转换)
- 看看前端是怎么做的,不确定我是否应该直接调用
,而不调用其他函数swapExactETHForTokens
- 我如何将1 ETH的值转换为表示uint256数字的大整数
- 我应该事先调用其他函数吗
- 如何设置煤气?我猜是通过
新的DefaultGasProvider()
- 我看到,在Javascript中,他们做了类似于
的事情,我如何在web3中做到这一点而不被攻击并添加尾随的零const MIN_TOKENS=web3.utils.toHex(0.2*10**18)
索林(Sorin)有趣的是,在这里发布一个问题有助于橡皮鸭,不是吗 看了看合同,上面写着msg.value。你猜怎么着,我们不会送的。即使
swapExactEthForTokens
是一个应付账款,包装器也不会为其生成参数
请遵循此错误了解更多信息:
我基本上是用0发送一个交易,ofc it返回输入不足\u金额
。我想如果Java包装器只给了我第一个数量,它会自动处理它,但是没有
我要做的是手动将weiValue添加到ExecuteMoteCallTransaction(function,weiValue)
,因为包装器不这样做,请查看上面的bug报告
不管怎样,我会把这件事留着,以防有人想插话提出更多的见解
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();