Skip to content

Commit

Permalink
[planet-finance] Strategy Update (#345)
Browse files Browse the repository at this point in the history
* push

* change in strategy

* Update src/strategies/index.ts

Co-authored-by: Fabien <[email protected]>

* change in strategy name

* Update index.ts

* Update examples.json

* Update index.ts

* new strategy

* sync

* EXISTING STRATEGY UPDATE

Co-authored-by: Namit Jain <[email protected]>
Co-authored-by: Fabien <[email protected]>
Co-authored-by: Chaitanya <[email protected]>
  • Loading branch information
4 people authored Aug 2, 2021
1 parent fd81cd6 commit 3208201
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 95 deletions.
2 changes: 1 addition & 1 deletion src/strategies/planet-finance/examples.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@
"addresses": [
"0x8E1af9E2579c26cc5c497528b090434CD8BBaebF"
],
"snapshot": 9269000
"snapshot": 9626600
}
]
196 changes: 102 additions & 94 deletions src/strategies/planet-finance/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,62 +9,33 @@ export const version = '0.0.1';
export const examples = examplesFile;

const planetFinanceFarmAbi = [
{
inputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
name: 'poolInfo',
outputs: [
{ internalType: 'contract IERC20', name: 'want', type: 'address' },
{ internalType: 'uint256', name: 'allocPoint', type: 'uint256' },
{ internalType: 'uint256', name: 'lastRewardBlock', type: 'uint256' },
{ internalType: 'uint256', name: 'accAQUAPerShare', type: 'uint256' },
{ internalType: 'address', name: 'strat', type: 'address' }
],
stateMutability: 'view',
type: 'function'
},
{
inputs: [
{ internalType: 'uint256', name: '_pid', type: 'uint256' },
{ internalType: 'address', name: '_user', type: 'address' }
],
name: 'stakedWantTokens',
outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
stateMutability: 'view',
type: 'function'
}
'function poolInfo(uint256) returns (address want,uint256 allocPoint,uint256 lastRewardBlock,uint256 accAQUAPerShare,address strat)',
'function stakedWantTokens(uint256 _pid, address _user) returns (uint256)'
];

export const bep20Abi: any = [
{
constant: true,
inputs: [],
name: 'totalSupply',
outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
payable: false,
stateMutability: 'view',
type: 'function'
},
{
constant: true,
inputs: [{ internalType: 'address', name: '', type: 'address' }],
name: 'balanceOf',
outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
payable: false,
stateMutability: 'view',
type: 'function'
}
];
const bep20Abi: any = [
'function totalSupply() view returns (uint256)',
'function balanceOf(address) view returns (uint256)'
]

const aquaAutoCompAbi = [
'function balanceOf() view returns (uint256)',
'function totalShares() view returns (uint256)',
'function userInfo(address) view returns (uint256 shares, uint256 lastDepositedTime , uint256 cakeAtLastUserAction , uint256 lastUserActionTime)'
]

const planetFinanceFarmContractAddress =
'0x0ac58Fd25f334975b1B61732CF79564b6200A933';

const aquaAddress = '0x72B7D61E8fC8cF971960DD9cfA59B8C829D91991';
const aquaAutoCompPoolAddress = '0x8A53dAdF2564d030b41dB1c04fB3c4998dC1326e'

const aquaAddress = '0x72B7D61E8fC8cF971960DD9cfA59B8C829D91991'

const aquaBnbLpTokenAddress = '0x03028D2F8B275695A1c6AFB69A4765e3666e36d9';
const aquaBnbLpTokenAddress = '0x03028D2F8B275695A1c6AFB69A4765e3666e36d9'

const aquaCakeLpTokenAddress = '0x8852263275Ab21FfBAEB88a17BCb27611EeA54Ef';
const aquaCakeLpTokenAddress = '0x8852263275Ab21FfBAEB88a17BCb27611EeA54Ef'

const aquaBusdLpTokenAddress = '0x0DcFde6c6761286AE0FF26abE65c30c8918889Ca';
const aquaBusdLpTokenAddress = '0x0DcFde6c6761286AE0FF26abE65c30c8918889Ca'

