Skip to content

Commit

Permalink
add rest clm reward pools (#1489)
Browse files Browse the repository at this point in the history
* Add base/linea/manta/matic/moonbeam/optimism/zksync reward pools

* Remove duplicate pancake-cow-arb-weth-usdc

* Add RP for uniswap-cow-poly-wbtc-usdc
Remove unused uniswap-cow-arb-weth-ens
Tag beta vaults in json that don't need a RP

* turn off some getBeefyRewardPoolV2Apr warnings
  • Loading branch information
ReflectiveChimp authored Jul 2, 2024
1 parent 1e66a3f commit 20d3dd0
Show file tree
Hide file tree
Showing 10 changed files with 438 additions and 124 deletions.
7 changes: 5 additions & 2 deletions src/api/cowcentrated/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { ApiChain } from '../../utils/chain';
import { isNonEmptyArray, NonEmptyArray } from '../../utils/array';

type JsonCowClm = {
beta?: boolean;
address: string;
lpAddress: string;
tokens: string[];
Expand All @@ -22,6 +23,7 @@ type JsonCowClm = {
};

export type CowClm = {
beta: boolean | undefined;
address: Address;
lpAddress: Address;
tokens: [Address, Address];
Expand Down Expand Up @@ -63,9 +65,10 @@ function isValidCowRewardPoolRewardConfig(
}

function isValidCowClmRewardPoolConfig(
rewardPool: NonNullable<JsonCowClm>['rewardPool']
rewardPool: JsonCowClm['rewardPool']
): rewardPool is CowRewardPool {
return (
rewardPool &&
rewardPool.oracleId &&
isAddress(rewardPool.address) &&
(!rewardPool.rewards ||
Expand All @@ -82,7 +85,7 @@ function isValidCowClmConfig(clm: JsonCowClm): clm is AnyCowClm {
isAddress(clm.address) &&
isAddress(clm.lpAddress) &&
clm.tokens.every(isAddress) &&
(!clm.rewardPool || isValidCowClmRewardPoolConfig(clm.rewardPool))
((!clm.rewardPool && clm.beta) || isValidCowClmRewardPoolConfig(clm.rewardPool))
);
}

Expand Down
90 changes: 62 additions & 28 deletions src/api/stats/common/getBeefyRewardPoolV2Apr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,18 @@ import { ZERO_ADDRESS } from '../../../utils/address';
import { getUnixTime } from 'date-fns';
import { isResultFulfilled } from '../../../utils/promise';

const WARN_STAKED_IS_ZERO: boolean = false;
const WARN_STAKED_MISSING_PRICE: boolean = true;
const WARN_REWARDS_NONE_IN_CONTRACT: boolean = false;
const WARN_REWARDS_NONE_IN_ADDRESS_BOOK: boolean = true;
const WARN_REWARDS_SOME_IN_ADDRESS_BOOK: boolean = true;
const WARN_REWARD_INFO_REVERT: boolean = true;
const WARN_REWARDS_ALL_INFO_REVERT: boolean = false;
const WARN_REWARDS_ALL_INACTIVE: boolean = true;
const WARN_REWARD_PRICE_THREW: boolean = true;
const WARN_REWARD_PRICE_MISSING: boolean = true;
const WARN_REWARDS_ALL_MISSING_PRICE: boolean = false;

export type Token = {
address: Address;
oracleId: string;
Expand Down Expand Up @@ -128,9 +140,11 @@ async function getRewardConfigsFromContract(

const [rewardAddresses] = earned;
if (rewardAddresses.length === 0) {
console.warn(
`getRewardConfigsFromContract for ${pool.oracleId}: no rewards found via contract`
);
if (WARN_REWARDS_NONE_IN_CONTRACT) {
console.warn(
`getRewardConfigsFromContract for ${pool.oracleId}: no rewards found via contract`
);
}
return [];
}

Expand All @@ -149,17 +163,21 @@ async function getRewardConfigsFromContract(
.filter(isDefined);

if (rewardsInAddressBook.length === 0) {
console.warn(
`getRewardConfigsFromContract for ${pool.oracleId}: no rewards found via contract are in the address book`
);
if (WARN_REWARDS_NONE_IN_ADDRESS_BOOK) {
console.warn(
`getRewardConfigsFromContract for ${pool.oracleId}: no rewards found via contract are in the address book`
);
}
return [];
}

if (rewardsInAddressBook.length < rewardAddresses.length) {
console.warn(
`getRewardConfigsFromContract for ${pool.oracleId}: some rewards found via contract are not in the address book`,
rewardAddresses
);
if (WARN_REWARDS_SOME_IN_ADDRESS_BOOK) {
console.warn(
`getRewardConfigsFromContract for ${pool.oracleId}: some rewards found via contract are not in the address book`,
rewardAddresses
);
}
}

return rewardsInAddressBook;
Expand All @@ -174,16 +192,20 @@ async function getRewardConfigsPrices(
.map((reward, index) => {
const price = prices[index];
if (price.status === 'rejected') {
console.warn(
`getRewardConfigsPrices for ${pool.oracleId}: failed to get price for reward ${reward.oracleId}`,
price.reason
);
if (WARN_REWARD_PRICE_THREW) {
console.warn(
`getRewardConfigsPrices for ${pool.oracleId}: failed to get price for reward ${reward.oracleId}`,
price.reason
);
}
return undefined;
}
if (!isFiniteNumber(price.value)) {
console.warn(
`getRewardConfigsPrices for ${pool.oracleId}: price for reward ${reward.oracleId} is not a finite number`
);
if (WARN_REWARD_PRICE_MISSING) {
console.warn(
`getRewardConfigsPrices for ${pool.oracleId}: price for reward ${reward.oracleId} is not a finite number`
);
}
return undefined;
}

Expand All @@ -192,7 +214,9 @@ async function getRewardConfigsPrices(
.filter(isDefined);

if (rewardsWithPrices.length === 0) {
console.warn(`getRewardConfigsPrices for ${pool.oracleId}: no rewards have prices`);
if (WARN_REWARDS_ALL_MISSING_PRICE) {
console.warn(`getRewardConfigsPrices for ${pool.oracleId}: no rewards have prices`);
}
return [];
}

Expand All @@ -212,10 +236,12 @@ async function getRewardConfigsInfo(
.map((reward, index) => {
const info = rewardsInfo[index];
if (info.status === 'rejected') {
console.warn(
`getRewardConfigsInfo for ${pool.oracleId}: failed to get reward info for reward ${reward.oracleId} at ${reward.id}`,
info.reason
);
if (WARN_REWARD_INFO_REVERT) {
console.warn(
`getRewardConfigsInfo for ${pool.oracleId}: failed to get reward info for reward ${reward.oracleId} at ${reward.id}`,
info.reason
);
}
return undefined;
}

Expand All @@ -232,15 +258,19 @@ async function getRewardConfigsInfo(
.filter(isDefined);

if (rewardsWithInfo.length === 0) {
console.warn(`getRewardConfigsInfo for ${pool.oracleId}: no rewards have reward info`);
if (WARN_REWARDS_ALL_INFO_REVERT) {
console.warn(`getRewardConfigsInfo for ${pool.oracleId}: no rewards have reward info`);
}
return [];
}

const now = getUnixTime(new Date());
const activeRewards = rewardsWithInfo.filter(reward => reward.periodFinish > now);

if (activeRewards.length === 0) {
console.warn(`getRewardConfigsInfo for ${pool.oracleId}: no rewards are active`);
if (WARN_REWARDS_ALL_INACTIVE) {
console.warn(`getRewardConfigsInfo for ${pool.oracleId}: no rewards are active`);
}
return [];
}

Expand Down Expand Up @@ -294,14 +324,18 @@ async function getTotalStakedInUsd(
]);

if (totalStaked === 0n) {
console.warn(`getTotalStakedInUsd for ${pool.oracleId}: total staked is zero`);
if (WARN_STAKED_IS_ZERO) {
console.warn(`getTotalStakedInUsd for ${pool.oracleId}: total staked is zero`);
}
return BIG_ZERO;
}

if (!isFiniteNumber(price)) {
console.warn(
`getTotalStakedInUsd for ${pool.oracleId}: failed to get price for underlying ${pool.stakedToken.oracleId}`
);
if (WARN_STAKED_MISSING_PRICE) {
console.warn(
`getTotalStakedInUsd for ${pool.oracleId}: failed to get price for underlying ${pool.stakedToken.oracleId}`
);
}
return BIG_ZERO;
}

Expand Down
33 changes: 11 additions & 22 deletions src/data/arbitrum/beefyCowVaults.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,6 @@
"oracleId": "pancake-cow-arb-weth-usdc-rp"
}
},
{
"address": "0xA297024a99098d52aae466AC5F48520d514262bA",
"lpAddress": "0x7fCDC35463E3770c2fB992716Cd070B63540b947",
"tokens": [
"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
],
"tokenOracleIds": ["WETH", "USDC"],
"decimals": [18, 6],
"oracleId": "pancake-cow-arb-weth-usdc"
},
{
"address": "0xF0eB29f3E21f8F88a6c93dE44993bac27c4B519F",
"lpAddress": "0x389938CF14Be379217570D8e4619E51fBDafaa21",
Expand Down Expand Up @@ -520,17 +509,6 @@
"oracleId": "uniswap-cow-arb-wmatic-weth-rp"
}
},
{
"address": "0x28c1D885e7097642249FD1FA268E93b581c2599A",
"lpAddress": "0x005377Dbf6dd39f05896081f366f3A2999A1168C",
"tokens": [
"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
"0xfeA31d704DEb0975dA8e77Bf13E04239e70d7c28"
],
"tokenOracleIds": ["WETH", "ENS"],
"decimals": [18, 18],
"oracleId": "uniswap-cow-arb-weth-ens"
},
{
"address": "0x6781813576efe953a5fb765C1f93757797C40578",
"lpAddress": "0xDfA19e743421C394d904f5a113121c2227d2364b",
Expand Down Expand Up @@ -1192,6 +1170,7 @@
}
},
{
"beta": true,
"address": "0xe3EAc56810C885067dC4C43A8049A07D9Bb127a4",
"lpAddress": "0xd3E11119d2680c963F1CDCffeCe0c4adE823Fb58",
"tokens": [
Expand All @@ -1203,6 +1182,7 @@
"oracleId": "uniswap-cow-arb-silo-weth"
},
{
"beta": true,
"address": "0x9aA49971f4956D7831b2CD1c9AF7ED931b5f91BC",
"lpAddress": "0xCb198a55e2a88841E855bE4EAcaad99422416b33",
"tokens": [
Expand All @@ -1214,6 +1194,7 @@
"oracleId": "uniswap-cow-arb-tbtc-weth"
},
{
"beta": true,
"address": "0x4C32b8d26E6ab2Ce401772514C999768f63Afb4e",
"lpAddress": "0xC7341e85996EeB05897d3DeC79448b6e4cCc09CF",
"tokens": [
Expand All @@ -1225,6 +1206,7 @@
"oracleId": "uniswap-cow-arb-wsteth-usdc.e"
},
{
"beta": true,
"address": "0xd9d5d3743b67FF04fE2F5c18Ddd596Cf370A8126",
"lpAddress": "0xC31E54c7a869B9FcBEcc14363CF510d1c41fa443",
"tokens": [
Expand All @@ -1236,6 +1218,7 @@
"oracleId": "uniswap-cow-arb-eth-usdc.e"
},
{
"beta": true,
"address": "0x791b79Ff974A7FD29551744203F99d56Df241FF1",
"lpAddress": "0x641C00A822e8b671738d32a431a4Fb6074E5c79d",
"tokens": [
Expand All @@ -1247,6 +1230,7 @@
"oracleId": "uniswap-cow-arb-eth-usdt"
},
{
"beta": true,
"address": "0xC670F18D0fEEf76CCb7c4c3Ce0226cc64c8B6356",
"lpAddress": "0x59D72DDB29Da32847A4665d08ffc8464A7185FAE",
"tokens": [
Expand All @@ -1258,6 +1242,7 @@
"oracleId": "uniswap-cow-arb-magic-weth"
},
{
"beta": true,
"address": "0x809F9007172bEAAE23c08352995E60B9f4c11BB2",
"lpAddress": "0xcDa53B1F66614552F834cEeF361A8D12a0B8DaD8",
"tokens": [
Expand All @@ -1269,6 +1254,7 @@
"oracleId": "uniswap-cow-arb-arb-usdc.e"
},
{
"beta": true,
"address": "0xD3d8d178AAeCDE5ba307c8806cB04346BB91E307",
"lpAddress": "0xC6F780497A95e246EB9449f5e4770916DCd6396A",
"tokens": [
Expand All @@ -1280,6 +1266,7 @@
"oracleId": "uniswap-cow-arb-arb-eth-t3"
},
{
"beta": true,
"address": "0x2a2e016F9c30c7dA5a41b21c19e9619ff78ab673",
"lpAddress": "0xdbaeB7f0DFe3a0AAFD798CCECB5b22E708f7852c",
"tokens": [
Expand All @@ -1291,6 +1278,7 @@
"oracleId": "uniswap-cow-arb-pendle-eth"
},
{
"beta": true,
"address": "0xeDd08A6FF7aEEe1E4DCCC103198af06B2316d8B8",
"lpAddress": "0xC6962004f452bE9203591991D15f6b388e09E8D0",
"tokens": [
Expand All @@ -1302,6 +1290,7 @@
"oracleId": "uniswap-cow-arb-eth-usdc"
},
{
"beta": true,
"address": "0x8d8E012D80e2a7B3b4de2a050C0CF923a0064a8E",
"lpAddress": "0x2f5e87C9312fa29aed5c179E456625D79015299c",
"tokens": [
Expand Down
Loading

0 comments on commit 20d3dd0

Please sign in to comment.