Last active
August 2, 2021 12:46
-
-
Save RealPeha/7ef93614b115b14c2133d63ef3abd511 to your computer and use it in GitHub Desktop.
Simple multicall
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.8.0; | |
interface IERC20 { | |
function name() external view returns (string memory); | |
function symbol() external view returns (string memory); | |
function decimals() external view returns (uint8); | |
function balanceOf(address account) external view returns (uint256); | |
} | |
interface IPancakePair { | |
function token0() external view returns (address); | |
function token1() external view returns (address); | |
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); | |
} | |
contract Test { | |
struct TokenInfo { | |
string name; | |
string symbol; | |
uint8 decimals; | |
uint balance; | |
} | |
struct PoolInfo { | |
address token0; | |
address token1; | |
uint112 reserve0; | |
uint112 reserve1; | |
} | |
function getBalances(address[] calldata tokens) external view returns (uint[] memory) { | |
uint numberOfTokens = tokens.length; | |
uint[] memory balances = new uint[](numberOfTokens); | |
for (uint i = 0; i < numberOfTokens; i++) { | |
balances[i] = IERC20(tokens[i]).balanceOf(msg.sender); | |
} | |
return balances; | |
} | |
function getTokenInfo(IERC20 token) public view returns (TokenInfo memory) { | |
return TokenInfo({ | |
name: token.name(), | |
symbol: token.symbol(), | |
decimals: token.decimals(), | |
balance: token.balanceOf(msg.sender) | |
}); | |
} | |
function getTokensInfo(address[] calldata tokens) external view returns (TokenInfo[] memory) { | |
uint numberOfTokens = tokens.length; | |
TokenInfo[] memory tokensInfo = new TokenInfo[](numberOfTokens); | |
for (uint i = 0; i < numberOfTokens; i++) { | |
tokensInfo[i] = getTokenInfo(IERC20(tokens[i])); | |
} | |
return tokensInfo; | |
} | |
function getPoolInfo(address pairAddress) external view returns ( | |
TokenInfo memory token, | |
PoolInfo memory pool | |
) { | |
IPancakePair pair = IPancakePair(pairAddress); | |
(uint112 reserve0, uint112 reserve1,) = pair.getReserves(); | |
token = getTokenInfo(IERC20(pairAddress)); | |
pool = PoolInfo({ | |
token0: pair.token0(), | |
token1: pair.token1(), | |
reserve0: reserve0, | |
reserve1: reserve1 | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment