From f35a2f661a3b1cb5175d0d4ff8364283ac102fa1 Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Tue, 31 Dec 2024 12:06:28 +0100 Subject: [PATCH 01/14] introduce participant's cap --- contracts/hydro/src/contract.rs | 167 +++++--- contracts/hydro/src/error.rs | 5 +- contracts/hydro/src/lib.rs | 4 + contracts/hydro/src/migration/migrate.rs | 7 +- contracts/hydro/src/migration/mod.rs | 5 - .../migration/testing_v2_0_2_to_unreleased.rs | 389 ------------------ contracts/hydro/src/migration/unreleased.rs | 169 +------- contracts/hydro/src/migration/v1_1_0.rs | 42 -- contracts/hydro/src/migration/v2_0_1.rs | 261 ------------ contracts/hydro/src/msg.rs | 1 + contracts/hydro/src/state.rs | 21 +- contracts/hydro/src/testing.rs | 12 +- .../hydro/src/testing_lsm_integration.rs | 7 +- contracts/hydro/src/testing_queries.rs | 7 +- contracts/hydro/src/testing_utils.rs | 94 +++++ contracts/hydro/src/utils.rs | 233 +++++++++++ contracts/hydro/src/validators_icqs.rs | 7 +- packages/interface/src/hydro.rs | 4 +- 18 files changed, 494 insertions(+), 941 deletions(-) delete mode 100644 contracts/hydro/src/migration/testing_v2_0_2_to_unreleased.rs delete mode 100644 contracts/hydro/src/migration/v1_1_0.rs delete mode 100644 contracts/hydro/src/migration/v2_0_1.rs create mode 100644 contracts/hydro/src/testing_utils.rs create mode 100644 contracts/hydro/src/utils.rs diff --git a/contracts/hydro/src/contract.rs b/contracts/hydro/src/contract.rs index 0b740bb5..ad37c967 100644 --- a/contracts/hydro/src/contract.rs +++ b/contracts/hydro/src/contract.rs @@ -39,6 +39,10 @@ use crate::state::{ VALIDATORS_PER_ROUND, VALIDATORS_STORE_INITIALIZED, VALIDATOR_TO_QUERY_ID, VOTE_MAP, VOTING_ALLOWED_ROUND, WHITELIST, WHITELIST_ADMINS, }; +use crate::utils::{ + load_constants_active_at_timestamp, load_current_constants, update_locked_tokens_info, + validate_locked_tokens_caps, +}; use crate::validators_icqs::{ build_create_interchain_query_submsg, handle_delivered_interchain_query_result, handle_submsg_reply, query_min_interchain_query_deposit, @@ -58,7 +62,7 @@ pub const MIN_DEPLOYMENT_DURATION: u64 = 1; #[cfg_attr(not(feature = "library"), entry_point)] pub fn instantiate( deps: DepsMut, - _env: Env, + env: Env, info: MessageInfo, msg: InstantiateMsg, ) -> Result, ContractError> { @@ -76,6 +80,7 @@ pub fn instantiate( lock_epoch_length: msg.lock_epoch_length, first_round_start: msg.first_round_start, max_locked_tokens: msg.max_locked_tokens.u128(), + current_users_extra_cap: 0, max_validator_shares_participating: msg.max_validator_shares_participating, hub_connection_id: msg.hub_connection_id, hub_transfer_channel_id: msg.hub_transfer_channel_id, @@ -85,7 +90,7 @@ pub fn instantiate( round_lock_power_schedule: RoundLockPowerSchedule::new(msg.round_lock_power_schedule), }; - CONSTANTS.save(deps.storage, &state)?; + CONSTANTS.save(deps.storage, env.block.time.nanos(), &state)?; LOCKED_TOKENS.save(deps.storage, &0)?; LOCK_ID.save(deps.storage, &0)?; PROP_ID.save(deps.storage, &0)?; @@ -187,22 +192,30 @@ pub fn execute( remove_from_whitelist(deps, env, info, address) } ExecuteMsg::UpdateConfig { + activate_at, + max_locked_tokens, + max_deployment_duration, + } => update_config( + deps, + env, + info, + activate_at, max_locked_tokens, max_deployment_duration, - } => update_config(deps, info, max_locked_tokens, max_deployment_duration), - ExecuteMsg::Pause {} => pause_contract(deps, info), - ExecuteMsg::AddTranche { tranche } => add_tranche(deps, info, tranche), + ), + ExecuteMsg::Pause {} => pause_contract(deps, &env, info), + ExecuteMsg::AddTranche { tranche } => add_tranche(deps, env, info, tranche), ExecuteMsg::EditTranche { tranche_id, tranche_name, tranche_metadata, - } => edit_tranche(deps, info, tranche_id, tranche_name, tranche_metadata), + } => edit_tranche(deps, env, info, tranche_id, tranche_name, tranche_metadata), ExecuteMsg::CreateICQsForValidators { validators } => { create_icqs_for_validators(deps, env, info, validators) } - ExecuteMsg::AddICQManager { address } => add_icq_manager(deps, info, address), - ExecuteMsg::RemoveICQManager { address } => remove_icq_manager(deps, info, address), - ExecuteMsg::WithdrawICQFunds { amount } => withdraw_icq_funds(deps, info, amount), + ExecuteMsg::AddICQManager { address } => add_icq_manager(deps, env, info, address), + ExecuteMsg::RemoveICQManager { address } => remove_icq_manager(deps, env, info, address), + ExecuteMsg::WithdrawICQFunds { amount } => withdraw_icq_funds(deps, env, info, amount), ExecuteMsg::AddLiquidityDeployment { round_id, tranche_id, @@ -229,7 +242,7 @@ pub fn execute( round_id, tranche_id, proposal_id, - } => remove_liquidity_deployment(deps, info, round_id, tranche_id, proposal_id), + } => remove_liquidity_deployment(deps, env, info, round_id, tranche_id, proposal_id), } } @@ -240,12 +253,12 @@ pub fn execute( // Update total round power // Create entry in LocksMap fn lock_tokens( - deps: DepsMut, + mut deps: DepsMut, env: Env, info: MessageInfo, lock_duration: u64, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; validate_lock_duration( @@ -270,15 +283,17 @@ fn lock_tokens( ContractError::Std(StdError::generic_err(format!("validating denom: {}", err))) })?; - // validate that this wouldn't cause the contract to have more locked tokens than the limit + let total_locked_tokens = LOCKED_TOKENS.load(deps.storage)?; let amount_to_lock = info.funds[0].amount.u128(); - let locked_tokens = LOCKED_TOKENS.load(deps.storage)?; - - if locked_tokens + amount_to_lock > constants.max_locked_tokens { - return Err(ContractError::Std(StdError::generic_err( - "The limit for locking tokens has been reached. No more tokens can be locked.", - ))); - } + let locking_info = validate_locked_tokens_caps( + &deps, + &env, + &constants, + current_round, + &info.sender, + total_locked_tokens, + amount_to_lock, + )?; // validate that the user does not have too many locks if get_lock_count(deps.as_ref(), info.sender.clone()) >= MAX_LOCK_ENTRIES { @@ -298,10 +313,15 @@ fn lock_tokens( }; let lock_end = lock_entry.lock_end.nanos(); LOCKS_MAP.save(deps.storage, (info.sender.clone(), lock_id), &lock_entry)?; - LOCKED_TOKENS.save(deps.storage, &(locked_tokens + amount_to_lock))?; + update_locked_tokens_info( + &mut deps, + current_round, + &info.sender, + total_locked_tokens, + locking_info, + )?; // If user already voted for some proposals in the current round, update the voting power on those proposals. - let mut deps = deps; update_voting_power_on_proposals( &mut deps, &info.sender, @@ -350,7 +370,7 @@ fn refresh_lock_duration( lock_ids: Vec, lock_duration: u64, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; @@ -501,7 +521,7 @@ fn unlock_tokens( env: Env, info: MessageInfo, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; // TODO: reenable this when we implement slashing @@ -573,7 +593,7 @@ fn validate_previous_round_vote( env: &Env, sender: Addr, ) -> Result<(), ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), env)?; let current_round_id = compute_current_round_id(env, &constants)?; if current_round_id > 0 { let previous_round_id = current_round_id - 1; @@ -612,7 +632,7 @@ fn create_proposal( deployment_duration: u64, minimum_atom_liquidity_request: Uint128, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; let current_round_id = compute_current_round_id(&env, &constants)?; @@ -728,7 +748,7 @@ fn vote( // - To enable switching votes (and for other stuff too), we store the vote in VOTE_MAP. // - When a user votes the second time in a round, the information about their previous vote from VOTE_MAP is used to reverse the effect of their previous vote. // - This leads to slightly higher gas costs for each vote, in exchange for a much lower gas cost at the end of the round. - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; let round_id = compute_current_round_id(&env, &constants)?; @@ -1005,11 +1025,11 @@ pub fn get_lock_time_weighted_shares( // Adds a new account address to the whitelist. fn add_to_whitelist( deps: DepsMut, - _env: Env, + env: Env, info: MessageInfo, address: String, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; @@ -1037,11 +1057,11 @@ fn add_to_whitelist( // Removes an account address from the whitelist. fn remove_from_whitelist( deps: DepsMut, - _env: Env, + env: Env, info: MessageInfo, address: String, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; @@ -1062,11 +1082,19 @@ fn remove_from_whitelist( fn update_config( deps: DepsMut, + env: Env, info: MessageInfo, + activate_at: Timestamp, max_locked_tokens: Option, max_deployment_duration: Option, ) -> Result, ContractError> { - let mut constants = CONSTANTS.load(deps.storage)?; + if env.block.time > activate_at { + return Err(ContractError::Std(StdError::generic_err( + "Can not update config in the past.", + ))); + } + + let mut constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; @@ -1088,7 +1116,7 @@ fn update_config( ); } - CONSTANTS.save(deps.storage, &constants)?; + CONSTANTS.save(deps.storage, activate_at.nanos(), &constants)?; Ok(response) } @@ -1099,15 +1127,17 @@ fn update_config( // Set paused to true and save the changes fn pause_contract( deps: DepsMut, + env: &Env, info: MessageInfo, ) -> Result, ContractError> { - let mut constants = CONSTANTS.load(deps.storage)?; + let (timestamp, mut constants) = + load_constants_active_at_timestamp(&deps.as_ref(), env.block.time)?; validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; constants.paused = true; - CONSTANTS.save(deps.storage, &constants)?; + CONSTANTS.save(deps.storage, timestamp, &constants)?; Ok(Response::new() .add_attribute("action", "pause_contract") @@ -1122,10 +1152,11 @@ fn pause_contract( // Add new tranche to the store fn add_tranche( deps: DepsMut, + env: Env, info: MessageInfo, tranche: TrancheInfo, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; let tranche_name = tranche.name.trim().to_string(); validate_contract_is_not_paused(&constants)?; @@ -1158,12 +1189,13 @@ fn add_tranche( // Update the tranche in the store fn edit_tranche( deps: DepsMut, + env: Env, info: MessageInfo, tranche_id: u64, tranche_name: Option, tranche_metadata: Option, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; @@ -1207,7 +1239,7 @@ fn create_icqs_for_validators( info: MessageInfo, validators: Vec, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; // This function will return error if the first round hasn't started yet. It is necessarry // that it has started, since handling the results of the interchain queries relies on this. @@ -1291,10 +1323,11 @@ fn validate_icq_deposit_funds_sent( fn add_icq_manager( deps: DepsMut, + env: Env, info: MessageInfo, address: String, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; @@ -1318,10 +1351,11 @@ fn add_icq_manager( fn remove_icq_manager( deps: DepsMut, + env: Env, info: MessageInfo, address: String, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; @@ -1350,10 +1384,11 @@ fn remove_icq_manager( // top validators. fn withdraw_icq_funds( deps: DepsMut, + env: Env, info: MessageInfo, amount: Uint128, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; validate_address_is_icq_manager(&deps, info.sender.clone())?; @@ -1388,7 +1423,7 @@ pub fn add_liquidity_deployment( info: MessageInfo, deployment: LiquidityDeployment, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; @@ -1455,12 +1490,13 @@ pub fn add_liquidity_deployment( // This will return an error if the deployment does not exist. pub fn remove_liquidity_deployment( deps: DepsMut, + env: Env, info: MessageInfo, round_id: u64, tranche_id: u64, proposal_id: u64, ) -> Result, ContractError> { - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; @@ -1530,7 +1566,7 @@ fn validate_tranche_name_uniqueness( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::Constants {} => to_json_binary(&query_constants(deps)?), + QueryMsg::Constants {} => to_json_binary(&query_constants(deps, env)?), QueryMsg::Tranches {} => to_json_binary(&query_tranches(deps)?), QueryMsg::AllUserLockups { address, @@ -1571,7 +1607,7 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult to_json_binary(&query_current_round_id(deps, env)?), - QueryMsg::RoundEnd { round_id } => to_json_binary(&query_round_end(deps, round_id)?), + QueryMsg::RoundEnd { round_id } => to_json_binary(&query_round_end(deps, env, round_id)?), QueryMsg::TopNProposals { round_id, tranche_id, @@ -1660,9 +1696,9 @@ pub fn query_round_total_power( }) } -pub fn query_constants(deps: Deps) -> StdResult { +pub fn query_constants(deps: Deps, env: Env) -> StdResult { Ok(ConstantsResponse { - constants: CONSTANTS.load(deps.storage)?, + constants: load_current_constants(&deps, &env)?, }) } @@ -1681,7 +1717,7 @@ pub fn query_all_user_lockups( limit, ); - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps, &env)?; let current_round_id = compute_current_round_id(&env, &constants)?; let round_end = compute_round_end(&constants, current_round_id)?; @@ -1742,19 +1778,28 @@ pub fn query_user_voting_power( env: Env, address: String, ) -> StdResult { - let user_address = deps.api.addr_validate(&address)?; - let constants = CONSTANTS.load(deps.storage)?; - let current_round_id = compute_current_round_id(&env, &constants)?; + Ok(UserVotingPowerResponse { + voting_power: get_user_voting_power(&deps, &env, deps.api.addr_validate(&address)?)?, + }) +} + +pub fn get_user_voting_power( + deps: &Deps, + env: &Env, + address: Addr, +) -> StdResult { + let constants = load_current_constants(deps, env)?; + let current_round_id = compute_current_round_id(env, &constants)?; let round_end = compute_round_end(&constants, current_round_id)?; - let voting_power = LOCKS_MAP - .prefix(user_address) + Ok(LOCKS_MAP + .prefix(address) .range(deps.storage, None, None, Order::Ascending) .map(|l| l.unwrap().1) .filter(|l| l.lock_end > round_end) .map(|lockup| { to_lockup_with_power( - deps, + *deps, env.clone(), &constants, current_round_id, @@ -1764,9 +1809,7 @@ pub fn query_user_voting_power( .current_voting_power .u128() }) - .sum(); - - Ok(UserVotingPowerResponse { voting_power }) + .sum()) } // This function queries user votes for the given round and tranche. @@ -1861,7 +1904,7 @@ pub fn query_current_round_id( deps: Deps, env: Env, ) -> StdResult { - let constants = &CONSTANTS.load(deps.storage)?; + let constants = &load_current_constants(&deps, &env)?; let round_id = compute_round_id_for_timestamp(constants, env.block.time.nanos())?; let round_end = compute_round_end(constants, round_id)?; @@ -1872,8 +1915,12 @@ pub fn query_current_round_id( }) } -pub fn query_round_end(deps: Deps, round_id: u64) -> StdResult { - let constants = &CONSTANTS.load(deps.storage)?; +pub fn query_round_end( + deps: Deps, + env: Env, + round_id: u64, +) -> StdResult { + let constants = &load_current_constants(&deps, &env)?; let round_end = compute_round_end(constants, round_id)?; Ok(RoundEndResponse { round_end }) diff --git a/contracts/hydro/src/error.rs b/contracts/hydro/src/error.rs index bca8c118..7f8891e6 100644 --- a/contracts/hydro/src/error.rs +++ b/contracts/hydro/src/error.rs @@ -1,4 +1,4 @@ -use cosmwasm_std::{OverflowError, StdError}; +use cosmwasm_std::{CheckedFromRatioError, OverflowError, StdError}; use cw_utils::PaymentError; use neutron_sdk::NeutronError; use thiserror::Error; @@ -11,6 +11,9 @@ pub enum ContractError { #[error("{0}")] OverflowError(#[from] OverflowError), + #[error("{0}")] + CheckedFromRatioError(#[from] CheckedFromRatioError), + #[error("Unauthorized")] Unauthorized, diff --git a/contracts/hydro/src/lib.rs b/contracts/hydro/src/lib.rs index aa1f4b92..cd559e79 100644 --- a/contracts/hydro/src/lib.rs +++ b/contracts/hydro/src/lib.rs @@ -6,6 +6,7 @@ pub mod msg; pub mod query; pub mod score_keeper; pub mod state; +pub mod utils; pub mod validators_icqs; #[cfg(test)] @@ -28,3 +29,6 @@ mod testing_fractional_voting; #[cfg(test)] mod testing_deployments; + +#[cfg(test)] +mod testing_utils; diff --git a/contracts/hydro/src/migration/migrate.rs b/contracts/hydro/src/migration/migrate.rs index c54e0619..ab23c002 100644 --- a/contracts/hydro/src/migration/migrate.rs +++ b/contracts/hydro/src/migration/migrate.rs @@ -7,11 +7,12 @@ use cw2::{get_contract_version, set_contract_version}; use neutron_sdk::bindings::msg::NeutronMsg; use neutron_sdk::bindings::query::NeutronQuery; -use super::unreleased::{migrate_v2_0_2_to_unreleased, MigrateMsgUNRELEASED}; +use super::unreleased::{migrate_v2_1_0_to_unreleased, MigrateMsgUNRELEASED}; pub const CONTRACT_VERSION_V1_1_0: &str = "1.1.0"; pub const CONTRACT_VERSION_V2_0_1: &str = "2.0.1"; pub const CONTRACT_VERSION_V2_0_2: &str = "2.0.2"; +pub const CONTRACT_VERSION_V2_1_0: &str = "2.1.0"; pub const CONTRACT_VERSION_UNRELEASED: &str = "3.0.0"; #[cfg_attr(not(feature = "library"), entry_point)] @@ -28,8 +29,8 @@ pub fn migrate( ))); } - if contract_version.version == CONTRACT_VERSION_V2_0_2 { - migrate_v2_0_2_to_unreleased(&mut deps, env.clone(), msg)?; + if contract_version.version == CONTRACT_VERSION_V2_1_0 { + migrate_v2_1_0_to_unreleased(&mut deps, env.clone(), msg)?; } set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; diff --git a/contracts/hydro/src/migration/mod.rs b/contracts/hydro/src/migration/mod.rs index 26d71445..969944c6 100644 --- a/contracts/hydro/src/migration/mod.rs +++ b/contracts/hydro/src/migration/mod.rs @@ -1,7 +1,2 @@ pub mod migrate; pub mod unreleased; -pub mod v1_1_0; -pub mod v2_0_1; - -#[cfg(test)] -mod testing_v2_0_2_to_unreleased; diff --git a/contracts/hydro/src/migration/testing_v2_0_2_to_unreleased.rs b/contracts/hydro/src/migration/testing_v2_0_2_to_unreleased.rs deleted file mode 100644 index 279c8277..00000000 --- a/contracts/hydro/src/migration/testing_v2_0_2_to_unreleased.rs +++ /dev/null @@ -1,389 +0,0 @@ -use std::str::FromStr; - -use cosmwasm_std::{testing::mock_env, Addr, Decimal, Timestamp, Uint128}; -use cw2::{get_contract_version, set_contract_version}; -use cw_storage_plus::Item; - -use crate::{ - contract::{instantiate, CONTRACT_NAME}, - migration::{ - migrate::{migrate, CONTRACT_VERSION_UNRELEASED, CONTRACT_VERSION_V2_0_2}, - unreleased::{ConstantsUNRELEASED, ConstantsV2_0_2, MigrateMsgUNRELEASED}, - }, - state::{Proposal, RoundLockPowerSchedule, Vote, PROPOSAL_MAP, VOTE_MAP, VOTING_ALLOWED_ROUND}, - testing::{ - get_default_instantiate_msg, get_message_info, ONE_MONTH_IN_NANO_SECONDS, VALIDATOR_1, - }, - testing_mocks::{mock_dependencies, no_op_grpc_query_mock}, -}; - -use super::unreleased::VoteMigrationInfo; - -#[test] -fn test_constants_migration() { - let (mut deps, mut env) = (mock_dependencies(no_op_grpc_query_mock()), mock_env()); - - let first_round_start = Timestamp::from_nanos(1730851140000000000); - env.block.time = first_round_start; - - let user_addr = "addr0000"; - let info = get_message_info(&deps.api, user_addr, &[]); - - // Instantiate the contract - let mut instantiate_msg = get_default_instantiate_msg(&deps.api); - instantiate_msg.first_round_start = first_round_start; - - instantiate( - deps.as_mut(), - env.clone(), - info.clone(), - instantiate_msg.clone(), - ) - .unwrap(); - - // Override contract version so that we can run the migration - let res = set_contract_version(&mut deps.storage, CONTRACT_NAME, CONTRACT_VERSION_V2_0_2); - assert!( - res.is_ok(), - "failed to set contract version before running the migration" - ); - - const OLD_CONSTANTS: Item = Item::new("constants"); - const NEW_CONSTANTS: Item = Item::new("constants"); - - // Override the constants so that they have old data structure stored before running the migration - let old_constants = ConstantsV2_0_2 { - round_length: 2628000000000000, - lock_epoch_length: 2628000000000000, - first_round_start, - max_locked_tokens: 20000000000, - max_validator_shares_participating: 500, - hub_connection_id: "connection-0".to_string(), - hub_transfer_channel_id: "channel-1".to_string(), - icq_update_period: 109000, - paused: false, - is_in_pilot_mode: true, - max_deployment_duration: 12, - }; - - let res = OLD_CONSTANTS.save(&mut deps.storage, &old_constants); - assert!( - res.is_ok(), - "failed to save old constants before running the migration" - ); - - // advance the chain to move to the round 1 - env.block.time = env.block.time.plus_nanos(instantiate_msg.round_length + 1); - - // Run the migration - let migrate_msg = MigrateMsgUNRELEASED {}; - let res = migrate(deps.as_mut(), env.clone(), migrate_msg.clone()); - assert!(res.is_ok(), "migration failed: {}", res.unwrap_err()); - - // Verify that the Constants got migrated properly - let expected_new_constants = ConstantsUNRELEASED { - round_length: old_constants.round_length, - lock_epoch_length: old_constants.lock_epoch_length, - first_round_start: old_constants.first_round_start, - max_locked_tokens: old_constants.max_locked_tokens, - max_validator_shares_participating: old_constants.max_validator_shares_participating, - hub_connection_id: old_constants.hub_connection_id, - hub_transfer_channel_id: old_constants.hub_transfer_channel_id, - icq_update_period: old_constants.icq_update_period, - paused: old_constants.paused, - max_deployment_duration: old_constants.max_deployment_duration, - round_lock_power_schedule: RoundLockPowerSchedule::new(vec![ - (1, Decimal::from_str("1").unwrap()), - (2, Decimal::from_str("1.25").unwrap()), - (3, Decimal::from_str("1.5").unwrap()), - (6, Decimal::from_str("2").unwrap()), - (12, Decimal::from_str("4").unwrap()), - ]), - }; - let res = NEW_CONSTANTS.load(&deps.storage); - assert!( - res.is_ok(), - "failed to load new constants after running the migration" - ); - let new_constants = res.unwrap(); - assert_eq!( - new_constants, expected_new_constants, - "migrated constants not equal to expected ones" - ); - - // Verify the contract version after running the migration - let res = get_contract_version(&deps.storage); - assert_eq!( - res.unwrap().version, - CONTRACT_VERSION_UNRELEASED.to_string() - ); -} - -#[test] -fn test_voting_allowed_info_migration() { - let (mut deps, mut env) = (mock_dependencies(no_op_grpc_query_mock()), mock_env()); - - let first_round_start = Timestamp::from_nanos(1730851140000000000); - env.block.time = first_round_start; - - let user_addr = "addr0000"; - let info = get_message_info(&deps.api, user_addr, &[]); - - // Instantiate the contract - let mut instantiate_msg = get_default_instantiate_msg(&deps.api); - instantiate_msg.first_round_start = first_round_start; - instantiate_msg.round_length = ONE_MONTH_IN_NANO_SECONDS; - - instantiate( - deps.as_mut(), - env.clone(), - info.clone(), - instantiate_msg.clone(), - ) - .unwrap(); - - // Override contract version so that we can run the migration - let res = set_contract_version(&mut deps.storage, CONTRACT_NAME, CONTRACT_VERSION_V2_0_2); - assert!( - res.is_ok(), - "failed to set contract version before running the migration" - ); - - const OLD_CONSTANTS: Item = Item::new("constants"); - - // Override the constants so that they have old data structure stored before running the migration - let old_constants = ConstantsV2_0_2 { - round_length: 2628000000000000, - lock_epoch_length: 2628000000000000, - first_round_start, - max_locked_tokens: 20000000000, - max_validator_shares_participating: 500, - hub_connection_id: "connection-0".to_string(), - hub_transfer_channel_id: "channel-1".to_string(), - icq_update_period: 109000, - paused: false, - is_in_pilot_mode: true, - max_deployment_duration: 12, - }; - - let res = OLD_CONSTANTS.save(&mut deps.storage, &old_constants); - assert!( - res.is_ok(), - "failed to save old constants before running the migration" - ); - - // advance the chain to move to the round 1 - env.block.time = env.block.time.plus_nanos(instantiate_msg.round_length + 1); - - let round_id = 1; - let tranche_id = 1; - - let first_proposal_id = 9; - let second_proposal_id = 10; - - let first_lock_id = 103; - let second_lock_id = 104; - let third_lock_id = 105; - let fourt_lock_id = 106; - let fifth_lock_id = 107; - - // save some proposals into the storage - let proposals = vec![ - Proposal { - round_id, - tranche_id, - proposal_id: first_proposal_id, - power: Uint128::zero(), - percentage: Uint128::zero(), - title: "Proposal 9".to_string(), - description: "Proposal 9 Description".to_string(), - deployment_duration: 3, - minimum_atom_liquidity_request: Uint128::zero(), - }, - Proposal { - round_id, - tranche_id, - proposal_id: second_proposal_id, - power: Uint128::zero(), - percentage: Uint128::zero(), - title: "Proposal 10".to_string(), - description: "Proposal 10 Description".to_string(), - deployment_duration: 4, - minimum_atom_liquidity_request: Uint128::zero(), - }, - ]; - - for proposal in &proposals { - let res = PROPOSAL_MAP.save( - &mut deps.storage, - (round_id, tranche_id, proposal.proposal_id), - proposal, - ); - assert!( - res.is_ok(), - "failed to save proposal before running the migration: {}", - res.unwrap_err() - ); - } - - let voting_allowed_prop_1 = round_id + proposals[0].deployment_duration; - let voting_allowed_prop_2 = round_id + proposals[1].deployment_duration; - - let user_addr_1 = deps.api.addr_make("addr0001"); - let user_addr_2 = deps.api.addr_make("addr0002"); - - let test_infos = vec![ - // user 1, lock 1, voting info already in the store - VotingInfoMigrationTest { - vote: ( - user_addr_1.clone(), - VoteMigrationInfo { - lock_id: first_lock_id, - proposal_id: first_proposal_id, - }, - ), - voting_info_before: Some(VotingAllowedInfoTest { - lock_id: first_lock_id, - round_id: voting_allowed_prop_1, - }), - voting_info_after: VotingAllowedInfoTest { - lock_id: first_lock_id, - round_id: voting_allowed_prop_1, - }, - }, - // user 1, lock 2, voting info not in the store - VotingInfoMigrationTest { - vote: ( - user_addr_1.clone(), - VoteMigrationInfo { - lock_id: second_lock_id, - proposal_id: first_proposal_id, - }, - ), - voting_info_before: None, - voting_info_after: VotingAllowedInfoTest { - lock_id: second_lock_id, - round_id: voting_allowed_prop_1, - }, - }, - // user 2, lock 3, voting info already in the store - VotingInfoMigrationTest { - vote: ( - user_addr_2.clone(), - VoteMigrationInfo { - lock_id: third_lock_id, - proposal_id: second_proposal_id, - }, - ), - voting_info_before: Some(VotingAllowedInfoTest { - lock_id: third_lock_id, - round_id: voting_allowed_prop_2, - }), - voting_info_after: VotingAllowedInfoTest { - lock_id: third_lock_id, - round_id: voting_allowed_prop_2, - }, - }, - // user 2, lock 4, voting info not in the store - VotingInfoMigrationTest { - vote: ( - user_addr_2.clone(), - VoteMigrationInfo { - lock_id: fourt_lock_id, - proposal_id: second_proposal_id, - }, - ), - voting_info_before: None, - voting_info_after: VotingAllowedInfoTest { - lock_id: fourt_lock_id, - round_id: voting_allowed_prop_2, - }, - }, - // user 2, lock 5, voting info not in the store - VotingInfoMigrationTest { - vote: ( - user_addr_2.clone(), - VoteMigrationInfo { - lock_id: fifth_lock_id, - proposal_id: second_proposal_id, - }, - ), - voting_info_before: None, - voting_info_after: VotingAllowedInfoTest { - lock_id: fifth_lock_id, - round_id: voting_allowed_prop_2, - }, - }, - ]; - - for test_case in &test_infos { - let time_weighted_shares = (VALIDATOR_1.to_string(), Decimal::one()); - let res = VOTE_MAP.save( - &mut deps.storage, - ( - (round_id, tranche_id), - test_case.vote.0.clone(), - test_case.vote.1.lock_id, - ), - &Vote { - prop_id: test_case.vote.1.proposal_id, - time_weighted_shares, - }, - ); - assert!( - res.is_ok(), - "failed to save vote before running the migration: {}", - res.unwrap_err() - ); - - if let Some(vote_info_before) = &test_case.voting_info_before { - let res = VOTING_ALLOWED_ROUND.save( - &mut deps.storage, - (tranche_id, vote_info_before.lock_id), - &vote_info_before.round_id, - ); - assert!( - res.is_ok(), - "failed to save voting allowed info before running the migration: {}", - res.unwrap_err() - ); - } - } - - // Run the migration - let migrate_msg = MigrateMsgUNRELEASED {}; - let res = migrate(deps.as_mut(), env.clone(), migrate_msg.clone()); - assert!(res.is_ok(), "migration failed: {}", res.unwrap_err()); - - for test_case in &test_infos { - let res = VOTING_ALLOWED_ROUND.load( - &deps.storage, - (tranche_id, test_case.voting_info_after.lock_id), - ); - assert!( - res.is_ok(), - "voting allowed round not populated after migration: {}", - res.unwrap_err() - ); - - let voting_allowed_round = res.unwrap(); - assert_eq!( - voting_allowed_round, test_case.voting_info_after.round_id, - "voting allowed round doesn't match expected value; got: {}, expected: {}", - voting_allowed_round, test_case.voting_info_after.round_id - ); - } -} - -struct VotingInfoMigrationTest { - pub vote: (Addr, VoteMigrationInfo), - // (lock_id, round_id) - pub voting_info_before: Option, - // (lock_id, round_id) - pub voting_info_after: VotingAllowedInfoTest, -} - -struct VotingAllowedInfoTest { - pub lock_id: u64, - pub round_id: u64, -} diff --git a/contracts/hydro/src/migration/unreleased.rs b/contracts/hydro/src/migration/unreleased.rs index a12a1433..5a83a482 100644 --- a/contracts/hydro/src/migration/unreleased.rs +++ b/contracts/hydro/src/migration/unreleased.rs @@ -1,174 +1,19 @@ -use std::{collections::HashMap, str::FromStr}; - -use cosmwasm_schema::cw_serde; -use cosmwasm_std::{Decimal, DepsMut, Env, Order, Storage, Timestamp}; -use cw_storage_plus::Item; +use cosmwasm_std::{DepsMut, Env}; use neutron_sdk::bindings::query::NeutronQuery; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use crate::{ - contract::compute_current_round_id, - error::ContractError, - state::{ - RoundLockPowerSchedule, CONSTANTS, PROPOSAL_MAP, TRANCHE_MAP, VOTE_MAP, - VOTING_ALLOWED_ROUND, - }, -}; +use crate::error::ContractError; #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] pub struct MigrateMsgUNRELEASED {} -#[cw_serde] -pub struct ConstantsV2_0_2 { - pub round_length: u64, - pub lock_epoch_length: u64, - pub first_round_start: Timestamp, - pub max_locked_tokens: u128, - pub max_validator_shares_participating: u64, - pub hub_connection_id: String, - pub hub_transfer_channel_id: String, - pub icq_update_period: u64, - pub paused: bool, - pub is_in_pilot_mode: bool, - pub max_deployment_duration: u64, -} - -#[cw_serde] -pub struct ConstantsUNRELEASED { - pub round_length: u64, - pub lock_epoch_length: u64, - pub first_round_start: Timestamp, - pub max_locked_tokens: u128, - pub max_validator_shares_participating: u64, - pub hub_connection_id: String, - pub hub_transfer_channel_id: String, - pub icq_update_period: u64, - pub paused: bool, - pub max_deployment_duration: u64, - pub round_lock_power_schedule: RoundLockPowerSchedule, -} - -impl ConstantsUNRELEASED { - pub fn from(old_constants: ConstantsV2_0_2) -> Self { - Self { - round_length: old_constants.round_length, - lock_epoch_length: old_constants.lock_epoch_length, - first_round_start: old_constants.first_round_start, - max_locked_tokens: old_constants.max_locked_tokens, - max_validator_shares_participating: old_constants.max_validator_shares_participating, - hub_connection_id: old_constants.hub_connection_id, - hub_transfer_channel_id: old_constants.hub_transfer_channel_id, - icq_update_period: old_constants.icq_update_period, - paused: old_constants.paused, - max_deployment_duration: old_constants.max_deployment_duration, - round_lock_power_schedule: RoundLockPowerSchedule::new(get_default_power_schedule()), - } - } -} - -pub fn get_default_power_schedule() -> Vec<(u64, Decimal)> { - vec![ - (1, Decimal::from_str("1").unwrap()), - (2, Decimal::from_str("1.25").unwrap()), - (3, Decimal::from_str("1.5").unwrap()), - (6, Decimal::from_str("2").unwrap()), - (12, Decimal::from_str("4").unwrap()), - ] -} - -pub fn migrate_v2_0_2_to_unreleased( - deps: &mut DepsMut, - env: Env, +pub fn migrate_v2_1_0_to_unreleased( + _deps: &mut DepsMut, + _env: Env, _msg: MigrateMsgUNRELEASED, ) -> Result<(), ContractError> { - migrate_constants(deps.storage)?; - migrate_voting_allowed_info(deps, &env)?; - - Ok(()) -} - -fn migrate_constants(storage: &mut dyn Storage) -> Result<(), ContractError> { - const OLD_CONSTANTS: Item = Item::new("constants"); - const NEW_CONSTANTS: Item = Item::new("constants"); - - let old_constants = OLD_CONSTANTS.load(storage)?; - let new_constants = ConstantsUNRELEASED::from(old_constants); - NEW_CONSTANTS.save(storage, &new_constants)?; - - Ok(()) -} - -fn migrate_voting_allowed_info( - deps: &mut DepsMut, - env: &Env, -) -> Result<(), ContractError> { - // migrate_constants() must be executed first - let constants = CONSTANTS.load(deps.storage)?; - - let tranche_ids: Vec = TRANCHE_MAP - .keys(deps.storage, None, None, Order::Ascending) - .filter_map(|tranche_id| match tranche_id { - Ok(tranche_id) => Some(tranche_id), - Err(_) => None, - }) - .collect(); - - // don't rely on migration being run in round 1, even though it probably will - let current_round_id = compute_current_round_id(env, &constants)?; - - // to cache proposal deployment durations once we load them; saves some gas - let mut deployment_durations: HashMap = HashMap::new(); - - // no need to populate this info for round 0 since we only had 1-round-long deployment proposals - for round_id in 1..=current_round_id { - for &tranche_id in tranche_ids.iter() { - let votes: Vec = VOTE_MAP - .sub_prefix((round_id, tranche_id)) - .range(deps.storage, None, None, Order::Ascending) - .filter_map(|vote| match vote { - Err(_) => None, - Ok(vote) => Some(VoteMigrationInfo { - lock_id: vote.0 .1, - proposal_id: vote.1.prop_id, - }), - }) - .collect(); - - for vote in votes { - if VOTING_ALLOWED_ROUND - .may_load(deps.storage, (tranche_id, vote.lock_id))? - .is_some() - { - continue; - } - - let deployment_duration = match deployment_durations.get(&vote.proposal_id) { - Some(deployment_duration) => *deployment_duration, - None => { - let proposal = PROPOSAL_MAP - .load(deps.storage, (round_id, tranche_id, vote.proposal_id))?; - deployment_durations - .insert(proposal.proposal_id, proposal.deployment_duration); - - proposal.deployment_duration - } - }; - - let voting_allowed_round = round_id + deployment_duration; - VOTING_ALLOWED_ROUND.save( - deps.storage, - (tranche_id, vote.lock_id), - &voting_allowed_round, - )?; - } - } - } - + // TODO: + // 1) Migrate Constants from Item to Map; Make sure that the queries for past rounds keep working. Ok(()) } - -pub struct VoteMigrationInfo { - pub lock_id: u64, - pub proposal_id: u64, -} diff --git a/contracts/hydro/src/migration/v1_1_0.rs b/contracts/hydro/src/migration/v1_1_0.rs deleted file mode 100644 index feb54560..00000000 --- a/contracts/hydro/src/migration/v1_1_0.rs +++ /dev/null @@ -1,42 +0,0 @@ -use std::collections::HashMap; - -use cosmwasm_schema::cw_serde; -use cosmwasm_std::{Decimal, Timestamp, Uint128}; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] -pub struct MigrateMsgV1_1_0 { - pub new_first_round_start: Timestamp, -} - -#[cw_serde] -pub struct ConstantsV1_1_0 { - pub round_length: u64, - pub lock_epoch_length: u64, - pub first_round_start: Timestamp, - pub max_locked_tokens: u128, - pub max_validator_shares_participating: u64, - pub hub_connection_id: String, - pub hub_transfer_channel_id: String, - pub icq_update_period: u64, - pub paused: bool, - pub is_in_pilot_mode: bool, -} - -#[cw_serde] -pub struct ProposalV1_1_0 { - pub round_id: u64, - pub tranche_id: u64, - pub proposal_id: u64, - pub title: String, - pub description: String, - pub power: Uint128, - pub percentage: Uint128, -} - -#[cw_serde] -pub struct VoteV1_1_0 { - pub prop_id: u64, - pub time_weighted_shares: HashMap, -} diff --git a/contracts/hydro/src/migration/v2_0_1.rs b/contracts/hydro/src/migration/v2_0_1.rs deleted file mode 100644 index 663dae9a..00000000 --- a/contracts/hydro/src/migration/v2_0_1.rs +++ /dev/null @@ -1,261 +0,0 @@ -use cosmwasm_schema::cw_serde; -use cosmwasm_std::{Addr, Decimal, DepsMut, Order, Storage, Timestamp, Uint128}; -use cw_storage_plus::{Item, Map}; -use neutron_sdk::bindings::query::NeutronQuery; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -use crate::contract::{compute_round_end, get_lock_time_weighted_shares}; -use crate::error::ContractError; - -use crate::lsm_integration::resolve_validator_from_denom; -use crate::migration::v1_1_0::{ConstantsV1_1_0, ProposalV1_1_0, VoteV1_1_0}; -use crate::state::{CONSTANTS, LOCKS_MAP}; - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] -pub struct MigrateMsgV2_0_1 { - pub max_deployment_duration: u64, -} - -#[cw_serde] -pub struct ConstantsV2_0_1 { - pub round_length: u64, - pub lock_epoch_length: u64, - pub first_round_start: Timestamp, - pub max_locked_tokens: u128, - pub max_validator_shares_participating: u64, - pub hub_connection_id: String, - pub hub_transfer_channel_id: String, - pub icq_update_period: u64, - pub paused: bool, - pub is_in_pilot_mode: bool, - pub max_deployment_duration: u64, -} - -impl ConstantsV2_0_1 { - pub fn from(old_constants: ConstantsV1_1_0, max_deployment_duration: u64) -> Self { - Self { - round_length: old_constants.round_length, - lock_epoch_length: old_constants.lock_epoch_length, - first_round_start: old_constants.first_round_start, - max_locked_tokens: old_constants.max_locked_tokens, - max_validator_shares_participating: old_constants.max_validator_shares_participating, - hub_connection_id: old_constants.hub_connection_id, - hub_transfer_channel_id: old_constants.hub_transfer_channel_id, - icq_update_period: old_constants.icq_update_period, - paused: old_constants.paused, - is_in_pilot_mode: old_constants.is_in_pilot_mode, - // Set max_deployment_duration to the value specified in the migrate message - max_deployment_duration, - } - } -} - -#[cw_serde] -pub struct ProposalV2_0_1 { - pub round_id: u64, - pub tranche_id: u64, - pub proposal_id: u64, - pub title: String, - pub description: String, - pub power: Uint128, - pub percentage: Uint128, - pub deployment_duration: u64, - pub minimum_atom_liquidity_request: Uint128, -} - -impl ProposalV2_0_1 { - pub fn from(old_proposal: ProposalV1_1_0) -> Self { - Self { - round_id: old_proposal.round_id, - tranche_id: old_proposal.tranche_id, - proposal_id: old_proposal.proposal_id, - power: old_proposal.power, - percentage: old_proposal.percentage, - title: old_proposal.title, - description: old_proposal.description, - // Existing proposals are getting the liquidity deployed for only one round - deployment_duration: 1, - minimum_atom_liquidity_request: Uint128::zero(), - } - } -} - -#[cw_serde] -pub struct VoteV2_0_1 { - pub prop_id: u64, - pub time_weighted_shares: (String, Decimal), -} - -struct OldVoteInfo { - pub round_id: u64, - pub tranche_id: u64, - pub voter: Addr, -} - -struct NewVoteInfo { - pub round_id: u64, - pub tranche_id: u64, - pub voter: Addr, - pub lock_id: u64, - pub vote: VoteV2_0_1, -} - -// Migrating from 1.1.0 to 2.0.1 will: -// - Migrate the existing Constants to add "max_deployment_duration" field -// - Migrate the existing Proposals to add "deployment_duration" and "minimum_atom_liquidity_request" fields -// - Migrate each Vote from first round to a new format where the key will also include lock_id, and the value -// will no longer contain HashMap but only (String, Decimal), since each vote refers to -// a single lock entry, and therefore has only one LSM token denom associated with it. To construct new votes, -// we iterate over all lock entries that belong to a user and create a vote for each lock entry. -// All votes saved under the old keys are removed from the store, and the replacing votes are added -// under the new keys. -pub fn migrate_v1_1_0_to_v2_0_1( - deps: &mut DepsMut, - msg: MigrateMsgV2_0_1, -) -> Result<(), ContractError> { - migrate_constants(deps.storage, msg)?; - migrate_proposals(deps.storage)?; - migrate_votes(deps)?; - - Ok(()) -} - -fn migrate_constants( - storage: &mut dyn Storage, - migrate_msg: MigrateMsgV2_0_1, -) -> Result<(), ContractError> { - const OLD_CONSTANTS: Item = Item::new("constants"); - const NEW_CONSTANTS: Item = Item::new("constants"); - - let old_constants = OLD_CONSTANTS.load(storage)?; - let new_constants = ConstantsV2_0_1::from(old_constants, migrate_msg.max_deployment_duration); - NEW_CONSTANTS.save(storage, &new_constants)?; - - Ok(()) -} - -fn migrate_proposals(storage: &mut dyn Storage) -> Result<(), ContractError> { - const OLD_PROPOSAL_MAP: Map<(u64, u64, u64), ProposalV1_1_0> = Map::new("prop_map"); - const NEW_PROPOSAL_MAP: Map<(u64, u64, u64), ProposalV2_0_1> = Map::new("prop_map"); - - let old_proposals = OLD_PROPOSAL_MAP.range(storage, None, None, Order::Descending); - let mut new_proposals = vec![]; - - for old_proposal in old_proposals { - let ((_, _, _), old_proposal) = old_proposal?; - new_proposals.push(ProposalV2_0_1::from(old_proposal)); - } - - for new_proposal in new_proposals { - NEW_PROPOSAL_MAP.save( - storage, - ( - new_proposal.round_id, - new_proposal.tranche_id, - new_proposal.proposal_id, - ), - &new_proposal, - )?; - } - - Ok(()) -} - -fn migrate_votes(deps: &mut DepsMut) -> Result<(), ContractError> { - const OLD_VOTE_MAP: Map<(u64, u64, Addr), VoteV1_1_0> = Map::new("vote_map"); - const NEW_VOTE_MAP: Map<((u64, u64), Addr, u64), VoteV2_0_1> = Map::new("vote_map"); - - let mut old_votes = vec![]; - let mut new_votes = vec![]; - - // Here we rely on CONSTANTS being already migrated, and therefore we can use - // the new struct and helper functions from the latest code. - let constants = CONSTANTS.load(deps.storage)?; - let lock_epoch_length = constants.lock_epoch_length; - - for old_vote in OLD_VOTE_MAP.range(deps.storage, None, None, Order::Descending) { - let ((round_id, tranche_id, voter), old_vote) = old_vote?; - let round_end = compute_round_end(&constants, round_id)?; - - old_votes.push(OldVoteInfo { - round_id, - tranche_id, - voter: voter.clone(), - }); - - // We use LOCKS_MAP from the latest code since this storage hasn't changed. - // This is needed in order to use get_lock_time_weighted_shares() helper function. - for lock_entry in - LOCKS_MAP - .prefix(voter.clone()) - .range(deps.storage, None, None, Order::Ascending) - { - let (_, lock_entry) = lock_entry?; - let validator = match resolve_validator_from_denom( - &deps.as_ref(), - &constants, - lock_entry.clone().funds.denom, - ) { - Ok(validator) => validator, - Err(_) => { - continue; - } - }; - - // We do not check if the validator is active at the moment we run the migration, since this can change - // afterwards. Instead, we will create a vote for each lock that user has. The reasoning is as follows: - // if user voted, most likely they voted with all their locks. If they first voted and then locked more - // tokens, this would add the new lock to their vote. If user voted with tokens from validator that later - // dropped out from the top N, this lock's power would remain in user's vote, which is the same we do in - // this migration. Votes with tokens from dropped-out validators will be filtered out in query_votes(). - let scaled_shares = Decimal::from_ratio( - get_lock_time_weighted_shares( - &constants.round_lock_power_schedule, - round_end, - lock_entry.clone(), - lock_epoch_length, - ), - Uint128::one(), - ); - - if scaled_shares.is_zero() { - continue; - } - - let new_vote = NewVoteInfo { - round_id, - tranche_id, - voter: voter.clone(), - lock_id: lock_entry.lock_id, - vote: VoteV2_0_1 { - prop_id: old_vote.prop_id, - time_weighted_shares: (validator, scaled_shares), - }, - }; - - new_votes.push(new_vote); - } - } - - for old_vote in old_votes { - OLD_VOTE_MAP.remove( - deps.storage, - (old_vote.round_id, old_vote.tranche_id, old_vote.voter), - ); - } - - for new_vote in new_votes { - NEW_VOTE_MAP.save( - deps.storage, - ( - (new_vote.round_id, new_vote.tranche_id), - new_vote.voter, - new_vote.lock_id, - ), - &new_vote.vote, - )?; - } - - Ok(()) -} diff --git a/contracts/hydro/src/msg.rs b/contracts/hydro/src/msg.rs index a9177ee5..f1e93808 100644 --- a/contracts/hydro/src/msg.rs +++ b/contracts/hydro/src/msg.rs @@ -65,6 +65,7 @@ pub enum ExecuteMsg { address: String, }, UpdateConfig { + activate_at: Timestamp, max_locked_tokens: Option, max_deployment_duration: Option, }, diff --git a/contracts/hydro/src/state.rs b/contracts/hydro/src/state.rs index fd35d247..3f44cc0e 100644 --- a/contracts/hydro/src/state.rs +++ b/contracts/hydro/src/state.rs @@ -4,7 +4,8 @@ use cw_storage_plus::{Item, Map}; use crate::msg::LiquidityDeployment; -pub const CONSTANTS: Item = Item::new("constants"); +// CONSTANTS: key(activation_timestamp) -> Constants +pub const CONSTANTS: Map = Map::new("constants"); #[cw_serde] pub struct LockPowerEntry { @@ -58,7 +59,15 @@ pub struct Constants { pub round_length: u64, pub lock_epoch_length: u64, pub first_round_start: Timestamp, + // The maximum number of tokens that can be locked by any users (currently known and the future ones) pub max_locked_tokens: u128, + // The maximum number of tokens (out of the max_locked_tokens) that is reserved for locking only + // for currently known users. This field is intended to be set to some value greater than zero at + // the begining of the round, and such Constants would apply only for predefined period of time. + // After this period has expired, a new Constants would be activated that would set this value to + // zero, which would allow any user to lock any amount that possibly wasn't filled, but was reserved + // for this cap. + pub current_users_extra_cap: u128, pub max_validator_shares_participating: u64, pub hub_connection_id: String, pub hub_transfer_channel_id: String, @@ -71,6 +80,16 @@ pub struct Constants { // the total number of tokens locked in the contract pub const LOCKED_TOKENS: Item = Item::new("locked_tokens"); +// Tracks the total number of tokens locked in extra cap, for the given round +// EXTRA_LOCKED_TOKENS_ROUND_TOTAL: key(round_id) -> uint128 +pub const EXTRA_LOCKED_TOKENS_ROUND_TOTAL: Map = + Map::new("extra_locked_tokens_round_total"); + +// Tracks the number of tokens locked in extra cap by specific user, for the given round +// EXTRA_LOCKED_TOKENS_CURRENT_USERS: key(round_id, sender_address) -> uint128 +pub const EXTRA_LOCKED_TOKENS_CURRENT_USERS: Map<(u64, Addr), u128> = + Map::new("extra_locked_tokens_current_users"); + pub const LOCK_ID: Item = Item::new("lock_id"); // stores the current PROP_ID, in order to ensure that each proposal has a unique ID diff --git a/contracts/hydro/src/testing.rs b/contracts/hydro/src/testing.rs index 11e0d544..445fc5ff 100644 --- a/contracts/hydro/src/testing.rs +++ b/contracts/hydro/src/testing.rs @@ -123,10 +123,10 @@ fn instantiate_test() { let msg = get_default_instantiate_msg(&deps.api); - let res = instantiate(deps.as_mut(), env, info, msg.clone()); + let res = instantiate(deps.as_mut(), env.clone(), info, msg.clone()); assert!(res.is_ok()); - let res = query_constants(deps.as_ref()); + let res = query_constants(deps.as_ref(), env); assert!(res.is_ok()); let constants = res.unwrap().constants; @@ -2066,14 +2066,14 @@ fn test_round_id_computation() { msg.first_round_start = Timestamp::from_nanos(contract_start_time); let mut env = mock_env(); - env.block.time = Timestamp::from_nanos(contract_start_time); + env.block.time = Timestamp::from_nanos(current_time); let info = get_message_info(&deps.api, "addr0000", &[]); let _ = instantiate(deps.as_mut(), env.clone(), info.clone(), msg.clone()).unwrap(); // set the time to the current time env.block.time = Timestamp::from_nanos(current_time); - let constants = query_constants(deps.as_ref()); + let constants = query_constants(deps.as_ref(), env.clone()); assert!(constants.is_ok()); let round_id = compute_current_round_id(&env, &constants.unwrap().constants); @@ -2431,6 +2431,7 @@ fn max_locked_tokens_test() { // a privileged user can update the maximum allowed locked tokens info = get_message_info(&deps.api, "addr0001", &[]); let update_max_locked_tokens_msg = ExecuteMsg::UpdateConfig { + activate_at: env.block.time, max_locked_tokens: Some(3000), max_deployment_duration: None, }; @@ -2488,7 +2489,7 @@ fn contract_pausing_test() { let res = execute(deps.as_mut(), env.clone(), info.clone(), msg.clone()); assert!(res.is_ok()); - let constants = query_constants(deps.as_ref()); + let constants = query_constants(deps.as_ref(), env.clone()); assert!(constants.is_ok()); assert!(constants.unwrap().constants.paused); @@ -2522,6 +2523,7 @@ fn contract_pausing_test() { address: whitelist_admin.to_string(), }, ExecuteMsg::UpdateConfig { + activate_at: env.block.time, max_locked_tokens: None, max_deployment_duration: None, }, diff --git a/contracts/hydro/src/testing_lsm_integration.rs b/contracts/hydro/src/testing_lsm_integration.rs index 23bdf0f4..0566ba0a 100644 --- a/contracts/hydro/src/testing_lsm_integration.rs +++ b/contracts/hydro/src/testing_lsm_integration.rs @@ -40,6 +40,7 @@ fn get_default_constants() -> crate::state::Constants { lock_epoch_length: 1, first_round_start: Timestamp::from_seconds(0), max_locked_tokens: 1, + current_users_extra_cap: 0, paused: false, max_validator_shares_participating: 2, hub_connection_id: "connection-0".to_string(), @@ -290,9 +291,9 @@ fn test_validate_denom() { description: "happy path".to_string(), denom: IBC_DENOM_1.to_string(), expected_result: Ok(VALIDATOR_1.to_string()), - setup: Box::new(|storage, _env| { + setup: Box::new(|storage, env| { let constants = get_default_constants(); - crate::state::CONSTANTS.save(storage, &constants).unwrap(); + crate::state::CONSTANTS.save(storage, env.block.time.nanos(), &constants).unwrap(); let round_id = 0; let res = set_validator_infos_for_round( storage, @@ -319,7 +320,7 @@ fn test_validate_denom() { let constants = get_default_constants(); crate::state::CONSTANTS - .save(&mut deps.storage, &constants) + .save(&mut deps.storage, env.block.time.nanos(), &constants) .unwrap(); env.block.time = Timestamp::from_seconds(0); diff --git a/contracts/hydro/src/testing_queries.rs b/contracts/hydro/src/testing_queries.rs index 1a21ae48..a5a13cd8 100644 --- a/contracts/hydro/src/testing_queries.rs +++ b/contracts/hydro/src/testing_queries.rs @@ -4,9 +4,7 @@ use std::str::FromStr; use crate::contract::{ compute_current_round_id, query_all_user_lockups, query_user_votes, scale_lockup_power, }; -use crate::state::{ - RoundLockPowerSchedule, ValidatorInfo, Vote, CONSTANTS, VALIDATORS_INFO, VOTE_MAP, -}; +use crate::state::{RoundLockPowerSchedule, ValidatorInfo, Vote, VALIDATORS_INFO, VOTE_MAP}; use crate::testing::{ get_default_instantiate_msg, get_message_info, set_default_validator_for_rounds, IBC_DENOM_1, ONE_MONTH_IN_NANO_SECONDS, VALIDATOR_1, VALIDATOR_1_LST_DENOM_1, VALIDATOR_2, VALIDATOR_3, @@ -15,6 +13,7 @@ use crate::testing_lsm_integration::set_validator_power_ratio; use crate::testing_mocks::{ denom_trace_grpc_query_mock, mock_dependencies, no_op_grpc_query_mock, MockQuerier, }; +use crate::utils::load_current_constants; use crate::{ contract::{execute, instantiate, query_expired_user_lockups, query_user_voting_power}, msg::ExecuteMsg, @@ -124,7 +123,7 @@ fn query_user_lockups_test() { assert_eq!(first_lockup_amount, expired_lockups[0].funds.amount.u128()); // adjust the validator power ratios to check that they are reflected properly in the result - let constants = CONSTANTS.load(deps.as_ref().storage).unwrap(); + let constants = load_current_constants(&deps.as_ref(), &env).unwrap(); let current_round_id = compute_current_round_id(&env, &constants).unwrap(); set_validator_power_ratio( deps.as_mut().storage, diff --git a/contracts/hydro/src/testing_utils.rs b/contracts/hydro/src/testing_utils.rs new file mode 100644 index 00000000..74691927 --- /dev/null +++ b/contracts/hydro/src/testing_utils.rs @@ -0,0 +1,94 @@ +use cosmwasm_std::{testing::mock_env, Timestamp}; + +use crate::{ + state::{Constants, CONSTANTS}, + testing::{get_default_power_schedule, ONE_DAY_IN_NANO_SECONDS}, + testing_mocks::{mock_dependencies, no_op_grpc_query_mock}, + utils::load_current_constants, +}; + +#[test] +fn load_current_constants_test() { + let (mut deps, mut env) = (mock_dependencies(no_op_grpc_query_mock()), mock_env()); + + struct TestCase { + activate_at_timestamp: u64, + constants_to_insert: Constants, + } + + let constants_template = Constants { + round_length: ONE_DAY_IN_NANO_SECONDS, + lock_epoch_length: ONE_DAY_IN_NANO_SECONDS, + first_round_start: Timestamp::from_seconds(0), + max_locked_tokens: 0, + current_users_extra_cap: 0, + paused: false, + max_validator_shares_participating: 500, + hub_connection_id: "connection-0".to_string(), + hub_transfer_channel_id: "channel-1".to_string(), + icq_update_period: 100000, + max_deployment_duration: 12, + round_lock_power_schedule: get_default_power_schedule(), + }; + + // Change max_locked_tokens each time we insert new Constants so that we can differentiate them + let clone_with_locked_tokens = + |constants_template: &Constants, max_locked_tokens| -> Constants { + let mut constants = constants_template.clone(); + constants.max_locked_tokens = max_locked_tokens; + + constants + }; + + let test_cases = vec![ + TestCase { + activate_at_timestamp: 1730840400000000000, // Tuesday, November 05, 2024 09:00:00 PM GMT + constants_to_insert: clone_with_locked_tokens(&constants_template, 1u128), + }, + TestCase { + activate_at_timestamp: 1731924672000000000, // Monday, November 18, 2024 10:11:12 AM GMT + constants_to_insert: clone_with_locked_tokens(&constants_template, 2u128), + }, + TestCase { + activate_at_timestamp: 1732421792000000000, // Sunday, November 24, 2024 04:16:32 AM GMT + constants_to_insert: clone_with_locked_tokens(&constants_template, 3u128), + }, + TestCase { + activate_at_timestamp: 1734264033000000000, // Sunday, December 15, 2024 12:00:33 PM GMT + constants_to_insert: clone_with_locked_tokens(&constants_template, 4u128), + }, + TestCase { + activate_at_timestamp: 1734955199000000000, // Monday, December 23, 2024 11:59:59 AM GMT + constants_to_insert: clone_with_locked_tokens(&constants_template, 5u128), + }, + TestCase { + activate_at_timestamp: 1735689599000000000, // Tuesday, December 31, 2024 11:59:59 PM GMT + constants_to_insert: clone_with_locked_tokens(&constants_template, 6u128), + }, + TestCase { + activate_at_timestamp: 1736208000000000000, // Tuesday, January 07, 2025 12:00:00 AM GMT + constants_to_insert: clone_with_locked_tokens(&constants_template, 7u128), + }, + ]; + + // first insert constants for all timestamps + for test_case in test_cases.iter() { + let res = CONSTANTS.save( + &mut deps.storage, + test_case.activate_at_timestamp, + &test_case.constants_to_insert, + ); + assert!(res.is_ok()); + } + + // Verify that we receive expected constants by setting the block time to activate_at_timestamp + 1 hour + for test_case in test_cases.iter() { + env.block.time = Timestamp::from_nanos(test_case.activate_at_timestamp).plus_seconds(3600); + + let res = load_current_constants(&deps.as_ref(), &env); + assert!(res.is_ok()); + let constants = res.unwrap(); + + assert_eq!(constants, test_case.constants_to_insert); + } +} diff --git a/contracts/hydro/src/utils.rs b/contracts/hydro/src/utils.rs new file mode 100644 index 00000000..8aeb2f63 --- /dev/null +++ b/contracts/hydro/src/utils.rs @@ -0,0 +1,233 @@ +use cosmwasm_std::{ + Addr, Decimal, Deps, DepsMut, Env, Order, StdError, StdResult, Timestamp, Uint128, +}; +use cw_storage_plus::Bound; +use neutron_sdk::bindings::query::NeutronQuery; + +use crate::{ + contract::get_user_voting_power, + error::ContractError, + lsm_integration::get_total_power_for_round, + state::{ + Constants, CONSTANTS, EXTRA_LOCKED_TOKENS_CURRENT_USERS, EXTRA_LOCKED_TOKENS_ROUND_TOTAL, + LOCKED_TOKENS, LOCKS_MAP, + }, +}; + +/// Loads the constants that are active for the current block according to the block timestamp. +pub fn load_current_constants(deps: &Deps, env: &Env) -> StdResult { + Ok(load_constants_active_at_timestamp(deps, env.block.time)?.1) +} + +/// Loads the constants that were active at the given timestamp. Returns both the Constants and +/// their activation timestamp. +pub fn load_constants_active_at_timestamp( + deps: &Deps, + timestamp: Timestamp, +) -> StdResult<(u64, Constants)> { + let current_constants: Vec<(u64, Constants)> = CONSTANTS + .range( + deps.storage, + None, + Some(Bound::inclusive(timestamp.nanos())), + Order::Descending, + ) + .take(1) + .filter_map(|constants| match constants { + Ok(constants) => Some(constants), + Err(_) => None, + }) + .collect(); + + Ok(match current_constants.len() { + 1 => current_constants[0].clone(), + _ => { + return Err(StdError::generic_err( + "Failed to load constants aactive at the given timestamp.", + )); + } + }) +} + +// TODO: add desc +pub fn validate_locked_tokens_caps( + deps: &DepsMut, + env: &Env, + constants: &Constants, + current_round: u64, + sender: &Addr, + total_locked_tokens: u128, + amount_to_lock: u128, +) -> Result { + let lock_limit_reached_error = Err(ContractError::Std(StdError::generic_err( + "The limit for locking tokens has been reached. No more tokens can be locked.", + ))); + + // Regardless of public_cap and extra_cap, we must make sure that nobody can lock more than total_cap + let total_locked_after = total_locked_tokens + amount_to_lock; + if total_locked_after > constants.max_locked_tokens { + return lock_limit_reached_error; + } + + let public_cap = constants.max_locked_tokens - constants.current_users_extra_cap; + + // This branch will be executed in one of the following cases: + // 1) constants.current_users_extra_cap != 0 and there is SOME room in the public cap + // 2) constants.current_users_extra_cap == 0 and there is ENOUGH room in the public_cap. + // Since in this case public_cap == total_cap, there must be enough room in the public_cap, + // otherwise we would error out at the start of this function. + if public_cap > total_locked_tokens { + // Check if entire amount_to_lock can fit into a public cap + if public_cap >= total_locked_after { + return Ok(LockingInfo { + lock_in_public_cap: Some(amount_to_lock), + lock_in_known_users_cap: None, + }); + } + + // Lock as much as possible in the public_cap, and the rest in the extra_cap + let lock_in_public_cap = public_cap - total_locked_tokens; + let lock_in_known_users_cap = amount_to_lock - lock_in_public_cap; + + // If there is still room in extra_cap, then check if this + // is a user that should be allowed to use the extra_cap. + if !can_user_lock_in_extra_cap( + deps, + env, + constants, + current_round, + sender, + lock_in_known_users_cap, + )? { + return lock_limit_reached_error; + } + + return Ok(LockingInfo { + lock_in_public_cap: Some(lock_in_public_cap), + lock_in_known_users_cap: Some(lock_in_known_users_cap), + }); + } + + // If we got through here, it means that constants.current_users_extra_cap > 0. + // If constants.current_users_extra_cap was 0 and public_cap (equal to total_cap) + // is equal to total_locked_tokens, then we would error out at the start of this + // function, because any amount_to_lock would exceed the total_cap. This is just + // a safety check to make the code resilient to future changes. + if constants.current_users_extra_cap == 0 { + return lock_limit_reached_error; + } + + // If there is still room in extra_cap, then check if this + // is a user that should be allowed to use the extra_cap. + if !can_user_lock_in_extra_cap(deps, env, constants, current_round, sender, amount_to_lock)? { + return lock_limit_reached_error; + } + + Ok(LockingInfo { + lock_in_public_cap: None, + lock_in_known_users_cap: Some(amount_to_lock), + }) +} + +fn can_user_lock_in_extra_cap( + deps: &DepsMut, + env: &Env, + constants: &Constants, + current_round: u64, + sender: &Addr, + amount_to_lock: u128, +) -> Result { + let extra_locked_tokens_round_total = EXTRA_LOCKED_TOKENS_ROUND_TOTAL + .may_load(deps.storage, current_round)? + .unwrap_or(0); + + if extra_locked_tokens_round_total + amount_to_lock > constants.current_users_extra_cap { + return Ok(false); + } + + let user_has_lockups = LOCKS_MAP + .prefix(sender.clone()) + .range(deps.storage, None, None, Order::Ascending) + .count() + > 0; + + if !user_has_lockups { + return Ok(false); + } + + // Calculate user's voting power share in the total voting power + let users_voting_power = Decimal::from_ratio( + get_user_voting_power(&deps.as_ref(), env, sender.clone())?, + Uint128::one(), + ); + let total_voting_power = get_total_power_for_round(deps.as_ref(), current_round)?; + let users_voting_power_share = users_voting_power.checked_div(total_voting_power)?; + + // Calculate what would be users share of extra locked tokens in the maximum allowed extra locked tokens + let users_current_extra_lock = EXTRA_LOCKED_TOKENS_CURRENT_USERS + .may_load(deps.storage, (current_round, sender.clone()))? + .unwrap_or(0); + + let users_extra_lock = + Decimal::from_ratio(users_current_extra_lock + amount_to_lock, Uint128::one()); + let maximum_extra_lock = Decimal::from_ratio(constants.current_users_extra_cap, Uint128::one()); + let users_extra_lock_share = users_extra_lock.checked_div(maximum_extra_lock)?; + + // If users share in maximum allowed extra cap would be greater than its share in + // total voting power, then don't allow this user to lock the given amount of tokens. + if users_extra_lock_share > users_voting_power_share { + return Ok(false); + } + + Ok(true) +} + +// TODO: add desc +pub fn update_locked_tokens_info( + deps: &mut DepsMut, + current_round: u64, + sender: &Addr, + mut total_locked_tokens: u128, + locking_info: LockingInfo, +) -> Result<(), ContractError> { + if let Some(lock_in_public_cap) = locking_info.lock_in_public_cap { + total_locked_tokens += lock_in_public_cap; + LOCKED_TOKENS.save(deps.storage, &total_locked_tokens)?; + } + + if let Some(lock_in_known_users_cap) = locking_info.lock_in_known_users_cap { + LOCKED_TOKENS.save( + deps.storage, + &(total_locked_tokens + lock_in_known_users_cap), + )?; + + EXTRA_LOCKED_TOKENS_ROUND_TOTAL.update( + deps.storage, + current_round, + |current_value| -> StdResult { + match current_value { + None => Ok(lock_in_known_users_cap), + Some(current_value) => Ok(current_value + lock_in_known_users_cap), + } + }, + )?; + + EXTRA_LOCKED_TOKENS_CURRENT_USERS.update( + deps.storage, + (current_round, sender.clone()), + |current_value| -> StdResult { + match current_value { + None => Ok(lock_in_known_users_cap), + Some(current_value) => Ok(current_value + lock_in_known_users_cap), + } + }, + )?; + } + + Ok(()) +} + +pub struct LockingInfo { + pub lock_in_public_cap: Option, + pub lock_in_known_users_cap: Option, +} diff --git a/contracts/hydro/src/validators_icqs.rs b/contracts/hydro/src/validators_icqs.rs index 05766bc7..da7dce12 100644 --- a/contracts/hydro/src/validators_icqs.rs +++ b/contracts/hydro/src/validators_icqs.rs @@ -22,9 +22,10 @@ use crate::{ error::ContractError, lsm_integration::{initialize_validator_store, update_scores_due_to_power_ratio_change}, state::{ - Constants, ValidatorInfo, CONSTANTS, QUERY_ID_TO_VALIDATOR, VALIDATORS_INFO, - VALIDATORS_PER_ROUND, VALIDATOR_TO_QUERY_ID, + Constants, ValidatorInfo, QUERY_ID_TO_VALIDATOR, VALIDATORS_INFO, VALIDATORS_PER_ROUND, + VALIDATOR_TO_QUERY_ID, }, + utils::load_current_constants, }; // A multiplier to normalize shares, such that when a validator has just been created @@ -121,7 +122,7 @@ pub fn handle_delivered_interchain_query_result( ); } }; - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps.as_ref(), &env)?; let current_round = compute_current_round_id(&env, &constants)?; initialize_validator_store(deps.storage, current_round)?; diff --git a/packages/interface/src/hydro.rs b/packages/interface/src/hydro.rs index cdd8c768..750f5df8 100644 --- a/packages/interface/src/hydro.rs +++ b/packages/interface/src/hydro.rs @@ -1,12 +1,12 @@ use cw_orch::interface; -use hydro::migration::v2_0_1::MigrateMsgV2_0_1; +use hydro::migration::unreleased::MigrateMsgUNRELEASED; pub use hydro::msg::{ExecuteMsg, InstantiateMsg}; pub use hydro::query::QueryMsg; pub const CONTRACT_ID: &str = "hydro_contract"; -#[interface(InstantiateMsg, ExecuteMsg, QueryMsg, MigrateMsgV2_0_1, id = CONTRACT_ID)] +#[interface(InstantiateMsg, ExecuteMsg, QueryMsg, MigrateMsgUNRELEASED, id = CONTRACT_ID)] pub struct Hydro; #[cfg(not(target_arch = "wasm32"))] From 9c5361c481b650820e0510691e8606c63fa046ac Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Fri, 17 Jan 2025 10:30:40 +0100 Subject: [PATCH 02/14] Introduce snapshot map for total voting power tracking and handle its population --- contracts/hydro/src/contract.rs | 14 +++ contracts/hydro/src/lsm_integration.rs | 107 +++++++++++++++++++- contracts/hydro/src/migration/unreleased.rs | 2 + contracts/hydro/src/state.rs | 11 +- contracts/hydro/src/utils.rs | 2 +- contracts/hydro/src/validators_icqs.rs | 28 +++-- 6 files changed, 149 insertions(+), 15 deletions(-) diff --git a/contracts/hydro/src/contract.rs b/contracts/hydro/src/contract.rs index ad37c967..1418b36f 100644 --- a/contracts/hydro/src/contract.rs +++ b/contracts/hydro/src/contract.rs @@ -338,8 +338,10 @@ fn lock_tokens( update_total_time_weighted_shares( &mut deps, + env.block.height, &constants, current_round, + current_round, last_round_with_power, lock_end, validator, @@ -465,8 +467,10 @@ fn refresh_single_lock( let new_last_round_with_power = compute_round_id_for_timestamp(constants, new_lock_end)? - 1; update_total_time_weighted_shares( deps, + env.block.height, constants, current_round_id, + current_round_id, new_last_round_with_power, new_lock_end, validator, @@ -2376,7 +2380,9 @@ fn update_proposal_and_props_by_score_maps( #[allow(clippy::too_many_arguments)] // complex function that needs a lot of arguments fn update_total_time_weighted_shares( deps: &mut DepsMut, + current_height: u64, constants: &Constants, + current_round: u64, start_round_id: u64, end_round_id: u64, lock_end: u64, @@ -2387,6 +2393,12 @@ fn update_total_time_weighted_shares( where T: Fn(u64, Timestamp, Uint128) -> Uint128, { + // We need the validator power ratio to update the total voting power of current and possibly future rounds. + // It is loaded outside of the loop to save some gas. We use the validator power ratio from the current round, + // since it is not populated for future rounds yet. + let validator_power_ratio = + get_validator_power_ratio_for_round(deps.storage, current_round, shares_validator.clone())?; + for round in start_round_id..=end_round_id { let round_end = compute_round_end(constants, round)?; let lockup_length = lock_end - round_end.nanos(); @@ -2408,8 +2420,10 @@ where // add the shares to the total power in the round add_validator_shares_to_round_total( deps.storage, + current_height, round, shares_validator.clone(), + validator_power_ratio, scaled_shares, )?; } diff --git a/contracts/hydro/src/lsm_integration.rs b/contracts/hydro/src/lsm_integration.rs index 8956749d..be2c741b 100644 --- a/contracts/hydro/src/lsm_integration.rs +++ b/contracts/hydro/src/lsm_integration.rs @@ -1,11 +1,11 @@ -use cosmwasm_std::{Decimal, Deps, Env, Order, StdError, StdResult, Storage}; +use cosmwasm_std::{Decimal, Deps, Env, Order, StdError, StdResult, Storage, Uint128}; use neutron_sdk::bindings::query::NeutronQuery; use neutron_std::types::ibc::applications::transfer::v1::{DenomTrace, TransferQuerier}; use crate::state::{ - ValidatorInfo, SCALED_ROUND_POWER_SHARES_MAP, VALIDATORS_INFO, VALIDATORS_PER_ROUND, - VALIDATORS_STORE_INITIALIZED, + ValidatorInfo, SCALED_ROUND_POWER_SHARES_MAP, TOTAL_VOTING_POWER_PER_ROUND, VALIDATORS_INFO, + VALIDATORS_PER_ROUND, VALIDATORS_STORE_INITIALIZED, }; use crate::{ contract::compute_current_round_id, @@ -133,6 +133,35 @@ fn query_ibc_denom_trace(deps: &Deps, denom: String) -> StdResult< .ok_or(StdError::generic_err("Failed to obtain IBC denom trace")) } +/// Updates all the required stores each time some validator's power ratio is changed +pub fn update_stores_due_to_power_ratio_change( + storage: &mut dyn Storage, + current_height: u64, + validator: &str, + current_round_id: u64, + old_power_ratio: Decimal, + new_power_ratio: Decimal, +) -> StdResult<()> { + update_scores_due_to_power_ratio_change( + storage, + validator, + current_round_id, + old_power_ratio, + new_power_ratio, + )?; + + update_total_power_due_to_power_ratio_change( + storage, + current_height, + validator, + current_round_id, + old_power_ratio, + new_power_ratio, + )?; + + Ok(()) +} + // Applies the new power ratio for the validator to score keepers. // It updates: // * all proposals of that round @@ -215,6 +244,54 @@ pub fn update_scores_due_to_power_ratio_change( Ok(()) } +// Updates the total voting power for the current and future rounds when the given validator power ratio changes. +pub fn update_total_power_due_to_power_ratio_change( + storage: &mut dyn Storage, + current_height: u64, + validator: &str, + current_round_id: u64, + old_power_ratio: Decimal, + new_power_ratio: Decimal, +) -> StdResult<()> { + let mut round_id = current_round_id; + + // Try to update the total voting power starting from the current round id and moving to next rounds until + // we reach the round for which there is no entry in the TOTAL_VOTING_POWER_PER_ROUND. This implies the first + // round in which no lock entry gives voting power, which also must be true for all rounds after that round, + // so we break the loop at that point. + loop { + let old_total_voting_power = + match TOTAL_VOTING_POWER_PER_ROUND.may_load(storage, round_id)? { + None => break, + Some(total_voting_power) => Decimal::from_ratio(total_voting_power, Uint128::one()), + }; + + let validator_shares = + get_validator_shares_for_round(storage, round_id, validator.to_owned())?; + if validator_shares == Decimal::zero() { + continue; + } + + let old_validator_shares_power = validator_shares * old_power_ratio; + let new_validator_shares_power = validator_shares * new_power_ratio; + + let new_total_voting_power = old_total_voting_power + .checked_add(new_validator_shares_power)? + .checked_sub(old_validator_shares_power)?; + + TOTAL_VOTING_POWER_PER_ROUND.save( + storage, + round_id, + &new_total_voting_power.to_uint_floor(), + current_height, + )?; + + round_id += 1; + } + + Ok(()) +} + pub fn get_total_power_for_round(deps: Deps, round_id: u64) -> StdResult { // get the current validators for that round let validators = get_round_validators(deps, round_id); @@ -233,13 +310,35 @@ pub fn get_total_power_for_round(deps: Deps, round_id: u64) -> Std pub fn add_validator_shares_to_round_total( storage: &mut dyn Storage, + current_height: u64, round_id: u64, validator: String, + val_power_ratio: Decimal, num_shares: Decimal, ) -> StdResult<()> { + // Update validator shares for the round let current_shares = get_validator_shares_for_round(storage, round_id, validator.clone())?; let new_shares = current_shares + num_shares; - SCALED_ROUND_POWER_SHARES_MAP.save(storage, (round_id, validator), &new_shares) + SCALED_ROUND_POWER_SHARES_MAP.save(storage, (round_id, validator.clone()), &new_shares)?; + + // Update total voting power for the round + TOTAL_VOTING_POWER_PER_ROUND.update( + storage, + round_id, + current_height, + |total_power_before| -> Result { + let total_power_before = match total_power_before { + None => Decimal::zero(), + Some(total_power_before) => Decimal::from_ratio(total_power_before, Uint128::one()), + }; + + Ok(total_power_before + .checked_add(num_shares.checked_mul(val_power_ratio)?)? + .to_uint_floor()) + }, + )?; + + Ok(()) } pub fn get_validator_shares_for_round( diff --git a/contracts/hydro/src/migration/unreleased.rs b/contracts/hydro/src/migration/unreleased.rs index 5a83a482..45dee120 100644 --- a/contracts/hydro/src/migration/unreleased.rs +++ b/contracts/hydro/src/migration/unreleased.rs @@ -15,5 +15,7 @@ pub fn migrate_v2_1_0_to_unreleased( ) -> Result<(), ContractError> { // TODO: // 1) Migrate Constants from Item to Map; Make sure that the queries for past rounds keep working. + // 2) TOTAL_VOTING_POWER_PER_ROUND needs to be correctly populated regardless of the point in time + // we do the migration. Needs to be populated for future rounds as well. Ok(()) } diff --git a/contracts/hydro/src/state.rs b/contracts/hydro/src/state.rs index 3f44cc0e..ec1adb92 100644 --- a/contracts/hydro/src/state.rs +++ b/contracts/hydro/src/state.rs @@ -1,6 +1,6 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{Addr, Coin, Decimal, Timestamp, Uint128}; -use cw_storage_plus::{Item, Map}; +use cw_storage_plus::{Item, Map, SnapshotMap, Strategy}; use crate::msg::LiquidityDeployment; @@ -106,6 +106,15 @@ pub struct LockEntry { pub lock_end: Timestamp, } +// This is the total voting power of all users combined. +// TOTAL_VOTING_POWER_PER_ROUND: key(round_id) -> total_voting_power +pub const TOTAL_VOTING_POWER_PER_ROUND: SnapshotMap = SnapshotMap::new( + "total_voting_power_per_round", + "total_voting_power_per_round__checkpoints", + "total_voting_power_per_round__changelog", + Strategy::EveryBlock, +); + // PROPOSAL_MAP: key(round_id, tranche_id, prop_id) -> Proposal pub const PROPOSAL_MAP: Map<(u64, u64, u64), Proposal> = Map::new("prop_map"); #[cw_serde] diff --git a/contracts/hydro/src/utils.rs b/contracts/hydro/src/utils.rs index 8aeb2f63..5320a36b 100644 --- a/contracts/hydro/src/utils.rs +++ b/contracts/hydro/src/utils.rs @@ -43,7 +43,7 @@ pub fn load_constants_active_at_timestamp( 1 => current_constants[0].clone(), _ => { return Err(StdError::generic_err( - "Failed to load constants aactive at the given timestamp.", + "Failed to load constants active at the given timestamp.", )); } }) diff --git a/contracts/hydro/src/validators_icqs.rs b/contracts/hydro/src/validators_icqs.rs index da7dce12..a7b37c6c 100644 --- a/contracts/hydro/src/validators_icqs.rs +++ b/contracts/hydro/src/validators_icqs.rs @@ -20,7 +20,7 @@ use serde::{Deserialize, Serialize}; use crate::{ contract::{compute_current_round_id, NATIVE_TOKEN_DENOM}, error::ContractError, - lsm_integration::{initialize_validator_store, update_scores_due_to_power_ratio_change}, + lsm_integration::{initialize_validator_store, update_stores_due_to_power_ratio_change}, state::{ Constants, ValidatorInfo, QUERY_ID_TO_VALIDATOR, VALIDATORS_INFO, VALIDATORS_PER_ROUND, VALIDATOR_TO_QUERY_ID, @@ -141,6 +141,7 @@ pub fn handle_delivered_interchain_query_result( Some(validator_info) => { top_n_validator_update( &mut deps, + &env, current_round, validator_info, new_tokens, @@ -155,7 +156,7 @@ pub fn handle_delivered_interchain_query_result( match get_last_validator(&mut deps, current_round, &constants) { None => { // if there are currently less than top N validators, add this one to the top N - top_n_validator_add(&mut deps, current_round, validator_info)?; + top_n_validator_add(&mut deps, &env, current_round, validator_info)?; } Some(last_validator) => { // there are top N validators already, so check if the new one has more @@ -165,8 +166,13 @@ pub fn handle_delivered_interchain_query_result( let other_validator_info = VALIDATORS_INFO .load(deps.storage, (current_round, last_validator.1.clone()))?; - top_n_validator_remove(&mut deps, current_round, other_validator_info)?; - top_n_validator_add(&mut deps, current_round, validator_info)?; + top_n_validator_remove( + &mut deps, + &env, + current_round, + other_validator_info, + )?; + top_n_validator_add(&mut deps, &env, current_round, validator_info)?; // remove ICQ of the validator that was dropped from the top N let last_validator_query_id = @@ -188,15 +194,15 @@ pub fn handle_delivered_interchain_query_result( fn top_n_validator_add( deps: &mut DepsMut, + env: &Env, current_round: u64, validator_info: ValidatorInfo, ) -> Result<(), NeutronError> { // this call only makes difference if some validator was in the top N, // then was droped out, and then got back in the top N again - - // update the power ratio for the validator in the scores of proposals - update_scores_due_to_power_ratio_change( + update_stores_due_to_power_ratio_change( deps.storage, + env.block.height, &validator_info.address.clone(), current_round, Decimal::zero(), @@ -221,6 +227,7 @@ fn top_n_validator_add( fn top_n_validator_update( deps: &mut DepsMut, + env: &Env, current_round: u64, mut validator_info: ValidatorInfo, new_tokens: Uint128, @@ -251,8 +258,9 @@ fn top_n_validator_update( } if validator_info.power_ratio != new_power_ratio { - update_scores_due_to_power_ratio_change( + update_stores_due_to_power_ratio_change( deps.storage, + env.block.height, &validator_info.address.clone(), current_round, validator_info.power_ratio, @@ -276,11 +284,13 @@ fn top_n_validator_update( fn top_n_validator_remove( deps: &mut DepsMut, + env: &Env, current_round: u64, validator_info: ValidatorInfo, ) -> Result<(), NeutronError> { - update_scores_due_to_power_ratio_change( + update_stores_due_to_power_ratio_change( deps.storage, + env.block.height, &validator_info.address.clone(), current_round, validator_info.power_ratio, From 5f2bb8b204252dbd4d3400fe78bb87ca9466c04e Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Tue, 21 Jan 2025 14:48:25 +0100 Subject: [PATCH 03/14] Added round<->height tracking and implemented validation for users locking in extra_cap based on their voting power in previous round. --- contracts/hydro/src/contract.rs | 133 ++++++++++++++---- contracts/hydro/src/lsm_integration.rs | 19 +-- contracts/hydro/src/migration/unreleased.rs | 6 +- contracts/hydro/src/state.rs | 28 +++- .../hydro/src/testing_lsm_integration.rs | 25 +++- contracts/hydro/src/utils.rs | 97 ++++++++++--- contracts/hydro/src/validators_icqs.rs | 6 +- 7 files changed, 248 insertions(+), 66 deletions(-) diff --git a/contracts/hydro/src/contract.rs b/contracts/hydro/src/contract.rs index 1418b36f..34f5ca4a 100644 --- a/contracts/hydro/src/contract.rs +++ b/contracts/hydro/src/contract.rs @@ -16,8 +16,7 @@ use neutron_sdk::sudo::msg::SudoMsg; use crate::error::ContractError; use crate::lsm_integration::{ add_validator_shares_to_round_total, get_total_power_for_round, - get_validator_power_ratio_for_round, initialize_validator_store, validate_denom, - COSMOS_VALIDATOR_PREFIX, + get_validator_power_ratio_for_round, validate_denom, COSMOS_VALIDATOR_PREFIX, }; use crate::msg::{ExecuteMsg, InstantiateMsg, LiquidityDeployment, ProposalToLockups, TrancheInfo}; use crate::query::{ @@ -35,13 +34,13 @@ use crate::score_keeper::{ use crate::state::{ Constants, LockEntry, Proposal, RoundLockPowerSchedule, Tranche, ValidatorInfo, Vote, VoteWithPower, CONSTANTS, ICQ_MANAGERS, LIQUIDITY_DEPLOYMENTS_MAP, LOCKED_TOKENS, LOCKS_MAP, - LOCK_ID, PROPOSAL_MAP, PROPS_BY_SCORE, PROP_ID, TRANCHE_ID, TRANCHE_MAP, VALIDATORS_INFO, - VALIDATORS_PER_ROUND, VALIDATORS_STORE_INITIALIZED, VALIDATOR_TO_QUERY_ID, VOTE_MAP, - VOTING_ALLOWED_ROUND, WHITELIST, WHITELIST_ADMINS, + LOCK_ID, PROPOSAL_MAP, PROPS_BY_SCORE, PROP_ID, ROUND_TO_HEIGHT_RANGE, TRANCHE_ID, TRANCHE_MAP, + VALIDATORS_INFO, VALIDATORS_PER_ROUND, VALIDATORS_STORE_INITIALIZED, VALIDATOR_TO_QUERY_ID, + VOTE_MAP, VOTING_ALLOWED_ROUND, WHITELIST, WHITELIST_ADMINS, }; use crate::utils::{ - load_constants_active_at_timestamp, load_current_constants, update_locked_tokens_info, - validate_locked_tokens_caps, + load_constants_active_at_timestamp, load_current_constants, run_on_each_transaction, + update_locked_tokens_info, validate_locked_tokens_caps, }; use crate::validators_icqs::{ build_create_interchain_query_submsg, handle_delivered_interchain_query_result, @@ -268,7 +267,7 @@ fn lock_tokens( )?; let current_round = compute_current_round_id(&env, &constants)?; - initialize_validator_store(deps.storage, current_round)?; + run_on_each_transaction(deps.storage, &env, current_round)?; if info.funds.len() != 1 { return Err(ContractError::Std(StdError::generic_err( @@ -312,7 +311,12 @@ fn lock_tokens( lock_end: env.block.time.plus_nanos(lock_duration), }; let lock_end = lock_entry.lock_end.nanos(); - LOCKS_MAP.save(deps.storage, (info.sender.clone(), lock_id), &lock_entry)?; + LOCKS_MAP.save( + deps.storage, + (info.sender.clone(), lock_id), + &lock_entry, + env.block.height, + )?; update_locked_tokens_info( &mut deps, current_round, @@ -390,7 +394,7 @@ fn refresh_lock_duration( } let current_round_id = compute_current_round_id(&env, &constants)?; - initialize_validator_store(deps.storage, current_round_id)?; + run_on_each_transaction(deps.storage, &env, current_round_id)?; let mut response = Response::new() .add_attribute("action", "refresh_lock_duration") @@ -441,7 +445,12 @@ fn refresh_single_lock( ))); } lock_entry.lock_end = Timestamp::from_nanos(new_lock_end); - LOCKS_MAP.save(deps.storage, (info.sender.clone(), lock_id), &lock_entry)?; + LOCKS_MAP.save( + deps.storage, + (info.sender.clone(), lock_id), + &lock_entry, + env.block.height, + )?; let validator_result = validate_denom( deps.as_ref(), env.clone(), @@ -572,7 +581,7 @@ fn unlock_tokens( // Delete unlocked locks for (addr, lock_id) in to_delete { - LOCKS_MAP.remove(deps.storage, (addr, lock_id)); + LOCKS_MAP.remove(deps.storage, (addr, lock_id), env.block.height)?; } if !total_unlocked_amount.is_zero() { @@ -641,7 +650,7 @@ fn create_proposal( let current_round_id = compute_current_round_id(&env, &constants)?; // this is just to initialize the store on the first action in each round - initialize_validator_store(deps.storage, current_round_id)?; + run_on_each_transaction(deps.storage, &env, current_round_id)?; // if no round_id is provided, use the current round let round_id = round_id.unwrap_or(current_round_id); @@ -758,7 +767,7 @@ fn vote( let round_id = compute_current_round_id(&env, &constants)?; // voting can never be the first action in a round (since one can only vote on proposals in the current round, and a proposal must be created first) // however, to be safe, we initialize the validator store here, since this is more robust in case we change something about voting later - initialize_validator_store(deps.storage, round_id)?; + run_on_each_transaction(deps.storage, &env, round_id)?; // check that the tranche with the given id exists TRANCHE_MAP.load(deps.storage, tranche_id)?; @@ -1248,7 +1257,7 @@ fn create_icqs_for_validators( // This function will return error if the first round hasn't started yet. It is necessarry // that it has started, since handling the results of the interchain queries relies on this. let round_id = compute_current_round_id(&env, &constants)?; - initialize_validator_store(deps.storage, round_id)?; + run_on_each_transaction(deps.storage, &env, round_id)?; let mut valid_addresses = HashSet::new(); for validator in validators @@ -1783,11 +1792,15 @@ pub fn query_user_voting_power( address: String, ) -> StdResult { Ok(UserVotingPowerResponse { - voting_power: get_user_voting_power(&deps, &env, deps.api.addr_validate(&address)?)?, + voting_power: get_current_user_voting_power( + &deps, + &env, + deps.api.addr_validate(&address)?, + )?, }) } -pub fn get_user_voting_power( +pub fn get_current_user_voting_power( deps: &Deps, env: &Env, address: Addr, @@ -1796,22 +1809,84 @@ pub fn get_user_voting_power( let current_round_id = compute_current_round_id(env, &constants)?; let round_end = compute_round_end(&constants, current_round_id)?; + let filter = |lock_res: Result<(u64, LockEntry), StdError>| match lock_res { + Err(_) => None, + Ok(lock_tuple) => { + if lock_tuple.1.lock_end > round_end { + Some(lock_tuple.1) + } else { + None + } + } + }; + + get_user_voting_power( + deps, + env, + &constants, + address.clone(), + current_round_id, + round_end, + filter, + ) +} + +pub fn get_user_voting_power_for_past_round( + deps: &Deps, + env: &Env, + constants: &Constants, + address: Addr, + round_id: u64, +) -> StdResult { + let round_end = compute_round_end(constants, round_id)?; + let load_height = ROUND_TO_HEIGHT_RANGE + .load(deps.storage, round_id)? + .highest_known_height; + + let filter = |lock_res: Result<(u64, LockEntry), StdError>| match lock_res { + Err(_) => None, + Ok(lock_tuple) => { + if lock_tuple.1.lock_end <= round_end { + return None; + } + + LOCKS_MAP + .may_load_at_height(deps.storage, (address.clone(), lock_tuple.0), load_height) + .unwrap_or_default() + } + }; + + get_user_voting_power( + deps, + env, + constants, + address.clone(), + round_id, + round_end, + filter, + ) +} + +pub fn get_user_voting_power( + deps: &Deps, + env: &Env, + constants: &Constants, + address: Addr, + round_id: u64, + round_end: Timestamp, + filter: T, +) -> StdResult +where + T: FnMut(Result<(u64, LockEntry), StdError>) -> Option, +{ Ok(LOCKS_MAP .prefix(address) .range(deps.storage, None, None, Order::Ascending) - .map(|l| l.unwrap().1) - .filter(|l| l.lock_end > round_end) + .filter_map(filter) .map(|lockup| { - to_lockup_with_power( - *deps, - env.clone(), - &constants, - current_round_id, - round_end, - lockup, - ) - .current_voting_power - .u128() + to_lockup_with_power(*deps, env.clone(), constants, round_id, round_end, lockup) + .current_voting_power + .u128() }) .sum()) } diff --git a/contracts/hydro/src/lsm_integration.rs b/contracts/hydro/src/lsm_integration.rs index be2c741b..9fee7544 100644 --- a/contracts/hydro/src/lsm_integration.rs +++ b/contracts/hydro/src/lsm_integration.rs @@ -293,19 +293,12 @@ pub fn update_total_power_due_to_power_ratio_change( } pub fn get_total_power_for_round(deps: Deps, round_id: u64) -> StdResult { - // get the current validators for that round - let validators = get_round_validators(deps, round_id); - - // compute the total power - let mut total = Decimal::zero(); - for validator in validators { - let shares = SCALED_ROUND_POWER_SHARES_MAP - .may_load(deps.storage, (round_id, validator.address.clone()))? - .unwrap_or(Decimal::zero()); - total += shares * validator.power_ratio; - } - - Ok(total) + Ok( + match TOTAL_VOTING_POWER_PER_ROUND.may_load(deps.storage, round_id)? { + None => Decimal::zero(), + Some(total_voting_power) => Decimal::from_ratio(total_voting_power, Uint128::one()), + }, + ) } pub fn add_validator_shares_to_round_total( diff --git a/contracts/hydro/src/migration/unreleased.rs b/contracts/hydro/src/migration/unreleased.rs index 45dee120..0e843fc1 100644 --- a/contracts/hydro/src/migration/unreleased.rs +++ b/contracts/hydro/src/migration/unreleased.rs @@ -16,6 +16,10 @@ pub fn migrate_v2_1_0_to_unreleased( // TODO: // 1) Migrate Constants from Item to Map; Make sure that the queries for past rounds keep working. // 2) TOTAL_VOTING_POWER_PER_ROUND needs to be correctly populated regardless of the point in time - // we do the migration. Needs to be populated for future rounds as well. + // we do the migration. Needs to be populated for future rounds as well. If we populate it for + // the past rounds as well, we can use that in our queries instead of on-the-fly computation + // e.g. query_round_total_power(), query_top_n_proposals(). + // 3) LOCKS_MAP needs to be migrated to SnapshotMap. + // 4) Populate ROUND_TO_HEIGHT_RANGE and HEIGHT_TO_ROUND for previous rounds? Ok(()) } diff --git a/contracts/hydro/src/state.rs b/contracts/hydro/src/state.rs index ec1adb92..a0bc02b4 100644 --- a/contracts/hydro/src/state.rs +++ b/contracts/hydro/src/state.rs @@ -97,7 +97,13 @@ pub const LOCK_ID: Item = Item::new("lock_id"); pub const PROP_ID: Item = Item::new("prop_id"); // LOCKS_MAP: key(sender_address, lock_id) -> LockEntry -pub const LOCKS_MAP: Map<(Addr, u64), LockEntry> = Map::new("locks_map"); +pub const LOCKS_MAP: SnapshotMap<(Addr, u64), LockEntry> = SnapshotMap::new( + "locks_map", + "locks_map__checkpoints", + "locks_map__changelog", + Strategy::EveryBlock, +); + #[cw_serde] pub struct LockEntry { pub lock_id: u64, @@ -256,3 +262,23 @@ impl ValidatorInfo { // LIQUIDITY_DEPLOYMENTS_MAP: key(round_id, tranche_id, prop_id) -> deployment pub const LIQUIDITY_DEPLOYMENTS_MAP: Map<(u64, u64, u64), LiquidityDeployment> = Map::new("liquidity_deployments_map"); + +// Stores the mapping between the round_id and the range of known block heights for that round. +// The lowest_known_height is the height at which the first transaction was executed, and the +// highest_known_height is the height at which the last transaction was executed against the smart +// contract in the given round. +// Notice that the round could span beyond these boundaries, but we don't have a way to know that. +// Besides, the info we store here is sufficient for our needs. +// ROUND_TO_HEIGHT_RANGE: key(round_id) -> HeightRange +pub const ROUND_TO_HEIGHT_RANGE: Map = Map::new("round_to_height_range"); + +// Stores the mapping between the block height and round. It gets populated +// each time a transaction is executed against the smart contract. +// HEIGHT_TO_ROUND: key(block_height) -> round_id +pub const HEIGHT_TO_ROUND: Map = Map::new("height_to_round"); + +#[cw_serde] +pub struct HeightRange { + pub lowest_known_height: u64, + pub highest_known_height: u64, +} diff --git a/contracts/hydro/src/testing_lsm_integration.rs b/contracts/hydro/src/testing_lsm_integration.rs index 0566ba0a..f14027b9 100644 --- a/contracts/hydro/src/testing_lsm_integration.rs +++ b/contracts/hydro/src/testing_lsm_integration.rs @@ -737,7 +737,30 @@ fn lock_tokens_multiple_validators_and_vote() { } // update the power ratio for validator 1 to become 0.5 - set_validator_power_ratio(deps.as_mut().storage, 0, VALIDATOR_1, Decimal::percent(50)); + let mock_tokens = Uint128::new(500); + let mock_shares = Uint128::new(1000) * TOKENS_TO_SHARES_MULTIPLIER; + let mock_validator = get_mock_validator(VALIDATOR_1, mock_tokens, mock_shares); + + let mock_data = HashMap::from([( + 1, + ICQMockData { + query_type: QueryType::KV, + should_query_return_error: false, + should_query_result_return_error: false, + kv_results: vec![StorageValue { + storage_prefix: STAKING_STORE_KEY.to_string(), + key: Binary::default(), + value: Binary::from(mock_validator.encode_to_vec()), + }], + }, + )]); + + deps.querier = deps + .querier + .with_custom_handler(custom_interchain_query_mock(mock_data)); + + let res = sudo(deps.as_mut(), env, SudoMsg::KVQueryResult { query_id: 1 }); + assert!(res.is_ok()); // Check the proposal scores { diff --git a/contracts/hydro/src/utils.rs b/contracts/hydro/src/utils.rs index 5320a36b..81f18260 100644 --- a/contracts/hydro/src/utils.rs +++ b/contracts/hydro/src/utils.rs @@ -1,16 +1,16 @@ use cosmwasm_std::{ - Addr, Decimal, Deps, DepsMut, Env, Order, StdError, StdResult, Timestamp, Uint128, + Addr, Decimal, Deps, DepsMut, Env, Order, StdError, StdResult, Storage, Timestamp, Uint128, }; use cw_storage_plus::Bound; use neutron_sdk::bindings::query::NeutronQuery; use crate::{ - contract::get_user_voting_power, + contract::get_user_voting_power_for_past_round, error::ContractError, - lsm_integration::get_total_power_for_round, + lsm_integration::{get_total_power_for_round, initialize_validator_store}, state::{ - Constants, CONSTANTS, EXTRA_LOCKED_TOKENS_CURRENT_USERS, EXTRA_LOCKED_TOKENS_ROUND_TOTAL, - LOCKED_TOKENS, LOCKS_MAP, + Constants, HeightRange, CONSTANTS, EXTRA_LOCKED_TOKENS_CURRENT_USERS, + EXTRA_LOCKED_TOKENS_ROUND_TOTAL, HEIGHT_TO_ROUND, LOCKED_TOKENS, ROUND_TO_HEIGHT_RANGE, }, }; @@ -49,7 +49,19 @@ pub fn load_constants_active_at_timestamp( }) } -// TODO: add desc +// This function validates if user should be allowed to lock more tokens, depending on the total amount of +// currently locked tokens, existence of the extra cap and the number of tokens user already locked in that cap. +// Caps that we consider: +// 1) Total cap: the maximum number of tokens that can be locked in the contract, regardless of the +// extra cap existence. +// 2) Extra cap: the number of tokens reserved for users that had some voting power in previous round. +// It will be available to those users to lock additional tokens even if the public cap is filled. +// The extra cap will be available only for certain time frame at the beginning of the round. Duration +// will be determined through governance. After the extra cap duration has expired, any tokens left up +// to the total cap are allowed to be locked by any Hydro user. +// 3) Public cap: during the existence of extra cap, new Hydro users will be allowed to lock tokens only +// in public cap, where public_cap = total_cap - extra_cap. +// After the extra cap duration expires, public cap becomes equal to the total cap. pub fn validate_locked_tokens_caps( deps: &DepsMut, env: &Env, @@ -145,22 +157,31 @@ fn can_user_lock_in_extra_cap( return Ok(false); } - let user_has_lockups = LOCKS_MAP - .prefix(sender.clone()) - .range(deps.storage, None, None, Order::Ascending) - .count() - > 0; - - if !user_has_lockups { - return Ok(false); - } + // Determine if user has the right to lock in extra_cap by looking at its voting power in previous round. + // If we are in round 0 then check the current round. + let round_to_check = match current_round { + 0 => current_round, + _ => current_round - 1, + }; // Calculate user's voting power share in the total voting power let users_voting_power = Decimal::from_ratio( - get_user_voting_power(&deps.as_ref(), env, sender.clone())?, + get_user_voting_power_for_past_round( + &deps.as_ref(), + env, + constants, + sender.clone(), + round_to_check, + )?, Uint128::one(), ); - let total_voting_power = get_total_power_for_round(deps.as_ref(), current_round)?; + let total_voting_power = get_total_power_for_round(deps.as_ref(), round_to_check)?; + + // Prevent division by zero or break early in case user had no voting power in previous round. + if total_voting_power == Decimal::zero() || users_voting_power == Decimal::zero() { + return Ok(false); + } + let users_voting_power_share = users_voting_power.checked_div(total_voting_power)?; // Calculate what would be users share of extra locked tokens in the maximum allowed extra locked tokens @@ -182,7 +203,10 @@ fn can_user_lock_in_extra_cap( Ok(true) } -// TODO: add desc +// Whenever a users locks more tokens this function will update the necessary stores, +// depending on the amounts that user locked in public_cap and extra_cap. +// Stores that will (potentially) be updated: +// LOCKED_TOKENS, EXTRA_LOCKED_TOKENS_ROUND_TOTAL, EXTRA_LOCKED_TOKENS_CURRENT_USERS pub fn update_locked_tokens_info( deps: &mut DepsMut, current_round: u64, @@ -227,6 +251,43 @@ pub fn update_locked_tokens_info( Ok(()) } +// Calls other functions that will update various stores whenever a transaction is executed against the contract. +pub fn run_on_each_transaction( + storage: &mut dyn Storage, + env: &Env, + round_id: u64, +) -> StdResult<()> { + initialize_validator_store(storage, round_id)?; + update_round_to_height_maps(storage, env, round_id) +} + +// Updates round_id -> height_range and block_height -> round_id maps, for later use. +pub fn update_round_to_height_maps( + storage: &mut dyn Storage, + env: &Env, + round_id: u64, +) -> StdResult<()> { + ROUND_TO_HEIGHT_RANGE.update( + storage, + round_id, + |height_range| -> Result { + match height_range { + None => Ok(HeightRange { + lowest_known_height: env.block.height, + highest_known_height: env.block.height, + }), + Some(mut height_range) => { + height_range.highest_known_height = env.block.height; + + Ok(height_range) + } + } + }, + )?; + + HEIGHT_TO_ROUND.save(storage, env.block.height, &round_id) +} + pub struct LockingInfo { pub lock_in_public_cap: Option, pub lock_in_known_users_cap: Option, diff --git a/contracts/hydro/src/validators_icqs.rs b/contracts/hydro/src/validators_icqs.rs index a7b37c6c..258e3c99 100644 --- a/contracts/hydro/src/validators_icqs.rs +++ b/contracts/hydro/src/validators_icqs.rs @@ -20,12 +20,12 @@ use serde::{Deserialize, Serialize}; use crate::{ contract::{compute_current_round_id, NATIVE_TOKEN_DENOM}, error::ContractError, - lsm_integration::{initialize_validator_store, update_stores_due_to_power_ratio_change}, + lsm_integration::update_stores_due_to_power_ratio_change, state::{ Constants, ValidatorInfo, QUERY_ID_TO_VALIDATOR, VALIDATORS_INFO, VALIDATORS_PER_ROUND, VALIDATOR_TO_QUERY_ID, }, - utils::load_current_constants, + utils::{load_current_constants, run_on_each_transaction}, }; // A multiplier to normalize shares, such that when a validator has just been created @@ -124,7 +124,7 @@ pub fn handle_delivered_interchain_query_result( }; let constants = load_current_constants(&deps.as_ref(), &env)?; let current_round = compute_current_round_id(&env, &constants)?; - initialize_validator_store(deps.storage, current_round)?; + run_on_each_transaction(deps.storage, &env, current_round)?; let validator_address = validator.operator_address.clone(); let new_tokens = Uint128::from_str(&validator.tokens)?; From 9c64c2991f6310fea5ddc33b67daf0dbcf9b682d Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Wed, 22 Jan 2025 12:42:28 +0100 Subject: [PATCH 04/14] Introduced USER_LOCKS to be able to calculate users voting power at a given height --- contracts/hydro/src/contract.rs | 99 +++++++++++++++------ contracts/hydro/src/migration/unreleased.rs | 1 + contracts/hydro/src/state.rs | 10 +++ 3 files changed, 83 insertions(+), 27 deletions(-) diff --git a/contracts/hydro/src/contract.rs b/contracts/hydro/src/contract.rs index 34f5ca4a..28ca48d3 100644 --- a/contracts/hydro/src/contract.rs +++ b/contracts/hydro/src/contract.rs @@ -35,8 +35,8 @@ use crate::state::{ Constants, LockEntry, Proposal, RoundLockPowerSchedule, Tranche, ValidatorInfo, Vote, VoteWithPower, CONSTANTS, ICQ_MANAGERS, LIQUIDITY_DEPLOYMENTS_MAP, LOCKED_TOKENS, LOCKS_MAP, LOCK_ID, PROPOSAL_MAP, PROPS_BY_SCORE, PROP_ID, ROUND_TO_HEIGHT_RANGE, TRANCHE_ID, TRANCHE_MAP, - VALIDATORS_INFO, VALIDATORS_PER_ROUND, VALIDATORS_STORE_INITIALIZED, VALIDATOR_TO_QUERY_ID, - VOTE_MAP, VOTING_ALLOWED_ROUND, WHITELIST, WHITELIST_ADMINS, + USER_LOCKS, VALIDATORS_INFO, VALIDATORS_PER_ROUND, VALIDATORS_STORE_INITIALIZED, + VALIDATOR_TO_QUERY_ID, VOTE_MAP, VOTING_ALLOWED_ROUND, WHITELIST, WHITELIST_ADMINS, }; use crate::utils::{ load_constants_active_at_timestamp, load_current_constants, run_on_each_transaction, @@ -304,6 +304,7 @@ fn lock_tokens( let lock_id = LOCK_ID.load(deps.storage)?; LOCK_ID.save(deps.storage, &(lock_id + 1))?; + let lock_entry = LockEntry { lock_id, funds: info.funds[0].clone(), @@ -317,6 +318,22 @@ fn lock_tokens( &lock_entry, env.block.height, )?; + + USER_LOCKS.update( + deps.storage, + info.sender.clone(), + env.block.height, + |current_locks| -> Result, StdError> { + match current_locks { + None => Ok(vec![lock_id]), + Some(mut current_locks) => { + current_locks.push(lock_id); + Ok(current_locks) + } + } + }, + )?; + update_locked_tokens_info( &mut deps, current_round, @@ -571,8 +588,7 @@ fn unlock_tokens( total_unlocked_amount += send.amount; - // Delete entry from LocksMap - to_delete.push((info.sender.clone(), lock_id)); + to_delete.push(lock_id); unlocked_lock_ids.push(lock_id.to_string()); unlocked_tokens.push(send.to_string()); @@ -580,10 +596,30 @@ fn unlock_tokens( } // Delete unlocked locks - for (addr, lock_id) in to_delete { - LOCKS_MAP.remove(deps.storage, (addr, lock_id), env.block.height)?; + for lock_id in to_delete.iter() { + LOCKS_MAP.remove( + deps.storage, + (info.sender.clone(), *lock_id), + env.block.height, + )?; } + let to_delete: HashSet = to_delete.into_iter().collect(); + USER_LOCKS.update( + deps.storage, + info.sender.clone(), + env.block.height, + |current_locks| -> Result, StdError> { + match current_locks { + None => Ok(vec![]), + Some(mut current_locks) => { + current_locks.retain(|lock_id| !to_delete.contains(lock_id)); + Ok(current_locks) + } + } + }, + )?; + if !total_unlocked_amount.is_zero() { LOCKED_TOKENS.update( deps.storage, @@ -1843,28 +1879,37 @@ pub fn get_user_voting_power_for_past_round( .load(deps.storage, round_id)? .highest_known_height; - let filter = |lock_res: Result<(u64, LockEntry), StdError>| match lock_res { - Err(_) => None, - Ok(lock_tuple) => { - if lock_tuple.1.lock_end <= round_end { - return None; - } - - LOCKS_MAP - .may_load_at_height(deps.storage, (address.clone(), lock_tuple.0), load_height) - .unwrap_or_default() - } - }; + let user_locks_ids = USER_LOCKS + .may_load_at_height(deps.storage, address.clone(), load_height)? + .unwrap_or_default(); - get_user_voting_power( - deps, - env, - constants, - address.clone(), - round_id, - round_end, - filter, - ) + Ok(user_locks_ids + .into_iter() + .filter_map(|lock_id| { + match LOCKS_MAP.may_load_at_height( + deps.storage, + (address.clone(), lock_id), + load_height, + ) { + Err(_) => None, + Ok(lock) => match lock { + None => None, + Some(lock) => { + if lock.lock_end <= round_end { + None + } else { + Some(lock) + } + } + }, + } + }) + .map(|lockup| { + to_lockup_with_power(*deps, env.clone(), constants, round_id, round_end, lockup) + .current_voting_power + .u128() + }) + .sum()) } pub fn get_user_voting_power( diff --git a/contracts/hydro/src/migration/unreleased.rs b/contracts/hydro/src/migration/unreleased.rs index 0e843fc1..79f4c1b8 100644 --- a/contracts/hydro/src/migration/unreleased.rs +++ b/contracts/hydro/src/migration/unreleased.rs @@ -20,6 +20,7 @@ pub fn migrate_v2_1_0_to_unreleased( // the past rounds as well, we can use that in our queries instead of on-the-fly computation // e.g. query_round_total_power(), query_top_n_proposals(). // 3) LOCKS_MAP needs to be migrated to SnapshotMap. + // 4) Populate USER_LOCKS for existing lockups. // 4) Populate ROUND_TO_HEIGHT_RANGE and HEIGHT_TO_ROUND for previous rounds? Ok(()) } diff --git a/contracts/hydro/src/state.rs b/contracts/hydro/src/state.rs index a0bc02b4..87e390ed 100644 --- a/contracts/hydro/src/state.rs +++ b/contracts/hydro/src/state.rs @@ -112,6 +112,16 @@ pub struct LockEntry { pub lock_end: Timestamp, } +// Stores the lockup IDs that belong to a user. Snapshoted so that we can determine which lockups +// user had at a given height and use this info to compute users voting power at that height. +// USER_LOCKS: key(user_address) -> Vec +pub const USER_LOCKS: SnapshotMap> = SnapshotMap::new( + "user_locks", + "user_locks__checkpoints", + "user_locks__changelog", + Strategy::EveryBlock, +); + // This is the total voting power of all users combined. // TOTAL_VOTING_POWER_PER_ROUND: key(round_id) -> total_voting_power pub const TOTAL_VOTING_POWER_PER_ROUND: SnapshotMap = SnapshotMap::new( From 5531e4a4db7e7236581be2fc91204443d1174e07 Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Thu, 23 Jan 2025 12:57:23 +0100 Subject: [PATCH 05/14] - Added test for compunders cap and fixed couple of minor bugs within the new code - validate_denom() modified to be able to execute for past rounds as well --- contracts/hydro/src/contract.rs | 57 +- contracts/hydro/src/lib.rs | 3 + contracts/hydro/src/lsm_integration.rs | 14 +- contracts/hydro/src/msg.rs | 1 + contracts/hydro/src/testing.rs | 38 ++ contracts/hydro/src/testing_compounder_cap.rs | 549 ++++++++++++++++++ .../hydro/src/testing_lsm_integration.rs | 7 +- contracts/hydro/src/utils.rs | 6 +- 8 files changed, 632 insertions(+), 43 deletions(-) create mode 100644 contracts/hydro/src/testing_compounder_cap.rs diff --git a/contracts/hydro/src/contract.rs b/contracts/hydro/src/contract.rs index 28ca48d3..09f621dd 100644 --- a/contracts/hydro/src/contract.rs +++ b/contracts/hydro/src/contract.rs @@ -157,6 +157,10 @@ pub fn execute( info: MessageInfo, msg: ExecuteMsg, ) -> Result, ContractError> { + let constants = load_current_constants(&deps.as_ref(), &env)?; + let current_round = compute_current_round_id(&env, &constants)?; + run_on_each_transaction(deps.storage, &env, current_round)?; + match msg { ExecuteMsg::LockTokens { lock_duration } => lock_tokens(deps, env, info, lock_duration), ExecuteMsg::RefreshLockDuration { @@ -193,6 +197,7 @@ pub fn execute( ExecuteMsg::UpdateConfig { activate_at, max_locked_tokens, + current_users_extra_cap, max_deployment_duration, } => update_config( deps, @@ -200,6 +205,7 @@ pub fn execute( info, activate_at, max_locked_tokens, + current_users_extra_cap, max_deployment_duration, ), ExecuteMsg::Pause {} => pause_contract(deps, &env, info), @@ -267,7 +273,6 @@ fn lock_tokens( )?; let current_round = compute_current_round_id(&env, &constants)?; - run_on_each_transaction(deps.storage, &env, current_round)?; if info.funds.len() != 1 { return Err(ContractError::Std(StdError::generic_err( @@ -278,7 +283,7 @@ fn lock_tokens( let funds = info.funds[0].clone(); let validator = - validate_denom(deps.as_ref(), env.clone(), &constants, funds.denom).map_err(|err| { + validate_denom(deps.as_ref(), current_round, &constants, funds.denom).map_err(|err| { ContractError::Std(StdError::generic_err(format!("validating denom: {}", err))) })?; @@ -286,7 +291,6 @@ fn lock_tokens( let amount_to_lock = info.funds[0].amount.u128(); let locking_info = validate_locked_tokens_caps( &deps, - &env, &constants, current_round, &info.sender, @@ -411,7 +415,6 @@ fn refresh_lock_duration( } let current_round_id = compute_current_round_id(&env, &constants)?; - run_on_each_transaction(deps.storage, &env, current_round_id)?; let mut response = Response::new() .add_attribute("action", "refresh_lock_duration") @@ -470,7 +473,7 @@ fn refresh_single_lock( )?; let validator_result = validate_denom( deps.as_ref(), - env.clone(), + current_round_id, constants, lock_entry.funds.denom.clone(), ); @@ -685,8 +688,6 @@ fn create_proposal( validate_contract_is_not_paused(&constants)?; let current_round_id = compute_current_round_id(&env, &constants)?; - // this is just to initialize the store on the first action in each round - run_on_each_transaction(deps.storage, &env, current_round_id)?; // if no round_id is provided, use the current round let round_id = round_id.unwrap_or(current_round_id); @@ -801,9 +802,6 @@ fn vote( validate_contract_is_not_paused(&constants)?; let round_id = compute_current_round_id(&env, &constants)?; - // voting can never be the first action in a round (since one can only vote on proposals in the current round, and a proposal must be created first) - // however, to be safe, we initialize the validator store here, since this is more robust in case we change something about voting later - run_on_each_transaction(deps.storage, &env, round_id)?; // check that the tranche with the given id exists TRANCHE_MAP.load(deps.storage, tranche_id)?; @@ -959,7 +957,7 @@ fn vote( // get the validator from the denom let validator = match validate_denom( deps.as_ref(), - env.clone(), + round_id, &constants, lock_entry.clone().funds.denom, ) { @@ -1135,6 +1133,7 @@ fn update_config( info: MessageInfo, activate_at: Timestamp, max_locked_tokens: Option, + current_users_extra_cap: Option, max_deployment_duration: Option, ) -> Result, ContractError> { if env.block.time > activate_at { @@ -1143,7 +1142,11 @@ fn update_config( ))); } - let mut constants = load_current_constants(&deps.as_ref(), &env)?; + // Load the Constants active at the given timestamp and base the updates on them. + // This allows us to update the Constants in arbitrary order. E.g. at the similar block + // height we can schedule multiple updates for the future, where each new Constants will + // have the changes introduced by earlier ones. + let mut constants = load_constants_active_at_timestamp(&deps.as_ref(), activate_at)?.1; validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; @@ -1157,6 +1160,14 @@ fn update_config( response = response.add_attribute("new_max_locked_tokens", max_locked_tokens.to_string()); } + if let Some(current_users_extra_cap) = current_users_extra_cap { + constants.current_users_extra_cap = current_users_extra_cap; + response = response.add_attribute( + "new_current_users_extra_cap", + current_users_extra_cap.to_string(), + ); + } + if let Some(max_deployment_duration) = max_deployment_duration { constants.max_deployment_duration = max_deployment_duration; response = response.add_attribute( @@ -1292,8 +1303,7 @@ fn create_icqs_for_validators( validate_contract_is_not_paused(&constants)?; // This function will return error if the first round hasn't started yet. It is necessarry // that it has started, since handling the results of the interchain queries relies on this. - let round_id = compute_current_round_id(&env, &constants)?; - run_on_each_transaction(deps.storage, &env, round_id)?; + compute_current_round_id(&env, &constants)?; let mut valid_addresses = HashSet::new(); for validator in validators @@ -1774,14 +1784,7 @@ pub fn query_all_user_lockups( let enriched_lockups = raw_lockups .iter() .map(|lock| { - to_lockup_with_power( - deps, - env.clone(), - &constants, - current_round_id, - round_end, - lock.clone(), - ) + to_lockup_with_power(deps, &constants, current_round_id, round_end, lock.clone()) }) .collect(); @@ -1858,7 +1861,6 @@ pub fn get_current_user_voting_power( get_user_voting_power( deps, - env, &constants, address.clone(), current_round_id, @@ -1869,7 +1871,6 @@ pub fn get_current_user_voting_power( pub fn get_user_voting_power_for_past_round( deps: &Deps, - env: &Env, constants: &Constants, address: Addr, round_id: u64, @@ -1905,7 +1906,7 @@ pub fn get_user_voting_power_for_past_round( } }) .map(|lockup| { - to_lockup_with_power(*deps, env.clone(), constants, round_id, round_end, lockup) + to_lockup_with_power(*deps, constants, round_id, round_end, lockup) .current_voting_power .u128() }) @@ -1914,7 +1915,6 @@ pub fn get_user_voting_power_for_past_round( pub fn get_user_voting_power( deps: &Deps, - env: &Env, constants: &Constants, address: Addr, round_id: u64, @@ -1929,7 +1929,7 @@ where .range(deps.storage, None, None, Order::Ascending) .filter_map(filter) .map(|lockup| { - to_lockup_with_power(*deps, env.clone(), constants, round_id, round_end, lockup) + to_lockup_with_power(*deps, constants, round_id, round_end, lockup) .current_voting_power .u128() }) @@ -2561,13 +2561,12 @@ fn get_lock_count(deps: Deps, user_address: Addr) -> usize { fn to_lockup_with_power( deps: Deps, - env: Env, constants: &Constants, round_id: u64, round_end: Timestamp, lock_entry: LockEntry, ) -> LockEntryWithPower { - match validate_denom(deps, env.clone(), constants, lock_entry.funds.denom.clone()) { + match validate_denom(deps, round_id, constants, lock_entry.funds.denom.clone()) { Err(_) => { // If we fail to resove the denom, or the validator has dropped // from the top N, then this lockup has zero voting power. diff --git a/contracts/hydro/src/lib.rs b/contracts/hydro/src/lib.rs index cd559e79..2f56f997 100644 --- a/contracts/hydro/src/lib.rs +++ b/contracts/hydro/src/lib.rs @@ -32,3 +32,6 @@ mod testing_deployments; #[cfg(test)] mod testing_utils; + +#[cfg(test)] +mod testing_compounder_cap; diff --git a/contracts/hydro/src/lsm_integration.rs b/contracts/hydro/src/lsm_integration.rs index 9fee7544..8ec711a8 100644 --- a/contracts/hydro/src/lsm_integration.rs +++ b/contracts/hydro/src/lsm_integration.rs @@ -1,4 +1,4 @@ -use cosmwasm_std::{Decimal, Deps, Env, Order, StdError, StdResult, Storage, Uint128}; +use cosmwasm_std::{Decimal, Deps, Order, StdError, StdResult, Storage, Uint128}; use neutron_sdk::bindings::query::NeutronQuery; use neutron_std::types::ibc::applications::transfer::v1::{DenomTrace, TransferQuerier}; @@ -8,7 +8,6 @@ use crate::state::{ VALIDATORS_PER_ROUND, VALIDATORS_STORE_INITIALIZED, }; use crate::{ - contract::compute_current_round_id, score_keeper::{get_total_power_for_proposal, update_power_ratio_for_proposal}, state::{Constants, Proposal, PROPOSAL_MAP, PROPS_BY_SCORE, TRANCHE_MAP}, }; @@ -22,16 +21,15 @@ pub const COSMOS_VALIDATOR_ADDR_LENGTH: usize = 52; // e.g. cosmosvaloper15w6ra6 // Returns OK if the denom is a valid IBC denom representing LSM // tokenized share transferred directly from the Cosmos Hub -// of a validator that is also currently among the top -// max_validators validators, and returns the address of that validator. +// of a validator that is also among the top max_validators validators +// for the given round, and returns the address of that validator. pub fn validate_denom( deps: Deps, - env: Env, + round_id: u64, constants: &Constants, denom: String, ) -> StdResult { let validator = resolve_validator_from_denom(&deps, constants, denom)?; - let round_id = compute_current_round_id(&env, constants)?; let max_validators = constants.max_validator_shares_participating; if is_active_round_validator(deps.storage, round_id, &validator) { @@ -269,7 +267,9 @@ pub fn update_total_power_due_to_power_ratio_change( let validator_shares = get_validator_shares_for_round(storage, round_id, validator.to_owned())?; if validator_shares == Decimal::zero() { - continue; + // If we encounter a round that doesn't have this validator shares, then no subsequent + // round could also have its shares, so break early to save some gas. + break; } let old_validator_shares_power = validator_shares * old_power_ratio; diff --git a/contracts/hydro/src/msg.rs b/contracts/hydro/src/msg.rs index f1e93808..c253a5ac 100644 --- a/contracts/hydro/src/msg.rs +++ b/contracts/hydro/src/msg.rs @@ -67,6 +67,7 @@ pub enum ExecuteMsg { UpdateConfig { activate_at: Timestamp, max_locked_tokens: Option, + current_users_extra_cap: Option, max_deployment_duration: Option, }, Pause {}, diff --git a/contracts/hydro/src/testing.rs b/contracts/hydro/src/testing.rs index 445fc5ff..5a1ac3b9 100644 --- a/contracts/hydro/src/testing.rs +++ b/contracts/hydro/src/testing.rs @@ -2433,6 +2433,7 @@ fn max_locked_tokens_test() { let update_max_locked_tokens_msg = ExecuteMsg::UpdateConfig { activate_at: env.block.time, max_locked_tokens: Some(3000), + current_users_extra_cap: None, max_deployment_duration: None, }; let res = execute( @@ -2464,6 +2465,42 @@ fn max_locked_tokens_test() { .unwrap_err() .to_string() .contains("The limit for locking tokens has been reached. No more tokens can be locked.")); + + // increase the maximum allowed locked tokens by 500, starting in 1 hour + info = get_message_info(&deps.api, "addr0001", &[]); + let update_max_locked_tokens_msg = ExecuteMsg::UpdateConfig { + activate_at: env.block.time.plus_hours(1), + max_locked_tokens: Some(3500), + current_users_extra_cap: None, + max_deployment_duration: None, + }; + let res = execute( + deps.as_mut(), + env.clone(), + info.clone(), + update_max_locked_tokens_msg, + ); + assert!(res.is_ok()); + + // try to lock additional 500 tokens before the time is reached to increase the cap + info = get_message_info( + &deps.api, + "addr0002", + &[Coin::new(500u64, IBC_DENOM_1.to_string())], + ); + let res = execute(deps.as_mut(), env.clone(), info.clone(), lock_msg.clone()); + assert!(res.is_err()); + assert!(res + .unwrap_err() + .to_string() + .contains("The limit for locking tokens has been reached. No more tokens can be locked.")); + + // advance the chain by 1h 0m 1s and verify user can lock additional 500 tokens + env.block.time = env.block.time.plus_seconds(3601); + + // now a user can lock up to additional 500 tokens + let res = execute(deps.as_mut(), env.clone(), info.clone(), lock_msg.clone()); + assert!(res.is_ok()); } #[test] @@ -2525,6 +2562,7 @@ fn contract_pausing_test() { ExecuteMsg::UpdateConfig { activate_at: env.block.time, max_locked_tokens: None, + current_users_extra_cap: None, max_deployment_duration: None, }, ExecuteMsg::Pause {}, diff --git a/contracts/hydro/src/testing_compounder_cap.rs b/contracts/hydro/src/testing_compounder_cap.rs new file mode 100644 index 00000000..8ee57ed9 --- /dev/null +++ b/contracts/hydro/src/testing_compounder_cap.rs @@ -0,0 +1,549 @@ +use cosmos_sdk_proto::prost::Message; +use std::collections::HashMap; + +use cosmwasm_std::{ + testing::{mock_env, MockApi, MockStorage}, + Addr, Binary, Coin, Env, OwnedDeps, Storage, Timestamp, Uint128, +}; +use neutron_sdk::{ + bindings::{query::NeutronQuery, types::StorageValue}, + interchain_queries::{types::QueryType, v047::types::STAKING_STORE_KEY}, + sudo::msg::SudoMsg, +}; + +use crate::{ + contract::{execute, instantiate, sudo}, + lsm_integration::get_total_power_for_round, + msg::ExecuteMsg, + state::{EXTRA_LOCKED_TOKENS_CURRENT_USERS, EXTRA_LOCKED_TOKENS_ROUND_TOTAL, LOCKED_TOKENS}, + testing::{ + get_address_as_str, get_default_instantiate_msg, get_message_info, IBC_DENOM_1, + IBC_DENOM_2, IBC_DENOM_3, ONE_DAY_IN_NANO_SECONDS, VALIDATOR_1, VALIDATOR_1_LST_DENOM_1, + VALIDATOR_2, VALIDATOR_2_LST_DENOM_1, VALIDATOR_3, VALIDATOR_3_LST_DENOM_1, + }, + testing_lsm_integration::set_validator_infos_for_round, + testing_mocks::{ + custom_interchain_query_mock, denom_trace_grpc_query_mock, mock_dependencies, ICQMockData, + MockQuerier, + }, + testing_validators_icqs::get_mock_validator, + validators_icqs::TOKENS_TO_SHARES_MULTIPLIER, +}; + +const ROUND_LENGTH: u64 = 30 * ONE_DAY_IN_NANO_SECONDS; +const LOCK_EPOCH_LENGTH: u64 = ROUND_LENGTH; +const TEN_DAYS_IN_NANOS: u64 = 10 * ONE_DAY_IN_NANO_SECONDS; +const FIRST_ROUND_START: Timestamp = Timestamp::from_nanos(1737540000000000000); // Wednesday, January 22, 2025 10:00:00 AM +const INITIAL_BLOCK_HEIGHT: u64 = 19_185_000; +const BLOCKS_PER_DAY: u64 = 35_000; + +// 1. Round 0: Have 3 users fill the total cap by locking 3 different tokens for different duration (1, 6, 12 rounds). +// 2. Round 0: Update config to increase total_cap and set extra_cap starting from round 1. +// 3. Round 0: Update config to close the extra_cap after some time in round 1. +// 4. Round 0: Update all validator power ratios to verify that the total voting power changes, and users +// voting power also gets updated proportinally. +// 5. Round 1: Have the first known user unlock the expired lockup, to test voting power computation for previous round. +// 6. Round 1: Have the first known user lock some tokens in public_cap, then a completely new user lock tokens +// in public cap (try more than allowed, then lock below public_cap). +// 7. Round 1: Have the known user from previous step lock more to fill the public_cap and some more into extra_cap. +// 8. Round 1: Have the same known user try to lock in extra_cap more than it should be allowed. +// 9. Round 1: Have the same known user lock the most it should be allowed in the extra_cap. +// 10. Round 1: Have other two known users lock as much as they should be allowed in the extra_cap. +// 11. Round 1: Update config to increase total_cap and set extra_cap starting from round 2. +// 12. Round 1: Update config to close the extra_cap after some time in round 2. +// 13. Round 2: Have a completely new user lock tokens to fill up the public_cap, then try to lock more. +// 14. Round 2: Have a known user lock maximum allowed in extra cap. +// 15. Round 2: Advance the chain to end the extra_cap duration and have a user from step #13 lock +// additional amount that matches the entire amount previously reserved for extra_cap. +#[test] +fn test_compounder_cap() { + let whitelist_admin = "addr0000"; + let user1 = "addr0001"; + let user2 = "addr0002"; + let user3 = "addr0003"; + let user4 = "addr0004"; + let user5 = "addr0005"; + + let grpc_query = denom_trace_grpc_query_mock( + "transfer/channel-0".to_string(), + HashMap::from([ + (IBC_DENOM_1.to_string(), VALIDATOR_1_LST_DENOM_1.to_string()), + (IBC_DENOM_2.to_string(), VALIDATOR_2_LST_DENOM_1.to_string()), + (IBC_DENOM_3.to_string(), VALIDATOR_3_LST_DENOM_1.to_string()), + ]), + ); + let (mut deps, mut env) = (mock_dependencies(grpc_query), mock_env()); + + env.block.time = FIRST_ROUND_START; + env.block.height = INITIAL_BLOCK_HEIGHT; + + let user1_addr = deps.api.addr_make(user1); + let user2_addr = deps.api.addr_make(user2); + let user3_addr = deps.api.addr_make(user3); + let user4_addr = deps.api.addr_make(user4); + let user5_addr = deps.api.addr_make(user5); + + let mut msg = get_default_instantiate_msg(&deps.api); + + msg.lock_epoch_length = LOCK_EPOCH_LENGTH; + msg.round_length = ROUND_LENGTH; + msg.first_round_start = env.block.time; + msg.max_locked_tokens = Uint128::new(30000); + msg.whitelist_admins = vec![get_address_as_str(&deps.api, whitelist_admin)]; + + let admin_msg_info = get_message_info(&deps.api, whitelist_admin, &[]); + let res = instantiate( + deps.as_mut(), + env.clone(), + admin_msg_info.clone(), + msg.clone(), + ); + assert!(res.is_ok()); + + // Set all 3 validators power ratio in round 0 to 1 + let res = set_validator_infos_for_round( + &mut deps.storage, + 0, + vec![ + VALIDATOR_1.to_string(), + VALIDATOR_2.to_string(), + VALIDATOR_3.to_string(), + ], + ); + assert!(res.is_ok()); + + // Advance the chain 1 day into round 0 + env.block.time = env.block.time.plus_days(1); + env.block.height += BLOCKS_PER_DAY; + + // 1. Round 0: Have 3 users fill the total cap by locking 3 different tokens for different duration (1, 6, 12 rounds). + let locking_infos: Vec<(&str, u64, Coin, Option<&str>)> = vec![ + ( + user1, + LOCK_EPOCH_LENGTH, + Coin::new(10000u64, IBC_DENOM_1.to_string()), + None, + ), + ( + user2, + 6 * LOCK_EPOCH_LENGTH, + Coin::new(10000u64, IBC_DENOM_2.to_string()), + None, + ), + ( + user3, + 12 * LOCK_EPOCH_LENGTH, + Coin::new(10000u64, IBC_DENOM_3.to_string()), + None, + ), + ]; + + execute_locking_and_verify(&mut deps, &env, locking_infos); + + // Verify total voting power is as expected + let expected_round_powers: Vec<(u64, u128)> = vec![ + (0, 70000), + (1, 60000), + (2, 60000), + (3, 55000), + (4, 52500), + (5, 50000), + (6, 20000), + (7, 20000), + (8, 20000), + (9, 15000), + (10, 12500), + (11, 10000), + (12, 0), + ]; + for expected_round_power in expected_round_powers { + let res = get_total_power_for_round(deps.as_ref(), expected_round_power.0); + assert!(res.is_ok()); + assert_eq!(res.unwrap().to_uint_ceil().u128(), expected_round_power.1); + } + + // 2. Round 0: Update config to increase total_cap and set extra_cap starting from round 1. + + // Advance the chain by 1 day + env.block.time = env.block.time.plus_days(1); + env.block.height += BLOCKS_PER_DAY; + + let msg = ExecuteMsg::UpdateConfig { + activate_at: FIRST_ROUND_START.plus_nanos(ROUND_LENGTH + 1), + max_locked_tokens: Some(40000), + current_users_extra_cap: Some(2000), + max_deployment_duration: None, + }; + + let res = execute(deps.as_mut(), env.clone(), admin_msg_info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + + // 3. Round 0: Update config to close the extra_cap after some time in round 1. + + // Advance the chain by 1 day + env.block.time = env.block.time.plus_days(1); + env.block.height += BLOCKS_PER_DAY; + + let msg = ExecuteMsg::UpdateConfig { + activate_at: FIRST_ROUND_START.plus_nanos(ROUND_LENGTH + TEN_DAYS_IN_NANOS + 1), + max_locked_tokens: None, + current_users_extra_cap: Some(0), + max_deployment_duration: None, + }; + + let res = execute(deps.as_mut(), env.clone(), admin_msg_info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + + // 4. Round 0: Update all validator power ratios to verify that the total voting power changes, and users + // voting power also gets updated proportinally. + + // Advance the chain by 1 day + env.block.time = env.block.time.plus_days(1); + env.block.height += BLOCKS_PER_DAY; + + let mock_shares = Uint128::new(1000) * TOKENS_TO_SHARES_MULTIPLIER; + let mock_validator1 = get_mock_validator(VALIDATOR_1, Uint128::new(900), mock_shares); + let mock_validator2 = get_mock_validator(VALIDATOR_2, Uint128::new(900), mock_shares); + let mock_validator3 = get_mock_validator(VALIDATOR_3, Uint128::new(900), mock_shares); + + let mock_data = HashMap::from([ + ( + 1, + ICQMockData { + query_type: QueryType::KV, + should_query_return_error: false, + should_query_result_return_error: false, + kv_results: vec![StorageValue { + storage_prefix: STAKING_STORE_KEY.to_string(), + key: Binary::default(), + value: Binary::from(mock_validator1.encode_to_vec()), + }], + }, + ), + ( + 2, + ICQMockData { + query_type: QueryType::KV, + should_query_return_error: false, + should_query_result_return_error: false, + kv_results: vec![StorageValue { + storage_prefix: STAKING_STORE_KEY.to_string(), + key: Binary::default(), + value: Binary::from(mock_validator2.encode_to_vec()), + }], + }, + ), + ( + 3, + ICQMockData { + query_type: QueryType::KV, + should_query_return_error: false, + should_query_result_return_error: false, + kv_results: vec![StorageValue { + storage_prefix: STAKING_STORE_KEY.to_string(), + key: Binary::default(), + value: Binary::from(mock_validator3.encode_to_vec()), + }], + }, + ), + ]); + + deps.querier = deps + .querier + .with_custom_handler(custom_interchain_query_mock(mock_data)); + + for query_id in 1..=3 { + let res = sudo( + deps.as_mut(), + env.clone(), + SudoMsg::KVQueryResult { query_id }, + ); + assert!(res.is_ok()); + } + + // Verify total voting power is updated as expected + let expected_round_powers: Vec<(u64, u128)> = vec![ + (0, 63000), + (1, 54000), + (2, 54000), + (3, 49500), + (4, 47250), + (5, 45000), + (6, 18000), + (7, 18000), + (8, 18000), + (9, 13500), + (10, 11250), + (11, 9000), + (12, 0), + ]; + + for expected_round_power in expected_round_powers { + let res = get_total_power_for_round(deps.as_ref(), expected_round_power.0); + assert!(res.is_ok()); + assert_eq!(res.unwrap().to_uint_ceil().u128(), expected_round_power.1); + } + + // Advance the chain into the round 1 plus 1 day, so that user1 can unlock tokens + env.block.time = FIRST_ROUND_START.plus_nanos(ROUND_LENGTH + 1 + ONE_DAY_IN_NANO_SECONDS); + env.block.height = INITIAL_BLOCK_HEIGHT + BLOCKS_PER_DAY * 31; + + // 5. Round 1: Have the first known user unlock the expired lockup. + let info = get_message_info(&deps.api, user1, &[]); + let msg = ExecuteMsg::UnlockTokens {}; + let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + assert_eq!(res.unwrap().messages.len(), 1); + + // 6. Round 1: Have a known user lock some tokens in public_cap, then a completely new user lock tokens + // in public cap (try more than allowed, then lock below public_cap). + + // Advance the chain by 1 day + env.block.time = env.block.time.plus_days(1); + env.block.height += BLOCKS_PER_DAY; + + let locking_infos = vec![ + // After this action total locked tokens will be 30_000 again + ( + user1, + LOCK_EPOCH_LENGTH, + Coin::new(10000u64, IBC_DENOM_1.to_string()), + None, + ), + // Completely new user tries to lock more than it is available in public_cap + ( + user4, + LOCK_EPOCH_LENGTH, + Coin::new(8001u64, IBC_DENOM_1.to_string()), + Some("The limit for locking tokens has been reached. No more tokens can be locked."), + ), + // Completely new user locks 5_000 tokens in public_cap; the total locked tokens will be 35_000 + ( + user4, + LOCK_EPOCH_LENGTH, + Coin::new(5000u64, IBC_DENOM_1.to_string()), + None, + ), + ]; + + execute_locking_and_verify(&mut deps, &env, locking_infos); + + verify_locked_tokens_info( + &deps.storage, + 1, + 35000, + 0, + vec![(user1_addr.clone(), 0), (user4_addr.clone(), 0)], + ); + + // 7. Round 1: Have the known user from previous step lock more to fill the public_cap and some more into extra_cap. + // 8. Round 1: Have the same user try to lock in extra_cap more than it should be allowed. + // 9. Round 1: Have the same user lock the most it should be allowed in the extra_cap. + // 10. Round 1: Have other two known users lock as much as they should be allowed in the extra_cap. + + // Advance the chain by 1 day + env.block.time = env.block.time.plus_days(1); + env.block.height += BLOCKS_PER_DAY; + + let locking_infos = vec![ + // User 1 locks 3100 tokens, 3000 in public_cap, 100 in extra_cap + // After this action the total locked tokens will be 38_100 + // 38_000 locked in public_cap and 100 locked in extra_cap + ( + user1, + LOCK_EPOCH_LENGTH, + Coin::new(3100u64, IBC_DENOM_1.to_string()), + None, + ), + // User 1 tries to lock in extra_cap more than it should be allowed. + // By the voting power in previous round it should be allowed to + // lock 285 tokens, and in previous step it already locked 100. + ( + user1, + LOCK_EPOCH_LENGTH, + Coin::new(186u64, IBC_DENOM_1.to_string()), + Some("The limit for locking tokens has been reached. No more tokens can be locked."), + ), + // User 1 locks in extra_cap the maximum it should be allowed (285) + // After this action the total locked tokens will be 38_285 + ( + user1, + LOCK_EPOCH_LENGTH, + Coin::new(185u64, IBC_DENOM_1.to_string()), + None, + ), + // User 2 locks in extra_cap the maximum it should be allowed (571) + // After this action the total locked tokens will be 38_856 + ( + user2, + LOCK_EPOCH_LENGTH, + Coin::new(571u64, IBC_DENOM_1.to_string()), + None, + ), + // User 3 locks in extra_cap the maximum it should be allowed (1142) + // After this action the total locked tokens will be 39_998 + ( + user3, + LOCK_EPOCH_LENGTH, + Coin::new(1142u64, IBC_DENOM_1.to_string()), + None, + ), + ]; + + execute_locking_and_verify(&mut deps, &env, locking_infos); + + verify_locked_tokens_info( + &deps.storage, + 1, + 39998, + 1998, + vec![ + (user1_addr.clone(), 285), + (user2_addr.clone(), 571), + (user3_addr.clone(), 1142), + ], + ); + + // 11. Round 1: Update config to increase total_cap and set extra_cap starting from round 2. + + // Advance the chain by 1 day + env.block.time = env.block.time.plus_days(1); + env.block.height += BLOCKS_PER_DAY; + + let msg = ExecuteMsg::UpdateConfig { + activate_at: FIRST_ROUND_START.plus_nanos(2 * ROUND_LENGTH + 1), + max_locked_tokens: Some(50000), + current_users_extra_cap: Some(5000), + max_deployment_duration: None, + }; + + let res = execute(deps.as_mut(), env.clone(), admin_msg_info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + + // 12. Round 1: Update config to close the extra_cap after some time in round 2. + let msg = ExecuteMsg::UpdateConfig { + activate_at: FIRST_ROUND_START.plus_nanos(2 * ROUND_LENGTH + TEN_DAYS_IN_NANOS + 1), + max_locked_tokens: None, + current_users_extra_cap: Some(0), + max_deployment_duration: None, + }; + + let res = execute(deps.as_mut(), env.clone(), admin_msg_info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + + // Advance the chain into the round 2 plus 1 day + env.block.time = FIRST_ROUND_START.plus_nanos(2 * ROUND_LENGTH + 1 + ONE_DAY_IN_NANO_SECONDS); + env.block.height = INITIAL_BLOCK_HEIGHT + BLOCKS_PER_DAY * 61; + + // 13. Round 2: Have a completely new user lock tokens to fill up the public_cap, then try to lock more. + // 14. Round 2: Have a known user lock maximum allowed in extra cap. + + let locking_infos = vec![ + // Completely new user locks up to the public_cap + // After this action total locked tokens will be 45_000 + ( + user5, + LOCK_EPOCH_LENGTH, + Coin::new(5002u64, IBC_DENOM_1.to_string()), + None, + ), + // Then the same user tries to lock more than allowed in public_cap, while extra_cap is still active + ( + user5, + LOCK_EPOCH_LENGTH, + Coin::new(1u64, IBC_DENOM_1.to_string()), + Some("The limit for locking tokens has been reached. No more tokens can be locked."), + ), + // User 4 had voting power 4_500 out of 71_996 total voting power in round 1 + // With the extra_cap of 5_000, it is allowed to lock 312 tokens in it + // After this action total locked tokens will be 45_312 + ( + user4, + LOCK_EPOCH_LENGTH, + Coin::new(312u64, IBC_DENOM_1.to_string()), + None, + ), + ]; + + execute_locking_and_verify(&mut deps, &env, locking_infos); + + // 15. Round 2: Advance the chain to end the extra_cap duration and have a user from step #13 lock + // additional amount that matches the entire amount previously reserved for extra_cap. + env.block.time = FIRST_ROUND_START.plus_nanos(2 * ROUND_LENGTH + TEN_DAYS_IN_NANOS + 1); + env.block.height = INITIAL_BLOCK_HEIGHT + BLOCKS_PER_DAY * 70; + + let info = get_message_info( + &deps.api, + user5, + &[Coin::new(4688u64, IBC_DENOM_1.to_string())], + ); + let msg = ExecuteMsg::LockTokens { + lock_duration: LOCK_EPOCH_LENGTH, + }; + let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); + assert!(res.is_ok()); + + verify_locked_tokens_info( + &deps.storage, + 2, + 50000, + 312, + vec![ + (user1_addr.clone(), 0), + (user2_addr.clone(), 0), + (user3_addr.clone(), 0), + (user4_addr.clone(), 312), + (user5_addr.clone(), 0), + ], + ); +} + +fn execute_locking_and_verify( + deps: &mut OwnedDeps, + env: &Env, + locking_infos: Vec<(&str, u64, Coin, Option<&str>)>, +) { + for locking_info in locking_infos { + let info = get_message_info(&deps.api, locking_info.0, &[locking_info.2]); + let msg = ExecuteMsg::LockTokens { + lock_duration: locking_info.1, + }; + let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); + match locking_info.3 { + None => { + assert!(res.is_ok(), "error: {:?}", res); + } + Some(error_message) => { + assert!(res.unwrap_err().to_string().contains(error_message)); + } + } + } +} + +fn verify_locked_tokens_info( + storage: &impl Storage, + round_id: u64, + expected_total_locked_tokens: u128, + expected_extra_locked_tokens_round: u128, + expected_extra_locked_tokens_round_users: Vec<(Addr, u128)>, +) { + assert_eq!( + LOCKED_TOKENS.load(storage).unwrap_or_default(), + expected_total_locked_tokens + ); + assert_eq!( + EXTRA_LOCKED_TOKENS_ROUND_TOTAL + .load(storage, round_id) + .unwrap_or_default(), + expected_extra_locked_tokens_round + ); + + for expected_user_extra_locked in expected_extra_locked_tokens_round_users { + assert_eq!( + EXTRA_LOCKED_TOKENS_CURRENT_USERS + .load(storage, (round_id, expected_user_extra_locked.0)) + .unwrap_or_default(), + expected_user_extra_locked.1, + ); + } +} diff --git a/contracts/hydro/src/testing_lsm_integration.rs b/contracts/hydro/src/testing_lsm_integration.rs index f14027b9..26caac44 100644 --- a/contracts/hydro/src/testing_lsm_integration.rs +++ b/contracts/hydro/src/testing_lsm_integration.rs @@ -13,7 +13,10 @@ use neutron_sdk::{ use neutron_std::types::ibc::applications::transfer::v1::QueryDenomTraceResponse; use crate::{ - contract::{execute, instantiate, query_round_tranche_proposals, query_top_n_proposals, sudo}, + contract::{ + compute_current_round_id, execute, instantiate, query_round_tranche_proposals, + query_top_n_proposals, sudo, + }, lsm_integration::{ get_total_power_for_round, get_validator_power_ratio_for_round, update_scores_due_to_power_ratio_change, validate_denom, @@ -329,7 +332,7 @@ fn test_validate_denom() { let result = validate_denom( deps.as_ref(), - env.clone(), + compute_current_round_id(&env, &constants).unwrap(), &constants, test_case.denom.clone(), ); diff --git a/contracts/hydro/src/utils.rs b/contracts/hydro/src/utils.rs index 81f18260..fd8549d4 100644 --- a/contracts/hydro/src/utils.rs +++ b/contracts/hydro/src/utils.rs @@ -64,7 +64,6 @@ pub fn load_constants_active_at_timestamp( // After the extra cap duration expires, public cap becomes equal to the total cap. pub fn validate_locked_tokens_caps( deps: &DepsMut, - env: &Env, constants: &Constants, current_round: u64, sender: &Addr, @@ -105,7 +104,6 @@ pub fn validate_locked_tokens_caps( // is a user that should be allowed to use the extra_cap. if !can_user_lock_in_extra_cap( deps, - env, constants, current_round, sender, @@ -131,7 +129,7 @@ pub fn validate_locked_tokens_caps( // If there is still room in extra_cap, then check if this // is a user that should be allowed to use the extra_cap. - if !can_user_lock_in_extra_cap(deps, env, constants, current_round, sender, amount_to_lock)? { + if !can_user_lock_in_extra_cap(deps, constants, current_round, sender, amount_to_lock)? { return lock_limit_reached_error; } @@ -143,7 +141,6 @@ pub fn validate_locked_tokens_caps( fn can_user_lock_in_extra_cap( deps: &DepsMut, - env: &Env, constants: &Constants, current_round: u64, sender: &Addr, @@ -168,7 +165,6 @@ fn can_user_lock_in_extra_cap( let users_voting_power = Decimal::from_ratio( get_user_voting_power_for_past_round( &deps.as_ref(), - env, constants, sender.clone(), round_to_check, From 34e1bca323a59bd27f62b477764a93dc71829e68 Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Thu, 23 Jan 2025 14:48:05 +0100 Subject: [PATCH 06/14] fixing errors after merge from main --- contracts/hydro/src/contract.rs | 2 +- contracts/hydro/src/migration/migrate.rs | 7 ++++--- contracts/hydro/src/migration/mod.rs | 1 + contracts/hydro/src/migration/unreleased.rs | 20 +++++++++++++++++++ contracts/hydro/src/testing_compounder_cap.rs | 4 +++- contracts/hydro/src/testing_queries.rs | 4 +--- 6 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 contracts/hydro/src/migration/unreleased.rs diff --git a/contracts/hydro/src/contract.rs b/contracts/hydro/src/contract.rs index 9a168861..156d89df 100644 --- a/contracts/hydro/src/contract.rs +++ b/contracts/hydro/src/contract.rs @@ -1865,7 +1865,7 @@ fn enrich_lockups_with_tranche_infos( .map(|tranche| tranche.unwrap().1.id) .collect::>(); - let constants = CONSTANTS.load(deps.storage)?; + let constants = load_current_constants(&deps, &env)?; let current_round_id = compute_current_round_id(&env, &constants)?; // enrich lockups with some info per tranche diff --git a/contracts/hydro/src/migration/migrate.rs b/contracts/hydro/src/migration/migrate.rs index 47fd4009..56c6aa24 100644 --- a/contracts/hydro/src/migration/migrate.rs +++ b/contracts/hydro/src/migration/migrate.rs @@ -7,6 +7,7 @@ use cw2::{get_contract_version, set_contract_version}; use neutron_sdk::bindings::msg::NeutronMsg; use neutron_sdk::bindings::query::NeutronQuery; +use super::unreleased::migrate_v3_0_0_to_unreleased; use super::v3_0_0::MigrateMsgV3_0_0; pub const CONTRACT_VERSION_V1_1_0: &str = "1.1.0"; @@ -18,8 +19,8 @@ pub const CONTRACT_VERSION_UNRELEASED: &str = "4.0.0"; #[cfg_attr(not(feature = "library"), entry_point)] pub fn migrate( - deps: DepsMut, - _env: Env, + mut deps: DepsMut, + env: Env, _msg: MigrateMsgV3_0_0, ) -> Result, ContractError> { let contract_version = get_contract_version(deps.storage)?; @@ -30,7 +31,7 @@ pub fn migrate( ))); } - // no migration necessary from 2.1.0 to 3.0.0 + migrate_v3_0_0_to_unreleased(&mut deps, env)?; set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; diff --git a/contracts/hydro/src/migration/mod.rs b/contracts/hydro/src/migration/mod.rs index 3c29627c..ab48d889 100644 --- a/contracts/hydro/src/migration/mod.rs +++ b/contracts/hydro/src/migration/mod.rs @@ -1,2 +1,3 @@ pub mod migrate; +pub mod unreleased; pub mod v3_0_0; diff --git a/contracts/hydro/src/migration/unreleased.rs b/contracts/hydro/src/migration/unreleased.rs new file mode 100644 index 00000000..e6e96d2b --- /dev/null +++ b/contracts/hydro/src/migration/unreleased.rs @@ -0,0 +1,20 @@ +use cosmwasm_std::{DepsMut, Env}; +use neutron_sdk::bindings::query::NeutronQuery; + +use crate::error::ContractError; + +pub fn migrate_v3_0_0_to_unreleased( + _deps: &mut DepsMut, + _env: Env, +) -> Result<(), ContractError> { + // TODO: + // 1) Migrate Constants from Item to Map; Make sure that the queries for past rounds keep working. + // 2) TOTAL_VOTING_POWER_PER_ROUND needs to be correctly populated regardless of the point in time + // we do the migration. Needs to be populated for future rounds as well. If we populate it for + // the past rounds as well, we can use that in our queries instead of on-the-fly computation + // e.g. query_round_total_power(), query_top_n_proposals(). + // 3) LOCKS_MAP needs to be migrated to SnapshotMap. + // 4) Populate USER_LOCKS for existing lockups. + // 4) Populate ROUND_TO_HEIGHT_RANGE and HEIGHT_TO_ROUND for previous rounds? + Ok(()) +} diff --git a/contracts/hydro/src/testing_compounder_cap.rs b/contracts/hydro/src/testing_compounder_cap.rs index 8ee57ed9..e9336004 100644 --- a/contracts/hydro/src/testing_compounder_cap.rs +++ b/contracts/hydro/src/testing_compounder_cap.rs @@ -290,7 +290,9 @@ fn test_compounder_cap() { // 5. Round 1: Have the first known user unlock the expired lockup. let info = get_message_info(&deps.api, user1, &[]); - let msg = ExecuteMsg::UnlockTokens {}; + let msg = ExecuteMsg::UnlockTokens { + lock_ids: Some(vec![0]), + }; let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); assert!(res.is_ok(), "error: {:?}", res); assert_eq!(res.unwrap().messages.len(), 1); diff --git a/contracts/hydro/src/testing_queries.rs b/contracts/hydro/src/testing_queries.rs index 28c016ab..eeeb3015 100644 --- a/contracts/hydro/src/testing_queries.rs +++ b/contracts/hydro/src/testing_queries.rs @@ -7,9 +7,7 @@ use crate::contract::{ scale_lockup_power, }; use crate::msg::ProposalToLockups; -use crate::state::{ - RoundLockPowerSchedule, ValidatorInfo, Vote, CONSTANTS, VALIDATORS_INFO, VOTE_MAP, -}; +use crate::state::{RoundLockPowerSchedule, ValidatorInfo, Vote, VALIDATORS_INFO, VOTE_MAP}; use crate::testing::{ get_default_instantiate_msg, get_message_info, set_default_validator_for_rounds, IBC_DENOM_1, ONE_MONTH_IN_NANO_SECONDS, VALIDATOR_1, VALIDATOR_1_LST_DENOM_1, VALIDATOR_2, VALIDATOR_3, From 0550f4fcc57760835f546fd3eb3e60dfe7e58822 Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Thu, 23 Jan 2025 16:04:56 +0100 Subject: [PATCH 07/14] added tests for user lock snapshoting and heght<->round tracking --- contracts/hydro/src/lib.rs | 3 + contracts/hydro/src/state.rs | 1 + contracts/hydro/src/testing.rs | 37 +++- contracts/hydro/src/testing_snapshoting.rs | 198 +++++++++++++++++++++ 4 files changed, 235 insertions(+), 4 deletions(-) create mode 100644 contracts/hydro/src/testing_snapshoting.rs diff --git a/contracts/hydro/src/lib.rs b/contracts/hydro/src/lib.rs index 2f56f997..d49ff173 100644 --- a/contracts/hydro/src/lib.rs +++ b/contracts/hydro/src/lib.rs @@ -35,3 +35,6 @@ mod testing_utils; #[cfg(test)] mod testing_compounder_cap; + +#[cfg(test)] +mod testing_snapshoting; diff --git a/contracts/hydro/src/state.rs b/contracts/hydro/src/state.rs index 87e390ed..8ca9319f 100644 --- a/contracts/hydro/src/state.rs +++ b/contracts/hydro/src/state.rs @@ -288,6 +288,7 @@ pub const ROUND_TO_HEIGHT_RANGE: Map = Map::new("round_to_heig pub const HEIGHT_TO_ROUND: Map = Map::new("height_to_round"); #[cw_serde] +#[derive(Default)] pub struct HeightRange { pub lowest_known_height: u64, pub highest_known_height: u64, diff --git a/contracts/hydro/src/testing.rs b/contracts/hydro/src/testing.rs index 5ccd0bdf..a51cb917 100644 --- a/contracts/hydro/src/testing.rs +++ b/contracts/hydro/src/testing.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use std::str::FromStr; use crate::contract::{ @@ -6,7 +6,7 @@ use crate::contract::{ query_whitelist_admins, MAX_LOCK_ENTRIES, }; use crate::msg::{ProposalToLockups, TrancheInfo}; -use crate::state::{LockEntry, RoundLockPowerSchedule, Vote, VOTE_MAP}; +use crate::state::{LockEntry, RoundLockPowerSchedule, Vote, USER_LOCKS, VOTE_MAP}; use crate::testing_lsm_integration::set_validator_infos_for_round; use crate::testing_mocks::{ denom_trace_grpc_query_mock, mock_dependencies, no_op_grpc_query_mock, MockQuerier, @@ -243,6 +243,17 @@ fn lock_tokens_basic_test() { // check that the power is correct: 3000 tokens locked for three epochs // so power is 3000 * 1.5 = 4500 assert_eq!(4500, lockup.current_voting_power.u128()); + + // check that the USER_LOCKS are updated as expected + let expected_lock_ids = HashSet::from([ + res.lockups[0].lock_entry.lock_id, + res.lockups[1].lock_entry.lock_id, + ]); + let mut user_lock_ids = USER_LOCKS + .load(&deps.storage, info2.sender.clone()) + .unwrap(); + user_lock_ids.retain(|lock_id| !expected_lock_ids.contains(lock_id)); + assert!(user_lock_ids.is_empty()); } #[test] @@ -2587,8 +2598,26 @@ fn max_locked_tokens_test() { let res = execute(deps.as_mut(), env.clone(), info.clone(), lock_msg.clone()); assert!(res.is_ok()); - // a privileged user can update the maximum allowed locked tokens + // a privileged user can update the maximum allowed locked tokens, but only for the future info = get_message_info(&deps.api, "addr0001", &[]); + let update_max_locked_tokens_msg = ExecuteMsg::UpdateConfig { + activate_at: env.block.time.minus_hours(1), + max_locked_tokens: Some(3000), + current_users_extra_cap: None, + max_deployment_duration: None, + }; + let res = execute( + deps.as_mut(), + env.clone(), + info.clone(), + update_max_locked_tokens_msg.clone(), + ); + assert!(res + .unwrap_err() + .to_string() + .contains("Can not update config in the past.")); + + // this time with a valid activation timestamp let update_max_locked_tokens_msg = ExecuteMsg::UpdateConfig { activate_at: env.block.time, max_locked_tokens: Some(3000), @@ -2599,7 +2628,7 @@ fn max_locked_tokens_test() { deps.as_mut(), env.clone(), info.clone(), - update_max_locked_tokens_msg, + update_max_locked_tokens_msg.clone(), ); assert!(res.is_ok()); diff --git a/contracts/hydro/src/testing_snapshoting.rs b/contracts/hydro/src/testing_snapshoting.rs new file mode 100644 index 00000000..c0eaa79d --- /dev/null +++ b/contracts/hydro/src/testing_snapshoting.rs @@ -0,0 +1,198 @@ +use std::collections::HashMap; + +use cosmwasm_std::{testing::mock_env, Coin, Storage, Timestamp}; + +use crate::{ + contract::{execute, instantiate}, + msg::{ExecuteMsg, InstantiateMsg}, + state::{HEIGHT_TO_ROUND, ROUND_TO_HEIGHT_RANGE, USER_LOCKS}, + testing::{ + get_default_instantiate_msg, get_message_info, IBC_DENOM_1, ONE_DAY_IN_NANO_SECONDS, + VALIDATOR_1, VALIDATOR_1_LST_DENOM_1, + }, + testing_lsm_integration::set_validator_infos_for_round, + testing_mocks::{denom_trace_grpc_query_mock, mock_dependencies}, +}; + +#[test] +fn test_user_locks_snapshoting() { + let grpc_query = denom_trace_grpc_query_mock( + "transfer/channel-0".to_string(), + HashMap::from([(IBC_DENOM_1.to_string(), VALIDATOR_1_LST_DENOM_1.to_string())]), + ); + + let user = "addr0000"; + let initial_block_time = Timestamp::from_nanos(1737540000000000000); + let initial_block_height = 19_185_000; + let (mut deps, mut env) = (mock_dependencies(grpc_query), mock_env()); + let user_addr = deps.api.addr_make(user); + + env.block.time = initial_block_time; + env.block.height = initial_block_height; + + let info = get_message_info(&deps.api, user, &[]); + let instantiate_msg = InstantiateMsg { + first_round_start: env.block.time, + round_length: 30 * ONE_DAY_IN_NANO_SECONDS, + lock_epoch_length: 30 * ONE_DAY_IN_NANO_SECONDS, + ..get_default_instantiate_msg(&deps.api) + }; + + let res = instantiate( + deps.as_mut(), + env.clone(), + info.clone(), + instantiate_msg.clone(), + ); + assert!(res.is_ok()); + + let res = set_validator_infos_for_round(&mut deps.storage, 0, vec![VALIDATOR_1.to_string()]); + assert!(res.is_ok()); + + env.block.time = env.block.time.plus_days(1); + env.block.height += 35000; + + let info = get_message_info( + &deps.api, + user, + &[Coin::new(1000u64, IBC_DENOM_1.to_string())], + ); + let msg = ExecuteMsg::LockTokens { + lock_duration: instantiate_msg.lock_epoch_length, + }; + let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + + let current_round = 0; + let current_round_expected_initial_height = env.block.height; + verify_round_height_mappings( + &deps.storage, + current_round, + (current_round_expected_initial_height, env.block.height), + env.block.height, + ); + + env.block.time = env.block.time.plus_days(1); + env.block.height += 35000; + + let msg = ExecuteMsg::LockTokens { + lock_duration: instantiate_msg.lock_epoch_length, + }; + let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + + verify_round_height_mappings( + &deps.storage, + current_round, + (current_round_expected_initial_height, env.block.height), + env.block.height, + ); + + let mut expected_user_locks = vec![(env.block.height + 1, vec![0, 1])]; + + env.block.time = env.block.time.plus_days(1); + env.block.height += 35000; + + let msg = ExecuteMsg::RefreshLockDuration { + lock_ids: vec![0], + lock_duration: 3 * instantiate_msg.lock_epoch_length, + }; + let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + + verify_round_height_mappings( + &deps.storage, + current_round, + (current_round_expected_initial_height, env.block.height), + env.block.height, + ); + + env.block.time = env.block.time.plus_days(1); + env.block.height += 35000; + + let msg = ExecuteMsg::LockTokens { + lock_duration: instantiate_msg.lock_epoch_length, + }; + let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + + expected_user_locks.push((env.block.height + 1, vec![0, 1, 2])); + + // Advance the chain by 35 days from initial time so that the user can unlock locks 1 and 2 + env.block.time = initial_block_time.plus_nanos(35 * ONE_DAY_IN_NANO_SECONDS + 1); + env.block.height = initial_block_height + 35 * 35000; + + let current_round = 1; + let current_round_expected_initial_height = env.block.height; + + let msg = ExecuteMsg::UnlockTokens { + lock_ids: Some(vec![1, 2]), + }; + let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + + expected_user_locks.push((env.block.height + 1, vec![0])); + + verify_round_height_mappings( + &deps.storage, + current_round, + (current_round_expected_initial_height, env.block.height), + env.block.height, + ); + + // Advance the chain by 95 days from initial time so that the user can unlock lock 0 + env.block.time = initial_block_time.plus_nanos(95 * ONE_DAY_IN_NANO_SECONDS + 1); + env.block.height = initial_block_height + 95 * 35000; + + let current_round = 3; + let current_round_expected_initial_height = env.block.height; + + let msg = ExecuteMsg::UnlockTokens { + lock_ids: Some(vec![0]), + }; + let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); + assert!(res.is_ok(), "error: {:?}", res); + + expected_user_locks.push((env.block.height + 1, vec![])); + + verify_round_height_mappings( + &deps.storage, + current_round, + (current_round_expected_initial_height, env.block.height), + env.block.height, + ); + + // Verify that USER_LOCKS return expected values at a given heights + for expected_locks in expected_user_locks { + // unwrap() on purpose- it should never fail + let user_locks = USER_LOCKS + .may_load_at_height(&deps.storage, user_addr.clone(), expected_locks.0) + .unwrap() + .unwrap(); + assert_eq!(expected_locks.1, user_locks); + } +} + +fn verify_round_height_mappings( + storage: &impl Storage, + round_id: u64, + expected_round_height_range: (u64, u64), + height_to_check: u64, +) { + let height_range = ROUND_TO_HEIGHT_RANGE + .load(storage, round_id) + .unwrap_or_default(); + assert_eq!( + height_range.lowest_known_height, + expected_round_height_range.0 + ); + assert_eq!( + height_range.highest_known_height, + expected_round_height_range.1 + ); + + let height_round = HEIGHT_TO_ROUND + .load(storage, height_to_check) + .unwrap_or_default(); + assert_eq!(height_round, round_id); +} From 41dc0f15828add6cc75a75cfbcb6b4fad39d3a8f Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Mon, 27 Jan 2025 09:00:52 +0100 Subject: [PATCH 08/14] added transaction to remove the constants at a specified timestamps --- contracts/hydro/src/contract.rs | 45 ++++++++++++++++++++++++++- contracts/hydro/src/msg.rs | 3 ++ contracts/hydro/src/testing.rs | 54 ++++++++++++++++++++++++++++++++- 3 files changed, 100 insertions(+), 2 deletions(-) diff --git a/contracts/hydro/src/contract.rs b/contracts/hydro/src/contract.rs index 156d89df..abc9aa75 100644 --- a/contracts/hydro/src/contract.rs +++ b/contracts/hydro/src/contract.rs @@ -211,6 +211,7 @@ pub fn execute( current_users_extra_cap, max_deployment_duration, ), + ExecuteMsg::DeleteConfigs { timestamps } => delete_configs(deps, &env, info, timestamps), ExecuteMsg::Pause {} => pause_contract(deps, &env, info), ExecuteMsg::AddTranche { tranche } => add_tranche(deps, env, info, tranche), ExecuteMsg::EditTranche { @@ -1161,13 +1162,16 @@ fn update_config( ))); } + // Validate that the contract is not paused based on the current constants + let constants = load_current_constants(&deps.as_ref(), &env)?; + validate_contract_is_not_paused(&constants)?; + // Load the Constants active at the given timestamp and base the updates on them. // This allows us to update the Constants in arbitrary order. E.g. at the similar block // height we can schedule multiple updates for the future, where each new Constants will // have the changes introduced by earlier ones. let mut constants = load_constants_active_at_timestamp(&deps.as_ref(), activate_at)?.1; - validate_contract_is_not_paused(&constants)?; validate_sender_is_whitelist_admin(&deps, &info)?; let mut response = Response::new() @@ -1200,6 +1204,45 @@ fn update_config( Ok(response) } +fn delete_configs( + deps: DepsMut, + env: &Env, + info: MessageInfo, + timestamps: Vec, +) -> Result, ContractError> { + let constants = load_current_constants(&deps.as_ref(), env)?; + + validate_contract_is_not_paused(&constants)?; + validate_sender_is_whitelist_admin(&deps, &info)?; + + let timestamps_to_delete: Vec = timestamps + .into_iter() + .filter_map(|timestamp| { + if CONSTANTS.has(deps.storage, timestamp.nanos()) { + Some(timestamp.nanos()) + } else { + None + } + }) + .collect(); + + for timestamp in ×tamps_to_delete { + CONSTANTS.remove(deps.storage, *timestamp); + } + + Ok(Response::new() + .add_attribute("action", "delete_configs") + .add_attribute("sender", info.sender) + .add_attribute( + "deleted_configs_at_timestamps", + timestamps_to_delete + .into_iter() + .map(|timestamp| timestamp.to_string()) + .collect::>() + .join(", "), + )) +} + // Pause: // Validate that the contract isn't already paused // Validate sender is whitelist admin diff --git a/contracts/hydro/src/msg.rs b/contracts/hydro/src/msg.rs index 91bea1a4..4a1c3b44 100644 --- a/contracts/hydro/src/msg.rs +++ b/contracts/hydro/src/msg.rs @@ -72,6 +72,9 @@ pub enum ExecuteMsg { current_users_extra_cap: Option, max_deployment_duration: Option, }, + DeleteConfigs { + timestamps: Vec, + }, Pause {}, AddTranche { tranche: TrancheInfo, diff --git a/contracts/hydro/src/testing.rs b/contracts/hydro/src/testing.rs index a51cb917..928fa58b 100644 --- a/contracts/hydro/src/testing.rs +++ b/contracts/hydro/src/testing.rs @@ -6,7 +6,7 @@ use crate::contract::{ query_whitelist_admins, MAX_LOCK_ENTRIES, }; use crate::msg::{ProposalToLockups, TrancheInfo}; -use crate::state::{LockEntry, RoundLockPowerSchedule, Vote, USER_LOCKS, VOTE_MAP}; +use crate::state::{LockEntry, RoundLockPowerSchedule, Vote, CONSTANTS, USER_LOCKS, VOTE_MAP}; use crate::testing_lsm_integration::set_validator_infos_for_round; use crate::testing_mocks::{ denom_trace_grpc_query_mock, mock_dependencies, no_op_grpc_query_mock, MockQuerier, @@ -2691,6 +2691,57 @@ fn max_locked_tokens_test() { assert!(res.is_ok()); } +#[test] +fn delete_configs_test() { + let first_round_start_time = Timestamp::from_nanos(1737540000000000000); + let initial_block_height = 19_185_000; + + let (mut deps, mut env) = (mock_dependencies(no_op_grpc_query_mock()), mock_env()); + let info = get_message_info(&deps.api, "addr0000", &[]); + + env.block.time = first_round_start_time; + env.block.height = initial_block_height; + + let mut msg = get_default_instantiate_msg(&deps.api); + msg.whitelist_admins = vec![get_address_as_str(&deps.api, "addr0000")]; + msg.first_round_start = first_round_start_time; + + let res = instantiate(deps.as_mut(), env.clone(), info.clone(), msg.clone()); + assert!(res.is_ok()); + + let mut configs_timestamps = vec![]; + for i in 1..=5 { + let timestamp = env.block.time.plus_days(i); + configs_timestamps.push(timestamp); + + let update_max_locked_tokens_msg = ExecuteMsg::UpdateConfig { + activate_at: timestamp, + max_locked_tokens: Some((i * 1000) as u128), + current_users_extra_cap: None, + max_deployment_duration: None, + }; + let res = execute( + deps.as_mut(), + env.clone(), + info.clone(), + update_max_locked_tokens_msg.clone(), + ); + assert!(res.is_ok()); + } + + env.block.time = env.block.time.plus_days(2); + + let msg = ExecuteMsg::DeleteConfigs { + timestamps: configs_timestamps.clone(), + }; + let res = execute(deps.as_mut(), env.clone(), info.clone(), msg); + assert!(res.is_ok()); + + for timestamp in configs_timestamps { + assert!(!CONSTANTS.has(&deps.storage, timestamp.nanos())); + } +} + #[test] fn contract_pausing_test() { let (mut deps, env) = (mock_dependencies(no_op_grpc_query_mock()), mock_env()); @@ -2753,6 +2804,7 @@ fn contract_pausing_test() { current_users_extra_cap: None, max_deployment_duration: None, }, + ExecuteMsg::DeleteConfigs { timestamps: vec![] }, ExecuteMsg::Pause {}, ExecuteMsg::AddTranche { tranche: TrancheInfo { From 917e2e451cbe45a3446feb5703c231c3db21d791 Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Mon, 27 Jan 2025 15:52:16 +0100 Subject: [PATCH 09/14] implementation of migration --- contracts/hydro/src/lsm_integration.rs | 9 +- contracts/hydro/src/migration/migrate.rs | 2 +- contracts/hydro/src/migration/unreleased.rs | 192 ++++++++++++++++++-- contracts/hydro/src/migration/v3_0_0.rs | 19 ++ 4 files changed, 205 insertions(+), 17 deletions(-) diff --git a/contracts/hydro/src/lsm_integration.rs b/contracts/hydro/src/lsm_integration.rs index 8ec711a8..149f3b2b 100644 --- a/contracts/hydro/src/lsm_integration.rs +++ b/contracts/hydro/src/lsm_integration.rs @@ -402,7 +402,7 @@ pub fn initialize_validator_store_helper( } // copy the information from the previous round - let val_infos = load_validators_infos(storage, round_id - 1)?; + let val_infos = load_validators_infos(storage, round_id - 1); for val_info in val_infos { let address = val_info.clone().address; @@ -426,10 +426,13 @@ pub fn initialize_validator_store_helper( } // load_validators_infos needs to be its own function to borrow the storage -fn load_validators_infos(storage: &dyn Storage, round_id: u64) -> StdResult> { +pub fn load_validators_infos(storage: &dyn Storage, round_id: u64) -> Vec { VALIDATORS_INFO .prefix(round_id) .range(storage, None, None, Order::Ascending) - .map(|val_info_res| val_info_res.map(|val_info| val_info.1)) + .filter_map(|val_info| match val_info { + Err(_) => None, + Ok(val_info) => Some(val_info.1), + }) .collect() } diff --git a/contracts/hydro/src/migration/migrate.rs b/contracts/hydro/src/migration/migrate.rs index 56c6aa24..6ae8cfc0 100644 --- a/contracts/hydro/src/migration/migrate.rs +++ b/contracts/hydro/src/migration/migrate.rs @@ -13,7 +13,7 @@ use super::v3_0_0::MigrateMsgV3_0_0; pub const CONTRACT_VERSION_V1_1_0: &str = "1.1.0"; pub const CONTRACT_VERSION_V2_0_1: &str = "2.0.1"; pub const CONTRACT_VERSION_V2_0_2: &str = "2.0.2"; -pub const CONTRACT_VERSION_V2_1_0: &str = "2.0.2"; +pub const CONTRACT_VERSION_V2_1_0: &str = "2.1.0"; pub const CONTRACT_VERSION_V3_0_0: &str = "3.0.0"; pub const CONTRACT_VERSION_UNRELEASED: &str = "4.0.0"; diff --git a/contracts/hydro/src/migration/unreleased.rs b/contracts/hydro/src/migration/unreleased.rs index e6e96d2b..a3ffbb61 100644 --- a/contracts/hydro/src/migration/unreleased.rs +++ b/contracts/hydro/src/migration/unreleased.rs @@ -1,20 +1,186 @@ -use cosmwasm_std::{DepsMut, Env}; +use std::collections::HashMap; + +use cosmwasm_std::{Addr, Decimal, DepsMut, Env, Order, StdResult}; +use cw_storage_plus::{Item, Map}; use neutron_sdk::bindings::query::NeutronQuery; -use crate::error::ContractError; +use crate::{ + contract::compute_current_round_id, + error::ContractError, + lsm_integration::load_validators_infos, + migration::v3_0_0::ConstantsV3_0_0, + state::{ + Constants, HeightRange, LockEntry, CONSTANTS, HEIGHT_TO_ROUND, LOCKS_MAP, + ROUND_TO_HEIGHT_RANGE, SCALED_ROUND_POWER_SHARES_MAP, TOTAL_VOTING_POWER_PER_ROUND, + USER_LOCKS, + }, +}; pub fn migrate_v3_0_0_to_unreleased( - _deps: &mut DepsMut, - _env: Env, + deps: &mut DepsMut, + env: Env, ) -> Result<(), ContractError> { - // TODO: - // 1) Migrate Constants from Item to Map; Make sure that the queries for past rounds keep working. - // 2) TOTAL_VOTING_POWER_PER_ROUND needs to be correctly populated regardless of the point in time - // we do the migration. Needs to be populated for future rounds as well. If we populate it for - // the past rounds as well, we can use that in our queries instead of on-the-fly computation - // e.g. query_round_total_power(), query_top_n_proposals(). - // 3) LOCKS_MAP needs to be migrated to SnapshotMap. - // 4) Populate USER_LOCKS for existing lockups. - // 4) Populate ROUND_TO_HEIGHT_RANGE and HEIGHT_TO_ROUND for previous rounds? + let constants = migrate_constants(deps)?; + let round_id = compute_current_round_id(&env, &constants)?; + + populate_total_power_for_rounds(deps, &env, round_id)?; + migrate_user_lockups(deps, &env)?; + populate_round_height_mappings(deps, &env, round_id)?; + + Ok(()) +} + +// Convert CONSTANTS storage from Item to Map and insert single constants instance +// under the timestamp of the first round start time, and set the extra_cap to zero. +fn migrate_constants(deps: &mut DepsMut) -> StdResult { + const OLD_CONSTANTS: Item = Item::new("constants"); + let old_constants = OLD_CONSTANTS.load(deps.storage)?; + + let new_constants = Constants { + round_length: old_constants.round_length, + lock_epoch_length: old_constants.lock_epoch_length, + first_round_start: old_constants.first_round_start, + max_locked_tokens: old_constants.max_locked_tokens, + max_validator_shares_participating: old_constants.max_validator_shares_participating, + hub_connection_id: old_constants.hub_connection_id, + hub_transfer_channel_id: old_constants.hub_transfer_channel_id, + icq_update_period: old_constants.icq_update_period, + paused: old_constants.paused, + max_deployment_duration: old_constants.max_deployment_duration, + round_lock_power_schedule: old_constants.round_lock_power_schedule, + current_users_extra_cap: 0, // set the extra cap to 0 during the migration + }; + + OLD_CONSTANTS.remove(deps.storage); + CONSTANTS.save( + deps.storage, + new_constants.first_round_start.nanos(), + &new_constants, + )?; + + Ok(new_constants) +} + +// Populate round total power starting from round 0 and all the way to the last round +// in which any existing lock gives voting power. +fn populate_total_power_for_rounds( + deps: &mut DepsMut, + env: &Env, + current_round_id: u64, +) -> StdResult<()> { + let current_validator_ratios: HashMap = + load_validators_infos(deps.storage, current_round_id) + .iter() + .map(|validator_info| (validator_info.address.clone(), validator_info.power_ratio)) + .collect(); + + let mut round_id = 0; + loop { + let validator_power_ratios: HashMap = if round_id >= current_round_id { + current_validator_ratios.clone() + } else { + load_validators_infos(deps.storage, round_id) + .iter() + .map(|validator_info| (validator_info.address.clone(), validator_info.power_ratio)) + .collect() + }; + + let round_validator_shares = SCALED_ROUND_POWER_SHARES_MAP + .prefix(round_id) + .range(deps.storage, None, None, Order::Ascending) + .filter_map(|val_shares| match val_shares { + Err(_) => None, + Ok(val_shares) => Some(val_shares), + }) + .collect::>(); + + // When we encounter the round with zero shares of any validator, it means that there + // was no lock entry that would give voting power for the given round, or any subsequent + // rounds, so we break the loop at that point. + if round_validator_shares.is_empty() { + break; + } + + let round_total_power: Decimal = round_validator_shares + .iter() + .map(|validator_shares| { + validator_power_ratios + .get(&validator_shares.0) + .map_or_else(Decimal::zero, |power_ratio| { + power_ratio * validator_shares.1 + }) + }) + .sum(); + + TOTAL_VOTING_POWER_PER_ROUND.save( + deps.storage, + round_id, + &round_total_power.to_uint_ceil(), + env.block.height, + )?; + + round_id += 1; + } + + Ok(()) +} + +// Converts the LOCKS_MAP from Map into SnapshotMap and populates USER_LOCKS map. +fn migrate_user_lockups(deps: &mut DepsMut, env: &Env) -> StdResult<()> { + const OLD_LOCKS_MAP: Map<(Addr, u64), LockEntry> = Map::new("locks_map"); + + let mut user_locks_map: HashMap> = HashMap::new(); + let user_lockups: Vec<(Addr, LockEntry)> = OLD_LOCKS_MAP + .range(deps.storage, None, None, Order::Ascending) + .filter_map(|lockup| match lockup { + Err(_) => None, + Ok(lockup) => { + user_locks_map + .entry(lockup.0 .0.clone()) + .and_modify(|user_locks| user_locks.push(lockup.1.lock_id)) + .or_insert(vec![lockup.1.lock_id]); + + Some((lockup.0 .0, lockup.1)) + } + }) + .collect(); + + for user_lockup in &user_lockups { + OLD_LOCKS_MAP.remove(deps.storage, (user_lockup.0.clone(), user_lockup.1.lock_id)); + } + + for user_lockup in user_lockups { + LOCKS_MAP.save( + deps.storage, + (user_lockup.0.clone(), user_lockup.1.lock_id), + &user_lockup.1, + env.block.height, + )?; + } + + for user_locks in user_locks_map { + USER_LOCKS.save(deps.storage, user_locks.0, &user_locks.1, env.block.height)?; + } + + Ok(()) +} + +// Populates ROUND_TO_HEIGHT_RANGE and HEIGHT_TO_ROUND maps +fn populate_round_height_mappings( + deps: &mut DepsMut, + env: &Env, + current_round_id: u64, +) -> StdResult<()> { + ROUND_TO_HEIGHT_RANGE.save( + deps.storage, + current_round_id, + &HeightRange { + lowest_known_height: env.block.height, + highest_known_height: env.block.height, + }, + )?; + + HEIGHT_TO_ROUND.save(deps.storage, env.block.height, ¤t_round_id)?; + Ok(()) } diff --git a/contracts/hydro/src/migration/v3_0_0.rs b/contracts/hydro/src/migration/v3_0_0.rs index aa12869a..b5a5d784 100644 --- a/contracts/hydro/src/migration/v3_0_0.rs +++ b/contracts/hydro/src/migration/v3_0_0.rs @@ -1,5 +1,24 @@ +use cosmwasm_schema::cw_serde; +use cosmwasm_std::Timestamp; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; +use crate::state::RoundLockPowerSchedule; + #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] pub struct MigrateMsgV3_0_0 {} + +#[cw_serde] +pub struct ConstantsV3_0_0 { + pub round_length: u64, + pub lock_epoch_length: u64, + pub first_round_start: Timestamp, + pub max_locked_tokens: u128, + pub max_validator_shares_participating: u64, + pub hub_connection_id: String, + pub hub_transfer_channel_id: String, + pub icq_update_period: u64, + pub paused: bool, + pub max_deployment_duration: u64, + pub round_lock_power_schedule: RoundLockPowerSchedule, +} From aab2dba3ba3f4df77dc3e49d9e2c31546db5efc1 Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Tue, 28 Jan 2025 15:13:03 +0100 Subject: [PATCH 10/14] CR required changes --- contracts/hydro/src/contract.rs | 17 ++- contracts/hydro/src/error.rs | 4 + contracts/hydro/src/migration/unreleased.rs | 4 +- contracts/hydro/src/msg.rs | 2 +- contracts/hydro/src/state.rs | 10 +- contracts/hydro/src/testing.rs | 10 +- contracts/hydro/src/testing_compounder_cap.rs | 78 +++++++------ .../hydro/src/testing_lsm_integration.rs | 2 +- contracts/hydro/src/testing_utils.rs | 23 ++-- contracts/hydro/src/utils.rs | 108 ++++++++++-------- 10 files changed, 144 insertions(+), 114 deletions(-) diff --git a/contracts/hydro/src/contract.rs b/contracts/hydro/src/contract.rs index abc9aa75..7194f399 100644 --- a/contracts/hydro/src/contract.rs +++ b/contracts/hydro/src/contract.rs @@ -82,7 +82,7 @@ pub fn instantiate( lock_epoch_length: msg.lock_epoch_length, first_round_start: msg.first_round_start, max_locked_tokens: msg.max_locked_tokens.u128(), - current_users_extra_cap: 0, + known_users_cap: 0, max_validator_shares_participating: msg.max_validator_shares_participating, hub_connection_id: msg.hub_connection_id, hub_transfer_channel_id: msg.hub_transfer_channel_id, @@ -200,7 +200,7 @@ pub fn execute( ExecuteMsg::UpdateConfig { activate_at, max_locked_tokens, - current_users_extra_cap, + known_users_cap, max_deployment_duration, } => update_config( deps, @@ -208,7 +208,7 @@ pub fn execute( info, activate_at, max_locked_tokens, - current_users_extra_cap, + known_users_cap, max_deployment_duration, ), ExecuteMsg::DeleteConfigs { timestamps } => delete_configs(deps, &env, info, timestamps), @@ -1153,7 +1153,7 @@ fn update_config( info: MessageInfo, activate_at: Timestamp, max_locked_tokens: Option, - current_users_extra_cap: Option, + known_users_cap: Option, max_deployment_duration: Option, ) -> Result, ContractError> { if env.block.time > activate_at { @@ -1183,12 +1183,9 @@ fn update_config( response = response.add_attribute("new_max_locked_tokens", max_locked_tokens.to_string()); } - if let Some(current_users_extra_cap) = current_users_extra_cap { - constants.current_users_extra_cap = current_users_extra_cap; - response = response.add_attribute( - "new_current_users_extra_cap", - current_users_extra_cap.to_string(), - ); + if let Some(known_users_cap) = known_users_cap { + constants.known_users_cap = known_users_cap; + response = response.add_attribute("new_known_users_cap", known_users_cap.to_string()); } if let Some(max_deployment_duration) = max_deployment_duration { diff --git a/contracts/hydro/src/error.rs b/contracts/hydro/src/error.rs index 7f8891e6..66ff2e32 100644 --- a/contracts/hydro/src/error.rs +++ b/contracts/hydro/src/error.rs @@ -26,3 +26,7 @@ pub enum ContractError { #[error("Paused")] Paused, } + +pub fn new_generic_error(msg: impl Into) -> ContractError { + ContractError::Std(StdError::generic_err(msg)) +} diff --git a/contracts/hydro/src/migration/unreleased.rs b/contracts/hydro/src/migration/unreleased.rs index a3ffbb61..f8d91df2 100644 --- a/contracts/hydro/src/migration/unreleased.rs +++ b/contracts/hydro/src/migration/unreleased.rs @@ -31,7 +31,7 @@ pub fn migrate_v3_0_0_to_unreleased( } // Convert CONSTANTS storage from Item to Map and insert single constants instance -// under the timestamp of the first round start time, and set the extra_cap to zero. +// under the timestamp of the first round start time, and set the known_users_cap to zero. fn migrate_constants(deps: &mut DepsMut) -> StdResult { const OLD_CONSTANTS: Item = Item::new("constants"); let old_constants = OLD_CONSTANTS.load(deps.storage)?; @@ -48,7 +48,7 @@ fn migrate_constants(deps: &mut DepsMut) -> StdResult { paused: old_constants.paused, max_deployment_duration: old_constants.max_deployment_duration, round_lock_power_schedule: old_constants.round_lock_power_schedule, - current_users_extra_cap: 0, // set the extra cap to 0 during the migration + known_users_cap: 0, // set the known users cap to 0 during the migration }; OLD_CONSTANTS.remove(deps.storage); diff --git a/contracts/hydro/src/msg.rs b/contracts/hydro/src/msg.rs index 4a1c3b44..5719c256 100644 --- a/contracts/hydro/src/msg.rs +++ b/contracts/hydro/src/msg.rs @@ -69,7 +69,7 @@ pub enum ExecuteMsg { UpdateConfig { activate_at: Timestamp, max_locked_tokens: Option, - current_users_extra_cap: Option, + known_users_cap: Option, max_deployment_duration: Option, }, DeleteConfigs { diff --git a/contracts/hydro/src/state.rs b/contracts/hydro/src/state.rs index 8ca9319f..1d848e97 100644 --- a/contracts/hydro/src/state.rs +++ b/contracts/hydro/src/state.rs @@ -4,6 +4,8 @@ use cw_storage_plus::{Item, Map, SnapshotMap, Strategy}; use crate::msg::LiquidityDeployment; +// The currently-active constants are always those with the largest activation_timestamp +// such that activation_timestamp <= current_block.timestamp // CONSTANTS: key(activation_timestamp) -> Constants pub const CONSTANTS: Map = Map::new("constants"); @@ -63,11 +65,11 @@ pub struct Constants { pub max_locked_tokens: u128, // The maximum number of tokens (out of the max_locked_tokens) that is reserved for locking only // for currently known users. This field is intended to be set to some value greater than zero at - // the begining of the round, and such Constants would apply only for predefined period of time. + // the begining of the round, and such Constants would apply only for a predefined period of time. // After this period has expired, a new Constants would be activated that would set this value to // zero, which would allow any user to lock any amount that possibly wasn't filled, but was reserved // for this cap. - pub current_users_extra_cap: u128, + pub known_users_cap: u128, pub max_validator_shares_participating: u64, pub hub_connection_id: String, pub hub_transfer_channel_id: String, @@ -80,12 +82,12 @@ pub struct Constants { // the total number of tokens locked in the contract pub const LOCKED_TOKENS: Item = Item::new("locked_tokens"); -// Tracks the total number of tokens locked in extra cap, for the given round +// Tracks the total number of tokens locked in known users cap, for the given round // EXTRA_LOCKED_TOKENS_ROUND_TOTAL: key(round_id) -> uint128 pub const EXTRA_LOCKED_TOKENS_ROUND_TOTAL: Map = Map::new("extra_locked_tokens_round_total"); -// Tracks the number of tokens locked in extra cap by specific user, for the given round +// Tracks the number of tokens locked in known users cap by specific user, for the given round // EXTRA_LOCKED_TOKENS_CURRENT_USERS: key(round_id, sender_address) -> uint128 pub const EXTRA_LOCKED_TOKENS_CURRENT_USERS: Map<(u64, Addr), u128> = Map::new("extra_locked_tokens_current_users"); diff --git a/contracts/hydro/src/testing.rs b/contracts/hydro/src/testing.rs index 928fa58b..4472264c 100644 --- a/contracts/hydro/src/testing.rs +++ b/contracts/hydro/src/testing.rs @@ -2603,7 +2603,7 @@ fn max_locked_tokens_test() { let update_max_locked_tokens_msg = ExecuteMsg::UpdateConfig { activate_at: env.block.time.minus_hours(1), max_locked_tokens: Some(3000), - current_users_extra_cap: None, + known_users_cap: None, max_deployment_duration: None, }; let res = execute( @@ -2621,7 +2621,7 @@ fn max_locked_tokens_test() { let update_max_locked_tokens_msg = ExecuteMsg::UpdateConfig { activate_at: env.block.time, max_locked_tokens: Some(3000), - current_users_extra_cap: None, + known_users_cap: None, max_deployment_duration: None, }; let res = execute( @@ -2659,7 +2659,7 @@ fn max_locked_tokens_test() { let update_max_locked_tokens_msg = ExecuteMsg::UpdateConfig { activate_at: env.block.time.plus_hours(1), max_locked_tokens: Some(3500), - current_users_extra_cap: None, + known_users_cap: None, max_deployment_duration: None, }; let res = execute( @@ -2717,7 +2717,7 @@ fn delete_configs_test() { let update_max_locked_tokens_msg = ExecuteMsg::UpdateConfig { activate_at: timestamp, max_locked_tokens: Some((i * 1000) as u128), - current_users_extra_cap: None, + known_users_cap: None, max_deployment_duration: None, }; let res = execute( @@ -2801,7 +2801,7 @@ fn contract_pausing_test() { ExecuteMsg::UpdateConfig { activate_at: env.block.time, max_locked_tokens: None, - current_users_extra_cap: None, + known_users_cap: None, max_deployment_duration: None, }, ExecuteMsg::DeleteConfigs { timestamps: vec![] }, diff --git a/contracts/hydro/src/testing_compounder_cap.rs b/contracts/hydro/src/testing_compounder_cap.rs index e9336004..36817a2d 100644 --- a/contracts/hydro/src/testing_compounder_cap.rs +++ b/contracts/hydro/src/testing_compounder_cap.rs @@ -38,23 +38,23 @@ const INITIAL_BLOCK_HEIGHT: u64 = 19_185_000; const BLOCKS_PER_DAY: u64 = 35_000; // 1. Round 0: Have 3 users fill the total cap by locking 3 different tokens for different duration (1, 6, 12 rounds). -// 2. Round 0: Update config to increase total_cap and set extra_cap starting from round 1. -// 3. Round 0: Update config to close the extra_cap after some time in round 1. +// 2. Round 0: Update config to increase total_cap and set known_users_cap starting from round 1. +// 3. Round 0: Update config to close the known_users_cap after some time in round 1. // 4. Round 0: Update all validator power ratios to verify that the total voting power changes, and users // voting power also gets updated proportinally. // 5. Round 1: Have the first known user unlock the expired lockup, to test voting power computation for previous round. // 6. Round 1: Have the first known user lock some tokens in public_cap, then a completely new user lock tokens // in public cap (try more than allowed, then lock below public_cap). -// 7. Round 1: Have the known user from previous step lock more to fill the public_cap and some more into extra_cap. -// 8. Round 1: Have the same known user try to lock in extra_cap more than it should be allowed. -// 9. Round 1: Have the same known user lock the most it should be allowed in the extra_cap. -// 10. Round 1: Have other two known users lock as much as they should be allowed in the extra_cap. -// 11. Round 1: Update config to increase total_cap and set extra_cap starting from round 2. -// 12. Round 1: Update config to close the extra_cap after some time in round 2. +// 7. Round 1: Have the known user from previous step lock more to fill the public_cap and some more into known_users_cap. +// 8. Round 1: Have the same known user try to lock in known_users_cap more than it should be allowed. +// 9. Round 1: Have the same known user lock the most it should be allowed in the known_users_cap. +// 10. Round 1: Have other two known users lock as much as they should be allowed in the known_users_cap. +// 11. Round 1: Update config to increase total_cap and set known_users_cap starting from round 2. +// 12. Round 1: Update config to close the known_users_cap after some time in round 2. // 13. Round 2: Have a completely new user lock tokens to fill up the public_cap, then try to lock more. -// 14. Round 2: Have a known user lock maximum allowed in extra cap. -// 15. Round 2: Advance the chain to end the extra_cap duration and have a user from step #13 lock -// additional amount that matches the entire amount previously reserved for extra_cap. +// 14. Round 2: Have a known user lock maximum allowed in known users cap. +// 15. Round 2: Advance the chain to end the known_users_cap duration and have a user from step #13 lock +// additional amount that matches the entire amount previously reserved for known_users_cap. #[test] fn test_compounder_cap() { let whitelist_admin = "addr0000"; @@ -162,7 +162,7 @@ fn test_compounder_cap() { assert_eq!(res.unwrap().to_uint_ceil().u128(), expected_round_power.1); } - // 2. Round 0: Update config to increase total_cap and set extra_cap starting from round 1. + // 2. Round 0: Update config to increase total_cap and set known_users_cap starting from round 1. // Advance the chain by 1 day env.block.time = env.block.time.plus_days(1); @@ -171,14 +171,14 @@ fn test_compounder_cap() { let msg = ExecuteMsg::UpdateConfig { activate_at: FIRST_ROUND_START.plus_nanos(ROUND_LENGTH + 1), max_locked_tokens: Some(40000), - current_users_extra_cap: Some(2000), + known_users_cap: Some(2000), max_deployment_duration: None, }; let res = execute(deps.as_mut(), env.clone(), admin_msg_info.clone(), msg); assert!(res.is_ok(), "error: {:?}", res); - // 3. Round 0: Update config to close the extra_cap after some time in round 1. + // 3. Round 0: Update config to close the known_users_cap after some time in round 1. // Advance the chain by 1 day env.block.time = env.block.time.plus_days(1); @@ -187,7 +187,7 @@ fn test_compounder_cap() { let msg = ExecuteMsg::UpdateConfig { activate_at: FIRST_ROUND_START.plus_nanos(ROUND_LENGTH + TEN_DAYS_IN_NANOS + 1), max_locked_tokens: None, - current_users_extra_cap: Some(0), + known_users_cap: Some(0), max_deployment_duration: None, }; @@ -317,7 +317,9 @@ fn test_compounder_cap() { user4, LOCK_EPOCH_LENGTH, Coin::new(8001u64, IBC_DENOM_1.to_string()), - Some("The limit for locking tokens has been reached. No more tokens can be locked."), + Some( + "Can not lock 1 tokens in known users cap. User had zero voting power in previous round.", + ), ), // Completely new user locks 5_000 tokens in public_cap; the total locked tokens will be 35_000 ( @@ -338,35 +340,35 @@ fn test_compounder_cap() { vec![(user1_addr.clone(), 0), (user4_addr.clone(), 0)], ); - // 7. Round 1: Have the known user from previous step lock more to fill the public_cap and some more into extra_cap. - // 8. Round 1: Have the same user try to lock in extra_cap more than it should be allowed. - // 9. Round 1: Have the same user lock the most it should be allowed in the extra_cap. - // 10. Round 1: Have other two known users lock as much as they should be allowed in the extra_cap. + // 7. Round 1: Have the known user from previous step lock more to fill the public_cap and some more into known_users_cap. + // 8. Round 1: Have the same user try to lock in known_users_cap more than it should be allowed. + // 9. Round 1: Have the same user lock the most it should be allowed in the known_users_cap. + // 10. Round 1: Have other two known users lock as much as they should be allowed in the known_users_cap. // Advance the chain by 1 day env.block.time = env.block.time.plus_days(1); env.block.height += BLOCKS_PER_DAY; let locking_infos = vec![ - // User 1 locks 3100 tokens, 3000 in public_cap, 100 in extra_cap + // User 1 locks 3100 tokens, 3000 in public_cap, 100 in known_users_cap // After this action the total locked tokens will be 38_100 - // 38_000 locked in public_cap and 100 locked in extra_cap + // 38_000 locked in public_cap and 100 locked in known_users_cap ( user1, LOCK_EPOCH_LENGTH, Coin::new(3100u64, IBC_DENOM_1.to_string()), None, ), - // User 1 tries to lock in extra_cap more than it should be allowed. + // User 1 tries to lock in known_users_cap more than it should be allowed. // By the voting power in previous round it should be allowed to // lock 285 tokens, and in previous step it already locked 100. ( user1, LOCK_EPOCH_LENGTH, Coin::new(186u64, IBC_DENOM_1.to_string()), - Some("The limit for locking tokens has been reached. No more tokens can be locked."), + Some("Can not lock 186 tokens in known users cap. User reached the personal cap for locking tokens in the known users cap."), ), - // User 1 locks in extra_cap the maximum it should be allowed (285) + // User 1 locks in known_users_cap the maximum it should be allowed (285) // After this action the total locked tokens will be 38_285 ( user1, @@ -374,7 +376,7 @@ fn test_compounder_cap() { Coin::new(185u64, IBC_DENOM_1.to_string()), None, ), - // User 2 locks in extra_cap the maximum it should be allowed (571) + // User 2 locks in known_users_cap the maximum it should be allowed (571) // After this action the total locked tokens will be 38_856 ( user2, @@ -382,7 +384,7 @@ fn test_compounder_cap() { Coin::new(571u64, IBC_DENOM_1.to_string()), None, ), - // User 3 locks in extra_cap the maximum it should be allowed (1142) + // User 3 locks in known_users_cap the maximum it should be allowed (1142) // After this action the total locked tokens will be 39_998 ( user3, @@ -406,7 +408,7 @@ fn test_compounder_cap() { ], ); - // 11. Round 1: Update config to increase total_cap and set extra_cap starting from round 2. + // 11. Round 1: Update config to increase total_cap and set known_users_cap starting from round 2. // Advance the chain by 1 day env.block.time = env.block.time.plus_days(1); @@ -415,18 +417,18 @@ fn test_compounder_cap() { let msg = ExecuteMsg::UpdateConfig { activate_at: FIRST_ROUND_START.plus_nanos(2 * ROUND_LENGTH + 1), max_locked_tokens: Some(50000), - current_users_extra_cap: Some(5000), + known_users_cap: Some(5000), max_deployment_duration: None, }; let res = execute(deps.as_mut(), env.clone(), admin_msg_info.clone(), msg); assert!(res.is_ok(), "error: {:?}", res); - // 12. Round 1: Update config to close the extra_cap after some time in round 2. + // 12. Round 1: Update config to close the known_users_cap after some time in round 2. let msg = ExecuteMsg::UpdateConfig { activate_at: FIRST_ROUND_START.plus_nanos(2 * ROUND_LENGTH + TEN_DAYS_IN_NANOS + 1), max_locked_tokens: None, - current_users_extra_cap: Some(0), + known_users_cap: Some(0), max_deployment_duration: None, }; @@ -438,7 +440,7 @@ fn test_compounder_cap() { env.block.height = INITIAL_BLOCK_HEIGHT + BLOCKS_PER_DAY * 61; // 13. Round 2: Have a completely new user lock tokens to fill up the public_cap, then try to lock more. - // 14. Round 2: Have a known user lock maximum allowed in extra cap. + // 14. Round 2: Have a known user lock maximum allowed in known users cap. let locking_infos = vec![ // Completely new user locks up to the public_cap @@ -449,15 +451,17 @@ fn test_compounder_cap() { Coin::new(5002u64, IBC_DENOM_1.to_string()), None, ), - // Then the same user tries to lock more than allowed in public_cap, while extra_cap is still active + // Then the same user tries to lock more than allowed in public_cap, while known_users_cap is still active ( user5, LOCK_EPOCH_LENGTH, Coin::new(1u64, IBC_DENOM_1.to_string()), - Some("The limit for locking tokens has been reached. No more tokens can be locked."), + Some( + "Can not lock 1 tokens in known users cap. User had zero voting power in previous round.", + ), ), // User 4 had voting power 4_500 out of 71_996 total voting power in round 1 - // With the extra_cap of 5_000, it is allowed to lock 312 tokens in it + // With the known_users_cap of 5_000, it is allowed to lock 312 tokens in it // After this action total locked tokens will be 45_312 ( user4, @@ -469,8 +473,8 @@ fn test_compounder_cap() { execute_locking_and_verify(&mut deps, &env, locking_infos); - // 15. Round 2: Advance the chain to end the extra_cap duration and have a user from step #13 lock - // additional amount that matches the entire amount previously reserved for extra_cap. + // 15. Round 2: Advance the chain to end the known_users_cap duration and have a user from step #13 lock + // additional amount that matches the entire amount previously reserved for known_users_cap. env.block.time = FIRST_ROUND_START.plus_nanos(2 * ROUND_LENGTH + TEN_DAYS_IN_NANOS + 1); env.block.height = INITIAL_BLOCK_HEIGHT + BLOCKS_PER_DAY * 70; diff --git a/contracts/hydro/src/testing_lsm_integration.rs b/contracts/hydro/src/testing_lsm_integration.rs index 79908d9c..494da38c 100644 --- a/contracts/hydro/src/testing_lsm_integration.rs +++ b/contracts/hydro/src/testing_lsm_integration.rs @@ -43,7 +43,7 @@ fn get_default_constants() -> crate::state::Constants { lock_epoch_length: 1, first_round_start: Timestamp::from_seconds(0), max_locked_tokens: 1, - current_users_extra_cap: 0, + known_users_cap: 0, paused: false, max_validator_shares_participating: 2, hub_connection_id: "connection-0".to_string(), diff --git a/contracts/hydro/src/testing_utils.rs b/contracts/hydro/src/testing_utils.rs index 74691927..0675d5a8 100644 --- a/contracts/hydro/src/testing_utils.rs +++ b/contracts/hydro/src/testing_utils.rs @@ -21,7 +21,7 @@ fn load_current_constants_test() { lock_epoch_length: ONE_DAY_IN_NANO_SECONDS, first_round_start: Timestamp::from_seconds(0), max_locked_tokens: 0, - current_users_extra_cap: 0, + known_users_cap: 0, paused: false, max_validator_shares_participating: 500, hub_connection_id: "connection-0".to_string(), @@ -81,14 +81,23 @@ fn load_current_constants_test() { assert!(res.is_ok()); } - // Verify that we receive expected constants by setting the block time to activate_at_timestamp + 1 hour + // Verify that we receive expected constants by setting the block time to activate_at_timestamp + // in first atempt, and then setting it to activate_at_timestamp + 1 hour in second atempt. + // In both cases we should get the same constants. for test_case in test_cases.iter() { - env.block.time = Timestamp::from_nanos(test_case.activate_at_timestamp).plus_seconds(3600); + let timestamps_to_check = vec![ + Timestamp::from_nanos(test_case.activate_at_timestamp), + Timestamp::from_nanos(test_case.activate_at_timestamp).plus_seconds(3600), + ]; - let res = load_current_constants(&deps.as_ref(), &env); - assert!(res.is_ok()); - let constants = res.unwrap(); + for timestamp_to_check in timestamps_to_check { + env.block.time = timestamp_to_check; + + let res = load_current_constants(&deps.as_ref(), &env); + assert!(res.is_ok()); + let constants = res.unwrap(); - assert_eq!(constants, test_case.constants_to_insert); + assert_eq!(constants, test_case.constants_to_insert); + } } } diff --git a/contracts/hydro/src/utils.rs b/contracts/hydro/src/utils.rs index fd8549d4..d01dd3e5 100644 --- a/contracts/hydro/src/utils.rs +++ b/contracts/hydro/src/utils.rs @@ -6,7 +6,7 @@ use neutron_sdk::bindings::query::NeutronQuery; use crate::{ contract::get_user_voting_power_for_past_round, - error::ContractError, + error::{new_generic_error, ContractError}, lsm_integration::{get_total_power_for_round, initialize_validator_store}, state::{ Constants, HeightRange, CONSTANTS, EXTRA_LOCKED_TOKENS_CURRENT_USERS, @@ -50,18 +50,17 @@ pub fn load_constants_active_at_timestamp( } // This function validates if user should be allowed to lock more tokens, depending on the total amount of -// currently locked tokens, existence of the extra cap and the number of tokens user already locked in that cap. +// currently locked tokens, existence of the known users cap and the number of tokens user already locked in that cap. // Caps that we consider: // 1) Total cap: the maximum number of tokens that can be locked in the contract, regardless of the -// extra cap existence. -// 2) Extra cap: the number of tokens reserved for users that had some voting power in previous round. -// It will be available to those users to lock additional tokens even if the public cap is filled. -// The extra cap will be available only for certain time frame at the beginning of the round. Duration -// will be determined through governance. After the extra cap duration has expired, any tokens left up -// to the total cap are allowed to be locked by any Hydro user. -// 3) Public cap: during the existence of extra cap, new Hydro users will be allowed to lock tokens only -// in public cap, where public_cap = total_cap - extra_cap. -// After the extra cap duration expires, public cap becomes equal to the total cap. +// known users cap existence. +// 2) Known users cap: the number of tokens reserved exclusively for users that had some voting power in previous round. +// It will be available to those users to lock additional tokens even if the public cap is filled. However, +// if the public cap isn't full yet, these users would lock in the public cap first. Only if the public cap +// is full, these users start using the known users cap. +// 3) Public cap: during the existence of known users cap, new Hydro users will be allowed to lock tokens only +// in public cap, where public_cap = total_cap - known_users_cap. +// After the known users cap duration expires, public cap becomes equal to the total cap. pub fn validate_locked_tokens_caps( deps: &DepsMut, constants: &Constants, @@ -70,21 +69,21 @@ pub fn validate_locked_tokens_caps( total_locked_tokens: u128, amount_to_lock: u128, ) -> Result { - let lock_limit_reached_error = Err(ContractError::Std(StdError::generic_err( + let lock_limit_reached_error = Err(new_generic_error( "The limit for locking tokens has been reached. No more tokens can be locked.", - ))); + )); - // Regardless of public_cap and extra_cap, we must make sure that nobody can lock more than total_cap + // Regardless of public_cap and known_users_cap, we must make sure that nobody can lock more than total_cap let total_locked_after = total_locked_tokens + amount_to_lock; if total_locked_after > constants.max_locked_tokens { return lock_limit_reached_error; } - let public_cap = constants.max_locked_tokens - constants.current_users_extra_cap; + let public_cap = constants.max_locked_tokens - constants.known_users_cap; // This branch will be executed in one of the following cases: - // 1) constants.current_users_extra_cap != 0 and there is SOME room in the public cap - // 2) constants.current_users_extra_cap == 0 and there is ENOUGH room in the public_cap. + // 1) constants.known_users_cap != 0 and there is SOME room in the public cap + // 2) constants.known_users_cap == 0 and there is ENOUGH room in the public_cap. // Since in this case public_cap == total_cap, there must be enough room in the public_cap, // otherwise we would error out at the start of this function. if public_cap > total_locked_tokens { @@ -96,21 +95,19 @@ pub fn validate_locked_tokens_caps( }); } - // Lock as much as possible in the public_cap, and the rest in the extra_cap + // Lock as much as possible in the public_cap, and the rest in the known_users_cap let lock_in_public_cap = public_cap - total_locked_tokens; let lock_in_known_users_cap = amount_to_lock - lock_in_public_cap; - // If there is still room in extra_cap, then check if this - // is a user that should be allowed to use the extra_cap. - if !can_user_lock_in_extra_cap( + // If there is still room in known_users_cap, then check if this + // is a user that should be allowed to use the known_users_cap. + can_user_lock_in_known_users_cap( deps, constants, current_round, sender, lock_in_known_users_cap, - )? { - return lock_limit_reached_error; - } + )?; return Ok(LockingInfo { lock_in_public_cap: Some(lock_in_public_cap), @@ -118,20 +115,18 @@ pub fn validate_locked_tokens_caps( }); } - // If we got through here, it means that constants.current_users_extra_cap > 0. - // If constants.current_users_extra_cap was 0 and public_cap (equal to total_cap) + // If we got through here, it means that constants.known_users_cap > 0. + // If constants.known_users_cap was 0 and public_cap (equal to total_cap) // is equal to total_locked_tokens, then we would error out at the start of this // function, because any amount_to_lock would exceed the total_cap. This is just // a safety check to make the code resilient to future changes. - if constants.current_users_extra_cap == 0 { + if constants.known_users_cap == 0 { return lock_limit_reached_error; } - // If there is still room in extra_cap, then check if this - // is a user that should be allowed to use the extra_cap. - if !can_user_lock_in_extra_cap(deps, constants, current_round, sender, amount_to_lock)? { - return lock_limit_reached_error; - } + // If there is still room in known_users_cap, then check if this + // is a user that should be allowed to use the known_users_cap. + can_user_lock_in_known_users_cap(deps, constants, current_round, sender, amount_to_lock)?; Ok(LockingInfo { lock_in_public_cap: None, @@ -139,25 +134,31 @@ pub fn validate_locked_tokens_caps( }) } -fn can_user_lock_in_extra_cap( +fn can_user_lock_in_known_users_cap( deps: &DepsMut, constants: &Constants, current_round: u64, sender: &Addr, amount_to_lock: u128, -) -> Result { +) -> Result<(), ContractError> { let extra_locked_tokens_round_total = EXTRA_LOCKED_TOKENS_ROUND_TOTAL .may_load(deps.storage, current_round)? .unwrap_or(0); - if extra_locked_tokens_round_total + amount_to_lock > constants.current_users_extra_cap { - return Ok(false); + if extra_locked_tokens_round_total + amount_to_lock > constants.known_users_cap { + return Err( + new_generic_error( + format!("Can not lock {} tokens in known users cap. Currently locked in known users cap: {}; Maximum allowed to be locked in known users cap: {}", + amount_to_lock, extra_locked_tokens_round_total, constants.known_users_cap))); } - // Determine if user has the right to lock in extra_cap by looking at its voting power in previous round. - // If we are in round 0 then check the current round. + // Determine if user has the right to lock in known_users_cap by looking at its voting power in previous round. let round_to_check = match current_round { - 0 => current_round, + 0 => { + return Err(new_generic_error( + "Can't lock in known users cap during round 0.", + )) + } _ => current_round - 1, }; @@ -175,7 +176,10 @@ fn can_user_lock_in_extra_cap( // Prevent division by zero or break early in case user had no voting power in previous round. if total_voting_power == Decimal::zero() || users_voting_power == Decimal::zero() { - return Ok(false); + return Err(new_generic_error(format!( + "Can not lock {} tokens in known users cap. User had zero voting power in previous round.", + amount_to_lock + ))); } let users_voting_power_share = users_voting_power.checked_div(total_voting_power)?; @@ -187,20 +191,30 @@ fn can_user_lock_in_extra_cap( let users_extra_lock = Decimal::from_ratio(users_current_extra_lock + amount_to_lock, Uint128::one()); - let maximum_extra_lock = Decimal::from_ratio(constants.current_users_extra_cap, Uint128::one()); + let maximum_extra_lock = Decimal::from_ratio(constants.known_users_cap, Uint128::one()); + + if maximum_extra_lock == Decimal::zero() { + return Err(new_generic_error( + "Can not lock tokens in known users cap because it is not active.", + )); + } + let users_extra_lock_share = users_extra_lock.checked_div(maximum_extra_lock)?; - // If users share in maximum allowed extra cap would be greater than its share in + // If users share in maximum allowed known users cap would be greater than its share in // total voting power, then don't allow this user to lock the given amount of tokens. if users_extra_lock_share > users_voting_power_share { - return Ok(false); + return Err(new_generic_error(format!( + "Can not lock {} tokens in known users cap. User reached the personal cap for locking tokens in the known users cap.", + amount_to_lock + ))); } - Ok(true) + Ok(()) } // Whenever a users locks more tokens this function will update the necessary stores, -// depending on the amounts that user locked in public_cap and extra_cap. +// depending on the amounts that user locked in public_cap and known_users_cap. // Stores that will (potentially) be updated: // LOCKED_TOKENS, EXTRA_LOCKED_TOKENS_ROUND_TOTAL, EXTRA_LOCKED_TOKENS_CURRENT_USERS pub fn update_locked_tokens_info( @@ -254,11 +268,11 @@ pub fn run_on_each_transaction( round_id: u64, ) -> StdResult<()> { initialize_validator_store(storage, round_id)?; - update_round_to_height_maps(storage, env, round_id) + update_round_height_maps(storage, env, round_id) } // Updates round_id -> height_range and block_height -> round_id maps, for later use. -pub fn update_round_to_height_maps( +pub fn update_round_height_maps( storage: &mut dyn Storage, env: &Env, round_id: u64, From 73e9c088866b1402009b60e09109d1d55a9baccb Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Tue, 28 Jan 2025 15:32:08 +0100 Subject: [PATCH 11/14] added SNAPSHOTS_ACTIVATION_HEIGHT --- contracts/hydro/src/contract.rs | 20 ++++++++++++++++---- contracts/hydro/src/migration/unreleased.rs | 6 ++++-- contracts/hydro/src/state.rs | 6 ++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/contracts/hydro/src/contract.rs b/contracts/hydro/src/contract.rs index 7194f399..dc811cf0 100644 --- a/contracts/hydro/src/contract.rs +++ b/contracts/hydro/src/contract.rs @@ -37,9 +37,10 @@ use crate::score_keeper::{ use crate::state::{ Constants, LockEntry, Proposal, RoundLockPowerSchedule, Tranche, ValidatorInfo, Vote, VoteWithPower, CONSTANTS, ICQ_MANAGERS, LIQUIDITY_DEPLOYMENTS_MAP, LOCKED_TOKENS, LOCKS_MAP, - LOCK_ID, PROPOSAL_MAP, PROPS_BY_SCORE, PROP_ID, ROUND_TO_HEIGHT_RANGE, TRANCHE_ID, TRANCHE_MAP, - USER_LOCKS, VALIDATORS_INFO, VALIDATORS_PER_ROUND, VALIDATORS_STORE_INITIALIZED, - VALIDATOR_TO_QUERY_ID, VOTE_MAP, VOTING_ALLOWED_ROUND, WHITELIST, WHITELIST_ADMINS, + LOCK_ID, PROPOSAL_MAP, PROPS_BY_SCORE, PROP_ID, ROUND_TO_HEIGHT_RANGE, + SNAPSHOTS_ACTIVATION_HEIGHT, TRANCHE_ID, TRANCHE_MAP, USER_LOCKS, VALIDATORS_INFO, + VALIDATORS_PER_ROUND, VALIDATORS_STORE_INITIALIZED, VALIDATOR_TO_QUERY_ID, VOTE_MAP, + VOTING_ALLOWED_ROUND, WHITELIST, WHITELIST_ADMINS, }; use crate::utils::{ load_constants_active_at_timestamp, load_current_constants, run_on_each_transaction, @@ -148,6 +149,8 @@ pub fn instantiate( // the store for the first round is already initialized, since there is no previous round to copy information over from. VALIDATORS_STORE_INITIALIZED.save(deps.storage, 0, &true)?; + SNAPSHOTS_ACTIVATION_HEIGHT.save(deps.storage, &env.block.height)?; + Ok(Response::new() .add_attribute("action", "initialisation") .add_attribute("sender", info.sender.clone())) @@ -2092,9 +2095,18 @@ pub fn get_user_voting_power_for_past_round( ) -> StdResult { let round_end = compute_round_end(constants, round_id)?; let load_height = ROUND_TO_HEIGHT_RANGE - .load(deps.storage, round_id)? + .may_load(deps.storage, round_id)? + .unwrap_or_default() .highest_known_height; + let snapshot_activation_height = SNAPSHOTS_ACTIVATION_HEIGHT.load(deps.storage)?; + if load_height < snapshot_activation_height { + return Err(StdError::generic_err(format!( + "Can not query historical data before height: {}.", + snapshot_activation_height + ))); + } + let user_locks_ids = USER_LOCKS .may_load_at_height(deps.storage, address.clone(), load_height)? .unwrap_or_default(); diff --git a/contracts/hydro/src/migration/unreleased.rs b/contracts/hydro/src/migration/unreleased.rs index f8d91df2..3baae06c 100644 --- a/contracts/hydro/src/migration/unreleased.rs +++ b/contracts/hydro/src/migration/unreleased.rs @@ -11,8 +11,8 @@ use crate::{ migration::v3_0_0::ConstantsV3_0_0, state::{ Constants, HeightRange, LockEntry, CONSTANTS, HEIGHT_TO_ROUND, LOCKS_MAP, - ROUND_TO_HEIGHT_RANGE, SCALED_ROUND_POWER_SHARES_MAP, TOTAL_VOTING_POWER_PER_ROUND, - USER_LOCKS, + ROUND_TO_HEIGHT_RANGE, SCALED_ROUND_POWER_SHARES_MAP, SNAPSHOTS_ACTIVATION_HEIGHT, + TOTAL_VOTING_POWER_PER_ROUND, USER_LOCKS, }, }; @@ -27,6 +27,8 @@ pub fn migrate_v3_0_0_to_unreleased( migrate_user_lockups(deps, &env)?; populate_round_height_mappings(deps, &env, round_id)?; + SNAPSHOTS_ACTIVATION_HEIGHT.save(deps.storage, &env.block.height)?; + Ok(()) } diff --git a/contracts/hydro/src/state.rs b/contracts/hydro/src/state.rs index 1d848e97..77ab780b 100644 --- a/contracts/hydro/src/state.rs +++ b/contracts/hydro/src/state.rs @@ -289,6 +289,12 @@ pub const ROUND_TO_HEIGHT_RANGE: Map = Map::new("round_to_heig // HEIGHT_TO_ROUND: key(block_height) -> round_id pub const HEIGHT_TO_ROUND: Map = Map::new("height_to_round"); +// The height at which the snapshot maps such as LOCKS_MAP, USER_LOCKS, TOTAL_VOTING_POWER_PER_ROUND, etc. +// were populated for the first time, making some historical queries available. +// Required because the initial implementation of the contract didn't have this maps, and the deployed +// contracts will be able to handle some queries only after the migration to the newest code is done. +pub const SNAPSHOTS_ACTIVATION_HEIGHT: Item = Item::new("snapshots_activation_height"); + #[cw_serde] #[derive(Default)] pub struct HeightRange { From 62bbbc285ecf841f2d8225fc5ddd262782255020 Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Wed, 29 Jan 2025 14:47:56 +0100 Subject: [PATCH 12/14] added migration tests --- Cargo.lock | 4 +- contracts/hydro/Cargo.toml | 2 +- contracts/hydro/src/migration/migrate.rs | 5 +- contracts/hydro/src/migration/mod.rs | 3 + .../hydro/src/migration/testing_unreleased.rs | 391 ++++++++++++++++++ contracts/hydro/src/migration/unreleased.rs | 9 +- contracts/tribute/Cargo.toml | 2 +- packages/interface/src/hydro.rs | 4 +- 8 files changed, 409 insertions(+), 11 deletions(-) create mode 100644 contracts/hydro/src/migration/testing_unreleased.rs diff --git a/Cargo.lock b/Cargo.lock index a4fb32dd..23b3a653 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1660,7 +1660,7 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hydro" -version = "3.0.0" +version = "4.0.0" dependencies = [ "bech32 0.9.1", "cosmos-sdk-proto 0.20.0", @@ -3728,7 +3728,7 @@ dependencies = [ [[package]] name = "tribute" -version = "3.0.0" +version = "4.0.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", diff --git a/contracts/hydro/Cargo.toml b/contracts/hydro/Cargo.toml index bef82874..81dc8f91 100644 --- a/contracts/hydro/Cargo.toml +++ b/contracts/hydro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hydro" -version = "3.0.0" +version = "4.0.0" authors = ["Jehan Tremback", "Philip Offtermatt", "Dusan Maksimovic"] edition = "2018" diff --git a/contracts/hydro/src/migration/migrate.rs b/contracts/hydro/src/migration/migrate.rs index 6ae8cfc0..d1ffba36 100644 --- a/contracts/hydro/src/migration/migrate.rs +++ b/contracts/hydro/src/migration/migrate.rs @@ -7,8 +7,7 @@ use cw2::{get_contract_version, set_contract_version}; use neutron_sdk::bindings::msg::NeutronMsg; use neutron_sdk::bindings::query::NeutronQuery; -use super::unreleased::migrate_v3_0_0_to_unreleased; -use super::v3_0_0::MigrateMsgV3_0_0; +use super::unreleased::{migrate_v3_0_0_to_unreleased, MigrateMsgUnreleased}; pub const CONTRACT_VERSION_V1_1_0: &str = "1.1.0"; pub const CONTRACT_VERSION_V2_0_1: &str = "2.0.1"; @@ -21,7 +20,7 @@ pub const CONTRACT_VERSION_UNRELEASED: &str = "4.0.0"; pub fn migrate( mut deps: DepsMut, env: Env, - _msg: MigrateMsgV3_0_0, + _msg: MigrateMsgUnreleased, ) -> Result, ContractError> { let contract_version = get_contract_version(deps.storage)?; diff --git a/contracts/hydro/src/migration/mod.rs b/contracts/hydro/src/migration/mod.rs index ab48d889..252efc2a 100644 --- a/contracts/hydro/src/migration/mod.rs +++ b/contracts/hydro/src/migration/mod.rs @@ -1,3 +1,6 @@ pub mod migrate; pub mod unreleased; pub mod v3_0_0; + +#[cfg(test)] +mod testing_unreleased; diff --git a/contracts/hydro/src/migration/testing_unreleased.rs b/contracts/hydro/src/migration/testing_unreleased.rs new file mode 100644 index 00000000..a94645f0 --- /dev/null +++ b/contracts/hydro/src/migration/testing_unreleased.rs @@ -0,0 +1,391 @@ +use std::str::FromStr; + +use cosmwasm_std::{ + testing::{mock_env, MockApi, MockStorage}, + Addr, Coin, Decimal, Env, OwnedDeps, Timestamp, Uint128, +}; +use cw2::set_contract_version; +use cw_storage_plus::{Item, Map}; +use neutron_sdk::bindings::query::NeutronQuery; + +use crate::{ + contract::{instantiate, CONTRACT_NAME}, + migration::{ + migrate::{migrate, CONTRACT_VERSION_V3_0_0}, + unreleased::MigrateMsgUnreleased, + v3_0_0::ConstantsV3_0_0, + }, + state::{ + LockEntry, HEIGHT_TO_ROUND, LOCKS_MAP, ROUND_TO_HEIGHT_RANGE, + SCALED_ROUND_POWER_SHARES_MAP, SNAPSHOTS_ACTIVATION_HEIGHT, TOTAL_VOTING_POWER_PER_ROUND, + USER_LOCKS, + }, + testing::{ + get_default_instantiate_msg, get_default_power_schedule, get_message_info, IBC_DENOM_1, + IBC_DENOM_2, IBC_DENOM_3, ONE_MONTH_IN_NANO_SECONDS, VALIDATOR_1, VALIDATOR_2, VALIDATOR_3, + }, + testing_lsm_integration::set_validators_constant_power_ratios_for_rounds, + testing_mocks::{mock_dependencies, no_op_grpc_query_mock, MockQuerier}, + utils::load_constants_active_at_timestamp, +}; + +const INITIAL_TIMESTAMP: Timestamp = Timestamp::from_nanos(1738130400000000000); + +#[test] +fn test_constants_and_height_mappings_migration() { + let (mut deps, mut env, old_constants) = setup_current_contract(); + + // Advance the chain into the fourth round and run the migration + env.block.time = env + .block + .time + .plus_nanos(3 * old_constants.round_length + 1); + env.block.height += 300_000; + + let current_round_id = 3; + let migration_height = env.block.height; + + let res = migrate(deps.as_mut(), env.clone(), MigrateMsgUnreleased {}); + assert!( + res.is_ok(), + "failed to migrate contract to the newest version" + ); + + for timestamp_to_check in [INITIAL_TIMESTAMP, env.block.time] { + let constants = load_constants_active_at_timestamp(&deps.as_ref(), timestamp_to_check) + .unwrap() + .1; + + assert_eq!(constants.round_length, old_constants.round_length); + assert_eq!(constants.lock_epoch_length, old_constants.lock_epoch_length); + assert_eq!(constants.first_round_start, old_constants.first_round_start); + assert_eq!(constants.max_locked_tokens, old_constants.max_locked_tokens); + assert_eq!( + constants.max_validator_shares_participating, + old_constants.max_validator_shares_participating + ); + assert_eq!(constants.hub_connection_id, old_constants.hub_connection_id); + assert_eq!( + constants.hub_transfer_channel_id, + old_constants.hub_transfer_channel_id + ); + assert_eq!(constants.icq_update_period, old_constants.icq_update_period); + assert_eq!(constants.paused, old_constants.paused); + assert_eq!( + constants.max_deployment_duration, + old_constants.max_deployment_duration + ); + assert_eq!( + constants.round_lock_power_schedule, + old_constants.round_lock_power_schedule + ); + } + + let height_range = ROUND_TO_HEIGHT_RANGE + .load(&deps.storage, current_round_id) + .unwrap(); + assert_eq!(height_range.lowest_known_height, migration_height); + assert_eq!(height_range.highest_known_height, migration_height); + + assert_eq!( + HEIGHT_TO_ROUND + .load(&deps.storage, migration_height) + .unwrap(), + current_round_id + ); + + assert_eq!( + SNAPSHOTS_ACTIVATION_HEIGHT.load(&deps.storage).unwrap(), + migration_height + ); +} + +#[test] +fn test_total_voting_power_migration() { + let (mut deps, mut env, old_constants) = setup_current_contract(); + + // Rounds IDs 0 and 1 + set_validators_constant_power_ratios_for_rounds( + deps.as_mut(), + 0, + 2, + vec![ + VALIDATOR_1.to_string(), + VALIDATOR_2.to_string(), + VALIDATOR_3.to_string(), + ], + vec![Decimal::one(), Decimal::one(), Decimal::one()], + ); + + // Round IDs 2 and 3 + set_validators_constant_power_ratios_for_rounds( + deps.as_mut(), + 2, + 4, + vec![ + VALIDATOR_1.to_string(), + VALIDATOR_2.to_string(), + VALIDATOR_3.to_string(), + ], + vec![ + Decimal::one(), + Decimal::one(), + Decimal::from_str("0.5").unwrap(), + ], + ); + + // Round ID 4 + set_validators_constant_power_ratios_for_rounds( + deps.as_mut(), + 4, + 5, + vec![VALIDATOR_1.to_string(), VALIDATOR_3.to_string()], + vec![ + Decimal::from_str("0.7").unwrap(), + Decimal::from_str("0.5").unwrap(), + ], + ); + + let validator_round_shares: Vec<(&str, Vec)> = vec![ + ( + VALIDATOR_1, + vec![400, 400, 400, 400, 400, 400, 200, 200, 200, 150, 125, 100], + ), + ( + VALIDATOR_2, + vec![400, 400, 400, 300, 250, 200, 0, 0, 0, 0, 0, 0], + ), + ( + VALIDATOR_3, + vec![ + 1600, 1600, 1600, 1600, 1600, 1600, 800, 800, 800, 600, 500, 400, + ], + ), + ]; + + let expected_round_total_powers = vec![ + (0, 2400), + (1, 2400), + (2, 1600), + (3, 1500), + (4, 1080), + (5, 1080), + (6, 540), + (7, 540), + (8, 540), + (9, 405), + (10, 338), + (11, 270), + ]; + + // Insert validator shares into the store + for validator_shares in validator_round_shares { + for round_id in 0..12 { + let round_shares = validator_shares.1[round_id as usize]; + if round_shares != 0 { + let res = SCALED_ROUND_POWER_SHARES_MAP.save( + &mut deps.storage, + (round_id, validator_shares.0.to_string()), + &Decimal::from_ratio(round_shares, Uint128::one()), + ); + assert!( + res.is_ok(), + "failed to save validator round power shares before running the migration" + ); + } + } + } + + // Advance the chain into the fifth round and run the migration + env.block.time = env + .block + .time + .plus_nanos(4 * old_constants.round_length + 1); + env.block.height += 400_000; + + let res = migrate(deps.as_mut(), env.clone(), MigrateMsgUnreleased {}); + assert!( + res.is_ok(), + "failed to migrate contract to the newest version" + ); + + for expected_round_total_power in expected_round_total_powers { + let round_total_power = TOTAL_VOTING_POWER_PER_ROUND + .load(&deps.storage, expected_round_total_power.0) + .unwrap() + .u128(); + assert_eq!(round_total_power, expected_round_total_power.1); + } +} + +#[test] +fn test_user_lockups_migration() { + let (mut deps, mut env, old_constants) = setup_current_contract(); + + let user1 = deps.api.addr_make("user0001"); + let user2 = deps.api.addr_make("user0002"); + + // Insert user lockups into the old storage and use this data in later verification + const OLD_LOCKS_MAP: Map<(Addr, u64), LockEntry> = Map::new("locks_map"); + + let users_lockups = vec![ + ( + user1.clone(), + vec![ + LockEntry { + lock_id: 0, + funds: Coin::new(100u128, IBC_DENOM_1), + lock_start: env.block.time, + lock_end: env.block.time.plus_nanos(old_constants.round_length), + }, + LockEntry { + lock_id: 3, + funds: Coin::new(400u128, IBC_DENOM_2), + lock_start: env.block.time, + lock_end: env.block.time.plus_nanos(old_constants.round_length * 2), + }, + ], + ), + ( + user2.clone(), + vec![ + LockEntry { + lock_id: 1, + funds: Coin::new(200u128, IBC_DENOM_2), + lock_start: env.block.time, + lock_end: env.block.time.plus_nanos(old_constants.round_length * 3), + }, + LockEntry { + lock_id: 2, + funds: Coin::new(300u128, IBC_DENOM_3), + lock_start: env.block.time, + lock_end: env.block.time.plus_nanos(old_constants.round_length * 6), + }, + ], + ), + ]; + + for user_lockups in &users_lockups { + for lockup in &user_lockups.1 { + let res = OLD_LOCKS_MAP.save( + &mut deps.storage, + (user_lockups.0.clone(), lockup.lock_id), + lockup, + ); + assert!( + res.is_ok(), + "failed to save user lockup before running the migration" + ); + } + } + + // Advance the chain into the fifth round and run the migration + env.block.time = env + .block + .time + .plus_nanos(4 * old_constants.round_length + 1); + env.block.height += 400_000; + + let res = migrate(deps.as_mut(), env.clone(), MigrateMsgUnreleased {}); + assert!( + res.is_ok(), + "failed to migrate contract to the newest version" + ); + + for user_lockups in &users_lockups { + for expected_lockup in &user_lockups.1 { + let lockup = LOCKS_MAP + .load( + &deps.storage, + (user_lockups.0.clone(), expected_lockup.lock_id), + ) + .unwrap(); + assert_eq!(lockup, *expected_lockup); + + let lockup = LOCKS_MAP + .may_load_at_height( + &deps.storage, + (user_lockups.0.clone(), expected_lockup.lock_id), + env.block.height + 1, + ) + .unwrap() + .unwrap(); + assert_eq!(lockup, *expected_lockup); + } + + let expected_user_lockup_ids: Vec = user_lockups + .1 + .iter() + .map(|lock_entry| lock_entry.lock_id) + .collect(); + + let user_lockup_ids = USER_LOCKS + .load(&deps.storage, user_lockups.0.clone()) + .unwrap(); + assert_eq!(user_lockup_ids, expected_user_lockup_ids); + + let user_lockup_ids = USER_LOCKS + .may_load_at_height(&deps.storage, user_lockups.0.clone(), env.block.height + 1) + .unwrap() + .unwrap(); + assert_eq!(user_lockup_ids, expected_user_lockup_ids); + } +} + +fn setup_current_contract() -> ( + OwnedDeps, + Env, + ConstantsV3_0_0, +) { + let (mut deps, mut env) = (mock_dependencies(no_op_grpc_query_mock()), mock_env()); + + env.block.time = INITIAL_TIMESTAMP; + env.block.height = 19_420_000; + + let user_addr = "addr0000"; + let info = get_message_info(&deps.api, user_addr, &[]); + + // Instantiate the contract + let mut instantiate_msg = get_default_instantiate_msg(&deps.api); + instantiate_msg.first_round_start = INITIAL_TIMESTAMP; + instantiate_msg.round_length = ONE_MONTH_IN_NANO_SECONDS; + + instantiate( + deps.as_mut(), + env.clone(), + info.clone(), + instantiate_msg.clone(), + ) + .unwrap(); + + // Override contract version so that we can run the migration + let res = set_contract_version(&mut deps.storage, CONTRACT_NAME, CONTRACT_VERSION_V3_0_0); + assert!( + res.is_ok(), + "failed to set contract version before running the migration" + ); + + // Override the constants so that they have old data structure stored before running the migration + const OLD_CONSTANTS: Item = Item::new("constants"); + let old_constants = ConstantsV3_0_0 { + round_length: ONE_MONTH_IN_NANO_SECONDS, + lock_epoch_length: ONE_MONTH_IN_NANO_SECONDS, + first_round_start: INITIAL_TIMESTAMP, + max_locked_tokens: 20000000000, + max_validator_shares_participating: 500, + hub_connection_id: "connection-0".to_string(), + hub_transfer_channel_id: "channel-1".to_string(), + icq_update_period: 109000, + paused: false, + max_deployment_duration: 12, + round_lock_power_schedule: get_default_power_schedule(), + }; + + let res = OLD_CONSTANTS.save(&mut deps.storage, &old_constants); + assert!( + res.is_ok(), + "failed to save old constants before running the migration" + ); + + (deps, env, old_constants) +} diff --git a/contracts/hydro/src/migration/unreleased.rs b/contracts/hydro/src/migration/unreleased.rs index 3baae06c..5484abf7 100644 --- a/contracts/hydro/src/migration/unreleased.rs +++ b/contracts/hydro/src/migration/unreleased.rs @@ -3,6 +3,8 @@ use std::collections::HashMap; use cosmwasm_std::{Addr, Decimal, DepsMut, Env, Order, StdResult}; use cw_storage_plus::{Item, Map}; use neutron_sdk::bindings::query::NeutronQuery; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; use crate::{ contract::compute_current_round_id, @@ -16,6 +18,9 @@ use crate::{ }, }; +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] +pub struct MigrateMsgUnreleased {} + pub fn migrate_v3_0_0_to_unreleased( deps: &mut DepsMut, env: Env, @@ -23,7 +28,7 @@ pub fn migrate_v3_0_0_to_unreleased( let constants = migrate_constants(deps)?; let round_id = compute_current_round_id(&env, &constants)?; - populate_total_power_for_rounds(deps, &env, round_id)?; + populate_rounds_total_voting_powers(deps, &env, round_id)?; migrate_user_lockups(deps, &env)?; populate_round_height_mappings(deps, &env, round_id)?; @@ -65,7 +70,7 @@ fn migrate_constants(deps: &mut DepsMut) -> StdResult { // Populate round total power starting from round 0 and all the way to the last round // in which any existing lock gives voting power. -fn populate_total_power_for_rounds( +fn populate_rounds_total_voting_powers( deps: &mut DepsMut, env: &Env, current_round_id: u64, diff --git a/contracts/tribute/Cargo.toml b/contracts/tribute/Cargo.toml index f943ec56..b5511dca 100644 --- a/contracts/tribute/Cargo.toml +++ b/contracts/tribute/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tribute" -version = "3.0.0" +version = "4.0.0" edition = "2018" authors = ["Jehan Tremback", "Philip Offtermatt", "Dusan Maksimovic"] diff --git a/packages/interface/src/hydro.rs b/packages/interface/src/hydro.rs index 8dd85ce7..143f9888 100644 --- a/packages/interface/src/hydro.rs +++ b/packages/interface/src/hydro.rs @@ -1,12 +1,12 @@ use cw_orch::interface; -use hydro::migration::v3_0_0::MigrateMsgV3_0_0; +use hydro::migration::unreleased::MigrateMsgUnreleased; pub use hydro::msg::{ExecuteMsg, InstantiateMsg}; pub use hydro::query::QueryMsg; pub const CONTRACT_ID: &str = "hydro_contract"; -#[interface(InstantiateMsg, ExecuteMsg, QueryMsg, MigrateMsgV3_0_0, id = CONTRACT_ID)] +#[interface(InstantiateMsg, ExecuteMsg, QueryMsg, MigrateMsgUnreleased, id = CONTRACT_ID)] pub struct Hydro; #[cfg(not(target_arch = "wasm32"))] From 105afa858ca28aa1c32608524dcf3852b5edde79 Mon Sep 17 00:00:00 2001 From: Dusan Maksimovic Date: Wed, 29 Jan 2025 15:25:26 +0100 Subject: [PATCH 13/14] added changelogs, recompiled contracts and schemas --- .../220-historical-voting-power-tracking.md | 2 + .../features/220-introduce-compounder-cap.md | 2 + artifacts/checksums.txt | 4 +- artifacts/hydro.wasm | Bin 893253 -> 977255 bytes artifacts/tribute.wasm | Bin 328038 -> 328038 bytes .../hydro/schema/constants_response.json | 6 + contracts/hydro/schema/execute_msg.json | 50 + contracts/hydro/schema/hydro_full_schema.json | 1266 +++++++++-------- .../tribute/schema/tribute_full_schema.json | 164 +-- ts_types/HydroBase.client.ts | 131 +- ts_types/HydroBase.types.ts | 9 +- ts_types/TributeBase.client.ts | 20 +- ts_types/TributeBase.types.ts | 2 +- 13 files changed, 903 insertions(+), 753 deletions(-) create mode 100644 .changelog/unreleased/features/220-historical-voting-power-tracking.md create mode 100644 .changelog/unreleased/features/220-introduce-compounder-cap.md diff --git a/.changelog/unreleased/features/220-historical-voting-power-tracking.md b/.changelog/unreleased/features/220-historical-voting-power-tracking.md new file mode 100644 index 00000000..4d12df42 --- /dev/null +++ b/.changelog/unreleased/features/220-historical-voting-power-tracking.md @@ -0,0 +1,2 @@ +- Introduced SnapshotMaps for tracking the historical voting power for each user as well as the round total voting power. + ([\#220](https://github.com/informalsystems/hydro/pull/220)) diff --git a/.changelog/unreleased/features/220-introduce-compounder-cap.md b/.changelog/unreleased/features/220-introduce-compounder-cap.md new file mode 100644 index 00000000..6479c203 --- /dev/null +++ b/.changelog/unreleased/features/220-introduce-compounder-cap.md @@ -0,0 +1,2 @@ +- Introduced the compounder cap- a reserved portion of the maximum token lock limit that is allocated exclusively for known users from the previous round. + ([\#220](https://github.com/informalsystems/hydro/pull/220)) diff --git a/artifacts/checksums.txt b/artifacts/checksums.txt index 4ea104a9..237c89d2 100644 --- a/artifacts/checksums.txt +++ b/artifacts/checksums.txt @@ -1,2 +1,2 @@ -5f19172adc451140c7d14966faf217b82ed64bd70dfa518a4093d74bf8d60617 hydro.wasm -5acd797d95c0addc2b457deab521c171acad2a514b0a1624f3f07f7775aacc59 tribute.wasm +e2c17ff7bac4ff4ec80e63b8dfa6c0d65f53bad633f9fb80b26121431b97f07e hydro.wasm +83f12ed4aa3b4900588096c639a9abec78080a4c91720442b47cba1b8059e63a tribute.wasm diff --git a/artifacts/hydro.wasm b/artifacts/hydro.wasm index 3c2348ddfa93c803fcb796818d963aed5cc4cafd..dbfb22ccdc271151df894c27a03c79e85bff30cd 100644 GIT binary patch literal 977255 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 z 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 literal 893253 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