diff --git a/src/strategies/index.ts b/src/strategies/index.ts index 709aad147..89a689ff3 100644 --- a/src/strategies/index.ts +++ b/src/strategies/index.ts @@ -143,6 +143,7 @@ import * as snowswap from './snowswap'; import * as meebitsdao from './meebitsdao'; import * as crucibleERC20BalanceOf from './crucible-erc20-balance-of'; import * as hasrock from './has-rock'; +import * as sunriseGamingStaking from './sunrisegaming-staking'; const strategies = { coordinape, @@ -287,6 +288,7 @@ const strategies = { snowswap, meebitsdao, 'crucible-erc20-balance-of': crucibleERC20BalanceOf, + 'sunrisegaming-staking': sunriseGamingStaking, 'has-rock': hasrock }; diff --git a/src/strategies/sunrisegaming-staking/README.md b/src/strategies/sunrisegaming-staking/README.md new file mode 100644 index 000000000..831fcb55a --- /dev/null +++ b/src/strategies/sunrisegaming-staking/README.md @@ -0,0 +1,15 @@ +# Sunrise Gaming Staking Token + +This strategy returns balances of the underlying token in Sunrise Staking pools + +Here is an example of parameters: + +```json +{ + "symbol": "SUNC", + "decimals": 18, + "tokenAddress": "0x692accdd8b86692427e0aa4752ae917df01cc56f", + "stakingAddress": "0x7dbE40ac6bB41A5FE4Fa2C74f31d7DEFBC793B58", + "poolIndex": 0 +} +``` \ No newline at end of file diff --git a/src/strategies/sunrisegaming-staking/examples.json b/src/strategies/sunrisegaming-staking/examples.json new file mode 100644 index 000000000..d345cf31e --- /dev/null +++ b/src/strategies/sunrisegaming-staking/examples.json @@ -0,0 +1,27 @@ +[ + { + "name": "Sunrise Staked token", + "strategy": { + "name": "sunrisegaming-staking", + "params": { + "symbol": "SUNC", + "decimals": 18, + "tokenAddress": "0x692accdd8b86692427e0aa4752ae917df01cc56f", + "stakingAddress": "0x7dbE40ac6bB41A5FE4Fa2C74f31d7DEFBC793B58", + "poolIndex": 0 + } + }, + "network": "1", + "addresses": [ + "0x7dbe40ac6bb41a5fe4fa2c74f31d7defbc793b58", + "0x26533020822f9b28c801e6beb772ef74dfe0c81e", + "0x75bd5989ce8f962a1864d8a0af8bfb5130805722", + "0x7505afcd576bb995577a944bccdb5c54c7d5ec45", + "0x930af93baa5f2c2f71bafd5a2fd7b1d47a61c352", + "0xbc444050d78107872c0262452fff004da9208258", + "0x26533020822f9b28c801e6beb772ef74dfe0c81e", + "0x45e049241b69df70cead33ef5a41d2d0a128ce01" + ], + "snapshot": 13229798 + } +] \ No newline at end of file diff --git a/src/strategies/sunrisegaming-staking/index.ts b/src/strategies/sunrisegaming-staking/index.ts new file mode 100644 index 000000000..4871dcbae --- /dev/null +++ b/src/strategies/sunrisegaming-staking/index.ts @@ -0,0 +1,47 @@ +import { multicall } from '../../utils'; +import { formatUnits } from '@ethersproject/units'; +import { BigNumber } from '@ethersproject/bignumber'; + +export const author = 'sunrisedao'; +export const version = '0.1.0'; + +const masterChefAbi = [ + 'function userInfo(uint256, address) view returns (uint256 amount, uint256 rewardDebt)' +]; + +function bn(num: any): BigNumber { + return BigNumber.from(num.toString()); +} + +export async function strategy( + _space, + network, + provider, + addresses, + options, + snapshot +) { + const blockTag = typeof snapshot === 'number' ? snapshot : 'latest'; + + // Get staked LP in staking constract + let stakedRes = await multicall( + network, + provider, + masterChefAbi, + [ + ...addresses.map((address: any) => [ + options.stakingAddress, + 'userInfo', + [options.poolIndex, address] + ]) + ], + { blockTag } + ); + + return Object.fromEntries( + stakedRes.map((stakedInfo, i) => { + const parsedAmount = parseFloat(formatUnits(bn(stakedInfo.amount), options.decimal)); + return [addresses[i], parsedAmount]; + }) + ); +}