首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getAmountsOut UniswapV2 USDC/USDT对不返回1

getAmountsOut UniswapV2 USDC/USDT对不返回1
EN

Ethereum用户
提问于 2022-08-18 15:31:33
回答 1查看 289关注 0票数 0

下面是我用Python编写的简单代码:

代码语言:javascript
复制
web3 = Web3(Web3.HTTPProvider(infura_url))

abi = [{"name": "getAmountsOut", "type": "function", "inputs": [{"name": "amountIn", "type": "uint256"},
                                                                {"name": "path", "type": "address[]"}],
        "outputs": [{"name": "amounts", "type": "uint256[]"}], }, ]



router = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'

exchange_contract = web3.eth.contract(address=router, abi=abi)
# dexRouter

# Prices
DAI = "0x6B175474E89094C44Da98b954EedeAC495271d0F"
WETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
USDT = "0xdAC17F958D2ee523a2206206994597C13D831ec7"
USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"

decimals = 6 # Token 0 decimals

result = (exchange_contract.functions.getAmountsOut(Web3.toWei(1, 'ether'), [USDC, USDT]).call())[1];
humanPrice = result/(10**decimals)
rev = 1/humanPrice

print(result)
print(humanPrice)
print(rev)

回报总是围绕着这一点:

代码语言:javascript
复制
5772384686621
5772384.686621
1.732386274112603e-07

也许我不完全理解getAmountsOut是如何工作的,但是为什么我不能得到0.99-1呢?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-08-18 16:07:02

您很困惑,因为USDC和USDT的小数数与ETH的小数数不同。前两个是6个小数位数,后一个是18个小数位数。toWei函数是用于ETH的。

将调用代码更改为:

代码语言:javascript
复制
one_usdc = int(1e6)
result = exchange_contract.functions.getAmountsOut(one_usdc, [USDC, USDT]).call()

这将给出一个接近1000000 (1e6)的数字。

如果输入Web3.toWei(1, 'ether')作为金额,则意味着您试图将1000 000 000 000 (1e12) USDC转换为USDT。显然,汇率是可怕的,因为池中只有有限的USDT。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/133876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档