Skip to content

Instantly share code, notes, and snippets.

@RealPeha
Last active August 2, 2021 12:46
Show Gist options
  • Save RealPeha/7ef93614b115b14c2133d63ef3abd511 to your computer and use it in GitHub Desktop.
Save RealPeha/7ef93614b115b14c2133d63ef3abd511 to your computer and use it in GitHub Desktop.
Simple multicall
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