Skip to content

Commit

Permalink
Merge pull request #169 from 0xDmtri/main
Browse files Browse the repository at this point in the history
  • Loading branch information
0xOsiris authored May 25, 2024
2 parents 633b02f + 7ed1c64 commit 62fbed7
Show file tree
Hide file tree
Showing 12 changed files with 160 additions and 48,683 deletions.
80 changes: 26 additions & 54 deletions contracts/GetERC4626VaultDataBatchRequest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ interface IERC20 {
}

/**
@dev This contract is not meant to be deployed. Instead, use a static call with the
deployment bytecode as payload.
* @dev This contract is not meant to be deployed. Instead, use a static call with the
* deployment bytecode as payload.
*/
contract GetERC4626VaultDataBatchRequest {
struct VaultData {
Expand Down Expand Up @@ -61,32 +61,22 @@ contract GetERC4626VaultDataBatchRequest {
if (codeSizeIsZero(vaultData.assetToken)) continue;

// Get vault token decimals
vaultData.vaultTokenDecimals = IERC4626Vault(vaultAddress)
.decimals();
vaultData.vaultTokenDecimals = IERC4626Vault(vaultAddress).decimals();

// Get asset token decimals
(
bool assetTokenDecimalsSuccess,
bytes memory assetTokenDecimalsData
) = vaultData.assetToken.call(
abi.encodeWithSignature("decimals()")
);
(bool assetTokenDecimalsSuccess, bytes memory assetTokenDecimalsData) =
vaultData.assetToken.call{gas: 20000}(abi.encodeWithSignature("decimals()"));

if (assetTokenDecimalsSuccess) {
uint256 assetTokenDecimals;

if (assetTokenDecimalsData.length == 32) {
(assetTokenDecimals) = abi.decode(
assetTokenDecimalsData,
(uint256)
);
(assetTokenDecimals) = abi.decode(assetTokenDecimalsData, (uint256));

if (assetTokenDecimals == 0 || assetTokenDecimals > 255) {
continue;
} else {
vaultData.assetTokenDecimals = uint8(
assetTokenDecimals
);
vaultData.assetTokenDecimals = uint8(assetTokenDecimals);
}
} else {
continue;
Expand All @@ -96,53 +86,35 @@ contract GetERC4626VaultDataBatchRequest {
}

// Get token reserves
vaultData.vaultTokenReserve = IERC4626Vault(vaultAddress)
.totalSupply();
vaultData.assetTokenReserve = IERC4626Vault(vaultAddress)
.totalAssets();
vaultData.vaultTokenReserve = IERC4626Vault(vaultAddress).totalSupply();
vaultData.assetTokenReserve = IERC4626Vault(vaultAddress).totalAssets();

// Get fee deltas
// Deposit fee delta 1 - 100 asset tokens
vaultData.depositFeeDelta1 =
IERC4626Vault(vaultAddress).convertToShares(
100 * 10 ** vaultData.assetTokenDecimals
) -
IERC4626Vault(vaultAddress).previewDeposit(
100 * 10 ** vaultData.assetTokenDecimals
);
vaultData.depositFeeDelta1 = IERC4626Vault(vaultAddress).convertToShares(
100 * 10 ** vaultData.assetTokenDecimals
) - IERC4626Vault(vaultAddress).previewDeposit(100 * 10 ** vaultData.assetTokenDecimals);

// Deposit fee delta 2 - 200 asset tokens
vaultData.depositFeeDelta2 =
IERC4626Vault(vaultAddress).convertToShares(
200 * 10 ** vaultData.assetTokenDecimals
) -
IERC4626Vault(vaultAddress).previewDeposit(
200 * 10 ** vaultData.assetTokenDecimals
);
vaultData.depositFeeDelta2 = IERC4626Vault(vaultAddress).convertToShares(
200 * 10 ** vaultData.assetTokenDecimals
) - IERC4626Vault(vaultAddress).previewDeposit(200 * 10 ** vaultData.assetTokenDecimals);

vaultData.depositNoFee = IERC4626Vault(vaultAddress)
.convertToShares(100 * 10 ** vaultData.assetTokenDecimals);
vaultData.depositNoFee =
IERC4626Vault(vaultAddress).convertToShares(100 * 10 ** vaultData.assetTokenDecimals);

// Withdraw fee delta 1 - 100 vault tokens
vaultData.withdrawFeeDelta1 =
IERC4626Vault(vaultAddress).convertToAssets(
100 * 10 ** vaultData.vaultTokenDecimals
) -
IERC4626Vault(vaultAddress).previewRedeem(
100 * 10 ** vaultData.vaultTokenDecimals
);
vaultData.withdrawFeeDelta1 = IERC4626Vault(vaultAddress).convertToAssets(
100 * 10 ** vaultData.vaultTokenDecimals
) - IERC4626Vault(vaultAddress).previewRedeem(100 * 10 ** vaultData.vaultTokenDecimals);

// Withdraw fee delta 2 - 200 vault tokens
vaultData.withdrawFeeDelta2 =
IERC4626Vault(vaultAddress).convertToAssets(
200 * 10 ** vaultData.vaultTokenDecimals
) -
IERC4626Vault(vaultAddress).previewRedeem(
200 * 10 ** vaultData.vaultTokenDecimals
);

vaultData.withdrawNoFee = IERC4626Vault(vaultAddress)
.convertToAssets(100 * 10 ** vaultData.vaultTokenDecimals);
vaultData.withdrawFeeDelta2 = IERC4626Vault(vaultAddress).convertToAssets(
200 * 10 ** vaultData.vaultTokenDecimals
) - IERC4626Vault(vaultAddress).previewRedeem(200 * 10 ** vaultData.vaultTokenDecimals);

vaultData.withdrawNoFee =
IERC4626Vault(vaultAddress).convertToAssets(100 * 10 ** vaultData.vaultTokenDecimals);

allVaultData[i] = vaultData;
}
Expand Down
48 changes: 15 additions & 33 deletions contracts/GetUniswapV2PoolDataBatchRequest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,16 @@ interface IUniswapV2Pair {

function token1() external view returns (address);

function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface IERC20 {
function decimals() external view returns (uint8);
}

/**
@dev This contract is not meant to be deployed. Instead, use a static call with the
deployment bytecode as payload.
* @dev This contract is not meant to be deployed. Instead, use a static call with the
* deployment bytecode as payload.
*/
contract GetUniswapV2PoolDataBatchRequest {
struct PoolData {
Expand All @@ -43,28 +36,24 @@ contract GetUniswapV2PoolDataBatchRequest {
if (codeSizeIsZero(poolAddress)) continue;

PoolData memory poolData;
//Get tokens A and B

// Get tokens A and B
poolData.tokenA = IUniswapV2Pair(poolAddress).token0();
poolData.tokenB = IUniswapV2Pair(poolAddress).token1();

//Check that tokenA and tokenB do not have codesize of 0
// Check that tokenA and tokenB do not have codesize of 0
if (codeSizeIsZero(poolData.tokenA)) continue;
if (codeSizeIsZero(poolData.tokenB)) continue;

//Get tokenA decimals
(
bool tokenADecimalsSuccess,
bytes memory tokenADecimalsData
) = poolData.tokenA.call(abi.encodeWithSignature("decimals()"));
// Get tokenA decimals
(bool tokenADecimalsSuccess, bytes memory tokenADecimalsData) =
poolData.tokenA.call{gas: 20000}(abi.encodeWithSignature("decimals()"));

if (tokenADecimalsSuccess) {
uint256 tokenADecimals;

if (tokenADecimalsData.length == 32) {
(tokenADecimals) = abi.decode(
tokenADecimalsData,
(uint256)
);
(tokenADecimals) = abi.decode(tokenADecimalsData, (uint256));

if (tokenADecimals == 0 || tokenADecimals > 255) {
continue;
Expand All @@ -77,21 +66,16 @@ contract GetUniswapV2PoolDataBatchRequest {
} else {
continue;
}
//Get tokenB decimals

(
bool tokenBDecimalsSuccess,
bytes memory tokenBDecimalsData
) = poolData.tokenB.call(abi.encodeWithSignature("decimals()"));
// Get tokenB decimals
(bool tokenBDecimalsSuccess, bytes memory tokenBDecimalsData) =
poolData.tokenB.call{gas: 20000}(abi.encodeWithSignature("decimals()"));

if (tokenBDecimalsSuccess) {
uint256 tokenBDecimals;

if (tokenBDecimalsData.length == 32) {
(tokenBDecimals) = abi.decode(
tokenBDecimalsData,
(uint256)
);
(tokenBDecimals) = abi.decode(tokenBDecimalsData, (uint256));

if (tokenBDecimals == 0 || tokenBDecimals > 255) {
continue;
Expand All @@ -106,9 +90,7 @@ contract GetUniswapV2PoolDataBatchRequest {
}

// Get reserves
(poolData.reserve0, poolData.reserve1, ) = IUniswapV2Pair(
poolAddress
).getReserves();
(poolData.reserve0, poolData.reserve1,) = IUniswapV2Pair(poolAddress).getReserves();

allPoolData[i] = poolData;
}
Expand Down
33 changes: 10 additions & 23 deletions contracts/GetUniswapV3PoolDataBatchRequest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ interface IERC20 {
}

/**
@dev This contract is not meant to be deployed. Instead, use a static call with the
deployment bytecode as payload.
* @dev This contract is not meant to be deployed. Instead, use a static call with the
* deployment bytecode as payload.
*/
contract GetUniswapV3PoolDataBatchRequest {
struct PoolData {
Expand Down Expand Up @@ -80,19 +80,14 @@ contract GetUniswapV3PoolDataBatchRequest {
if (codeSizeIsZero(poolData.tokenB)) continue;

//Get tokenA decimals
(
bool tokenADecimalsSuccess,
bytes memory tokenADecimalsData
) = poolData.tokenA.call(abi.encodeWithSignature("decimals()"));
(bool tokenADecimalsSuccess, bytes memory tokenADecimalsData) =
poolData.tokenA.call{gas: 20000}(abi.encodeWithSignature("decimals()"));

if (tokenADecimalsSuccess) {
uint256 tokenADecimals;

if (tokenADecimalsData.length == 32) {
(tokenADecimals) = abi.decode(
tokenADecimalsData,
(uint256)
);
(tokenADecimals) = abi.decode(tokenADecimalsData, (uint256));

if (tokenADecimals == 0 || tokenADecimals > 255) {
continue;
Expand All @@ -106,18 +101,13 @@ contract GetUniswapV3PoolDataBatchRequest {
continue;
}

(
bool tokenBDecimalsSuccess,
bytes memory tokenBDecimalsData
) = poolData.tokenB.call(abi.encodeWithSignature("decimals()"));
(bool tokenBDecimalsSuccess, bytes memory tokenBDecimalsData) =
poolData.tokenB.call{gas: 20000}(abi.encodeWithSignature("decimals()"));

if (tokenBDecimalsSuccess) {
uint256 tokenBDecimals;
if (tokenBDecimalsData.length == 32) {
(tokenBDecimals) = abi.decode(
tokenBDecimalsData,
(uint256)
);
(tokenBDecimals) = abi.decode(tokenBDecimalsData, (uint256));

if (tokenBDecimals == 0 || tokenBDecimals > 255) {
continue;
Expand All @@ -131,12 +121,9 @@ contract GetUniswapV3PoolDataBatchRequest {
continue;
}

(uint160 sqrtPriceX96, int24 tick, , , , , ) = IUniswapV3Pool(
poolAddress
).slot0();
(uint160 sqrtPriceX96, int24 tick,,,,,) = IUniswapV3Pool(poolAddress).slot0();

(, int128 liquidityNet, , , , , , ) = IUniswapV3Pool(poolAddress)
.ticks(tick);
(, int128 liquidityNet,,,,,,) = IUniswapV3Pool(poolAddress).ticks(tick);

poolData.liquidity = IUniswapV3Pool(poolAddress).liquidity();
poolData.tickSpacing = IUniswapV3Pool(poolAddress).tickSpacing();
Expand Down
Loading

0 comments on commit 62fbed7

Please sign in to comment.