Uniswap v2-如何获取流动性提供商在流动性池中持有的代币金额



我有一个钱包地址集合,我需要找到每个地址在一些流动性池中持有的代币数量。假设流动性轮询是针对代币A和B的。所以我需要找到每个地址在流动性池中的代币A的数量。我怎么能拿到?

需要明确的是,我说的不是lp_token,而是地址所押的一个令牌。

流动性提供商在Uniswap v2池中拥有的基础代币数量与提供商在LP代币中的份额成比例。

例如,假设池的储备中有1000 USDC,LP代币的totalSupply等于100。然后,拥有1个LP代币的人将有权在池中获得10.0 USDC。

示例Python代码,用于USDC/WETH池:

from web3 import Web3
web3 = Web3(Web3.HTTPProvider(PROVIDER_URL))
pair = '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc'
contract = web3.eth.contract(address=pair, abi=v2_pool_abi)
reserves = contract.functions.getReserves().call()
reserve_usdc = reserves[0]
total_supply = contract.functions.totalSupply().call()
lp_address = '0x76E2E2D4d655b83545D4c50D9521F5bc63bC5329' 
lp_balance = contract.functions.balanceOf(lp_address).call()
lp_usdc = reserve_usdc * lp_balance / total_supply   
usdc_decimals = 6
lp_usdc_adjusted = lp_usdc / 10 ** usdc_decimals
print(f"liquidity provider {lp_address} has {lp_usdc_adjusted} USDC in USDC/WETH pool")
const Web3 = require('web3');
const web3 = new Web3(`https://mainnet.infura.io/v3/${process.env.INFURA}`); // Web3 instance connected to Ethereum mainnet
const abi = require("/ABI/UNISWAPV2/USDC/WETH-USDC.json")
function getReserves(factoryAddress) {
try {
const factory = new web3.eth.Contract(abi, factoryAddress);
factory.methods.getReserves().call()
.then(result => {
console.log("WETH", result._reserve1/(10**18));
console.log("USDC",result._reserve0/(10**6));
})
.catch(error => {
console.error(error);
});
} catch (error) {
console.error(error);
}
}
getReserves("0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc")

最新更新