如何获取特定池的Uniswap汇率?例如,让我们假设我试图从ETH到AAVE。
发布于 2021-08-27 20:29:46
如果要在其中一个测试网上使用它,则必须替换以下合同地址:
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D是Uniswap路由器V2的合同地址0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2是WETH的合同地址pragma solidity ^0.8.0;
contract TestContract {
UniswapRouter UR = UniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
function getPairETHRate(uint256 _eth_amount, address _token_contract) public view returns(uint) {
address[] memory path = new address[](2);
path[0] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
path[1] = _token_contract;
uint firstReturnedParam;
uint secondReturnedParam;
(firstReturnedParam, secondReturnedParam) = UR.getAmountsOut(_eth_amount, path);
return secondReturnedParam;
}
}
interface UniswapRouter {
function getAmountsOut(uint, address[] memory) external view returns (uint[] memory);
}好,在我的示例中,您有一个名为getPairETHRate的方法,它在wei中接受了第一个参数的ETH数量,而第二个参数是令牌契约地址(在您的例子中是AAVE契约地址)。因此,当您传递100000000000000000韦特(0.1ETH)作为第一个参数时,该方法将通过交换0.1ETH返回您现在可以从uniswap对获得多少令牌。可以自由地测试它。
例如,如果令牌是在更多对(例如USDT )上列出的,则可以将USDT契约地址粘贴到path[0]上,然后将得到/USDT汇率。
https://ethereum.stackexchange.com/questions/107833
复制相似问题