Skip to content
This repository was archived by the owner on Nov 15, 2024. It is now read-only.

Commit 3b0b795

Browse files
politeWallcosmic-vagabondamityadav0
authored
perf: ⚡️ Use an actual queue instead of loading the vector in up (#346)
* perf: ⚡️ Use an actual queue instead of loading the vector in up * Update contracts/account-history-contract/src/action/sudo/update_account.rs Co-authored-by: Amit Yadav <amy29981@gmail.com> * feat: 🎸 not reseting the flag for each migration --------- Co-authored-by: Cosmic Vagabond <121588426+cosmic-vagabond@users.noreply.github.com> Co-authored-by: Amit Yadav <amy29981@gmail.com>
1 parent 2c8fcfa commit 3b0b795

File tree

11 files changed

+26
-70
lines changed

11 files changed

+26
-70
lines changed

Cargo.lock

Lines changed: 5 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

contracts/account-history-contract/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ cosmwasm-std = { version = "1.1.4", features = [
1616
"staking",
1717
], default-features = false }
1818
serde = { version = "1.0.103", default-features = false, features = ["derive"] }
19-
cw-storage-plus = { version = "0.15.1", default-features = false, features = [
19+
cw-storage-plus = { version = "1.2.0", default-features = false, features = [
2020
"iterator",
2121
] }
2222
thiserror = { version = "1", default-features = false }
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
use crate::states::USER_ADDRESS_QUEUE;
2-
use cosmwasm_std::{StdResult, Storage};
2+
use cosmwasm_std::{DepsMut, StdResult};
3+
use elys_bindings::ElysQuery;
34

4-
pub fn add_user_address_to_queue(storage: &mut dyn Storage, user_address: String) -> StdResult<()> {
5-
let empty = ();
5+
pub fn add_user_address_to_queue(deps: DepsMut<ElysQuery>, user_address: String) -> StdResult<()> {
6+
USER_ADDRESS_QUEUE.push_front(deps.storage, &user_address)?;
67

7-
if USER_ADDRESS_QUEUE.has(storage, user_address.as_str()) == false {
8-
USER_ADDRESS_QUEUE.save(storage, user_address.as_str(), &empty)?;
9-
}
108
Ok(())
119
}

contracts/account-history-contract/src/action/sudo/update_account.rs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,9 @@ pub fn update_account(deps: DepsMut<ElysQuery>, env: Env) -> StdResult<Response<
2020
METADATA.save(deps.storage, &metadata)?;
2121

2222
let today = get_today(&env.block);
23-
let mut user_address_queue: Vec<String> = USER_ADDRESS_QUEUE
24-
.prefix_range(deps.storage, None, None, cosmwasm_std::Order::Descending)
25-
.filter_map(|res| res.ok().map(|(addr, _)| addr))
26-
.collect();
2723

2824
let processed_account_per_block: usize =
2925
PROCESSED_ACCOUNT_PER_BLOCK.load(deps.storage)? as usize;
30-
let processed_account_per_block = if processed_account_per_block > user_address_queue.len() {
31-
user_address_queue.len()
32-
} else {
33-
processed_account_per_block
34-
};
3526

3627
let mut today_snapshots = match HISTORY.may_load(deps.storage, &today)? {
3728
Some(snapshots) => snapshots,
@@ -41,14 +32,16 @@ pub fn update_account(deps: DepsMut<ElysQuery>, env: Env) -> StdResult<Response<
4132
let generator = AccountSnapshotGenerator::new(&deps.as_ref())?;
4233

4334
for _ in 0..processed_account_per_block {
44-
if user_address_queue.is_empty() == true {
35+
if USER_ADDRESS_QUEUE.is_empty(deps.storage)? == true {
4536
break;
4637
}
4738

4839
// remove the first element from the queue
49-
let user_address = user_address_queue.remove(0);
50-
// remove the user address from the queue
51-
USER_ADDRESS_QUEUE.remove(deps.storage, &user_address);
40+
let user_address = if let Some(addr) = USER_ADDRESS_QUEUE.pop_back(deps.storage)? {
41+
addr.to_string()
42+
} else {
43+
break;
44+
};
5245

5346
if today_snapshots.get(&user_address).is_some() {
5447
// skip if the account has been updated today

contracts/account-history-contract/src/entry_point/execute.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub fn execute(
2424
if trade_shield_address.as_str() != info.sender.as_str() {
2525
return Err(StdError::generic_err("Unauthorized"));
2626
}
27-
add_user_address_to_queue(deps.storage, user_address)?;
27+
add_user_address_to_queue(deps, user_address)?;
2828
Ok(Response::new())
2929
}
3030
ExecuteMsg::ChangeParams {

contracts/account-history-contract/src/entry_point/migrate.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ use elys_bindings::account_history::msg::MigrationMsg;
55
// use elys_bindings::account_history::types::Metadata;
66
use elys_bindings::{ElysMsg, /*ElysQuerier,*/ ElysQuery};
77

8-
use crate::states::{
9-
EXPIRATION, PARAMS_ADMIN, PROCESSED_ACCOUNT_PER_BLOCK, TRADE_SHIELD_ADDRESS,
10-
UPDATE_ACCOUNT_ENABLED,
11-
};
8+
use crate::states::{EXPIRATION, PARAMS_ADMIN, PROCESSED_ACCOUNT_PER_BLOCK, TRADE_SHIELD_ADDRESS};
129

1310
use super::instantiate::{CONTRACT_NAME, CONTRACT_VERSION};
1411

@@ -37,8 +34,6 @@ pub fn migrate(
3734

3835
PROCESSED_ACCOUNT_PER_BLOCK.save(deps.storage, &limit)?;
3936

40-
UPDATE_ACCOUNT_ENABLED.save(deps.storage, &true)?;
41-
4237
// METADATA
4338
// let querier = ElysQuerier::new(&deps.querier);
4439

contracts/account-history-contract/src/entry_point/query.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::action::query::{
1616
pool_asset_estimation, user_snapshots, user_value,
1717
};
1818

19-
use cosmwasm_std::{entry_point, to_json_binary, Binary, Deps, Env, StdResult, Uint128};
19+
use cosmwasm_std::{entry_point, to_json_binary, Binary, Deps, Env, StdResult};
2020
use elys_bindings::{
2121
account_history::types::ElysDenom, query_resp::QueryAprResponse, ElysQuerier, ElysQuery,
2222
};
@@ -253,13 +253,9 @@ pub fn query(deps: Deps<ElysQuery>, env: Env, msg: QueryMsg) -> StdResult<Binary
253253
to_json_binary(&response)
254254
}
255255
AddressQueueSize {} => {
256-
let user_address_queue: Vec<String> = USER_ADDRESS_QUEUE
257-
.prefix_range(deps.storage, None, None, cosmwasm_std::Order::Descending)
258-
.filter_map(|res| res.ok().map(|(addr, _)| addr))
259-
.collect();
260-
let size = Uint128::new(user_address_queue.len() as u128);
256+
let user_address_queue_data_size = USER_ADDRESS_QUEUE.len(deps.storage)? as u128;
261257

262-
to_json_binary(&size)
258+
to_json_binary(&user_address_queue_data_size)
263259
}
264260
}
265261
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
use cw_storage_plus::Map;
1+
use cw_storage_plus::Deque;
22

3-
pub const USER_ADDRESS_QUEUE: Map<&str, ()> = Map::new("user address queue");
3+
pub const USER_ADDRESS_QUEUE: Deque<String> = Deque::new("user address queue 1");

contracts/financial-snapshot-contract/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ crate-type = ["cdylib", "rlib"]
1111
[dependencies]
1212
cosmwasm-std = { version = "1.1.4", features = ["staking"] }
1313
serde = { version = "1.0.103", default-features = false, features = ["derive"] }
14-
cw-storage-plus = "0.15.1"
14+
cw-storage-plus = "1.2.0"
1515
thiserror = "1"
1616
schemars = "0.8.1"
1717
cosmwasm-schema = "1.1.4"

contracts/trade-shield-contract/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ crate-type = ["cdylib", "rlib"]
99
[dependencies]
1010
cosmwasm-std = { version = "1.1.4", features = ["staking"] }
1111
serde = { version = "1.0.103", default-features = false, features = ["derive"] }
12-
cw-storage-plus = "0.15.1"
12+
cw-storage-plus = "1.2.0"
1313
thiserror = "1"
1414
schemars = "0.8.1"
1515
cosmwasm-schema = "1.1.4"

0 commit comments

Comments
 (0)