diff --git a/Cargo.lock b/Cargo.lock index 57f9e3f1..068426a9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5525,7 +5525,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sweat-jar-model" -version = "3.4.0" +version = "3.4.1" dependencies = [ "fake", "near-sdk 5.5.0", @@ -5549,7 +5549,7 @@ dependencies = [ [[package]] name = "sweat_jar" -version = "3.4.0" +version = "3.4.1" dependencies = [ "anyhow", "base64 0.22.1", diff --git a/contract/Cargo.toml b/contract/Cargo.toml index 382e667b..a48a5b33 100644 --- a/contract/Cargo.toml +++ b/contract/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sweat_jar" -version = "3.4.0" +version = "3.4.1" authors = ["Sweat Economy"] edition = "2021" diff --git a/contract/src/event.rs b/contract/src/event.rs index 2e759c93..37ebeccb 100644 --- a/contract/src/event.rs +++ b/contract/src/event.rs @@ -187,7 +187,7 @@ mod test { fn test_contract_version() { let admin = admin(); let context = Context::new(admin); - assert_eq!(context.contract().contract_version(), "sweat_jar-3.4.0"); + assert_eq!(context.contract().contract_version(), "sweat_jar-3.4.1"); } #[test] @@ -200,7 +200,7 @@ mod test { .to_json_event_string(), r#"EVENT_JSON:{ "standard": "sweat_jar", - "version": "3.4.0", + "version": "3.4.1", "event": "top_up", "data": { "id": 10, @@ -228,7 +228,7 @@ mod test { .to_json_event_string(), r#"EVENT_JSON:{ "standard": "sweat_jar", - "version": "3.4.0", + "version": "3.4.1", "event": "create_jar", "data": { "id": 555, @@ -248,7 +248,7 @@ mod test { SweatJarEvent::from(EventKind::Claim(vec![(1, 1.into()), (2, 2.into())])).to_json_event_string(), r#"EVENT_JSON:{ "standard": "sweat_jar", - "version": "3.4.0", + "version": "3.4.1", "event": "claim", "data": [ [ @@ -277,7 +277,7 @@ mod test { .to_json_event_string(), r#"EVENT_JSON:{ "standard": "sweat_jar", - "version": "3.4.0", + "version": "3.4.1", "event": "record_score", "data": [ { @@ -306,7 +306,7 @@ mod test { SweatJarEvent::from(EventKind::OldScoreWarning((111, Local(5)))).to_json_event_string(), r#"EVENT_JSON:{ "standard": "sweat_jar", - "version": "3.4.0", + "version": "3.4.1", "event": "old_score_warning", "data": [ 111, diff --git a/contract/src/internal.rs b/contract/src/internal.rs index 645b3ad8..e1b79e3d 100644 --- a/contract/src/internal.rs +++ b/contract/src/internal.rs @@ -65,7 +65,6 @@ impl Contract { } pub(crate) fn add_new_jar(&mut self, account_id: &AccountId, jar: Jar) { - self.migrate_account_if_needed(account_id); let jars = self.accounts.entry(account_id.clone()).or_default(); jars.last_id = jar.id; jars.push(jar); diff --git a/contract/src/jar/api.rs b/contract/src/jar/api.rs index 50db2149..41eefe6f 100644 --- a/contract/src/jar/api.rs +++ b/contract/src/jar/api.rs @@ -24,6 +24,8 @@ impl Contract { let jar_id = jar_id.0; let account_id = env::predecessor_account_id(); + self.migrate_account_if_needed(&account_id); + let restaked_jar_id = self.increment_and_get_last_jar_id(); let jar = self.get_jar_internal(&account_id, jar_id); diff --git a/contract/src/jar/model/common.rs b/contract/src/jar/model/common.rs index 9f60b597..97f0908c 100644 --- a/contract/src/jar/model/common.rs +++ b/contract/src/jar/model/common.rs @@ -226,6 +226,11 @@ impl Contract { let product_id = &ticket.product_id; let product = self.get_product(product_id); + product.assert_enabled(); + product.assert_cap(amount); + + self.migrate_account_if_needed(&account_id); + if product.is_score_product() { match (ticket.timezone, self.get_score_mut(&account_id)) { // Time zone already set. No actions required. @@ -241,8 +246,6 @@ impl Contract { } } - product.assert_enabled(); - product.assert_cap(amount); self.verify(&account_id, amount, &ticket, signature); let id = self.increment_and_get_last_jar_id(); diff --git a/contract/src/score/tests.rs b/contract/src/score/tests.rs index b7bfff45..3f644a7b 100644 --- a/contract/src/score/tests.rs +++ b/contract/src/score/tests.rs @@ -1,8 +1,10 @@ #![cfg(test)] use fake::Fake; +use near_contract_standards::fungible_token::receiver::FungibleTokenReceiver; use near_sdk::{ json_types::{I64, U128}, + serde_json::json, store::LookupMap, test_utils::test_env::{alice, bob}, NearToken, Timestamp, @@ -19,6 +21,7 @@ use crate::{ test_data::{set_test_future_success, set_test_log_events}, tests::Context, }, + jar::model::AccountJarsLegacy, test_builder::{JarField, ProductField::*, TestAccess, TestBuilder}, test_utils::{admin, expect_panic, UnwrapPromise, PRODUCT, SCORE_PRODUCT}, StorageKey, @@ -460,3 +463,40 @@ fn claim_when_there_were_no_walkchains_for_some_time() { assert_eq!(ctx.contract().get_total_interest(alice()).amount.total.0, 0); } + +#[test] +fn test_steps_and_migration() { + set_test_log_events(false); + + let mut ctx = TestBuilder::new() + .product(SCORE_PRODUCT, [APY(0), TermDays(10), ScoreCap(20_000)]) + .build(); + + ctx.contract().account_jars_v1.insert( + alice(), + AccountJarsLegacy { + last_id: 0, + jars: vec![], + }, + ); + + ctx.switch_account_to_ft_contract_account(); + ctx.contract().ft_on_transfer( + alice(), + 10_000.into(), + json!({ + "type": "stake", + "data": { + "ticket": { + "product_id": SCORE_PRODUCT, + "valid_until": "0", + "timezone": 0, + } + } + }) + .to_string() + .into(), + ); + + ctx.record_score(UTC(0), 25000, alice()); +} diff --git a/model/Cargo.toml b/model/Cargo.toml index 43cef567..c6d3d7d7 100644 --- a/model/Cargo.toml +++ b/model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sweat-jar-model" -version = "3.4.0" +version = "3.4.1" publish = false edition = "2021" diff --git a/res/sweat_jar.wasm b/res/sweat_jar.wasm index 8141db6b..e849c787 100755 Binary files a/res/sweat_jar.wasm and b/res/sweat_jar.wasm differ