export async function strategy(
space,
Expand All @@ -79,8 +50,12 @@ export async function strategy(
const erc20Multi = new Multicaller(network, provider, bep20Abi, {
blockTag
});

const autoCompMulti = new Multicaller(network, provider, aquaAutoCompAbi, {
blockTag
});
// returns user's aqua balance ofr their address
let score: any = erc20BalanceOfStrategy(
let score:any = erc20BalanceOfStrategy(
space,
network,
provider,
Expand All @@ -89,8 +64,8 @@ export async function strategy(
snapshot
);

// returns user's aqua balance in aqua only vault
let usersAquaVaultBalances: any = multicall(
// returns user's aqua balance in aqua only vault
let usersAquaVaultBalances:any = multicall(
network,
provider,
planetFinanceFarmAbi,
Expand All @@ -102,8 +77,20 @@ export async function strategy(
{ blockTag }
);

// returns user's aqua balance in aqua-bnb vault
let usersAquaBnbVaultBalances: any = multicall(
//returns user's shares in aqua auto comp vault
let usersAquaAutoCompVaultBalances:any = multicall(
network,
provider,
aquaAutoCompAbi,
addresses.map((address: any) => [
aquaAutoCompPoolAddress,
'userInfo',
[address]
]),
{ blockTag }
);
// returns user's aqua balance in aqua-bnb vault
let usersAquaBnbVaultBalances:any = multicall(
network,
provider,
planetFinanceFarmAbi,
Expand All @@ -115,8 +102,8 @@ export async function strategy(
{ blockTag }
);

// returns user's aqua balance in aqua-cake vault
let usersAquaCakeVaultBalances: any = multicall(
// returns user's aqua balance in aqua-cake vault
let usersAquaCakeVaultBalances:any = multicall(
network,
provider,
planetFinanceFarmAbi,
Expand All @@ -128,8 +115,8 @@ export async function strategy(
{ blockTag }
);

// returns user's aqua balance in aqua-busd vault
let usersAquaBusdVaultBalances: any = multicall(
// returns user's aqua balance in aqua-busd vault
let usersAquaBusdVaultBalances:any = multicall(
network,
provider,
planetFinanceFarmAbi,
Expand All @@ -141,77 +128,98 @@ export async function strategy(
{ blockTag }
);

const result = await Promise.all([
score,
let result = await Promise.all([score,
usersAquaVaultBalances,
usersAquaAutoCompVaultBalances,
usersAquaBnbVaultBalances,
usersAquaCakeVaultBalances,
usersAquaBusdVaultBalances
]);
usersAquaBusdVaultBalances])

score = result[0];
usersAquaVaultBalances = result[1];
usersAquaBnbVaultBalances = result[2];
usersAquaCakeVaultBalances = result[3];
usersAquaBusdVaultBalances = result[4];
score = result[0];
usersAquaVaultBalances = result[1];
usersAquaAutoCompVaultBalances = result[2];
usersAquaBnbVaultBalances = result[3];
usersAquaCakeVaultBalances = result[4];
usersAquaBusdVaultBalances = result[5];

//AQUA-BNB
erc20Multi.call('aquaBnbTotalSupply', aquaBnbLpTokenAddress, 'totalSupply');
erc20Multi.call(
'aquaBnbTotalSupply',
aquaBnbLpTokenAddress,
'totalSupply'
);

erc20Multi.call('lpAquaBal', aquaAddress, 'balanceOf', [
erc20Multi.call('lpAquaBal', aquaAddress , 'balanceOf', [
aquaBnbLpTokenAddress
]);

let erc20Result = await erc20Multi.execute();

const totalSupply = erc20Result.aquaBnbTotalSupply.toString();
let totalSupply = erc20Result.aquaBnbTotalSupply.toString();

const contractAquaBalance = erc20Result.lpAquaBal.toString();
let contractAquaBalance = erc20Result.lpAquaBal.toString()

erc20Multi.call('lpTotalSupply', aquaCakeLpTokenAddress, 'totalSupply');
erc20Multi.call(
'lpTotalSupply',
aquaCakeLpTokenAddress,
'totalSupply'
);

erc20Multi.call('poolMMBalance', aquaAddress, 'balanceOf', [
erc20Multi.call('poolMMBalance', aquaAddress , 'balanceOf', [
aquaCakeLpTokenAddress
]);

erc20Result = await erc20Multi.execute();

const totalSupplyAquaCake = erc20Result.lpTotalSupply.toString();
let totalSupplyAquaCake = erc20Result.lpTotalSupply.toString();

const aquaCakeContractAquaBalance = erc20Result.poolMMBalance.toString();
let aquaCakeContractAquaBalance = erc20Result.poolMMBalance.toString()

erc20Multi.call('lpTotalSupply', aquaBusdLpTokenAddress, 'totalSupply');


erc20Multi.call(
'lpTotalSupply',
aquaBusdLpTokenAddress,
'totalSupply'
);
//AQUA-BUSD
erc20Multi.call('poolMMBalance', aquaAddress, 'balanceOf', [
erc20Multi.call('poolMMBalance', aquaAddress , 'balanceOf', [
aquaBusdLpTokenAddress
]);

erc20Result = await erc20Multi.execute();

const totalSupplyAquaBusd = erc20Result.lpTotalSupply.toString();
let totalSupplyAquaBusd = erc20Result.lpTotalSupply.toString();

const aquaBusdContractAquaBalance = erc20Result.poolMMBalance.toString();
let aquaBusdContractAquaBalance = erc20Result.poolMMBalance.toString()


//AQUA AUTO COMPOUNDING
autoCompMulti.call('aquaBalance',aquaAutoCompPoolAddress,'balanceOf');
autoCompMulti.call('totalShares',aquaAutoCompPoolAddress,'totalShares');

let autoCompResult = await autoCompMulti.execute();

let aquaBalance = autoCompResult.aquaBalance.toString();
aquaBalance = parseFloat(formatUnits(aquaBalance,18))

let totalShares = autoCompResult.totalShares.toString();
totalShares = parseFloat(formatUnits(totalShares,18))

return Object.fromEntries(
Object.entries(score).map((address: any, index) => [
Object.entries(score).map((address:any, index) => [
address[0],
address[1] +
parseFloat(formatUnits(usersAquaVaultBalances[index].toString(), 18)) +
(parseFloat(
formatUnits(usersAquaBnbVaultBalances[index].toString(), 18)
) /
parseFloat(formatUnits(totalSupply, 18))) *
parseFloat(formatUnits(contractAquaBalance, 18)) +
(parseFloat(
formatUnits(usersAquaCakeVaultBalances[index].toString(), 18)
) /
parseFloat(formatUnits(totalSupplyAquaCake, 18))) *
parseFloat(formatUnits(aquaCakeContractAquaBalance, 18)) +
(parseFloat(
formatUnits(usersAquaBusdVaultBalances[index].toString(), 18)
) /
parseFloat(formatUnits(totalSupplyAquaBusd, 18))) *
parseFloat(formatUnits(aquaBusdContractAquaBalance, 18))
parseFloat(formatUnits(usersAquaVaultBalances[index].toString(),18))+
((parseFloat(formatUnits(usersAquaBnbVaultBalances[index].toString(), 18)) / parseFloat(formatUnits(totalSupply,18)))
*(parseFloat(formatUnits(contractAquaBalance,18))))+
((parseFloat(formatUnits(usersAquaCakeVaultBalances[index].toString(), 18)) / parseFloat(formatUnits(totalSupplyAquaCake,18)))
*(parseFloat(formatUnits(aquaCakeContractAquaBalance,18))))+
((parseFloat(formatUnits(usersAquaBusdVaultBalances[index].toString(), 18)) / parseFloat(formatUnits(totalSupplyAquaBusd,18)))
*(parseFloat(formatUnits(aquaBusdContractAquaBalance,18))))+
((parseFloat(formatUnits(usersAquaAutoCompVaultBalances[index]['shares'].toString(), 18)) / totalShares)
*aquaBalance)
])
);
}

0 comments on commit 3208201

Please sign in to comment.