From 29db1144e5cb2a94ee75686862155d4cd2a74886 Mon Sep 17 00:00:00 2001 From: vobradovich Date: Tue, 17 Sep 2024 12:51:27 +0200 Subject: [PATCH] fix comments --- Cargo.toml | 1 + gear-programs/vara-tokenizer/Cargo.toml | 2 +- .../vara-tokenizer/app/src/admin_service.rs | 3 --- gear-programs/vara-tokenizer/app/src/lib.rs | 13 ++++++++----- gear-programs/vara-tokenizer/app/src/storage.rs | 2 +- .../vara-tokenizer/app/src/tokenizer_service.rs | 14 ++++++-------- gear-programs/vara-tokenizer/client/Cargo.toml | 2 +- gear-programs/vara-tokenizer/tests/gclient.rs | 15 +++++---------- gear-programs/vara-tokenizer/tests/gtest.rs | 14 ++++++++------ 9 files changed, 31 insertions(+), 35 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 2403d6d8..a95e66c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -92,6 +92,7 @@ lazy_static = "1.4.0" libc = "0.2.153" log = "0.4.14" memory-db = { version = "0.27.0", default-features = false } +mockall = { version = "0.12" } num = { version = "0.4", features = ["rand"] } paste = "1.0.14" pretty_env_logger = "0.5.0" diff --git a/gear-programs/vara-tokenizer/Cargo.toml b/gear-programs/vara-tokenizer/Cargo.toml index 0521a44b..0950e19b 100644 --- a/gear-programs/vara-tokenizer/Cargo.toml +++ b/gear-programs/vara-tokenizer/Cargo.toml @@ -16,7 +16,7 @@ sails-idl-gen.workspace = true vara-tokenizer = { path = ".", features = ["wasm-binary"] } vara-tokenizer-client = { path = "client" } sails-rs = { workspace = true, features = ["gtest", "gclient"] } -tokio = { version = "1.39", features = ["rt", "macros"] } +tokio = { workspace = true, features = ["rt", "macros"] } gclient.workspace = true gtest.workspace = true vft-client = { path = "../vft-client" } diff --git a/gear-programs/vara-tokenizer/app/src/admin_service.rs b/gear-programs/vara-tokenizer/app/src/admin_service.rs index 76c83eea..8f64eb4c 100644 --- a/gear-programs/vara-tokenizer/app/src/admin_service.rs +++ b/gear-programs/vara-tokenizer/app/src/admin_service.rs @@ -35,9 +35,6 @@ impl AdminService { pub fn revoke_admin_role(&mut self, from: ActorId) { ensure_is_admin(); - if storage().admins.len() == 1 { - panic!("Can't revoke last admin role") - } storage_mut().admins.remove(&from); } } diff --git a/gear-programs/vara-tokenizer/app/src/lib.rs b/gear-programs/vara-tokenizer/app/src/lib.rs index 51ad1ca9..12c16e86 100644 --- a/gear-programs/vara-tokenizer/app/src/lib.rs +++ b/gear-programs/vara-tokenizer/app/src/lib.rs @@ -8,7 +8,7 @@ mod tokenizer_service; mod vft_funcs; use admin_service::{AdminConfig, AdminService}; -use sails_rs::{gstd::msg, prelude::*}; +use sails_rs::{collections::HashSet, gstd::msg, prelude::*}; use tokenizer_service::TokenizerService; pub struct VaraTokenizerProgram(()); @@ -16,11 +16,14 @@ pub struct VaraTokenizerProgram(()); #[sails_rs::program] impl VaraTokenizerProgram { // Program's constructor - pub fn new(name: String, symbol: String, decimals: u8) -> Self { + pub fn new(name: String, symbol: String, decimals: u8, set_admin: bool) -> Self { vft_service::Service::seed(name, symbol, decimals); - admin_service::init(AdminConfig { - admins: [msg::source()].into(), - }); + let admins: HashSet = if set_admin { + [msg::source()].into() + } else { + [].into() + }; + admin_service::init(AdminConfig { admins }); Self(()) } diff --git a/gear-programs/vara-tokenizer/app/src/storage.rs b/gear-programs/vara-tokenizer/app/src/storage.rs index 4f558540..4bc74e28 100644 --- a/gear-programs/vara-tokenizer/app/src/storage.rs +++ b/gear-programs/vara-tokenizer/app/src/storage.rs @@ -1,4 +1,4 @@ -// macros +/// create static storage from given struct with `storage_mut` and `storage` accessors macro_rules! static_storage { ($type:ty) => { static mut STORAGE: Option<$type> = None; diff --git a/gear-programs/vara-tokenizer/app/src/tokenizer_service.rs b/gear-programs/vara-tokenizer/app/src/tokenizer_service.rs index 2b44b3c9..87a8c12e 100644 --- a/gear-programs/vara-tokenizer/app/src/tokenizer_service.rs +++ b/gear-programs/vara-tokenizer/app/src/tokenizer_service.rs @@ -38,12 +38,11 @@ impl TokenizerService { let to = msg::source(); if let Err(err) = vft_funcs::mint(to, value.into()) { // TODO reply with value `program::send_reply_with_value` when `sails` allows it - msg::send_bytes_with_gas(to, vec![], 0, value) - .expect("Failed to send message with value"); + msg::send_bytes_with_gas(to, vec![], 0, value).expect("Failed to send value to user"); Err(err) } else { - // drop send event result - _ = self.notify_on(TokenizerEvent::Minted { to, value }); + self.notify_on(TokenizerEvent::Minted { to, value }) + .expect("Failed to send `Minted` event"); Ok(value) } } @@ -56,12 +55,11 @@ impl TokenizerService { let from = msg::source(); vft_funcs::burn(from, value.into())?; - // drop send event result - _ = self.notify_on(TokenizerEvent::Burned { from, value }); + self.notify_on(TokenizerEvent::Burned { from, value }) + .expect("Failed to send `Burned` event"); // TODO reply with value `program::send_reply_with_value` when `sails` allows it - msg::send_bytes_with_gas(from, vec![], 0, value) - .expect("Failed to send message with value"); + msg::send_bytes_with_gas(from, vec![], 0, value).expect("Failed to send value to user"); Ok(value) } } diff --git a/gear-programs/vara-tokenizer/client/Cargo.toml b/gear-programs/vara-tokenizer/client/Cargo.toml index c8411fea..d3a4061c 100644 --- a/gear-programs/vara-tokenizer/client/Cargo.toml +++ b/gear-programs/vara-tokenizer/client/Cargo.toml @@ -4,7 +4,7 @@ version.workspace = true edition.workspace = true [dependencies] -mockall = { version = "0.12", optional = true } +mockall = { workspace = true, optional = true } sails-rs.workspace = true [build-dependencies] diff --git a/gear-programs/vara-tokenizer/tests/gclient.rs b/gear-programs/vara-tokenizer/tests/gclient.rs index 9e7b2344..0a798eae 100644 --- a/gear-programs/vara-tokenizer/tests/gclient.rs +++ b/gear-programs/vara-tokenizer/tests/gclient.rs @@ -18,13 +18,12 @@ async fn init_remoting() -> (GearApi, GClientRemoting, CodeId) { #[ignore = "requires run gear node on GEAR_PATH"] async fn factory_works() { // arrange - let (api, remoting, program_code_id) = init_remoting().await; - let _admin_id = - ActorId::try_from(api.account_id().encode().as_ref()).expect("failed to create actor id"); + let (_api, remoting, program_code_id) = init_remoting().await; + // act let program_factory = vara_tokenizer_client::VaraTokenizerFactory::new(remoting.clone()); let program_id = program_factory - .new("Name".into(), "Symbol".into(), 10u8) + .new("Name".into(), "Symbol".into(), 10u8, true) .send_recv(program_code_id, b"salt") .await .unwrap(); @@ -51,7 +50,7 @@ async fn mint_from_value_works() { let program_factory = vara_tokenizer_client::VaraTokenizerFactory::new(remoting.clone()); let program_id = program_factory - .new("Name".into(), "Symbol".into(), 10u8) + .new("Name".into(), "Symbol".into(), 10u8, true) .send_recv(program_code_id, b"salt") .await .unwrap(); @@ -103,15 +102,11 @@ async fn burn_and_return_value_works() { let program_factory = vara_tokenizer_client::VaraTokenizerFactory::new(remoting.clone()); let program_id = program_factory - .new("Name".into(), "Symbol".into(), 10u8) + .new("Name".into(), "Symbol".into(), 10u8, true) .send_recv(program_code_id, b"salt") .await .unwrap(); - let _initial_balance = api - .free_balance(admin_id) - .await - .expect("Failed to get free balance"); let program_initial_balance = api .free_balance(program_id) .await diff --git a/gear-programs/vara-tokenizer/tests/gtest.rs b/gear-programs/vara-tokenizer/tests/gtest.rs index af8eab36..e4ab3aa2 100644 --- a/gear-programs/vara-tokenizer/tests/gtest.rs +++ b/gear-programs/vara-tokenizer/tests/gtest.rs @@ -20,7 +20,7 @@ async fn factory_works() { let program_factory = vara_tokenizer_client::VaraTokenizerFactory::new(remoting.clone()); let program_id = program_factory - .new("Name".into(), "Symbol".into(), 10u8) + .new("Name".into(), "Symbol".into(), 10u8, true) .send_recv(program_code_id, b"salt") .await .unwrap(); @@ -44,7 +44,7 @@ async fn mint_from_value_works() { let program_factory = vara_tokenizer_client::VaraTokenizerFactory::new(remoting.clone()); let program_id = program_factory - .new("Name".into(), "Symbol".into(), 10u8) + .new("Name".into(), "Symbol".into(), 10u8, true) .send_recv(program_code_id, b"salt") .await .unwrap(); @@ -64,7 +64,8 @@ async fn mint_from_value_works() { let balance = remoting.system().balance_of(ADMIN_ID); let program_balance = remoting.system().balance_of(program_id); - // TODO update test after next `gtest` release + // TODO update test after next `gtest` release, fixing gas issues + // see https://github.com/gear-tech/gear/pull/4200 and other `gtest` related PRs assert_eq!(balance, initial_balance - mint_value); assert_eq!(program_balance, mint_value); } @@ -76,7 +77,7 @@ async fn burn_and_return_value_works() { let program_factory = vara_tokenizer_client::VaraTokenizerFactory::new(remoting.clone()); let program_id = program_factory - .new("Name".into(), "Symbol".into(), 10u8) + .new("Name".into(), "Symbol".into(), 10u8, true) .send_recv(program_code_id, b"salt") .await .unwrap(); @@ -121,7 +122,8 @@ async fn burn_and_return_value_works() { let balance = remoting.system().balance_of(ADMIN_ID); let program_balance = remoting.system().balance_of(program_id); - // TODO update test after next `gtest` release + // TODO update test after next `gtest` release, fixing gas issues + // see https://github.com/gear-tech/gear/pull/4200 and other `gtest` related PRs dbg!(balance, program_balance, client_balance); assert!(client_balance.is_zero()); // assert_eq!(balance, initial_balance); @@ -135,7 +137,7 @@ async fn admin_service_works() { let program_factory = vara_tokenizer_client::VaraTokenizerFactory::new(remoting.clone()); let program_id = program_factory - .new("Name".into(), "Symbol".into(), 10u8) + .new("Name".into(), "Symbol".into(), 10u8, true) .send_recv(program_code_id, b"salt") .await .unwrap();