From 0ee0de500c89719069b15d486cd4a6decdecc791 Mon Sep 17 00:00:00 2001 From: Steven Li Date: Sun, 8 May 2022 17:35:24 -0700 Subject: [PATCH 01/13] setup --- src/integration_tests/nex_prism/config.ts | 49 ++++++++++++++++--- src/integration_tests/nex_prism/definition.ts | 26 +++++++++- src/integration_tests/nex_prism/executor.ts | 19 ++++++- 3 files changed, 82 insertions(+), 12 deletions(-) diff --git a/src/integration_tests/nex_prism/config.ts b/src/integration_tests/nex_prism/config.ts index 1f5be04..0ffeacf 100644 --- a/src/integration_tests/nex_prism/config.ts +++ b/src/integration_tests/nex_prism/config.ts @@ -78,7 +78,39 @@ export interface VaultConfig { psi_stakers_reward_ratio: string, } +export interface VaultRewardRatios { + rewards_distribution_update_step: string, + nexprism_stakers_reward_ratio: string, + psi_stakers_reward_ratio: string, + nyluna_stakers_reward_ratio: string, + min_nexprism_stakers_reward_ratio: string, + max_nexprism_stakers_reward_ratio: string, + min_nyluna_stakers_reward_ratio: string, + max_nyluna_stakers_reward_ratio: string, +} +// reward ratios for the nex-prism-comvex vaults +export function VaultRewardRatios( + rewards_distribution_update_step: string = "1.05", + nexprism_stakers_reward_ratio: string = "0.6", + psi_stakers_reward_ratio: string = "0.1", + nyluna_stakers_reward_ratio: string = "0.3", + min_nexprism_stakers_reward_ratio: string = "0.1", + max_nexprism_stakers_reward_ratio: string = "0.9", + min_nyluna_stakers_reward_ratio: string = "0.1", + max_nyluna_stakers_reward_ratio: string = "0.9", +): VaultRewardRatios { + return { + rewards_distribution_update_step, + nexprism_stakers_reward_ratio, + psi_stakers_reward_ratio, + nyluna_stakers_reward_ratio, + min_nexprism_stakers_reward_ratio, + max_nexprism_stakers_reward_ratio, + min_nyluna_stakers_reward_ratio, + max_nyluna_stakers_reward_ratio, + } +} export function VaultConfig( sender: string, @@ -96,6 +128,7 @@ export function VaultConfig( yluna_prism_pair: string, autocompounder_code_id: number, prism_gov_addr: string, + vault_reward_ratios: VaultRewardRatios = VaultRewardRatios(), ): VaultConfig { return { owner: sender, @@ -122,16 +155,16 @@ export function VaultConfig( rewards_distribution_update_period_secs: 60, - rewards_distribution_update_step: "1.05", + rewards_distribution_update_step: vault_reward_ratios.rewards_distribution_update_step, - nexprism_stakers_reward_ratio: "0.6", - psi_stakers_reward_ratio: "0.1", - nyluna_stakers_reward_ratio: "0.3", + nexprism_stakers_reward_ratio: vault_reward_ratios.nexprism_stakers_reward_ratio, + psi_stakers_reward_ratio: vault_reward_ratios.psi_stakers_reward_ratio, + nyluna_stakers_reward_ratio: vault_reward_ratios.nyluna_stakers_reward_ratio, - min_nexprism_stakers_reward_ratio: "0.1", - max_nexprism_stakers_reward_ratio: "0.9", - min_nyluna_stakers_reward_ratio: "0.1", - max_nyluna_stakers_reward_ratio: "0.9", + min_nexprism_stakers_reward_ratio: vault_reward_ratios.min_nexprism_stakers_reward_ratio, + max_nexprism_stakers_reward_ratio: vault_reward_ratios.max_nexprism_stakers_reward_ratio, + min_nyluna_stakers_reward_ratio: vault_reward_ratios.min_nyluna_stakers_reward_ratio, + max_nyluna_stakers_reward_ratio: vault_reward_ratios.max_nyluna_stakers_reward_ratio, } } diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index bc56621..8b7ad5b 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -5,7 +5,7 @@ import { Cw20CodeId, GovernanceConfig, init_astroport_factory, init_astroport_fa import { instantiate_contract_raw, execute_contract, get_token_balance, instantiate_contract, sleep, store_contract, increase_token_allowance } from "../../utils"; import { PrismMarketInfo } from "../deploy_prism/config"; import { prism_init, stake_prism_for_xprism } from "../deploy_prism/definition"; -import { NexPrismAddrsAndInfo, NexPrismDeploymentInfo, StakerResponse, StakingConfig, VaultConfig } from "./config"; +import { NexPrismAddrsAndInfo, NexPrismDeploymentInfo, StakerResponse, StakingConfig, VaultConfig, VaultRewardRatios } from "./config"; const artifacts_path = "wasm_artifacts"; const path_to_nexprism_artifacts = `${artifacts_path}/nexus/nexprism`; @@ -28,6 +28,7 @@ async function full_nex_prism_init( prism_xprism_boost_addr: string, yluna_prism_pair: string, prism_governance_addr: string, + vault_reward_ratios: VaultRewardRatios = VaultRewardRatios(), // optional ): Promise { let staking_code_id = await store_contract(lcd_client, sender, nexus_prism_staking) console.log(`nexus_prism_staking uploaded\n\tcode_id: ${staking_code_id}`); @@ -54,6 +55,7 @@ async function full_nex_prism_init( yluna_prism_pair, autocompounder_code_id, prism_governance_addr, + vault_reward_ratios, ) let vault_deploy_res = await instantiate_contract_raw( @@ -196,6 +198,7 @@ async function provide_nexprism_xprism_liquidity(lcd_client: LCDClient, sender: export async function prism_nexprism_full_init( lcd_client: LCDClient, sender: Wallet, + nex_prism_vault_reward_ratio: VaultRewardRatios = VaultRewardRatios(), ): Promise { // get cw20_code_id let cw20_code_id = await Cw20CodeId(lcd_client, sender); @@ -233,7 +236,8 @@ export async function prism_nexprism_full_init( prism_market_info.prism_launch_pool_addr, prism_market_info.prism_xprism_boost_addr, prism_market_info.yluna_prism_pair_addr, - prism_market_info.prism_gov_addr + prism_market_info.prism_gov_addr, + nex_prism_vault_reward_ratio ) await provide_nexprism_xprism_liquidity(lcd_client, sender, prism_market_info, nex_prism_info); @@ -542,4 +546,22 @@ export async function stake_nyluna_test( assert(Number(staker.balance) == nyluna_bal); console.log("Staked nyluna successfully"); +} + +export async function test_changing_reward_ratios( + lcd_client: LCDClient, + sender: Wallet, +) { + console.log("Start changing nex-prism-convex reward ratios test"); + + const use_default = undefined; + + const split_rewards_evenly = VaultRewardRatios( + use_default, + ".34", + ".33", + ".33", + ) + prism_nexprism_full_init(lcd_client, sender, split_rewards_evenly); + // TODO: } \ No newline at end of file diff --git a/src/integration_tests/nex_prism/executor.ts b/src/integration_tests/nex_prism/executor.ts index 8a079af..186e2ce 100644 --- a/src/integration_tests/nex_prism/executor.ts +++ b/src/integration_tests/nex_prism/executor.ts @@ -1,7 +1,8 @@ import { Command } from 'commander'; +import { Cw20CodeId } from 'src/config'; import { get_lcd_config_with_wallet_for_integration_tests_only } from '../utils'; import { NexPrismAddrsAndInfo } from './config'; -import { prism_nexprism_full_init, simple_deposit, stake_nyluna_test } from './definition'; +import { prism_nexprism_full_init, simple_deposit, stake_nyluna_test, test_changing_reward_ratios } from './definition'; async function run_program() { const program = new Command(); @@ -24,6 +25,13 @@ async function run_program() { await run_stake_nyluna_test(await deploy()); }); + // npm run nex-prism-integration-tests -- test_changing_reward_ratios + program + .command('test_changing_reward_ratios') + .action(async () => { + await run_test_changing_reward_ratios(); + }) + await program.parseAsync(process.argv); } @@ -51,4 +59,11 @@ async function run_simple_deposit(nex_prism_addrs_and_info: NexPrismAddrsAndInfo async function run_stake_nyluna_test(nex_prism_addrs_and_info: NexPrismAddrsAndInfo) { const [lcd_client, sender] = await get_lcd_config_with_wallet_for_integration_tests_only(); await stake_nyluna_test(lcd_client, sender, nex_prism_addrs_and_info); -} \ No newline at end of file +} + +async function run_test_changing_reward_ratios() { + // changes reward ratios on the nex-prism-convex contracts + const [lcd_client, sender] = await get_lcd_config_with_wallet_for_integration_tests_only(); + + await test_changing_reward_ratios(lcd_client, sender); +} From 326427e103f68dff05c411a3037f6ca5383080d9 Mon Sep 17 00:00:00 2001 From: Steven Li Date: Sun, 8 May 2022 17:42:16 -0700 Subject: [PATCH 02/13] check_nexprism_rewards --- src/integration_tests/nex_prism/definition.ts | 15 ++++++++++----- src/integration_tests/nex_prism/executor.ts | 1 - 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index 8b7ad5b..c50f703 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -325,15 +325,19 @@ export async function deposit_yluna(lcd_client: LCDClient, sender: Wallet, yluna return send_result; } -async function claim_all_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, _nexprism_token_addr: string, nexprism_staking_addr: string) { - // query amt of rewards +async function check_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, nexprism_token_addr: string, nexprism_staking_addr: string) { let rewards_earned_resp = await lcd_client.wasm.contractQuery(nexprism_staking_addr, { rewards: { address: sender.key.accAddress } }); console.log("rewards \n\t", rewards_earned_resp); + return rewards_earned_resp +} +async function claim_all_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, _nexprism_token_addr: string, nexprism_staking_addr: string) { + // query amt of rewards + let _rewards_earned_resp = await check_nexprism_rewards(lcd_client, sender, _nexprism_token_addr, nexprism_staking_addr); try { const claim_rewards_result = await execute_contract(lcd_client, sender, nexprism_staking_addr, { @@ -552,16 +556,17 @@ export async function test_changing_reward_ratios( lcd_client: LCDClient, sender: Wallet, ) { - console.log("Start changing nex-prism-convex reward ratios test"); - const use_default = undefined; + console.log("Start changing nex-prism-convex reward ratios test"); + const split_rewards_evenly = VaultRewardRatios( use_default, ".34", ".33", ".33", ) - prism_nexprism_full_init(lcd_client, sender, split_rewards_evenly); + const deploy_split_evenly_info = prism_nexprism_full_init(lcd_client, sender, split_rewards_evenly); + // TODO: } \ No newline at end of file diff --git a/src/integration_tests/nex_prism/executor.ts b/src/integration_tests/nex_prism/executor.ts index 186e2ce..bec5df3 100644 --- a/src/integration_tests/nex_prism/executor.ts +++ b/src/integration_tests/nex_prism/executor.ts @@ -1,5 +1,4 @@ import { Command } from 'commander'; -import { Cw20CodeId } from 'src/config'; import { get_lcd_config_with_wallet_for_integration_tests_only } from '../utils'; import { NexPrismAddrsAndInfo } from './config'; import { prism_nexprism_full_init, simple_deposit, stake_nyluna_test, test_changing_reward_ratios } from './definition'; From 4961e0449cc2db5dff48c3abbcf9549c48a3bcd7 Mon Sep 17 00:00:00 2001 From: Steven Li Date: Sun, 8 May 2022 18:05:32 -0700 Subject: [PATCH 03/13] fix --- src/integration_tests/nex_prism/definition.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index c50f703..9c22123 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -562,9 +562,9 @@ export async function test_changing_reward_ratios( const split_rewards_evenly = VaultRewardRatios( use_default, - ".34", - ".33", - ".33", + "0.34", + "0.33", + "0.33", ) const deploy_split_evenly_info = prism_nexprism_full_init(lcd_client, sender, split_rewards_evenly); From 628651ac7f5351d091aeac979eeb9443634c0adc Mon Sep 17 00:00:00 2001 From: Steven Li Date: Sun, 8 May 2022 18:59:52 -0700 Subject: [PATCH 04/13] get_token_balance_and_log --- .../basset_vault/definition.ts | 2 +- src/integration_tests/nex_prism/definition.ts | 24 ++++++++++++++----- src/utils.ts | 10 ++++++++ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/integration_tests/basset_vault/definition.ts b/src/integration_tests/basset_vault/definition.ts index 24d38f3..2b88041 100644 --- a/src/integration_tests/basset_vault/definition.ts +++ b/src/integration_tests/basset_vault/definition.ts @@ -577,7 +577,7 @@ async function get_token_balance(lcd_client: LCDClient, token_holder_addr: strin } }); return +result.balance; -} +} async function assert_loan(lcd_client: LCDClient, anchor_market_addr: string, borrower_addr: string, liability: number) { const anchor_market_state: AnchorStateResponse = await lcd_client.wasm.contractQuery(anchor_market_addr, { diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index 9c22123..a7efb67 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -2,7 +2,7 @@ import { getContractEvents, LCDClient, Wallet } from "@terra-money/terra.js"; import { assert } from "console"; import { init_governance_contract, init_psi_token } from "../../basset_vault/definition"; import { Cw20CodeId, GovernanceConfig, init_astroport_factory, init_astroport_factory_stableswap, PSiTokensOwner, TokenConfig } from "../../config"; -import { instantiate_contract_raw, execute_contract, get_token_balance, instantiate_contract, sleep, store_contract, increase_token_allowance } from "../../utils"; +import { instantiate_contract_raw, execute_contract, get_token_balance, instantiate_contract, sleep, store_contract, increase_token_allowance, get_token_balance_and_log } from "../../utils"; import { PrismMarketInfo } from "../deploy_prism/config"; import { prism_init, stake_prism_for_xprism } from "../deploy_prism/definition"; import { NexPrismAddrsAndInfo, NexPrismDeploymentInfo, StakerResponse, StakingConfig, VaultConfig, VaultRewardRatios } from "./config"; @@ -325,7 +325,7 @@ export async function deposit_yluna(lcd_client: LCDClient, sender: Wallet, yluna return send_result; } -async function check_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, nexprism_token_addr: string, nexprism_staking_addr: string) { +async function check_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, nexprism_staking_addr: string) { let rewards_earned_resp = await lcd_client.wasm.contractQuery(nexprism_staking_addr, { rewards: { address: sender.key.accAddress @@ -336,9 +336,6 @@ async function check_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, nex } async function claim_all_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, _nexprism_token_addr: string, nexprism_staking_addr: string) { - // query amt of rewards - let _rewards_earned_resp = await check_nexprism_rewards(lcd_client, sender, _nexprism_token_addr, nexprism_staking_addr); - try { const claim_rewards_result = await execute_contract(lcd_client, sender, nexprism_staking_addr, { anyone: { @@ -566,7 +563,22 @@ export async function test_changing_reward_ratios( "0.33", "0.33", ) - const deploy_split_evenly_info = prism_nexprism_full_init(lcd_client, sender, split_rewards_evenly); + const deploy_split_evenly_info = await prism_nexprism_full_init(lcd_client, sender, split_rewards_evenly); + + await get_token_balance_and_log( + lcd_client, + sender.key.accAddress, + deploy_split_evenly_info.prism_market_info.prism_token_addr, + "prism", + "" + ) + + // await stake_prism_for_xprism( + // lcd_client, + // sender, + // deploy_split_evenly_info.prism_market_info.prism_token_addr, + // deploy_split_evenly_info.prism_market_info.prism_staking_addr, + // ) // TODO: } \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts index 65c0a8f..a3cc167 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -58,6 +58,16 @@ export async function get_token_balance(lcd_client: LCDClient, token_holder_addr return +result.balance; } +export async function get_token_balance_and_log(lcd_client: LCDClient, token_holder_addr: string, token_addr: string, token_name: string, info_text: string = "") { + const result: BalanceResponse = await lcd_client.wasm.contractQuery(token_addr, { + balance: { + address: token_holder_addr + } + }); + console.log("\t", info_text, +result.balance, token_name); + return +result.balance; +} + // ============================================================ // ============================================================ // ============================================================ From cd326297a595bb230951ae16eb5c2b2235c5cbd3 Mon Sep 17 00:00:00 2001 From: Steven Li Date: Tue, 10 May 2022 17:48:03 -0700 Subject: [PATCH 05/13] starting balance --- src/integration_tests/nex_prism/definition.ts | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index a7efb67..238af3b 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -565,6 +565,33 @@ export async function test_changing_reward_ratios( ) const deploy_split_evenly_info = await prism_nexprism_full_init(lcd_client, sender, split_rewards_evenly); + // get some xprism, nexprism, yluna etc + const prism_bal = await get_token_balance( + lcd_client, + sender.key.accAddress, + deploy_split_evenly_info.prism_market_info.prism_token_addr, + ) + await get_token_balance_and_log( + lcd_client, + sender.key.accAddress, + deploy_split_evenly_info.prism_market_info.yluna_token_addr, + "yluna", + "" + ) + await stake_prism_for_xprism( + lcd_client, + sender, + deploy_split_evenly_info.prism_market_info.prism_token_addr, + deploy_split_evenly_info.prism_market_info.prism_gov_addr, + prism_bal / 2 + ) + await get_token_balance_and_log( + lcd_client, + sender.key.accAddress, + deploy_split_evenly_info.prism_market_info.xprism_token_addr, + "xprism", + "" + ) await get_token_balance_and_log( lcd_client, sender.key.accAddress, From e8ec1c2a4df7accdd347be43978b24015a489ddd Mon Sep 17 00:00:00 2001 From: Steven Li Date: Tue, 10 May 2022 19:51:17 -0700 Subject: [PATCH 06/13] check rewards of nyluna and nexprism --- src/integration_tests/nex_prism/definition.ts | 114 +++++++++++++++++- src/integration_tests/nex_prism/executor.ts | 1 - 2 files changed, 111 insertions(+), 4 deletions(-) diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index 238af3b..6e13f41 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -325,16 +325,27 @@ export async function deposit_yluna(lcd_client: LCDClient, sender: Wallet, yluna return send_result; } -async function check_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, nexprism_staking_addr: string) { +async function check_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, nexprism_staking_addr: string, log: boolean = true) { let rewards_earned_resp = await lcd_client.wasm.contractQuery(nexprism_staking_addr, { rewards: { address: sender.key.accAddress } }); + log && console.log("rewards \n\t", rewards_earned_resp); + return rewards_earned_resp +} + +async function check_nyluna_rewards(lcd_client: LCDClient, sender: Wallet, nyluna_staking_addr: string) { + let rewards_earned_resp = await lcd_client.wasm.contractQuery(nyluna_staking_addr, { + rewards: { + address: sender.key.accAddress + } + }); console.log("rewards \n\t", rewards_earned_resp); return rewards_earned_resp } + async function claim_all_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, _nexprism_token_addr: string, nexprism_staking_addr: string) { try { const claim_rewards_result = await execute_contract(lcd_client, sender, nexprism_staking_addr, { @@ -571,7 +582,7 @@ export async function test_changing_reward_ratios( sender.key.accAddress, deploy_split_evenly_info.prism_market_info.prism_token_addr, ) - await get_token_balance_and_log( + const yluna_bal = await get_token_balance_and_log( lcd_client, sender.key.accAddress, deploy_split_evenly_info.prism_market_info.yluna_token_addr, @@ -585,7 +596,7 @@ export async function test_changing_reward_ratios( deploy_split_evenly_info.prism_market_info.prism_gov_addr, prism_bal / 2 ) - await get_token_balance_and_log( + const xprism_bal = await get_token_balance_and_log( lcd_client, sender.key.accAddress, deploy_split_evenly_info.prism_market_info.xprism_token_addr, @@ -600,6 +611,103 @@ export async function test_changing_reward_ratios( "" ) + // stake same amounts into vault and see why + // STEVENDEBUG + console.log("Depositing xprism for nexprism"); + const nexprismAmt = xprism_bal / 2 + await deposit_xprism_to_nexprism_vault( + lcd_client, + sender, + deploy_split_evenly_info.prism_market_info.xprism_token_addr, + deploy_split_evenly_info.nex_prism_info.vault_deployment_addr, + nexprismAmt + ) + await get_token_balance_and_log( + lcd_client, + sender.key.accAddress, + deploy_split_evenly_info.nex_prism_info.nexprism_token_addr, + "nexprism", + "" + ) + await get_token_balance_and_log( + lcd_client, + sender.key.accAddress, + deploy_split_evenly_info.prism_market_info.xprism_token_addr, + "xprism", + "" + ) + + console.log("Staking nexprism"); + await stake_nexprism( + lcd_client, + sender, + deploy_split_evenly_info.nex_prism_info.nexprism_token_addr, + deploy_split_evenly_info.nex_prism_info.nexprism_staking_addr, + nexprismAmt + ) + const new_nexprism_bal = await get_token_balance( + lcd_client, + sender.key.accAddress, + deploy_split_evenly_info.nex_prism_info.nexprism_token_addr, + ) + assert(new_nexprism_bal == nexprismAmt); + await get_token_balance_and_log( + lcd_client, + sender.key.accAddress, + deploy_split_evenly_info.prism_market_info.xprism_token_addr, + "xprism", + "now: " + ) + + console.log("Depositing yluna for nyluna"); + const nylunaAmt = yluna_bal / 2 + await deposit_yluna( + lcd_client, + sender, + deploy_split_evenly_info.prism_market_info.yluna_token_addr, + deploy_split_evenly_info.nex_prism_info.vault_deployment_addr, + nylunaAmt + ) + await stake_nyluna( + lcd_client, + sender, + deploy_split_evenly_info.nex_prism_info.nyluna_token_addr, + deploy_split_evenly_info.nex_prism_info.nyluna_staking_addr, + nylunaAmt + ); + await get_token_balance_and_log( + lcd_client, + sender.key.accAddress, + deploy_split_evenly_info.prism_market_info.yluna_token_addr, + "yluna", + "remaining: " + ) + await get_token_balance_and_log( + lcd_client, + sender.key.accAddress, + deploy_split_evenly_info.nex_prism_info.nyluna_token_addr, + "nyluna", + "new balance: " + ) + + // check rewards + const nexprism_rewards = await check_nexprism_rewards( + lcd_client, + sender, + deploy_split_evenly_info.nex_prism_info.nexprism_staking_addr, + ) + const nyluna_rewards = await check_nyluna_rewards( + lcd_client, + sender, + deploy_split_evenly_info.nex_prism_info.nyluna_staking_addr, + ) + + // assert() + + + console.log("Staking psi"); + + // await stake_prism_for_xprism( // lcd_client, // sender, diff --git a/src/integration_tests/nex_prism/executor.ts b/src/integration_tests/nex_prism/executor.ts index bec5df3..3bfad8c 100644 --- a/src/integration_tests/nex_prism/executor.ts +++ b/src/integration_tests/nex_prism/executor.ts @@ -63,6 +63,5 @@ async function run_stake_nyluna_test(nex_prism_addrs_and_info: NexPrismAddrsAndI async function run_test_changing_reward_ratios() { // changes reward ratios on the nex-prism-convex contracts const [lcd_client, sender] = await get_lcd_config_with_wallet_for_integration_tests_only(); - await test_changing_reward_ratios(lcd_client, sender); } From a6615734b954a7d71b532665cb23ed9851b62d45 Mon Sep 17 00:00:00 2001 From: Steven Li Date: Tue, 10 May 2022 22:24:47 -0700 Subject: [PATCH 07/13] rounding and asserting the rewards number --- src/integration_tests/nex_prism/definition.ts | 21 ++++++++++++++++--- src/utils.ts | 13 +++++++++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index 6e13f41..12d2119 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -2,7 +2,7 @@ import { getContractEvents, LCDClient, Wallet } from "@terra-money/terra.js"; import { assert } from "console"; import { init_governance_contract, init_psi_token } from "../../basset_vault/definition"; import { Cw20CodeId, GovernanceConfig, init_astroport_factory, init_astroport_factory_stableswap, PSiTokensOwner, TokenConfig } from "../../config"; -import { instantiate_contract_raw, execute_contract, get_token_balance, instantiate_contract, sleep, store_contract, increase_token_allowance, get_token_balance_and_log } from "../../utils"; +import { instantiate_contract_raw, execute_contract, get_token_balance, instantiate_contract, sleep, store_contract, increase_token_allowance, get_token_balance_and_log, precise } from "../../utils"; import { PrismMarketInfo } from "../deploy_prism/config"; import { prism_init, stake_prism_for_xprism } from "../deploy_prism/definition"; import { NexPrismAddrsAndInfo, NexPrismDeploymentInfo, StakerResponse, StakingConfig, VaultConfig, VaultRewardRatios } from "./config"; @@ -335,14 +335,19 @@ async function check_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, nex return rewards_earned_resp } -async function check_nyluna_rewards(lcd_client: LCDClient, sender: Wallet, nyluna_staking_addr: string) { +interface RewardsResponse { + real_rewards: string, + virtual_rewards: string, +} + +async function check_nyluna_rewards(lcd_client: LCDClient, sender: Wallet, nyluna_staking_addr: string): Promise { let rewards_earned_resp = await lcd_client.wasm.contractQuery(nyluna_staking_addr, { rewards: { address: sender.key.accAddress } }); console.log("rewards \n\t", rewards_earned_resp); - return rewards_earned_resp + return rewards_earned_resp as RewardsResponse } @@ -703,7 +708,17 @@ export async function test_changing_reward_ratios( ) // assert() + assert(precise(nexprism_rewards.real_rewards, 4) == precise(nyluna_rewards.real_rewards, 4)); + // check state and configs in the vault + const config_res = await lcd_client.wasm.contractQuery( + deploy_split_evenly_info.nex_prism_info.vault_deployment_addr, + { + config: {} + } + ) + console.log("config_res: ", config_res); + console.log("Staking psi"); diff --git a/src/utils.ts b/src/utils.ts index a3cc167..4f84934 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -40,15 +40,22 @@ export async function increase_token_allowance(lcd_client: LCDClient, sender: Wa const tx_result = await execute_contract(lcd_client, sender, token_addr, msg); const allowance = await lcd_client.wasm.contractQuery(token_addr, { - allowance: { - owner: sender.key.accAddress, - spender: spender_addr, + allowance: { + owner: sender.key.accAddress, + spender: spender_addr, } }) return allowance; } +export function precise(x: number | string, significantFig: number): string { + if (typeof x !== 'number') { + x = parseFloat(x); + } + return x.toPrecision(significantFig); +} + export async function get_token_balance(lcd_client: LCDClient, token_holder_addr: string, token_addr: string) { const result: BalanceResponse = await lcd_client.wasm.contractQuery(token_addr, { balance: { From 528764b57b8b5c01ba2bedc1b03e0db3e668c921 Mon Sep 17 00:00:00 2001 From: Steven Li Date: Tue, 10 May 2022 22:51:54 -0700 Subject: [PATCH 08/13] clean up --- src/integration_tests/nex_prism/definition.ts | 81 ++++++++++--------- 1 file changed, 44 insertions(+), 37 deletions(-) diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index 12d2119..9f472b7 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -325,19 +325,19 @@ export async function deposit_yluna(lcd_client: LCDClient, sender: Wallet, yluna return send_result; } -async function check_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, nexprism_staking_addr: string, log: boolean = true) { +interface RewardsResponse { + real_rewards: string, + virtual_rewards: string, +} + +async function check_nexprism_rewards(lcd_client: LCDClient, sender: Wallet, nexprism_staking_addr: string, log: boolean = true): Promise { let rewards_earned_resp = await lcd_client.wasm.contractQuery(nexprism_staking_addr, { rewards: { address: sender.key.accAddress } }); log && console.log("rewards \n\t", rewards_earned_resp); - return rewards_earned_resp -} - -interface RewardsResponse { - real_rewards: string, - virtual_rewards: string, + return rewards_earned_resp as RewardsResponse } async function check_nyluna_rewards(lcd_client: LCDClient, sender: Wallet, nyluna_staking_addr: string): Promise { @@ -565,22 +565,7 @@ export async function stake_nyluna_test( console.log("Staked nyluna successfully"); } -export async function test_changing_reward_ratios( - lcd_client: LCDClient, - sender: Wallet, -) { - const use_default = undefined; - - console.log("Start changing nex-prism-convex reward ratios test"); - - const split_rewards_evenly = VaultRewardRatios( - use_default, - "0.34", - "0.33", - "0.33", - ) - const deploy_split_evenly_info = await prism_nexprism_full_init(lcd_client, sender, split_rewards_evenly); - +async function stake_equal_amts_xprism_yluna(lcd_client: LCDClient, sender: Wallet, deploy_split_evenly_info: NexPrismAddrsAndInfo) { // get some xprism, nexprism, yluna etc const prism_bal = await get_token_balance( lcd_client, @@ -655,7 +640,6 @@ export async function test_changing_reward_ratios( sender.key.accAddress, deploy_split_evenly_info.nex_prism_info.nexprism_token_addr, ) - assert(new_nexprism_bal == nexprismAmt); await get_token_balance_and_log( lcd_client, sender.key.accAddress, @@ -695,6 +679,32 @@ export async function test_changing_reward_ratios( "new balance: " ) + return "" +} + +export async function test_changing_reward_ratios( + lcd_client: LCDClient, + sender: Wallet, +) { + const use_default = undefined; + + console.log("Start changing nex-prism-convex reward ratios test"); + + const split_rewards_evenly = VaultRewardRatios( + use_default, + "0.34", + "0.33", + "0.33", + ) + const deploy_split_evenly_info = await prism_nexprism_full_init(lcd_client, sender, split_rewards_evenly); + + // stake and setup the tokens + await stake_equal_amts_xprism_yluna( + lcd_client, + sender, + deploy_split_evenly_info, + ) + // check rewards const nexprism_rewards = await check_nexprism_rewards( lcd_client, @@ -707,8 +717,15 @@ export async function test_changing_reward_ratios( deploy_split_evenly_info.nex_prism_info.nyluna_staking_addr, ) - // assert() - assert(precise(nexprism_rewards.real_rewards, 4) == precise(nyluna_rewards.real_rewards, 4)); + // check rewards + const nexprism_rewards_rounded = precise(nexprism_rewards["real_rewards"], 1) + const nyluna_rewards_rounded = precise(nyluna_rewards["real_rewards"], 1) + assert(nexprism_rewards_rounded == nyluna_rewards_rounded, + `rewards should be about evenly split but aren't, nexprism rewards ${precise(nexprism_rewards["real_rewards"], 1)} / nyluna ${precise(nyluna_rewards.real_rewards, 1)}` + ); + if (nexprism_rewards_rounded == nyluna_rewards_rounded) { + console.log("rewards are evenly split"); + } // check state and configs in the vault const config_res = await lcd_client.wasm.contractQuery( @@ -720,15 +737,5 @@ export async function test_changing_reward_ratios( console.log("config_res: ", config_res); - console.log("Staking psi"); - - - // await stake_prism_for_xprism( - // lcd_client, - // sender, - // deploy_split_evenly_info.prism_market_info.prism_token_addr, - // deploy_split_evenly_info.prism_market_info.prism_staking_addr, - // ) - - // TODO: + // TODO: stake psi and check as well to be about 1/3 } \ No newline at end of file From f5899fa4809e67f10e5a120d6961d3a790146f1b Mon Sep 17 00:00:00 2001 From: Steven Li Date: Tue, 10 May 2022 23:09:18 -0700 Subject: [PATCH 09/13] different reward ratios --- src/integration_tests/nex_prism/definition.ts | 23 +++++++++++-------- src/integration_tests/nex_prism/executor.ts | 14 ++++++++++- src/utils.ts | 4 ++-- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index 9f472b7..95c6370 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -685,6 +685,9 @@ async function stake_equal_amts_xprism_yluna(lcd_client: LCDClient, sender: Wall export async function test_changing_reward_ratios( lcd_client: LCDClient, sender: Wallet, + psi_stakers_reward_ratio: string, + nexprism_stakers_reward_ratio: string, + nyluna_stakers_reward_ratio: string, ) { const use_default = undefined; @@ -692,9 +695,9 @@ export async function test_changing_reward_ratios( const split_rewards_evenly = VaultRewardRatios( use_default, - "0.34", - "0.33", - "0.33", + nexprism_stakers_reward_ratio, + psi_stakers_reward_ratio, + nyluna_stakers_reward_ratio, ) const deploy_split_evenly_info = await prism_nexprism_full_init(lcd_client, sender, split_rewards_evenly); @@ -720,11 +723,14 @@ export async function test_changing_reward_ratios( // check rewards const nexprism_rewards_rounded = precise(nexprism_rewards["real_rewards"], 1) const nyluna_rewards_rounded = precise(nyluna_rewards["real_rewards"], 1) - assert(nexprism_rewards_rounded == nyluna_rewards_rounded, - `rewards should be about evenly split but aren't, nexprism rewards ${precise(nexprism_rewards["real_rewards"], 1)} / nyluna ${precise(nyluna_rewards.real_rewards, 1)}` + const rewards_actually_given_ratio = nexprism_rewards_rounded / nyluna_rewards_rounded + const rewards_nexprism_nyluna_ratio = parseFloat(nexprism_stakers_reward_ratio) / parseFloat(nyluna_stakers_reward_ratio) + const is_ratio_correct = rewards_actually_given_ratio == rewards_nexprism_nyluna_ratio + assert(is_ratio_correct, + `rewards ratios should be about evenly split but aren't, rewards ratio split ${rewards_nexprism_nyluna_ratio} \n rewards given split ${rewards_actually_given_ratio}` ); - if (nexprism_rewards_rounded == nyluna_rewards_rounded) { - console.log("rewards are evenly split"); + if (is_ratio_correct) { + console.log("rewards are split correctly"); } // check state and configs in the vault @@ -736,6 +742,5 @@ export async function test_changing_reward_ratios( ) console.log("config_res: ", config_res); - // TODO: stake psi and check as well to be about 1/3 -} \ No newline at end of file +} diff --git a/src/integration_tests/nex_prism/executor.ts b/src/integration_tests/nex_prism/executor.ts index 3bfad8c..3acecd7 100644 --- a/src/integration_tests/nex_prism/executor.ts +++ b/src/integration_tests/nex_prism/executor.ts @@ -63,5 +63,17 @@ async function run_stake_nyluna_test(nex_prism_addrs_and_info: NexPrismAddrsAndI async function run_test_changing_reward_ratios() { // changes reward ratios on the nex-prism-convex contracts const [lcd_client, sender] = await get_lcd_config_with_wallet_for_integration_tests_only(); - await test_changing_reward_ratios(lcd_client, sender); + + // evenly split + await test_changing_reward_ratios(lcd_client, sender, "0.34", "0.33", "0.33"); + + // uneven split between nexprism/yluna + await test_changing_reward_ratios(lcd_client, sender, "0.34", "0.22", "0.44"); + + // very uneven split between nexprism/yluna + await test_changing_reward_ratios(lcd_client, sender, "0.34", "0.01", "0.65"); + + // zero to psi stakers + await test_changing_reward_ratios(lcd_client, sender, "0.00", "0.5", "0.5"); + } diff --git a/src/utils.ts b/src/utils.ts index 4f84934..15190b9 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -49,11 +49,11 @@ export async function increase_token_allowance(lcd_client: LCDClient, sender: Wa return allowance; } -export function precise(x: number | string, significantFig: number): string { +export function precise(x: number | string, significantFig: number): number { if (typeof x !== 'number') { x = parseFloat(x); } - return x.toPrecision(significantFig); + return parseFloat(x.toPrecision(significantFig)); } export async function get_token_balance(lcd_client: LCDClient, token_holder_addr: string, token_addr: string) { From 55d588c035c13c66fe40ad0f74f9d266dfa421b9 Mon Sep 17 00:00:00 2001 From: Steven Li Date: Tue, 10 May 2022 23:13:38 -0700 Subject: [PATCH 10/13] Update executor.ts --- src/integration_tests/nex_prism/executor.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/integration_tests/nex_prism/executor.ts b/src/integration_tests/nex_prism/executor.ts index 3acecd7..00be104 100644 --- a/src/integration_tests/nex_prism/executor.ts +++ b/src/integration_tests/nex_prism/executor.ts @@ -73,7 +73,6 @@ async function run_test_changing_reward_ratios() { // very uneven split between nexprism/yluna await test_changing_reward_ratios(lcd_client, sender, "0.34", "0.01", "0.65"); - // zero to psi stakers - await test_changing_reward_ratios(lcd_client, sender, "0.00", "0.5", "0.5"); - + // zero to psi stakers doesn't work, commenting out for now + // await test_changing_reward_ratios(lcd_client, sender, "0", "0.5", "0.5"); } From dfeef80196ee094c4b8d5a2b79212c2d93aacefd Mon Sep 17 00:00:00 2001 From: Steven Li Date: Tue, 10 May 2022 23:20:01 -0700 Subject: [PATCH 11/13] fix --- src/integration_tests/nex_prism/definition.ts | 5 +++-- src/integration_tests/nex_prism/executor.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index 95c6370..81d36ab 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -688,6 +688,7 @@ export async function test_changing_reward_ratios( psi_stakers_reward_ratio: string, nexprism_stakers_reward_ratio: string, nyluna_stakers_reward_ratio: string, + significant_digits: number = 1, // significant figures used for the rewards calc ) { const use_default = undefined; @@ -721,8 +722,8 @@ export async function test_changing_reward_ratios( ) // check rewards - const nexprism_rewards_rounded = precise(nexprism_rewards["real_rewards"], 1) - const nyluna_rewards_rounded = precise(nyluna_rewards["real_rewards"], 1) + const nexprism_rewards_rounded = precise(nexprism_rewards["real_rewards"], significant_digits) + const nyluna_rewards_rounded = precise(nyluna_rewards["real_rewards"], significant_digits) const rewards_actually_given_ratio = nexprism_rewards_rounded / nyluna_rewards_rounded const rewards_nexprism_nyluna_ratio = parseFloat(nexprism_stakers_reward_ratio) / parseFloat(nyluna_stakers_reward_ratio) const is_ratio_correct = rewards_actually_given_ratio == rewards_nexprism_nyluna_ratio diff --git a/src/integration_tests/nex_prism/executor.ts b/src/integration_tests/nex_prism/executor.ts index 00be104..2c1a284 100644 --- a/src/integration_tests/nex_prism/executor.ts +++ b/src/integration_tests/nex_prism/executor.ts @@ -71,7 +71,7 @@ async function run_test_changing_reward_ratios() { await test_changing_reward_ratios(lcd_client, sender, "0.34", "0.22", "0.44"); // very uneven split between nexprism/yluna - await test_changing_reward_ratios(lcd_client, sender, "0.34", "0.01", "0.65"); + await test_changing_reward_ratios(lcd_client, sender, "0.34", "0.10", "0.56", 2); // zero to psi stakers doesn't work, commenting out for now // await test_changing_reward_ratios(lcd_client, sender, "0", "0.5", "0.5"); From 8b7c9bb3d81538a19dccea04938ce05277c7b7b6 Mon Sep 17 00:00:00 2001 From: Steven Li Date: Tue, 10 May 2022 23:24:15 -0700 Subject: [PATCH 12/13] Update definition.ts --- src/integration_tests/nex_prism/definition.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index 81d36ab..d8a894d 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -726,7 +726,7 @@ export async function test_changing_reward_ratios( const nyluna_rewards_rounded = precise(nyluna_rewards["real_rewards"], significant_digits) const rewards_actually_given_ratio = nexprism_rewards_rounded / nyluna_rewards_rounded const rewards_nexprism_nyluna_ratio = parseFloat(nexprism_stakers_reward_ratio) / parseFloat(nyluna_stakers_reward_ratio) - const is_ratio_correct = rewards_actually_given_ratio == rewards_nexprism_nyluna_ratio + const is_ratio_correct = precise(rewards_actually_given_ratio, 2) == precise(rewards_nexprism_nyluna_ratio, 2) assert(is_ratio_correct, `rewards ratios should be about evenly split but aren't, rewards ratio split ${rewards_nexprism_nyluna_ratio} \n rewards given split ${rewards_actually_given_ratio}` ); From 69fd1b9dbf3140507a76cb8ab04dea6d8c7a8bfc Mon Sep 17 00:00:00 2001 From: Steven Li Date: Tue, 10 May 2022 23:33:39 -0700 Subject: [PATCH 13/13] todo --- src/integration_tests/deploy_prism/definition.ts | 3 +++ src/integration_tests/nex_prism/definition.ts | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/integration_tests/deploy_prism/definition.ts b/src/integration_tests/deploy_prism/definition.ts index eef9ff4..0788eaf 100644 --- a/src/integration_tests/deploy_prism/definition.ts +++ b/src/integration_tests/deploy_prism/definition.ts @@ -513,6 +513,9 @@ async function prism_init_verbose( console.log(`yluna_prism pair instantiated\n\taddress: ${yluna_prism_pair_addr}`); console.log(`=======================`); + // TODO: stake a send a few xprism, yluna to other wallets and stake them to get a few users into prism + // localterra.wallets["test1"]; + return PrismMarketInfo( prism_token_addr, prism_governance_info.prism_gov_deployment_addr, diff --git a/src/integration_tests/nex_prism/definition.ts b/src/integration_tests/nex_prism/definition.ts index d8a894d..d1c4d38 100644 --- a/src/integration_tests/nex_prism/definition.ts +++ b/src/integration_tests/nex_prism/definition.ts @@ -732,6 +732,8 @@ export async function test_changing_reward_ratios( ); if (is_ratio_correct) { console.log("rewards are split correctly"); + } else { + process.exit(1) } // check state and configs in the vault