From ba7a095f5b6eca1443079773a55732099a94f931 Mon Sep 17 00:00:00 2001 From: Nimish Agrawal Date: Mon, 15 Jul 2024 18:58:23 +0530 Subject: [PATCH 01/14] feat: add renew feature --- src/azns_registry/lib.rs | 118 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/src/azns_registry/lib.rs b/src/azns_registry/lib.rs index f583acc..c4c1b0d 100644 --- a/src/azns_registry/lib.rs +++ b/src/azns_registry/lib.rs @@ -56,6 +56,15 @@ mod azns_registry { expiration_timestamp: u64, } + /// Emitted whenever a name is renewed. + #[ink(event)] + pub struct Renew { + #[ink(topic)] + name: String, + old_expiry: u64, + new_expiry: u64, + } + #[ink(event)] pub struct FeeReceived { #[ink(topic)] @@ -411,6 +420,48 @@ mod azns_registry { Ok(()) } + #[ink(message, payable)] + pub fn renew(&mut self, name: String, years_to_renew: u8) -> Result<()> { + if self.has_name_expired(&name) != Ok(false) { + return Err(Error::NameDoesntExist); + } + + let (registration, old_expiry) = self.get_registration_period_ref(&name)?; + + let (base_price, premium) = match &self.fee_calculator { + None => (1000, 0), // For unit testing only + Some(model) => model + .get_name_price(name.clone(), years_to_renew) + .map_err(Error::FeeError)?, + }; + let price = base_price + premium; + + let transferred = self.env().transferred_value(); + if transferred < price { + return Err(Error::FeeNotPaid); + } else if transferred > price { + let caller = self.env().caller(); + let change = transferred - price; + + if self.env().transfer(caller, change).is_err() { + return Err(Error::WithdrawFailed); + } + } + + let new_expiry = old_expiry + YEAR * years_to_renew as u64; + self.name_to_period + .insert(&name, &(registration, new_expiry)); + + // Emit event + self.env().emit_event(Renew { + name, + old_expiry, + new_expiry, + }); + + Ok(()) + } + /// Allows users to claim their reserved name at zero cost #[ink(message)] pub fn claim_reserved_name( @@ -2028,6 +2079,73 @@ mod tests { ); } + #[ink::test] + fn renew_works() { + let default_accounts = default_accounts(); + let name = String::from("test"); + + set_next_caller(default_accounts.alice); + let mut contract = get_test_name_service(); + + // Try renewing a non-existant name + assert_eq!(contract.renew(name.clone(), 2), Err(Error::NameDoesntExist)); + + let origin_time = GRACE_TIMESTAMP; + set_block_timestamp::(origin_time); + + // Register a name + set_value_transferred::(1000); + assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + + // Get current expiry + assert_eq!( + contract.get_registration_period(name.clone()), + Ok((origin_time, origin_time + 60)) + ); + + // Renew the name + assert_eq!(contract.renew(name.clone(), 2), Ok(())); + + // Get new expiry + assert_eq!( + contract.get_registration_period(name.clone()), + Ok((origin_time, origin_time + 180)) + ); + } + + #[ink::test] + fn renew_excess_fee_works() { + let default_accounts = default_accounts(); + let name = String::from("test"); + + set_next_caller(default_accounts.alice); + let mut contract = get_test_name_service(); + let contract_addr = contract.env().account_id(); + + set_account_balance::(default_accounts.alice, 3000); + + transfer_in::(1000); + assert_eq!(contract.register(name.clone(), 1, None, true), Ok(())); + assert_eq!( + get_account_balance::(default_accounts.alice), + Ok(2000) + ); + + // Transfer extra fee + transfer_in::(1234); + assert_eq!(contract.renew(name.clone(), 1), Ok(())); + + assert_eq!( + get_account_balance::(default_accounts.alice), + Ok(1000) + ); + + assert_eq!( + get_account_balance::(contract_addr), + Ok(2000) + ); + } + #[ink::test] fn withdraw_works() { let default_accounts = default_accounts(); From 01af1f7ca3ae5182b2dbfc1eec97bec5557f0336 Mon Sep 17 00:00:00 2001 From: Nimish Agrawal Date: Thu, 18 Jul 2024 11:18:53 +0530 Subject: [PATCH 02/14] feat: implement bonus-name giveaway on 10+ years registration/renewal --- src/azns_registry/lib.rs | 309 +++++++++++++++++++++++++++++++-------- 1 file changed, 245 insertions(+), 64 deletions(-) diff --git a/src/azns_registry/lib.rs b/src/azns_registry/lib.rs index c4c1b0d..73142da 100644 --- a/src/azns_registry/lib.rs +++ b/src/azns_registry/lib.rs @@ -348,6 +348,7 @@ mod azns_registry { recipient: AccountId, years_to_register: u8, referrer: Option, + bonus_name: Option, ) -> Result<()> { if !self.is_name_allowed(&name) { return Err(Error::NameNotAllowed); @@ -394,7 +395,7 @@ mod azns_registry { forwarded_referrer_fee: discount, }); - Ok(()) + self.redeem_bonus_name(bonus_name, years_to_register, recipient) } /// Register specific name with caller as owner. @@ -406,6 +407,7 @@ mod azns_registry { name: String, years_to_register: u8, referrer: Option, + bonus_name: Option, set_as_primary_name: bool, ) -> Result<()> { self.register_on_behalf_of( @@ -413,6 +415,7 @@ mod azns_registry { self.env().caller(), years_to_register, referrer, + bonus_name, )?; if set_as_primary_name { self.set_primary_name(Some(name))?; @@ -421,7 +424,12 @@ mod azns_registry { } #[ink(message, payable)] - pub fn renew(&mut self, name: String, years_to_renew: u8) -> Result<()> { + pub fn renew( + &mut self, + name: String, + years_to_renew: u8, + bonus_name: Option, + ) -> Result<()> { if self.has_name_expired(&name) != Ok(false) { return Err(Error::NameDoesntExist); } @@ -454,12 +462,13 @@ mod azns_registry { // Emit event self.env().emit_event(Renew { - name, + name: name.clone(), old_expiry, new_expiry, }); - Ok(()) + let owner = self.get_owner(name)?; + self.redeem_bonus_name(bonus_name, years_to_renew, owner) } /// Allows users to claim their reserved name at zero cost @@ -1518,6 +1527,20 @@ mod azns_registry { Ok(()) } + + fn redeem_bonus_name( + &mut self, + name: Option, + period_extended: u8, + owner: AccountId, + ) -> Result<()> { + if period_extended < 10 || name.is_none() { + return Ok(()); + } + + let expiry_time = self.env().block_timestamp() + YEAR; + self.register_name(&name.unwrap(), &owner, expiry_time) + } } impl PSP34 for Registry { @@ -1811,13 +1834,22 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); set_value_transferred::(1000); - assert_eq!(contract.register(name2.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name2.clone(), 1, None, None, false), + Ok(()) + ); set_value_transferred::(1000); - assert_eq!(contract.register(name3.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name3.clone(), 1, None, None, false), + Ok(()) + ); /* Now alice owns three names */ /* getting all owned names should return all three */ @@ -1838,15 +1870,24 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); set_value_transferred::(1000); - assert_eq!(contract.register(name2.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name2.clone(), 1, None, None, false), + Ok(()) + ); /* Register bar under bob, but set controller to alice */ set_next_caller(default_accounts.bob); set_value_transferred::(1000); - assert_eq!(contract.register(name3.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name3.clone(), 1, None, None, false), + Ok(()) + ); assert_eq!( contract.set_controller(name3.clone(), default_accounts.alice), Ok(()) @@ -1871,11 +1912,17 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); set_next_caller(default_accounts.charlie); set_value_transferred::(1000); - assert_eq!(contract.register(name2.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name2.clone(), 1, None, None, false), + Ok(()) + ); /* getting all names should return first only */ assert_eq!( @@ -1886,7 +1933,10 @@ mod tests { /* Register bar under bob, but set resolved address to alice */ set_next_caller(default_accounts.bob); set_value_transferred::(1000); - assert_eq!(contract.register(name3.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name3.clone(), 1, None, None, false), + Ok(()) + ); assert_eq!( contract.set_address(name3.clone(), default_accounts.alice), Ok(()) @@ -1922,10 +1972,16 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); set_value_transferred::(1000); - assert_eq!(contract.register(name2.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name2.clone(), 1, None, None, false), + Ok(()) + ); /* getting all names should return first two */ assert_eq!( @@ -1936,7 +1992,10 @@ mod tests { /* Register bar under bob, but set resolved address to alice */ set_next_caller(default_accounts.bob); set_value_transferred::(1000); - assert_eq!(contract.register(name3.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name3.clone(), 1, None, None, false), + Ok(()) + ); assert_eq!( contract.set_address(name3.clone(), default_accounts.alice), Ok(()) @@ -1970,13 +2029,16 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); set_value_transferred::(1000); - assert_eq!(contract.register(name2, 1, None, false), Ok(())); + assert_eq!(contract.register(name2, 1, None, None, false), Ok(())); set_value_transferred::(1000); - assert_eq!(contract.register(name3, 1, None, false), Ok(())); + assert_eq!(contract.register(name3, 1, None, None, false), Ok(())); /* Now alice owns three names */ /* Set the primary name for alice's address to name 1 */ @@ -2016,7 +2078,10 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); set_value_transferred::(1000); assert_eq!( contract.get_owned_names_of_address(default_accounts.alice), @@ -2024,7 +2089,7 @@ mod tests { ); set_value_transferred::(1000); assert_eq!( - contract.register(name, 1, None, false), + contract.register(name, 1, None, None, false), Err(Error::NameAlreadyExists) ); @@ -2036,7 +2101,7 @@ mod tests { .expect("Failed to reserve name"); assert_eq!( - contract.register(reserved_name, 1, None, false), + contract.register(reserved_name, 1, None, None, false), Err(Error::CannotBuyReservedName) ); } @@ -2050,7 +2115,7 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, true), Ok(())); + assert_eq!(contract.register(name.clone(), 1, None, None, true), Ok(())); assert_eq!(contract.get_primary_name(default_accounts.alice), Ok(name)); } @@ -2066,7 +2131,7 @@ mod tests { set_account_balance::(default_accounts.alice, 2000); transfer_in::(1234); - assert_eq!(contract.register(name.clone(), 1, None, true), Ok(())); + assert_eq!(contract.register(name.clone(), 1, None, None, true), Ok(())); assert_eq!( get_account_balance::(default_accounts.alice), @@ -2088,14 +2153,20 @@ mod tests { let mut contract = get_test_name_service(); // Try renewing a non-existant name - assert_eq!(contract.renew(name.clone(), 2), Err(Error::NameDoesntExist)); + assert_eq!( + contract.renew(name.clone(), 2, None), + Err(Error::NameDoesntExist) + ); let origin_time = GRACE_TIMESTAMP; set_block_timestamp::(origin_time); // Register a name set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); // Get current expiry assert_eq!( @@ -2104,7 +2175,7 @@ mod tests { ); // Renew the name - assert_eq!(contract.renew(name.clone(), 2), Ok(())); + assert_eq!(contract.renew(name.clone(), 2, None), Ok(())); // Get new expiry assert_eq!( @@ -2125,7 +2196,7 @@ mod tests { set_account_balance::(default_accounts.alice, 3000); transfer_in::(1000); - assert_eq!(contract.register(name.clone(), 1, None, true), Ok(())); + assert_eq!(contract.register(name.clone(), 1, None, None, true), Ok(())); assert_eq!( get_account_balance::(default_accounts.alice), Ok(2000) @@ -2133,7 +2204,7 @@ mod tests { // Transfer extra fee transfer_in::(1234); - assert_eq!(contract.renew(name.clone(), 1), Ok(())); + assert_eq!(contract.renew(name.clone(), 1, None), Ok(())); assert_eq!( get_account_balance::(default_accounts.alice), @@ -2160,7 +2231,7 @@ mod tests { set_next_caller(default_accounts.bob); set_account_balance::(default_accounts.bob, fees); transfer_in::(fees); - assert_eq!(contract.register(name, 1, None, false), Ok(())); + assert_eq!(contract.register(name, 1, None, None, false), Ok(())); // Alice (admin) withdraws the funds set_next_caller(default_accounts.alice); @@ -2185,7 +2256,7 @@ mod tests { let _acc_balance_before_transfer: Balance = get_account_balance::(default_accounts.alice).unwrap(); set_value_transferred::(1000); - assert_eq!(contract.register(name, 1, None, false), Ok(())); + assert_eq!(contract.register(name, 1, None, None, false), Ok(())); set_next_caller(default_accounts.bob); assert_eq!(contract.withdraw(None, None), Err(Error::NotAdmin)); @@ -2201,9 +2272,9 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name, 1, None, false), Ok(())); + assert_eq!(contract.register(name, 1, None, None, false), Ok(())); set_value_transferred::(1000); - assert_eq!(contract.register(name2, 1, None, false), Ok(())); + assert_eq!(contract.register(name2, 1, None, None, false), Ok(())); assert!(contract .get_owned_names_of_address(default_accounts.alice) .contains(&String::from("test"))); @@ -2222,7 +2293,7 @@ mod tests { set_value_transferred::(1000); assert_eq!( - contract.register(name, 1, None, false), + contract.register(name, 1, None, None, false), Err(Error::NameNotAllowed) ); } @@ -2249,9 +2320,12 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); assert_eq!( - contract.register(name, 1, None, false), + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); + assert_eq!( + contract.register(name, 1, None, None, false), Err(Error::NameAlreadyExists) ); } @@ -2265,7 +2339,7 @@ mod tests { let mut contract = get_test_name_service(); assert_eq!( - contract.register(name, 1, None, false), + contract.register(name, 1, None, None, false), Err(Error::FeeNotPaid) ); } @@ -2279,7 +2353,10 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); assert_eq!( contract.set_address(name.clone(), default_accounts.alice), Ok(()) @@ -2329,7 +2406,10 @@ mod tests { /* Another account can register again*/ set_next_caller(default_accounts.bob); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); assert_eq!( contract.set_address(name.clone(), default_accounts.bob), Ok(()) @@ -2353,7 +2433,9 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - contract.register(name.clone(), 1, None, false).unwrap(); + contract + .register(name.clone(), 1, None, None, false) + .unwrap(); // Caller is not controller, `set_address` should fail. set_next_caller(accounts.bob); @@ -2390,7 +2472,10 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); // Caller is not controller, `set_address` should fail. set_next_caller(accounts.bob); @@ -2414,7 +2499,10 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name.clone(), 1, None, None, false), + Ok(()) + ); // Test transfer of owner. assert_eq!( @@ -2458,7 +2546,9 @@ mod tests { set_next_caller(accounts.alice); set_value_transferred::(1000); - contract.register(name.clone(), 1, None, false).unwrap(); + contract + .register(name.clone(), 1, None, None, false) + .unwrap(); let id: Id = name.clone().into(); contract @@ -2511,7 +2601,9 @@ mod tests { set_next_caller(accounts.alice); set_value_transferred::(1000); - contract.register(name.clone(), 1, None, false).unwrap(); + contract + .register(name.clone(), 1, None, None, false) + .unwrap(); let id: Id = name.clone().into(); contract @@ -2555,7 +2647,9 @@ mod tests { set_next_caller(accounts.alice); set_value_transferred::(1000); - contract.register(name.clone(), 1, None, false).unwrap(); + contract + .register(name.clone(), 1, None, None, false) + .unwrap(); let id: Id = name.clone().into(); contract @@ -2599,7 +2693,10 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name_name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name_name.clone(), 1, None, None, false), + Ok(()) + ); assert_eq!( contract.update_records(name_name.clone(), records.clone(), false), @@ -2644,7 +2741,10 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - assert_eq!(contract.register(name_name.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name_name.clone(), 1, None, None, false), + Ok(()) + ); assert_eq!( contract.update_records( @@ -2691,7 +2791,9 @@ mod tests { let mut contract = get_test_name_service(); set_value_transferred::(1000); - contract.register(name.clone(), 1, None, false).unwrap(); + contract + .register(name.clone(), 1, None, None, false) + .unwrap(); // add initial records values assert_eq!( @@ -2768,7 +2870,9 @@ mod tests { assert_eq!(contract.get_records_size_limit(), Some(41)); set_value_transferred::(1000); - contract.register(name.clone(), 1, None, false).unwrap(); + contract + .register(name.clone(), 1, None, None, false) + .unwrap(); // With current input, records cannot be stored simultaneously assert_eq!( @@ -2807,7 +2911,9 @@ mod tests { // Cannot reserve already registered-name let name = "alice".to_string(); set_value_transferred::(1000); - contract.register(name.clone(), 1, None, false).unwrap(); + contract + .register(name.clone(), 1, None, None, false) + .unwrap(); assert_eq!( contract.add_reserved_names(vec![(name, None)], false), Err(Error::NameAlreadyExists) @@ -2900,7 +3006,7 @@ mod tests { set_value_transferred::(1000); contract - .register("alice".to_string(), 1, None, false) + .register("alice".to_string(), 1, None, None, false) .expect("failed to register name"); let address_dict = AddressDict::new(accounts.alice); @@ -2957,7 +3063,7 @@ mod tests { set_callee::(contract.env().account_id()); transfer_in::(fees); assert_eq!( - contract.register(alice.clone(), 1, Some(bob.clone()), false), + contract.register(alice.clone(), 1, Some(bob.clone()), None, false), Ok(()) ); @@ -2973,7 +3079,7 @@ mod tests { set_next_caller(default_accounts.bob); set_account_balance::(default_accounts.bob, fees); transfer_in::(fees - discount); - assert_eq!(contract.register(bob, 1, Some(alice), false), Ok(())); + assert_eq!(contract.register(bob, 1, Some(alice), None, false), Ok(())); let alice_balance = get_account_balance::(default_accounts.alice).unwrap(); @@ -3004,12 +3110,18 @@ mod tests { set_account_balance::(default_accounts.alice, fees); set_callee::(contract.env().account_id()); transfer_in::(fees); - assert_eq!(contract.register(alice.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(alice.clone(), 1, None, None, false), + Ok(()) + ); // 2. Self-referral doesn't work set_account_balance::(default_accounts.alice, fees); transfer_in::(fees); - assert_eq!(contract.register(wonderland, 1, Some(alice), false), Ok(())); + assert_eq!( + contract.register(wonderland, 1, Some(alice), None, false), + Ok(()) + ); let alice_balance = get_account_balance::(default_accounts.alice).unwrap(); @@ -3032,7 +3144,9 @@ mod tests { ); transfer_in::(1000); - contract.register(name.clone(), 1, None, false).unwrap(); + contract + .register(name.clone(), 1, None, None, false) + .unwrap(); contract .set_controller(name.clone(), default_accounts.bob) .unwrap(); @@ -3076,11 +3190,15 @@ mod tests { // Register name1 for one year transfer_in::(1000); - contract.register(name1.clone(), 1, None, true).unwrap(); + contract + .register(name1.clone(), 1, None, None, true) + .unwrap(); // Register name2 for two years transfer_in::(1000); - contract.register(name2.clone(), 2, None, false).unwrap(); + contract + .register(name2.clone(), 2, None, None, false) + .unwrap(); set_block_timestamp::(GRACE_TIMESTAMP); @@ -3118,11 +3236,15 @@ mod tests { // Register name1 for one year transfer_in::(1000); - contract.register(name1.clone(), 1, None, true).unwrap(); + contract + .register(name1.clone(), 1, None, None, true) + .unwrap(); // Register name2 for two years transfer_in::(1000); - contract.register(name2.clone(), 2, None, false).unwrap(); + contract + .register(name2.clone(), 2, None, None, false) + .unwrap(); set_block_timestamp::(GRACE_TIMESTAMP); @@ -3151,23 +3273,30 @@ mod tests { // Register name1 for one year transfer_in::(1000); - contract.register(name1.clone(), 1, None, true).unwrap(); + contract + .register(name1.clone(), 1, None, None, true) + .unwrap(); // Register name2 for two years transfer_in::(1000); - contract.register(name2.clone(), 2, None, false).unwrap(); + contract + .register(name2.clone(), 2, None, None, false) + .unwrap(); // Registering an active name causes error set_next_caller(default_accounts().bob); assert_eq!( - contract.register(name1.clone(), 1, None, false), + contract.register(name1.clone(), 1, None, None, false), Err(Error::NameAlreadyExists) ); set_block_timestamp::(GRACE_TIMESTAMP); // Registering an expired name works - assert_eq!(contract.register(name1.clone(), 1, None, false), Ok(())); + assert_eq!( + contract.register(name1.clone(), 1, None, None, false), + Ok(()) + ); } #[ink::test] @@ -3209,4 +3338,56 @@ mod tests { vec![NameStatus::Available] ); } + + #[ink::test] + fn redeem_bonus_name_works_with_register_works() { + let accounts = default_accounts(); + let mut contract = get_test_name_service(); + + let name1 = "name-1".to_string(); + let name2 = "name-2".to_string(); + let bonus_name = "name-3".to_string(); + + set_next_caller(default_accounts().alice); + transfer_in::(1000); + contract + .register(name1.clone(), 1, None, Some(bonus_name.clone()), false) + .unwrap(); + + assert_eq!( + contract.get_owner(bonus_name.clone()), + Err(Error::NameDoesntExist) + ); + + contract + .register(name2, 10, None, Some(bonus_name.clone()), false) + .unwrap(); + assert_eq!(contract.get_owner(bonus_name), Ok(accounts.alice)) + } + + #[ink::test] + fn redeem_bonus_name_works_with_renewal_works() { + let accounts = default_accounts(); + let mut contract = get_test_name_service(); + + let name1 = "name-1".to_string(); + let name2 = "name-2".to_string(); + + set_next_caller(default_accounts().alice); + transfer_in::(1000); + contract + .register(name1.clone(), 1, None, None, true) + .unwrap(); + + contract + .renew(name1.clone(), 9, Some(name2.clone())) + .unwrap(); + assert_eq!( + contract.get_owner(name2.clone()), + Err(Error::NameDoesntExist) + ); + + contract.renew(name1, 10, Some(name2.clone())).unwrap(); + assert_eq!(contract.get_owner(name2), Ok(accounts.alice)) + } } From a0728831b48655ce7c48ce48d43f079ac493c6b3 Mon Sep 17 00:00:00 2001 From: Nimish Agrawal Date: Fri, 19 Jul 2024 00:41:24 +0530 Subject: [PATCH 03/14] refactor: payment handler fn --- src/azns_registry/lib.rs | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/src/azns_registry/lib.rs b/src/azns_registry/lib.rs index 73142da..b325a15 100644 --- a/src/azns_registry/lib.rs +++ b/src/azns_registry/lib.rs @@ -364,17 +364,7 @@ mod azns_registry { let price = base_price + premium - discount; /* Make sure the register is paid for */ - let transferred = self.env().transferred_value(); - if transferred < price { - return Err(Error::FeeNotPaid); - } else if transferred > price { - let caller = self.env().caller(); - let change = transferred - price; - - if self.env().transfer(caller, change).is_err() { - return Err(Error::WithdrawFailed); - } - } + self.handle_payment(price)?; let expiry_time = self.env().block_timestamp() + YEAR * years_to_register as u64; self.register_name(&name, &recipient, expiry_time)?; @@ -443,18 +433,7 @@ mod azns_registry { .map_err(Error::FeeError)?, }; let price = base_price + premium; - - let transferred = self.env().transferred_value(); - if transferred < price { - return Err(Error::FeeNotPaid); - } else if transferred > price { - let caller = self.env().caller(); - let change = transferred - price; - - if self.env().transfer(caller, change).is_err() { - return Err(Error::WithdrawFailed); - } - } + self.handle_payment(price)?; let new_expiry = old_expiry + YEAR * years_to_renew as u64; self.name_to_period @@ -1541,6 +1520,21 @@ mod azns_registry { let expiry_time = self.env().block_timestamp() + YEAR; self.register_name(&name.unwrap(), &owner, expiry_time) } + + fn handle_payment(&mut self, price: Balance) -> Result<()> { + let transferred = self.env().transferred_value(); + if transferred < price { + return Err(Error::FeeNotPaid); + } else if transferred > price { + let caller = self.env().caller(); + let change = transferred - price; + + if self.env().transfer(caller, change).is_err() { + return Err(Error::WithdrawFailed); + } + } + Ok(()) + } } impl PSP34 for Registry { From 32c29790edba9e3de7b3662abe9179023bd9fe4f Mon Sep 17 00:00:00 2001 From: Nimish Agrawal Date: Fri, 19 Jul 2024 00:44:35 +0530 Subject: [PATCH 04/14] feat: implement batch renewal --- src/azns_registry/lib.rs | 78 ++++++++++++++++++++++++++-------------- 1 file changed, 51 insertions(+), 27 deletions(-) diff --git a/src/azns_registry/lib.rs b/src/azns_registry/lib.rs index b325a15..5b0db6b 100644 --- a/src/azns_registry/lib.rs +++ b/src/azns_registry/lib.rs @@ -419,35 +419,22 @@ mod azns_registry { name: String, years_to_renew: u8, bonus_name: Option, - ) -> Result<()> { - if self.has_name_expired(&name) != Ok(false) { - return Err(Error::NameDoesntExist); - } - - let (registration, old_expiry) = self.get_registration_period_ref(&name)?; - - let (base_price, premium) = match &self.fee_calculator { - None => (1000, 0), // For unit testing only - Some(model) => model - .get_name_price(name.clone(), years_to_renew) - .map_err(Error::FeeError)?, - }; - let price = base_price + premium; + ) -> Result { + let price = self.do_renew(name, years_to_renew, bonus_name)?; self.handle_payment(price)?; + Ok(price) + } - let new_expiry = old_expiry + YEAR * years_to_renew as u64; - self.name_to_period - .insert(&name, &(registration, new_expiry)); + #[ink(message, payable)] + pub fn batch_renew(&mut self, data: Vec<(String, u8, Option)>) -> Result { + let mut cost = 0; - // Emit event - self.env().emit_event(Renew { - name: name.clone(), - old_expiry, - new_expiry, - }); + for item in data { + cost += self.do_renew(item.0, item.1, item.2)?; + } + self.handle_payment(cost)?; - let owner = self.get_owner(name)?; - self.redeem_bonus_name(bonus_name, years_to_renew, owner) + Ok(cost) } /// Allows users to claim their reserved name at zero cost @@ -1507,6 +1494,43 @@ mod azns_registry { Ok(()) } + fn do_renew( + &mut self, + name: String, + years_to_renew: u8, + bonus_name: Option, + ) -> Result { + if self.has_name_expired(&name) != Ok(false) { + return Err(Error::NameDoesntExist); + } + + let (registration, old_expiry) = self.get_registration_period_ref(&name)?; + + let (base_price, premium) = match &self.fee_calculator { + None => (1000, 0), // For unit testing only + Some(model) => model + .get_name_price(name.clone(), years_to_renew) + .map_err(Error::FeeError)?, + }; + let price = base_price + premium; + + let new_expiry = old_expiry + YEAR * years_to_renew as u64; + self.name_to_period + .insert(&name, &(registration, new_expiry)); + + // Emit event + self.env().emit_event(Renew { + name: name.clone(), + old_expiry, + new_expiry, + }); + + let owner = self.get_owner(name)?; + self.redeem_bonus_name(bonus_name, years_to_renew, owner)?; + + Ok(price) + } + fn redeem_bonus_name( &mut self, name: Option, @@ -2169,7 +2193,7 @@ mod tests { ); // Renew the name - assert_eq!(contract.renew(name.clone(), 2, None), Ok(())); + assert_eq!(contract.renew(name.clone(), 2, None), Ok(1000)); // Get new expiry assert_eq!( @@ -2198,7 +2222,7 @@ mod tests { // Transfer extra fee transfer_in::(1234); - assert_eq!(contract.renew(name.clone(), 1, None), Ok(())); + assert_eq!(contract.renew(name.clone(), 1, None), Ok(1000)); assert_eq!( get_account_balance::(default_accounts.alice), From a3b3312365714f8eb84b6d352ae09fda3194a104 Mon Sep 17 00:00:00 2001 From: Nimish Agrawal Date: Fri, 19 Jul 2024 00:57:44 +0530 Subject: [PATCH 05/14] feat: retain old `register()` signature for backward compatibility --- src/azns_registry/lib.rs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/azns_registry/lib.rs b/src/azns_registry/lib.rs index 5b0db6b..8a4358b 100644 --- a/src/azns_registry/lib.rs +++ b/src/azns_registry/lib.rs @@ -389,10 +389,8 @@ mod azns_registry { } /// Register specific name with caller as owner. - /// - /// NOTE: Whitelisted addresses can buy one name during the whitelist phase by submitting its proof #[ink(message, payable)] - pub fn register( + pub fn register_v2( &mut self, name: String, years_to_register: u8, @@ -413,6 +411,19 @@ mod azns_registry { Ok(()) } + /// register_v1 + #[ink(message, payable)] + pub fn register( + &mut self, + name: String, + years_to_register: u8, + referrer: Option, + _merkle_proof: Option>, + set_as_primary_name: bool, + ) -> Result<()> { + self.register_v2(name, years_to_register, referrer, None, set_as_primary_name) + } + #[ink(message, payable)] pub fn renew( &mut self, @@ -3341,7 +3352,9 @@ mod tests { // Register name1 for one year transfer_in::(1000); - contract.register(name1.clone(), 1, None, true).unwrap(); + contract + .register(name1.clone(), 1, None, None, true) + .unwrap(); set_block_timestamp::(GRACE_TIMESTAMP - 1); let address_dict = AddressDict::new(default_accounts().alice); @@ -3369,7 +3382,7 @@ mod tests { set_next_caller(default_accounts().alice); transfer_in::(1000); contract - .register(name1.clone(), 1, None, Some(bonus_name.clone()), false) + .register_v2(name1.clone(), 1, None, Some(bonus_name.clone()), false) .unwrap(); assert_eq!( @@ -3378,7 +3391,7 @@ mod tests { ); contract - .register(name2, 10, None, Some(bonus_name.clone()), false) + .register_v2(name2, 10, None, Some(bonus_name.clone()), false) .unwrap(); assert_eq!(contract.get_owner(bonus_name), Ok(accounts.alice)) } From 159b91caa1b422236a7aff144508b523771cb47b Mon Sep 17 00:00:00 2001 From: Dennis Zoma Date: Wed, 24 Jul 2024 09:38:55 +0200 Subject: [PATCH 06/14] chore(scripts): Update dependencies & register interface --- package.json | 12 +- pnpm-lock.yaml | 400 ++++++++++++--------------------- scripts/testContractStorage.ts | 2 +- 3 files changed, 147 insertions(+), 267 deletions(-) diff --git a/package.json b/package.json index 184cb1d..bbd4ba0 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,9 @@ "author": "AZERO.ID (https://azero.id)", "type": "module", "engines": { - "node": "20", - "pnpm": "9" + "node": "20" }, + "packageManager": "pnpm@9.6.0", "scripts": { "test": "bash test-all.sh", "build": "bash build-all.sh", @@ -30,9 +30,9 @@ "@polkadot/util": "^13.0.2", "@polkadot/util-crypto": "^13.0.2", "@scio-labs/use-inkathon": "0.10.0", - "@types/node": "^20.10.0", - "@typescript-eslint/eslint-plugin": "^7.16.0", - "@typescript-eslint/parser": "^7.16.0", + "@types/node": "^20.14.12", + "@typescript-eslint/eslint-plugin": "^7.17.0", + "@typescript-eslint/parser": "^7.17.0", "bn.js": "^5.2.1", "cli-progress": "^3.12.0", "csv": "^6.3.5", @@ -41,6 +41,6 @@ "eslint-config-prettier": "^9.0.0", "prettier": "^3.1.0", "tsx": "^4.5.0", - "typescript": "^5.3.2" + "typescript": "^5.5.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3d773a4..fc58f4a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,16 +31,16 @@ importers: version: 13.0.2(@polkadot/util@13.0.2) '@scio-labs/use-inkathon': specifier: 0.10.0 - version: 0.10.0(@nightlylabs/wallet-selector-polkadot@0.2.6(@polkadot/util@13.0.2))(@polkadot/api-contract@12.2.1)(@polkadot/api@12.2.1)(@polkadot/extension-inject@0.48.2(@polkadot/api@12.2.1)(@polkadot/util@13.0.2))(@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2))(@polkadot/types@12.2.1)(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 0.10.0(@nightlylabs/wallet-selector-polkadot@0.2.6(@polkadot/util@13.0.2))(@polkadot/api-contract@12.2.1)(@polkadot/api@12.2.1)(@polkadot/extension-inject@0.49.3(@polkadot/api@12.2.1)(@polkadot/util@13.0.2))(@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2))(@polkadot/types@12.2.1)(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/node': - specifier: ^20.10.0 - version: 20.14.10 + specifier: ^20.14.12 + version: 20.14.12 '@typescript-eslint/eslint-plugin': - specifier: ^7.16.0 - version: 7.16.0(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) + specifier: ^7.17.0 + version: 7.17.0(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': - specifier: ^7.16.0 - version: 7.16.0(eslint@8.57.0)(typescript@5.5.3) + specifier: ^7.17.0 + version: 7.17.0(eslint@8.57.0)(typescript@5.5.4) bn.js: specifier: ^5.2.1 version: 5.2.1 @@ -66,8 +66,8 @@ importers: specifier: ^4.5.0 version: 4.16.2 typescript: - specifier: ^5.3.2 - version: 5.5.3 + specifier: ^5.5.4 + version: 5.5.4 packages: @@ -79,8 +79,8 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.8': - resolution: {integrity: sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==} + '@babel/generator@7.24.10': + resolution: {integrity: sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==} engines: {node: '>=6.9.0'} '@babel/helper-environment-visitor@7.24.7': @@ -124,8 +124,8 @@ packages: resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.8': - resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + '@babel/types@7.24.9': + resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} engines: {node: '>=6.9.0'} '@esbuild/aix-ppc64@0.21.5': @@ -423,10 +423,6 @@ packages: resolution: {integrity: sha512-J0r1DT1M5y75iO1iwcpUBokKD3q6b22kWlPfiHEDNFydVw5vm7OTRBk9Njjl8rOnlSzcW/Ya8qWfV/wkrqHxUQ==} engines: {node: '>=16'} - '@polkadot/api-augment@10.13.1': - resolution: {integrity: sha512-IAKaCp19QxgOG4HKk9RAgUgC/VNVqymZ2GXfMNOZWImZhxRIbrK+raH5vN2MbWwtVHpjxyXvGsd1RRhnohI33A==} - engines: {node: '>=18'} - '@polkadot/api-augment@12.2.1': resolution: {integrity: sha512-HrIiTRHL4KhcgeMhu85I5DBB5M0VGj3uA805lALFs/WuwQkUAvJZb6NUKhizG/q+di3KKzoyu1RM9As2LIP5Yg==} engines: {node: '>=18'} @@ -435,10 +431,6 @@ packages: resolution: {integrity: sha512-joH2Ywxnn+AStkw+JWAdF3i3WJy4NcBYp0SWJM/WqGafWR/FuHnati2pcj/MHzkHT8JkBippmSSJFvsqRhlwcQ==} engines: {node: '>=16'} - '@polkadot/api-base@10.13.1': - resolution: {integrity: sha512-Okrw5hjtEjqSMOG08J6qqEwlUQujTVClvY1/eZkzKwNzPelWrtV6vqfyJklB7zVhenlxfxqhZKKcY7zWSW/q5Q==} - engines: {node: '>=18'} - '@polkadot/api-base@12.2.1': resolution: {integrity: sha512-xyGt1/iK40/mLHrcmvjzdUWcOoES04+M9XlQ7WC3Hp+Tv/qk+WARXWkJKPIt3HqKrRu2mkyXvqPw2C/k7IhmHg==} engines: {node: '>=18'} @@ -451,10 +443,6 @@ packages: resolution: {integrity: sha512-Q9Ibs4eRPqdV8qnRzFPD3dlWNbLHxRqMqNTNPmNQwKPo5m6fcQbZ0UZy3yJ+PI9S4AQHGhsWtfoi5qW8006GHQ==} engines: {node: '>=16'} - '@polkadot/api-derive@10.13.1': - resolution: {integrity: sha512-ef0H0GeCZ4q5Om+c61eLLLL29UxFC2/u/k8V1K2JOIU+2wD5LF7sjAoV09CBMKKHfkLenRckVk2ukm4rBqFRpg==} - engines: {node: '>=18'} - '@polkadot/api-derive@12.2.1': resolution: {integrity: sha512-zk8/20QsUomEipN/DKB2MIgnFMr6JNIv/L/Rf3PsZXGkzOgVnFpjCjbIhHT4IscZXkO7jWmjnA3ID6sJ2+yA9Q==} engines: {node: '>=18'} @@ -463,10 +451,6 @@ packages: resolution: {integrity: sha512-YHVkmNvjGF4Eg3thAbVhj9UX3SXx+Yxk6yVuzsEcckEudIRHzL2ikIWGCfUprfzSeFNpUCKdJIi1tsxVHtA7Tg==} engines: {node: '>=16'} - '@polkadot/api@10.13.1': - resolution: {integrity: sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==} - engines: {node: '>=18'} - '@polkadot/api@12.2.1': resolution: {integrity: sha512-G4PfdfiM3HVXmYTYYhH2+exLFiHtNJsJqbmk7Hj8ZOx0MzSUAFhtgcNXojcwUeW3dDhZRCrhwUApq3P4bvLpug==} engines: {node: '>=18'} @@ -478,8 +462,8 @@ packages: '@polkadot/api': '*' '@polkadot/util': '*' - '@polkadot/extension-inject@0.48.2': - resolution: {integrity: sha512-3/jFeTuIAhy6CwLVRBsztwfSP6UZuyrD2BXLyCkyhq2879iM9ixEpnOGgkafcIGAyPWGs0ZZBVtqd62Qa5iMcA==} + '@polkadot/extension-inject@0.49.3': + resolution: {integrity: sha512-442d1lKJiGEM6QiQ0aB7DEgQ21/Oh044b2ba5WbygF/haOsW+rrt3aUI8SA9Qu4uT0OF+f/1ZszY/QTxxYglFg==} engines: {node: '>=18'} peerDependencies: '@polkadot/api': '*' @@ -511,10 +495,6 @@ packages: resolution: {integrity: sha512-PcvsX8DNV8BNDXXnY2K8F4mE7cWz7fKg8ykXNZTN8XUN6MrI4k/ohv7itYic7X5LaP25ZmQt5UiGyjKDGIELow==} engines: {node: '>=16'} - '@polkadot/rpc-augment@10.13.1': - resolution: {integrity: sha512-iLsWUW4Jcx3DOdVrSHtN0biwxlHuTs4QN2hjJV0gd0jo7W08SXhWabZIf9mDmvUJIbR7Vk+9amzvegjRyIf5+A==} - engines: {node: '>=18'} - '@polkadot/rpc-augment@12.2.1': resolution: {integrity: sha512-rKOyknD7rlZyvdsTq42EPSi4sPikBXRTb7svJ7+t0DwskSbpqLWOFvaX/hGhV4P0ZwobuIn5D82tkxG8c+mwDg==} engines: {node: '>=18'} @@ -523,10 +503,6 @@ packages: resolution: {integrity: sha512-awfFfJYsVF6W4DrqTj5RP00SSDRNB770FIoe1QE1Op4NcSrfeLpwh54HUJS716f4l5mOSYuvMp+zCbKzt8zKow==} engines: {node: '>=16'} - '@polkadot/rpc-core@10.13.1': - resolution: {integrity: sha512-eoejSHa+/tzHm0vwic62/aptTGbph8vaBpbvLIK7gd00+rT813ROz5ckB1CqQBFB23nHRLuzzX/toY8ID3xrKw==} - engines: {node: '>=18'} - '@polkadot/rpc-core@12.2.1': resolution: {integrity: sha512-ZAxA2Ymi+9ajyW89yD5W7R80fbgTX15Bu7DujhJZQXl7Gd+bUtejdvf8HhleMHRLKSK+YD6+c0qON4ucs2eC4A==} engines: {node: '>=18'} @@ -583,10 +559,6 @@ packages: resolution: {integrity: sha512-yRa1lbDRqg3V/zoa0vSwdGOiYTIWktILW8OfkaLDExTu0GZBSbVHZlLAta52XVpA9Zww7mrUUC9+iernOwk//w==} engines: {node: '>=16'} - '@polkadot/types-known@10.13.1': - resolution: {integrity: sha512-uHjDW05EavOT5JeU8RbiFWTgPilZ+odsCcuEYIJGmK+es3lk/Qsdns9Zb7U7NJl7eJ6OWmRtyrWsLs+bU+jjIQ==} - engines: {node: '>=18'} - '@polkadot/types-known@12.2.1': resolution: {integrity: sha512-am/WAUabsKgsfQ6vaPfz4QvVdNGQDXc1/WL7n0mAD7iJDwzW5QbzkSlmSiUHrFtz+zSwREEQL+2nPEDQpVMDlg==} engines: {node: '>=18'} @@ -760,17 +732,23 @@ packages: '@substrate/connect-extension-protocol@2.0.0': resolution: {integrity: sha512-nKu8pDrE3LNCEgJjZe1iGXzaD6OSIDD4Xzz/yo4KO9mQ6LBvf49BVrt4qxBFGL6++NneLiWUZGoh+VSd4PyVIg==} + '@substrate/connect-known-chains@1.1.11': + resolution: {integrity: sha512-jl6RKTn9bDezKqlOj2X9B/BVftIqqnU9tgr/9WXMCBdLedzQaO/DRRb0c5VqF1+DH8dHV2q5MyKN9gR+KGt7ow==} + '@substrate/connect-known-chains@1.1.9': resolution: {integrity: sha512-P11S0GtHaOGm4lnwZ2YUSugH3PZ9eYpRtaZGEx0yG7f/A9UBh7KhinRBMgC/NIGAi58l5uQeWm0HFZG09PF7CQ==} '@substrate/connect@0.7.33': resolution: {integrity: sha512-1B984/bmXVQvTT9oV3c3b7215lvWmulP9rfP3T3Ri+OU3uIsyCzYw0A+XG6J8/jgO2FnroeNIBWlgoLaUM1uzw==} + deprecated: versions below 1.x are no longer maintained '@substrate/connect@0.8.10': resolution: {integrity: sha512-DIyQ13DDlXqVFnLV+S6/JDgiGowVRRrh18kahieJxhgvzcWicw5eLc6jpfQ0moVVLBYkO7rctB5Wreldwpva8w==} + deprecated: versions below 1.x are no longer maintained '@substrate/connect@0.8.8': resolution: {integrity: sha512-zwaxuNEVI9bGt0rT8PEJiXOyebLIo6QN1SyiAHRPBOl6g3Sy0KKdSN8Jmyn++oXhVRD8aIe75/V8ZkS81T+BPQ==} + deprecated: versions below 1.x are no longer maintained '@substrate/light-client-extension-helpers@0.0.4': resolution: {integrity: sha512-vfKcigzL0SpiK+u9sX6dq2lQSDtuFLOxIJx2CKPouPEHIs8C+fpsufn52r19GQn+qDhU8POMPHOVoqLktj8UEA==} @@ -788,14 +766,14 @@ packages: '@types/bn.js@5.1.5': resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} - '@types/node@20.14.10': - resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + '@types/node@20.14.12': + resolution: {integrity: sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@typescript-eslint/eslint-plugin@7.16.0': - resolution: {integrity: sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==} + '@typescript-eslint/eslint-plugin@7.17.0': + resolution: {integrity: sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -805,8 +783,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.16.0': - resolution: {integrity: sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==} + '@typescript-eslint/parser@7.17.0': + resolution: {integrity: sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -815,12 +793,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.16.0': - resolution: {integrity: sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==} + '@typescript-eslint/scope-manager@7.17.0': + resolution: {integrity: sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.16.0': - resolution: {integrity: sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==} + '@typescript-eslint/type-utils@7.17.0': + resolution: {integrity: sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -829,12 +807,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.16.0': - resolution: {integrity: sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==} + '@typescript-eslint/types@7.17.0': + resolution: {integrity: sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/typescript-estree@7.16.0': - resolution: {integrity: sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==} + '@typescript-eslint/typescript-estree@7.17.0': + resolution: {integrity: sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -842,14 +820,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.16.0': - resolution: {integrity: sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==} + '@typescript-eslint/utils@7.17.0': + resolution: {integrity: sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.16.0': - resolution: {integrity: sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==} + '@typescript-eslint/visitor-keys@7.17.0': + resolution: {integrity: sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==} engines: {node: ^18.18.0 || >=20.0.0} '@ungap/structured-clone@1.2.0': @@ -965,8 +943,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001642: - resolution: {integrity: sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==} + caniuse-lite@1.0.30001643: + resolution: {integrity: sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -1066,8 +1044,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.4.827: - resolution: {integrity: sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==} + electron-to-chromium@1.5.0: + resolution: {integrity: sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1267,8 +1245,8 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} engines: {node: '>= 0.4'} is-extglob@2.1.1: @@ -1436,8 +1414,8 @@ packages: resolution: {integrity: sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==} engines: {node: '>=0.12'} - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -1544,8 +1522,8 @@ packages: ts-node: optional: true - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 @@ -1632,8 +1610,8 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -1706,8 +1684,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tailwindcss@3.4.4: - resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} + tailwindcss@3.4.6: + resolution: {integrity: sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==} engines: {node: '>=14.0.0'} hasBin: true @@ -1757,8 +1735,8 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - typescript@5.5.3: - resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true @@ -1844,29 +1822,29 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/generator@7.24.8': + '@babel/generator@7.24.10': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/helper-function-name@7.24.7': dependencies: '@babel/template': 7.24.7 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/helper-hoist-variables@7.24.7': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/helper-string-parser@7.24.8': {} @@ -1881,30 +1859,30 @@ snapshots: '@babel/parser@7.24.8': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/template@7.24.7': dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/traverse@7.24.8': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.8 + '@babel/generator': 7.24.10 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-function-name': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.8': + '@babel/types@7.24.9': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 @@ -2077,8 +2055,8 @@ snapshots: '@nightlylabs/nightly-connect-polkadot@0.0.16': dependencies: '@nightlylabs/nightly-connect-base': 0.0.27 - '@polkadot/api': 10.13.1 - '@polkadot/extension-inject': 0.46.5(@polkadot/api@10.13.1)(@polkadot/util@12.6.2) + '@polkadot/api': 10.10.1 + '@polkadot/extension-inject': 0.46.5(@polkadot/api@10.10.1)(@polkadot/util@12.6.2) '@polkadot/types': 10.13.1 '@polkadot/util': 12.6.2 '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) @@ -2114,7 +2092,7 @@ snapshots: lit: 2.8.0 postcss: 8.4.39 postcss-lit: 1.1.1(postcss@8.4.39) - tailwindcss: 3.4.4 + tailwindcss: 3.4.6 transitivePeerDependencies: - supports-color - ts-node @@ -2240,20 +2218,6 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/api-augment@10.13.1': - dependencies: - '@polkadot/api-base': 10.13.1 - '@polkadot/rpc-augment': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/types-augment': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/util': 12.6.2 - tslib: 2.6.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - '@polkadot/api-augment@12.2.1': dependencies: '@polkadot/api-base': 12.2.1 @@ -2280,18 +2244,6 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/api-base@10.13.1': - dependencies: - '@polkadot/rpc-core': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/util': 12.6.2 - rxjs: 7.8.1 - tslib: 2.6.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - '@polkadot/api-base@12.2.1': dependencies: '@polkadot/rpc-core': 12.2.1 @@ -2337,23 +2289,6 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/api-derive@10.13.1': - dependencies: - '@polkadot/api': 10.13.1 - '@polkadot/api-augment': 10.13.1 - '@polkadot/api-base': 10.13.1 - '@polkadot/rpc-core': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) - rxjs: 7.8.1 - tslib: 2.6.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - '@polkadot/api-derive@12.2.1': dependencies: '@polkadot/api': 12.2.1 @@ -2395,30 +2330,6 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/api@10.13.1': - dependencies: - '@polkadot/api-augment': 10.13.1 - '@polkadot/api-base': 10.13.1 - '@polkadot/api-derive': 10.13.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) - '@polkadot/rpc-augment': 10.13.1 - '@polkadot/rpc-core': 10.13.1 - '@polkadot/rpc-provider': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/types-augment': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/types-create': 10.13.1 - '@polkadot/types-known': 10.13.1 - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) - eventemitter3: 5.0.1 - rxjs: 7.8.1 - tslib: 2.6.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - '@polkadot/api@12.2.1': dependencies: '@polkadot/api-augment': 12.2.1 @@ -2443,13 +2354,13 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/extension-inject@0.46.5(@polkadot/api@10.10.1)(@polkadot/util@13.0.2)': + '@polkadot/extension-inject@0.46.5(@polkadot/api@10.10.1)(@polkadot/util@12.6.2)': dependencies: '@polkadot/api': 10.10.1 '@polkadot/rpc-provider': 10.13.1 '@polkadot/types': 10.13.1 - '@polkadot/util': 13.0.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@13.0.2) + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) '@polkadot/x-global': 12.6.2 tslib: 2.6.3 transitivePeerDependencies: @@ -2457,13 +2368,13 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/extension-inject@0.46.5(@polkadot/api@10.13.1)(@polkadot/util@12.6.2)': + '@polkadot/extension-inject@0.46.5(@polkadot/api@10.10.1)(@polkadot/util@13.0.2)': dependencies: - '@polkadot/api': 10.13.1 + '@polkadot/api': 10.10.1 '@polkadot/rpc-provider': 10.13.1 '@polkadot/types': 10.13.1 - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + '@polkadot/util': 13.0.2 + '@polkadot/util-crypto': 12.6.2(@polkadot/util@13.0.2) '@polkadot/x-global': 12.6.2 tslib: 2.6.3 transitivePeerDependencies: @@ -2471,14 +2382,14 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/extension-inject@0.48.2(@polkadot/api@12.2.1)(@polkadot/util@13.0.2)': + '@polkadot/extension-inject@0.49.3(@polkadot/api@12.2.1)(@polkadot/util@13.0.2)': dependencies: '@polkadot/api': 12.2.1 '@polkadot/rpc-provider': 12.2.1 '@polkadot/types': 12.2.1 '@polkadot/util': 13.0.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@13.0.2) - '@polkadot/x-global': 12.6.2 + '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) + '@polkadot/x-global': 13.0.2 tslib: 2.6.3 transitivePeerDependencies: - bufferutil @@ -2521,18 +2432,6 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/rpc-augment@10.13.1': - dependencies: - '@polkadot/rpc-core': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/util': 12.6.2 - tslib: 2.6.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - '@polkadot/rpc-augment@12.2.1': dependencies: '@polkadot/rpc-core': 12.2.1 @@ -2558,19 +2457,6 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/rpc-core@10.13.1': - dependencies: - '@polkadot/rpc-augment': 10.13.1 - '@polkadot/rpc-provider': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/util': 12.6.2 - rxjs: 7.8.1 - tslib: 2.6.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - '@polkadot/rpc-core@12.2.1': dependencies: '@polkadot/rpc-augment': 12.2.1 @@ -2713,15 +2599,6 @@ snapshots: '@polkadot/util': 12.6.2 tslib: 2.6.3 - '@polkadot/types-known@10.13.1': - dependencies: - '@polkadot/networks': 12.6.2 - '@polkadot/types': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/types-create': 10.13.1 - '@polkadot/util': 12.6.2 - tslib: 2.6.3 - '@polkadot/types-known@12.2.1': dependencies: '@polkadot/networks': 13.0.2 @@ -3043,12 +2920,12 @@ snapshots: - bufferutil - utf-8-validate - '@scio-labs/use-inkathon@0.10.0(@nightlylabs/wallet-selector-polkadot@0.2.6(@polkadot/util@13.0.2))(@polkadot/api-contract@12.2.1)(@polkadot/api@12.2.1)(@polkadot/extension-inject@0.48.2(@polkadot/api@12.2.1)(@polkadot/util@13.0.2))(@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2))(@polkadot/types@12.2.1)(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@scio-labs/use-inkathon@0.10.0(@nightlylabs/wallet-selector-polkadot@0.2.6(@polkadot/util@13.0.2))(@polkadot/api-contract@12.2.1)(@polkadot/api@12.2.1)(@polkadot/extension-inject@0.49.3(@polkadot/api@12.2.1)(@polkadot/util@13.0.2))(@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2))(@polkadot/types@12.2.1)(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nightlylabs/wallet-selector-polkadot': 0.2.6(@polkadot/util@13.0.2) '@polkadot/api': 12.2.1 '@polkadot/api-contract': 12.2.1 - '@polkadot/extension-inject': 0.48.2(@polkadot/api@12.2.1)(@polkadot/util@13.0.2) + '@polkadot/extension-inject': 0.49.3(@polkadot/api@12.2.1)(@polkadot/util@13.0.2) '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) '@polkadot/types': 12.2.1 '@polkadot/util': 13.0.2 @@ -3064,6 +2941,9 @@ snapshots: '@substrate/connect-extension-protocol@2.0.0': optional: true + '@substrate/connect-known-chains@1.1.11': + optional: true + '@substrate/connect-known-chains@1.1.9': optional: true @@ -3090,7 +2970,7 @@ snapshots: '@substrate/connect@0.8.8': dependencies: '@substrate/connect-extension-protocol': 2.0.0 - '@substrate/connect-known-chains': 1.1.9 + '@substrate/connect-known-chains': 1.1.11 '@substrate/light-client-extension-helpers': 0.0.4(smoldot@2.0.22) smoldot: 2.0.22 transitivePeerDependencies: @@ -3105,7 +2985,7 @@ snapshots: '@polkadot-api/json-rpc-provider-proxy': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 '@polkadot-api/substrate-client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 '@substrate/connect-extension-protocol': 2.0.0 - '@substrate/connect-known-chains': 1.1.9 + '@substrate/connect-known-chains': 1.1.11 rxjs: 7.8.1 smoldot: 2.0.22 optional: true @@ -3126,93 +3006,93 @@ snapshots: '@types/bn.js@5.1.5': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.12 - '@types/node@20.14.10': + '@types/node@20.14.12': dependencies: undici-types: 5.26.5 '@types/trusted-types@2.0.7': {} - '@typescript-eslint/eslint-plugin@7.16.0(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.16.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/scope-manager': 7.16.0 - '@typescript-eslint/type-utils': 7.16.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/utils': 7.16.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.16.0 + '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 7.17.0 + '@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.17.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.3) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 7.16.0 - '@typescript-eslint/types': 7.16.0 - '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.16.0 + '@typescript-eslint/scope-manager': 7.17.0 + '@typescript-eslint/types': 7.17.0 + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.17.0 debug: 4.3.5 eslint: 8.57.0 optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.16.0': + '@typescript-eslint/scope-manager@7.17.0': dependencies: - '@typescript-eslint/types': 7.16.0 - '@typescript-eslint/visitor-keys': 7.16.0 + '@typescript-eslint/types': 7.17.0 + '@typescript-eslint/visitor-keys': 7.17.0 - '@typescript-eslint/type-utils@7.16.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.5.3) - '@typescript-eslint/utils': 7.16.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.5 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.3) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.16.0': {} + '@typescript-eslint/types@7.17.0': {} - '@typescript-eslint/typescript-estree@7.16.0(typescript@5.5.3)': + '@typescript-eslint/typescript-estree@7.17.0(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 7.16.0 - '@typescript-eslint/visitor-keys': 7.16.0 + '@typescript-eslint/types': 7.17.0 + '@typescript-eslint/visitor-keys': 7.17.0 debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.3) + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.16.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.16.0 - '@typescript-eslint/types': 7.16.0 - '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.5.3) + '@typescript-eslint/scope-manager': 7.17.0 + '@typescript-eslint/types': 7.17.0 + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.16.0': + '@typescript-eslint/visitor-keys@7.17.0': dependencies: - '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/types': 7.17.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -3281,7 +3161,7 @@ snapshots: autoprefixer@10.4.19(postcss@8.4.39): dependencies: browserslist: 4.23.2 - caniuse-lite: 1.0.30001642 + caniuse-lite: 1.0.30001643 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 @@ -3309,16 +3189,16 @@ snapshots: browserslist@4.23.2: dependencies: - caniuse-lite: 1.0.30001642 - electron-to-chromium: 1.4.827 - node-releases: 2.0.14 + caniuse-lite: 1.0.30001643 + electron-to-chromium: 1.5.0 + node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.2) callsites@3.1.0: {} camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001642: {} + caniuse-lite@1.0.30001643: {} chalk@2.4.2: dependencies: @@ -3414,7 +3294,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.4.827: {} + electron-to-chromium@1.5.0: {} emoji-regex@8.0.0: {} @@ -3665,7 +3545,7 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-core-module@2.14.0: + is-core-module@2.15.0: dependencies: hasown: 2.0.2 @@ -3813,7 +3693,7 @@ snapshots: dependencies: write-file-atomic: 1.3.4 - node-releases@2.0.14: {} + node-releases@2.0.18: {} normalize-path@3.0.0: {} @@ -3887,7 +3767,7 @@ snapshots: postcss-lit@1.1.1(postcss@8.4.39): dependencies: - '@babel/generator': 7.24.8 + '@babel/generator': 7.24.10 '@babel/parser': 7.24.8 '@babel/traverse': 7.24.8 lilconfig: 2.1.0 @@ -3902,7 +3782,7 @@ snapshots: optionalDependencies: postcss: 8.4.39 - postcss-nested@6.0.1(postcss@8.4.39): + postcss-nested@6.2.0(postcss@8.4.39): dependencies: postcss: 8.4.39 postcss-selector-parser: 6.1.1 @@ -3956,7 +3836,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -3981,7 +3861,7 @@ snapshots: dependencies: loose-envify: 1.4.0 - semver@7.6.2: {} + semver@7.6.3: {} shebang-command@2.0.0: dependencies: @@ -4057,7 +3937,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tailwindcss@3.4.4: + tailwindcss@3.4.6: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -4077,7 +3957,7 @@ snapshots: postcss-import: 15.1.0(postcss@8.4.39) postcss-js: 4.0.1(postcss@8.4.39) postcss-load-config: 4.0.2(postcss@8.4.39) - postcss-nested: 6.0.1(postcss@8.4.39) + postcss-nested: 6.2.0(postcss@8.4.39) postcss-selector-parser: 6.1.1 resolve: 1.22.8 sucrase: 3.35.0 @@ -4102,9 +3982,9 @@ snapshots: tr46@0.0.3: {} - ts-api-utils@1.3.0(typescript@5.5.3): + ts-api-utils@1.3.0(typescript@5.5.4): dependencies: - typescript: 5.5.3 + typescript: 5.5.4 ts-interface-checker@0.1.13: {} @@ -4123,7 +4003,7 @@ snapshots: type-fest@0.20.2: {} - typescript@5.5.3: {} + typescript@5.5.4: {} undici-types@5.26.5: {} diff --git a/scripts/testContractStorage.ts b/scripts/testContractStorage.ts index 9f70adf..04874cd 100644 --- a/scripts/testContractStorage.ts +++ b/scripts/testContractStorage.ts @@ -148,7 +148,7 @@ const main = async () => { */ const registerDomain = async (api, account, contract, domainPrice, domainName) => { try { - await contractTx(api, account, contract, 'register', { value: domainPrice }, [ + await contractTx(api, account, contract, 'register_v2', { value: domainPrice }, [ domainName, 1, null, From ade83a8ed166cea0094ec0188f9f8a450bbfe959 Mon Sep 17 00:00:00 2001 From: Dennis Zoma Date: Thu, 25 Jul 2024 08:07:47 +0200 Subject: [PATCH 07/14] feat(scripts): Add `NEW_CONFIG` deploy param to set updated fee & registration period --- scripts/deploy.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/deploy.ts b/scripts/deploy.ts index 109b17c..4a6f69d 100644 --- a/scripts/deploy.ts +++ b/scripts/deploy.ts @@ -18,6 +18,7 @@ import { writeContractAddresses } from './utils/writeContractAddresses' * - `CHAIN`: Chain ID (optional, defaults to `development`) * - `ADMIN`: Address of contract admin (optional, defaults to caller) * - `RESERVATIONS`: Path to .csv file with reserved names & addresses + * - `NEW_CONFIG`: If set, use new default price (10 AZERO) & max registration duration (200 years) * * Example usage: * - `CHAIN=alephzero-testnet ADMIN=5feiā€¦ RESERVATIONS=reserved-names.csv pnpm run deploy` @@ -27,8 +28,15 @@ const main = async () => { const chainId = initParams.chain.network // Deploy all contracts + const useNewConfig = ['true', true, '1', 1].includes(process.env.NEW_CONFIG || '') + const feeCalculator = await deployFeeCalculator( + initParams, + useNewConfig && { + maxRegistrationDuration: 200, + commonPrice: initParams.toBNWithDecimals(10), + }, + ) const nameChecker = await deployNameChecker(initParams) - const feeCalculator = await deployFeeCalculator(initParams) const tlds = chainId === alephzero.network ? ['azero', 'a0'] : ['tzero'] const tld = tlds[0] const baseUri = From 39071649f2d9fdf24858923d0ee8efb16ef3d2ab Mon Sep 17 00:00:00 2001 From: Dennis Zoma Date: Fri, 26 Jul 2024 13:25:23 +0200 Subject: [PATCH 08/14] chore: Remove `TODO` comment --- src/azns_registry/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/azns_registry/lib.rs b/src/azns_registry/lib.rs index 8a4358b..74b9dc8 100644 --- a/src/azns_registry/lib.rs +++ b/src/azns_registry/lib.rs @@ -27,7 +27,7 @@ mod azns_registry { }; // 1st Oct 2024 00:00 (UTC) - pub const GRACE_TIMESTAMP: u64 = 1727740800000; // TODO: set appropriate timestamp + pub const GRACE_TIMESTAMP: u64 = 1727740800000; pub type Result = core::result::Result; From 0e8d90e26bc35046fb933f70cd5253718f04333e Mon Sep 17 00:00:00 2001 From: Dennis Zoma Date: Fri, 26 Jul 2024 13:25:49 +0200 Subject: [PATCH 09/14] fix: Ensure `Renew` event is on last position --- src/azns_registry/lib.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/azns_registry/lib.rs b/src/azns_registry/lib.rs index 74b9dc8..b3a3f2a 100644 --- a/src/azns_registry/lib.rs +++ b/src/azns_registry/lib.rs @@ -56,15 +56,6 @@ mod azns_registry { expiration_timestamp: u64, } - /// Emitted whenever a name is renewed. - #[ink(event)] - pub struct Renew { - #[ink(topic)] - name: String, - old_expiry: u64, - new_expiry: u64, - } - #[ink(event)] pub struct FeeReceived { #[ink(topic)] @@ -181,6 +172,15 @@ mod azns_registry { action: bool, } + /// Emitted whenever a name is renewed. + #[ink(event)] + pub struct Renew { + #[ink(topic)] + name: String, + old_expiry: u64, + new_expiry: u64, + } + #[ink(storage)] pub struct Registry { /// Admin of the contract can perform root operations From 2887e38618eab896b8b8da963cbdd508ba10a1ed Mon Sep 17 00:00:00 2001 From: Nimish Agrawal Date: Tue, 30 Jul 2024 16:39:26 +0530 Subject: [PATCH 10/14] fix: name validation missed for bonus names --- src/azns_registry/lib.rs | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/azns_registry/lib.rs b/src/azns_registry/lib.rs index b3a3f2a..bd7e1e1 100644 --- a/src/azns_registry/lib.rs +++ b/src/azns_registry/lib.rs @@ -1552,8 +1552,17 @@ mod azns_registry { return Ok(()); } + let name = name.unwrap(); + if !self.is_name_allowed(&name) { + return Err(Error::NameNotAllowed); + } + // The name must not be a reserved name + if self.reserved_names.contains(&name) { + return Err(Error::CannotBuyReservedName); + } + let expiry_time = self.env().block_timestamp() + YEAR; - self.register_name(&name.unwrap(), &owner, expiry_time) + self.register_name(&name, &owner, expiry_time) } fn handle_payment(&mut self, price: Balance) -> Result<()> { @@ -3421,4 +3430,33 @@ mod tests { contract.renew(name1, 10, Some(name2.clone())).unwrap(); assert_eq!(contract.get_owner(name2), Ok(accounts.alice)) } + + #[ink::test] + fn redeem_bonus_name_fails_on_invalid_name() { + let mut contract = get_test_name_service(); + let name1 = "name-1".to_string(); + let name2 = "name-2".to_string(); + + set_next_caller(default_accounts().alice); + transfer_in::(1000); + + // Bonus names not passing the name-checker fails + let empty_name = String::new(); + assert_eq!( + contract.register_v2(name1.clone(), 10, None, Some(empty_name.clone()), false), + Err(Error::NameNotAllowed) + ); + + // Reserved names cannot be redeemed as bonus + let reserved_name = String::from("bob"); + let reserved_list = vec![(reserved_name.clone(), None)]; + contract + .add_reserved_names(reserved_list, false) + .expect("Failed to add reserved name"); + + assert_eq!( + contract.register_v2(name2.clone(), 10, None, Some(reserved_name.clone()), false), + Err(Error::CannotBuyReservedName) + ); + } } From 32960f471bc51cdfac06053e0fdadde78ceaf1ce Mon Sep 17 00:00:00 2001 From: Dennis Zoma Date: Tue, 30 Jul 2024 14:49:53 +0200 Subject: [PATCH 11/14] chore(scripts): Update dependencies --- package.json | 16 +- pnpm-lock.yaml | 547 +++++++++++++++++++++++-------------------------- 2 files changed, 267 insertions(+), 296 deletions(-) diff --git a/package.json b/package.json index bbd4ba0..b84d1a8 100644 --- a/package.json +++ b/package.json @@ -23,19 +23,19 @@ }, "devDependencies": { "@faker-js/faker": "^8.3.1", - "@polkadot/api": "^12.2.1", - "@polkadot/api-contract": "^12.2.1", + "@polkadot/api": "^12.2.3", + "@polkadot/api-contract": "^12.2.3", "@polkadot/keyring": "^13.0.2", - "@polkadot/types": "^12.2.1", + "@polkadot/types": "^12.2.3", "@polkadot/util": "^13.0.2", "@polkadot/util-crypto": "^13.0.2", - "@scio-labs/use-inkathon": "0.10.0", - "@types/node": "^20.14.12", - "@typescript-eslint/eslint-plugin": "^7.17.0", - "@typescript-eslint/parser": "^7.17.0", + "@scio-labs/use-inkathon": "0.11.0", + "@types/node": "^20.14.13", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", "bn.js": "^5.2.1", "cli-progress": "^3.12.0", - "csv": "^6.3.5", + "csv": "^6.3.10", "dotenv": "^16.3.1", "eslint": "^8.54.0", "eslint-config-prettier": "^9.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc58f4a..64b3857 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,17 +12,17 @@ importers: specifier: ^8.3.1 version: 8.4.1 '@polkadot/api': - specifier: ^12.2.1 - version: 12.2.1 + specifier: ^12.2.3 + version: 12.2.3 '@polkadot/api-contract': - specifier: ^12.2.1 - version: 12.2.1 + specifier: ^12.2.3 + version: 12.2.3 '@polkadot/keyring': specifier: ^13.0.2 version: 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) '@polkadot/types': - specifier: ^12.2.1 - version: 12.2.1 + specifier: ^12.2.3 + version: 12.2.3 '@polkadot/util': specifier: ^13.0.2 version: 13.0.2 @@ -30,17 +30,17 @@ importers: specifier: ^13.0.2 version: 13.0.2(@polkadot/util@13.0.2) '@scio-labs/use-inkathon': - specifier: 0.10.0 - version: 0.10.0(@nightlylabs/wallet-selector-polkadot@0.2.6(@polkadot/util@13.0.2))(@polkadot/api-contract@12.2.1)(@polkadot/api@12.2.1)(@polkadot/extension-inject@0.49.3(@polkadot/api@12.2.1)(@polkadot/util@13.0.2))(@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2))(@polkadot/types@12.2.1)(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 0.11.0 + version: 0.11.0(@nightlylabs/wallet-selector-polkadot@0.2.6(@polkadot/util@13.0.2))(@polkadot/api-contract@12.2.3)(@polkadot/api@12.2.3)(@polkadot/extension-inject@0.49.3(@polkadot/api@12.2.3)(@polkadot/util@13.0.2))(@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2))(@polkadot/types@12.2.3)(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/node': - specifier: ^20.14.12 - version: 20.14.12 + specifier: ^20.14.13 + version: 20.14.13 '@typescript-eslint/eslint-plugin': - specifier: ^7.17.0 - version: 7.17.0(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) + specifier: ^7.18.0 + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': - specifier: ^7.17.0 - version: 7.17.0(eslint@8.57.0)(typescript@5.5.4) + specifier: ^7.18.0 + version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) bn.js: specifier: ^5.2.1 version: 5.2.1 @@ -48,8 +48,8 @@ importers: specifier: ^3.12.0 version: 3.12.0 csv: - specifier: ^6.3.5 - version: 6.3.9 + specifier: ^6.3.10 + version: 6.3.10 dotenv: specifier: ^16.3.1 version: 16.4.5 @@ -79,24 +79,8 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.10': - resolution: {integrity: sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + '@babel/generator@7.25.0': + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.24.8': @@ -111,21 +95,21 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.8': - resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + '@babel/parser@7.25.0': + resolution: {integrity: sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.8': - resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + '@babel/traverse@7.25.2': + resolution: {integrity: sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.9': - resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} + '@babel/types@7.25.2': + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} '@esbuild/aix-ppc64@0.21.5': @@ -423,36 +407,36 @@ packages: resolution: {integrity: sha512-J0r1DT1M5y75iO1iwcpUBokKD3q6b22kWlPfiHEDNFydVw5vm7OTRBk9Njjl8rOnlSzcW/Ya8qWfV/wkrqHxUQ==} engines: {node: '>=16'} - '@polkadot/api-augment@12.2.1': - resolution: {integrity: sha512-HrIiTRHL4KhcgeMhu85I5DBB5M0VGj3uA805lALFs/WuwQkUAvJZb6NUKhizG/q+di3KKzoyu1RM9As2LIP5Yg==} + '@polkadot/api-augment@12.2.3': + resolution: {integrity: sha512-w3FYQAzVzZuD1xAUGwEeEftJr5N5oYigItrWkEc3nk+I3wUjNuHNlab3hCJZslRlHrE2zYVK5mGDDZYVPyn86Q==} engines: {node: '>=18'} '@polkadot/api-base@10.10.1': resolution: {integrity: sha512-joH2Ywxnn+AStkw+JWAdF3i3WJy4NcBYp0SWJM/WqGafWR/FuHnati2pcj/MHzkHT8JkBippmSSJFvsqRhlwcQ==} engines: {node: '>=16'} - '@polkadot/api-base@12.2.1': - resolution: {integrity: sha512-xyGt1/iK40/mLHrcmvjzdUWcOoES04+M9XlQ7WC3Hp+Tv/qk+WARXWkJKPIt3HqKrRu2mkyXvqPw2C/k7IhmHg==} + '@polkadot/api-base@12.2.3': + resolution: {integrity: sha512-fUJt3+uvBViwjz5tiiEE1VQkcDiXLzAPdex2OeECXopNnHt9gq8n6dS2arBzfG2eEDv/viCyjggj0wcSaV2yUg==} engines: {node: '>=18'} - '@polkadot/api-contract@12.2.1': - resolution: {integrity: sha512-MVMdhDHe6OmrAvObqdqmF31Xql9EiGFy+WWRar6sHNFkxugiQiJ19eI+om0lm7ki5ap9qusTgBKySvFsP62T+w==} + '@polkadot/api-contract@12.2.3': + resolution: {integrity: sha512-NEm8f94vXFRGn0Qm5QX04wKap2wup9ZKyVQ1wR1vXPPJbufsXf5ys7VNAzcWWYUoyeUChB57upinhda1ZY58Iw==} engines: {node: '>=18'} '@polkadot/api-derive@10.10.1': resolution: {integrity: sha512-Q9Ibs4eRPqdV8qnRzFPD3dlWNbLHxRqMqNTNPmNQwKPo5m6fcQbZ0UZy3yJ+PI9S4AQHGhsWtfoi5qW8006GHQ==} engines: {node: '>=16'} - '@polkadot/api-derive@12.2.1': - resolution: {integrity: sha512-zk8/20QsUomEipN/DKB2MIgnFMr6JNIv/L/Rf3PsZXGkzOgVnFpjCjbIhHT4IscZXkO7jWmjnA3ID6sJ2+yA9Q==} + '@polkadot/api-derive@12.2.3': + resolution: {integrity: sha512-zcQOuLoBeYXTMr2r9oPQiIJ7t4997eoQ1yM76KK2/2KTESKfJHus6nA0IK9fDk+c5vIdFKd/BJ0UukQ1AJiLLA==} engines: {node: '>=18'} '@polkadot/api@10.10.1': resolution: {integrity: sha512-YHVkmNvjGF4Eg3thAbVhj9UX3SXx+Yxk6yVuzsEcckEudIRHzL2ikIWGCfUprfzSeFNpUCKdJIi1tsxVHtA7Tg==} engines: {node: '>=16'} - '@polkadot/api@12.2.1': - resolution: {integrity: sha512-G4PfdfiM3HVXmYTYYhH2+exLFiHtNJsJqbmk7Hj8ZOx0MzSUAFhtgcNXojcwUeW3dDhZRCrhwUApq3P4bvLpug==} + '@polkadot/api@12.2.3': + resolution: {integrity: sha512-qpC29Uq0JZh/7Spcvmw+jUREG/ZYeb7miGUKomqHqU1hwBvyk9bqy7Vr10g3Hh0bkl5nP29YmnrLrG0NG+EtPg==} engines: {node: '>=18'} '@polkadot/extension-inject@0.46.5': @@ -495,16 +479,16 @@ packages: resolution: {integrity: sha512-PcvsX8DNV8BNDXXnY2K8F4mE7cWz7fKg8ykXNZTN8XUN6MrI4k/ohv7itYic7X5LaP25ZmQt5UiGyjKDGIELow==} engines: {node: '>=16'} - '@polkadot/rpc-augment@12.2.1': - resolution: {integrity: sha512-rKOyknD7rlZyvdsTq42EPSi4sPikBXRTb7svJ7+t0DwskSbpqLWOFvaX/hGhV4P0ZwobuIn5D82tkxG8c+mwDg==} + '@polkadot/rpc-augment@12.2.3': + resolution: {integrity: sha512-3V+Xp5cGb8hA0YZ4V4jXdC0POZGirQ63DkUnypmq86Fa1A7NCuVgD+s9ayOc8kNUMuKJIRKr3cLTj97S6f15lw==} engines: {node: '>=18'} '@polkadot/rpc-core@10.10.1': resolution: {integrity: sha512-awfFfJYsVF6W4DrqTj5RP00SSDRNB770FIoe1QE1Op4NcSrfeLpwh54HUJS716f4l5mOSYuvMp+zCbKzt8zKow==} engines: {node: '>=16'} - '@polkadot/rpc-core@12.2.1': - resolution: {integrity: sha512-ZAxA2Ymi+9ajyW89yD5W7R80fbgTX15Bu7DujhJZQXl7Gd+bUtejdvf8HhleMHRLKSK+YD6+c0qON4ucs2eC4A==} + '@polkadot/rpc-core@12.2.3': + resolution: {integrity: sha512-XJyPpwYBe+ijlivEKcRYRlQ5vx/CUXG0PZ23/TLKMRNlh5BVAC4HK/4dzBmOc3FT0ulOMbu7/TH+mk7ppQHrKg==} engines: {node: '>=18'} '@polkadot/rpc-provider@10.10.1': @@ -515,8 +499,8 @@ packages: resolution: {integrity: sha512-oJ7tatVXYJ0L7NpNiGd69D558HG5y5ZDmH2Bp9Dd4kFTQIiV8A39SlWwWUPCjSsen9lqSvvprNLnG/VHTpenbw==} engines: {node: '>=18'} - '@polkadot/rpc-provider@12.2.1': - resolution: {integrity: sha512-8RdJjmbJygCP4MZ4xrqUUqG0X4EQsT3A4QyZ5lQvxEVvY4Ti2ExIwpVYzYbaSpGut5kdg3atI0jh+qTju/s29Q==} + '@polkadot/rpc-provider@12.2.3': + resolution: {integrity: sha512-hzw6YGV+3daU49rsEPmdl/UDupAmc3lqBYN2gj7lxQCMSqYjBr0Pj1ScGJJXzlR8ZyiY97e/TGIW13W6ivmIGQ==} engines: {node: '>=18'} '@polkadot/types-augment@10.10.1': @@ -527,8 +511,8 @@ packages: resolution: {integrity: sha512-TcrLhf95FNFin61qmVgOgayzQB/RqVsSg9thAso1Fh6pX4HSbvI35aGPBAn3SkA6R+9/TmtECirpSNLtIGFn0g==} engines: {node: '>=18'} - '@polkadot/types-augment@12.2.1': - resolution: {integrity: sha512-4lVAc3HjcP6gjvX6Vea4/Fo7C98ktuavLtxVD5rYBCsNr8IPjG2kc21N+FL1pcv0vDiE0U7RnalWUhdX2nlZQg==} + '@polkadot/types-augment@12.2.3': + resolution: {integrity: sha512-RLHWl4TIgJqWFuGDgstKTYqB7EWGx4oJ5nzIdKCQgYAeOi+LFYXyZjE2ffhmX258VPsSXu4syeQpcBIEWns8kA==} engines: {node: '>=18'} '@polkadot/types-codec@10.10.1': @@ -539,8 +523,8 @@ packages: resolution: {integrity: sha512-AiQ2Vv2lbZVxEdRCN8XSERiWlOWa2cTDLnpAId78EnCtx4HLKYQSd+Jk9Y4BgO35R79mchK4iG+w6gZ+ukG2bg==} engines: {node: '>=18'} - '@polkadot/types-codec@12.2.1': - resolution: {integrity: sha512-lOtY/9rTHrk8c9cQsks3vcNjd2VAC7KEgaCgn/FNyIFuwWP16lBH7SZXJBFq362nGJBiBEvembSDUdtpSYfRng==} + '@polkadot/types-codec@12.2.3': + resolution: {integrity: sha512-oBHAEXyAMZ6ghEEgKW95cc4OFdkxiRKazx18Dk433sWk2HGkwGoKd9uK6xdelMgO1EnbBzZwc2epOhKH7rTEmQ==} engines: {node: '>=18'} '@polkadot/types-create@10.10.1': @@ -551,16 +535,16 @@ packages: resolution: {integrity: sha512-Usn1jqrz35SXgCDAqSXy7mnD6j4RvB4wyzTAZipFA6DGmhwyxxIgOzlWQWDb+1PtPKo9vtMzen5IJ+7w5chIeA==} engines: {node: '>=18'} - '@polkadot/types-create@12.2.1': - resolution: {integrity: sha512-ifhQUMJ/mpXC9+9DZ+/THyfU+KEk54FkDfGJ6IU8TgrYI9WynGsnToNjcv6ZLHMIg6rMkPBfUOxpGvZR4cVMVg==} + '@polkadot/types-create@12.2.3': + resolution: {integrity: sha512-4XR04QFgKeHZEj7NyBK3A55EgzmGZtC175Hbq5y3+j8XV84amOOhVqj7gDQqnSyRMAtl7+HSsfpx3+Loh+4l+g==} engines: {node: '>=18'} '@polkadot/types-known@10.10.1': resolution: {integrity: sha512-yRa1lbDRqg3V/zoa0vSwdGOiYTIWktILW8OfkaLDExTu0GZBSbVHZlLAta52XVpA9Zww7mrUUC9+iernOwk//w==} engines: {node: '>=16'} - '@polkadot/types-known@12.2.1': - resolution: {integrity: sha512-am/WAUabsKgsfQ6vaPfz4QvVdNGQDXc1/WL7n0mAD7iJDwzW5QbzkSlmSiUHrFtz+zSwREEQL+2nPEDQpVMDlg==} + '@polkadot/types-known@12.2.3': + resolution: {integrity: sha512-hB3fBlZ51dBaGRJf6ParvoqCSig9ovqjDgpFwysewXsc74GRoPPR7RQFw/hITxwdKL5ldyTZnBIGBxROiF86Tg==} engines: {node: '>=18'} '@polkadot/types-support@10.10.1': @@ -571,8 +555,8 @@ packages: resolution: {integrity: sha512-4gEPfz36XRQIY7inKq0HXNVVhR6HvXtm7yrEmuBuhM86LE0lQQBkISUSgR358bdn2OFSLMxMoRNoh3kcDvdGDQ==} engines: {node: '>=18'} - '@polkadot/types-support@12.2.1': - resolution: {integrity: sha512-rPquPHi0KKCnyVEeVbFaSjlxMtkvg7I7UwFQRfwbUanOsI4jgR4sqYXgTJSWZwRiiVe0TmfSY5VMX4Gp06bJ9w==} + '@polkadot/types-support@12.2.3': + resolution: {integrity: sha512-/YVZ0j126el/5e/BTrhw1SuDmlyV394zKak7LkYcAJ8IyDmT53cajMK2TQe03uVsE/vveligkYmJ24IEjZ+DRg==} engines: {node: '>=18'} '@polkadot/types@10.10.1': @@ -583,8 +567,8 @@ packages: resolution: {integrity: sha512-Hfvg1ZgJlYyzGSAVrDIpp3vullgxrjOlh/CSThd/PI4TTN1qHoPSFm2hs77k3mKkOzg+LrWsLE0P/LP2XddYcw==} engines: {node: '>=18'} - '@polkadot/types@12.2.1': - resolution: {integrity: sha512-axVbEnWLU9H7TMgRyECV79FWbfB4bNU9tkrCrBiOifTpJ4DT9AIbkNTgxI+wexywFbn8ATG6y1kw8leUnLDYvg==} + '@polkadot/types@12.2.3': + resolution: {integrity: sha512-p6y3WdZBvdgT5+m+gvPaHXUaei1DQjMI9BxhzHS5FfOvDMSDf0uBacamtRmkdII5bJuUgGBYG9BjHic8yWu0/g==} engines: {node: '>=18'} '@polkadot/util-crypto@12.6.2': @@ -708,9 +692,9 @@ packages: resolution: {integrity: sha512-nC5e2eY5D5ZR5teQOB7ib+dWLbmNws86cTz3BjKCalSMBBIn6i3V9ElgABpierBmnSJe9D94EyrH1BxdVfDxUg==} engines: {node: '>=18'} - '@scio-labs/use-inkathon@0.10.0': - resolution: {integrity: sha512-VZreei2wtY+MmG7QcmBJ9IAl5meeo99Se6XyCtmV4fdRw+AInpLFXGPYwJVVJy29QlG+7ZCp7AJISJpeAtfDhA==} - engines: {node: '>=18 <=20', pnpm: '8'} + '@scio-labs/use-inkathon@0.11.0': + resolution: {integrity: sha512-EAZ4QNzUa0pUYNY8Z7sFSWFtGMzWmGYFf5J+lDUskSascwoNpqVkmLauLPnqua/XCoF3t8eLDaKZNnrF+6JKDQ==} + engines: {node: '>=18'} peerDependencies: '@nightlylabs/wallet-selector-polkadot': '>=0.1.10' '@polkadot/api': '>=10' @@ -732,11 +716,8 @@ packages: '@substrate/connect-extension-protocol@2.0.0': resolution: {integrity: sha512-nKu8pDrE3LNCEgJjZe1iGXzaD6OSIDD4Xzz/yo4KO9mQ6LBvf49BVrt4qxBFGL6++NneLiWUZGoh+VSd4PyVIg==} - '@substrate/connect-known-chains@1.1.11': - resolution: {integrity: sha512-jl6RKTn9bDezKqlOj2X9B/BVftIqqnU9tgr/9WXMCBdLedzQaO/DRRb0c5VqF1+DH8dHV2q5MyKN9gR+KGt7ow==} - - '@substrate/connect-known-chains@1.1.9': - resolution: {integrity: sha512-P11S0GtHaOGm4lnwZ2YUSugH3PZ9eYpRtaZGEx0yG7f/A9UBh7KhinRBMgC/NIGAi58l5uQeWm0HFZG09PF7CQ==} + '@substrate/connect-known-chains@1.2.0': + resolution: {integrity: sha512-BgcTHKteSAcEQs5ySNTYOO6ODQHVHwPgDrjYQhL0r8ZygY4cyXa5e2O//3tXNJiDopFHdqO8FBAy2Gbht0i0PA==} '@substrate/connect@0.7.33': resolution: {integrity: sha512-1B984/bmXVQvTT9oV3c3b7215lvWmulP9rfP3T3Ri+OU3uIsyCzYw0A+XG6J8/jgO2FnroeNIBWlgoLaUM1uzw==} @@ -766,14 +747,14 @@ packages: '@types/bn.js@5.1.5': resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} - '@types/node@20.14.12': - resolution: {integrity: sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==} + '@types/node@20.14.13': + resolution: {integrity: sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@typescript-eslint/eslint-plugin@7.17.0': - resolution: {integrity: sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==} + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -783,8 +764,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.17.0': - resolution: {integrity: sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==} + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -793,12 +774,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.17.0': - resolution: {integrity: sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==} + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.17.0': - resolution: {integrity: sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==} + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -807,12 +788,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.17.0': - resolution: {integrity: sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==} + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/typescript-estree@7.17.0': - resolution: {integrity: sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==} + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -820,14 +801,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.17.0': - resolution: {integrity: sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==} + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.17.0': - resolution: {integrity: sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==} + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} '@ungap/structured-clone@1.2.0': @@ -943,8 +924,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001643: - resolution: {integrity: sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==} + caniuse-lite@1.0.30001644: + resolution: {integrity: sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -1000,11 +981,11 @@ packages: csv-parse@5.5.6: resolution: {integrity: sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==} - csv-stringify@6.5.0: - resolution: {integrity: sha512-edlXFVKcUx7r8Vx5zQucsuMg4wb/xT6qyz+Sr1vnLrdXqlLD1+UKyWNyZ9zn6mUW1ewmGxrpVwAcChGF0HQ/2Q==} + csv-stringify@6.5.1: + resolution: {integrity: sha512-+9lpZfwpLntpTIEpFbwQyWuW/hmI/eHuJZD1XzeZpfZTqkf1fyvBbBLXTJJMsBuuS11uTShMqPwzx4A6ffXgRQ==} - csv@6.3.9: - resolution: {integrity: sha512-eiN+Qu8NwSLxZYia6WzB8xlX/rAQ/8EgK5A4dIF7Bz96mzcr5dW1jlcNmjG0QWySWKfPdCerH3RQ96ZqqsE8cA==} + csv@6.3.10: + resolution: {integrity: sha512-5NYZG4AN2ZUthmNxIudgBEdMPUnbQHu9V4QTzBPqQzUP3KQsFiJo+8HQ0+oVxj1PomIT1/f67VI1QH/hsrZLKA==} engines: {node: '>= 0.1.90'} data-uri-to-buffer@4.0.1: @@ -1020,6 +1001,15 @@ packages: supports-color: optional: true + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1044,8 +1034,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.0: - resolution: {integrity: sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==} + electron-to-chromium@1.5.3: + resolution: {integrity: sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1535,8 +1525,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + postcss@8.4.40: + resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -1684,8 +1674,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tailwindcss@3.4.6: - resolution: {integrity: sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==} + tailwindcss@3.4.7: + resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -1804,8 +1794,8 @@ packages: utf-8-validate: optional: true - yaml@2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} engines: {node: '>= 14'} hasBin: true @@ -1822,30 +1812,13 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/generator@7.24.10': + '@babel/generator@7.25.0': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.2 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.9 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.9 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.9 - - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.9 - '@babel/helper-string-parser@7.24.8': {} '@babel/helper-validator-identifier@7.24.7': {} @@ -1857,32 +1830,29 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/parser@7.24.8': + '@babel/parser@7.25.0': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.2 - '@babel/template@7.24.7': + '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 + '@babel/parser': 7.25.0 + '@babel/types': 7.25.2 - '@babel/traverse@7.24.8': + '@babel/traverse@7.25.2': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.10 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 - debug: 4.3.5 + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.0 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.9': + '@babel/types@7.25.2': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 @@ -2088,11 +2058,11 @@ snapshots: '@nightlylabs/wallet-selector-modal@0.2.1': dependencies: '@nightlylabs/qr-code': 2.0.4 - autoprefixer: 10.4.19(postcss@8.4.39) + autoprefixer: 10.4.19(postcss@8.4.40) lit: 2.8.0 - postcss: 8.4.39 - postcss-lit: 1.1.1(postcss@8.4.39) - tailwindcss: 3.4.6 + postcss: 8.4.40 + postcss-lit: 1.1.1(postcss@8.4.40) + tailwindcss: 3.4.7 transitivePeerDependencies: - supports-color - ts-node @@ -2218,13 +2188,13 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/api-augment@12.2.1': + '@polkadot/api-augment@12.2.3': dependencies: - '@polkadot/api-base': 12.2.1 - '@polkadot/rpc-augment': 12.2.1 - '@polkadot/types': 12.2.1 - '@polkadot/types-augment': 12.2.1 - '@polkadot/types-codec': 12.2.1 + '@polkadot/api-base': 12.2.3 + '@polkadot/rpc-augment': 12.2.3 + '@polkadot/types': 12.2.3 + '@polkadot/types-augment': 12.2.3 + '@polkadot/types-codec': 12.2.3 '@polkadot/util': 13.0.2 tslib: 2.6.3 transitivePeerDependencies: @@ -2244,10 +2214,10 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/api-base@12.2.1': + '@polkadot/api-base@12.2.3': dependencies: - '@polkadot/rpc-core': 12.2.1 - '@polkadot/types': 12.2.1 + '@polkadot/rpc-core': 12.2.3 + '@polkadot/types': 12.2.3 '@polkadot/util': 13.0.2 rxjs: 7.8.1 tslib: 2.6.3 @@ -2256,13 +2226,13 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/api-contract@12.2.1': + '@polkadot/api-contract@12.2.3': dependencies: - '@polkadot/api': 12.2.1 - '@polkadot/api-augment': 12.2.1 - '@polkadot/types': 12.2.1 - '@polkadot/types-codec': 12.2.1 - '@polkadot/types-create': 12.2.1 + '@polkadot/api': 12.2.3 + '@polkadot/api-augment': 12.2.3 + '@polkadot/types': 12.2.3 + '@polkadot/types-codec': 12.2.3 + '@polkadot/types-create': 12.2.3 '@polkadot/util': 13.0.2 '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) rxjs: 7.8.1 @@ -2289,14 +2259,14 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/api-derive@12.2.1': + '@polkadot/api-derive@12.2.3': dependencies: - '@polkadot/api': 12.2.1 - '@polkadot/api-augment': 12.2.1 - '@polkadot/api-base': 12.2.1 - '@polkadot/rpc-core': 12.2.1 - '@polkadot/types': 12.2.1 - '@polkadot/types-codec': 12.2.1 + '@polkadot/api': 12.2.3 + '@polkadot/api-augment': 12.2.3 + '@polkadot/api-base': 12.2.3 + '@polkadot/rpc-core': 12.2.3 + '@polkadot/types': 12.2.3 + '@polkadot/types-codec': 12.2.3 '@polkadot/util': 13.0.2 '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) rxjs: 7.8.1 @@ -2330,20 +2300,20 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/api@12.2.1': + '@polkadot/api@12.2.3': dependencies: - '@polkadot/api-augment': 12.2.1 - '@polkadot/api-base': 12.2.1 - '@polkadot/api-derive': 12.2.1 + '@polkadot/api-augment': 12.2.3 + '@polkadot/api-base': 12.2.3 + '@polkadot/api-derive': 12.2.3 '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) - '@polkadot/rpc-augment': 12.2.1 - '@polkadot/rpc-core': 12.2.1 - '@polkadot/rpc-provider': 12.2.1 - '@polkadot/types': 12.2.1 - '@polkadot/types-augment': 12.2.1 - '@polkadot/types-codec': 12.2.1 - '@polkadot/types-create': 12.2.1 - '@polkadot/types-known': 12.2.1 + '@polkadot/rpc-augment': 12.2.3 + '@polkadot/rpc-core': 12.2.3 + '@polkadot/rpc-provider': 12.2.3 + '@polkadot/types': 12.2.3 + '@polkadot/types-augment': 12.2.3 + '@polkadot/types-codec': 12.2.3 + '@polkadot/types-create': 12.2.3 + '@polkadot/types-known': 12.2.3 '@polkadot/util': 13.0.2 '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) eventemitter3: 5.0.1 @@ -2382,11 +2352,11 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/extension-inject@0.49.3(@polkadot/api@12.2.1)(@polkadot/util@13.0.2)': + '@polkadot/extension-inject@0.49.3(@polkadot/api@12.2.3)(@polkadot/util@13.0.2)': dependencies: - '@polkadot/api': 12.2.1 - '@polkadot/rpc-provider': 12.2.1 - '@polkadot/types': 12.2.1 + '@polkadot/api': 12.2.3 + '@polkadot/rpc-provider': 12.2.3 + '@polkadot/types': 12.2.3 '@polkadot/util': 13.0.2 '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) '@polkadot/x-global': 13.0.2 @@ -2432,11 +2402,11 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/rpc-augment@12.2.1': + '@polkadot/rpc-augment@12.2.3': dependencies: - '@polkadot/rpc-core': 12.2.1 - '@polkadot/types': 12.2.1 - '@polkadot/types-codec': 12.2.1 + '@polkadot/rpc-core': 12.2.3 + '@polkadot/types': 12.2.3 + '@polkadot/types-codec': 12.2.3 '@polkadot/util': 13.0.2 tslib: 2.6.3 transitivePeerDependencies: @@ -2457,11 +2427,11 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/rpc-core@12.2.1': + '@polkadot/rpc-core@12.2.3': dependencies: - '@polkadot/rpc-augment': 12.2.1 - '@polkadot/rpc-provider': 12.2.1 - '@polkadot/types': 12.2.1 + '@polkadot/rpc-augment': 12.2.3 + '@polkadot/rpc-provider': 12.2.3 + '@polkadot/types': 12.2.3 '@polkadot/util': 13.0.2 rxjs: 7.8.1 tslib: 2.6.3 @@ -2512,11 +2482,11 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/rpc-provider@12.2.1': + '@polkadot/rpc-provider@12.2.3': dependencies: '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) - '@polkadot/types': 12.2.1 - '@polkadot/types-support': 12.2.1 + '@polkadot/types': 12.2.3 + '@polkadot/types-support': 12.2.3 '@polkadot/util': 13.0.2 '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) '@polkadot/x-fetch': 13.0.2 @@ -2547,10 +2517,10 @@ snapshots: '@polkadot/util': 12.6.2 tslib: 2.6.3 - '@polkadot/types-augment@12.2.1': + '@polkadot/types-augment@12.2.3': dependencies: - '@polkadot/types': 12.2.1 - '@polkadot/types-codec': 12.2.1 + '@polkadot/types': 12.2.3 + '@polkadot/types-codec': 12.2.3 '@polkadot/util': 13.0.2 tslib: 2.6.3 @@ -2566,7 +2536,7 @@ snapshots: '@polkadot/x-bigint': 12.6.2 tslib: 2.6.3 - '@polkadot/types-codec@12.2.1': + '@polkadot/types-codec@12.2.3': dependencies: '@polkadot/util': 13.0.2 '@polkadot/x-bigint': 13.0.2 @@ -2584,9 +2554,9 @@ snapshots: '@polkadot/util': 12.6.2 tslib: 2.6.3 - '@polkadot/types-create@12.2.1': + '@polkadot/types-create@12.2.3': dependencies: - '@polkadot/types-codec': 12.2.1 + '@polkadot/types-codec': 12.2.3 '@polkadot/util': 13.0.2 tslib: 2.6.3 @@ -2599,12 +2569,12 @@ snapshots: '@polkadot/util': 12.6.2 tslib: 2.6.3 - '@polkadot/types-known@12.2.1': + '@polkadot/types-known@12.2.3': dependencies: '@polkadot/networks': 13.0.2 - '@polkadot/types': 12.2.1 - '@polkadot/types-codec': 12.2.1 - '@polkadot/types-create': 12.2.1 + '@polkadot/types': 12.2.3 + '@polkadot/types-codec': 12.2.3 + '@polkadot/types-create': 12.2.3 '@polkadot/util': 13.0.2 tslib: 2.6.3 @@ -2618,7 +2588,7 @@ snapshots: '@polkadot/util': 12.6.2 tslib: 2.6.3 - '@polkadot/types-support@12.2.1': + '@polkadot/types-support@12.2.3': dependencies: '@polkadot/util': 13.0.2 tslib: 2.6.3 @@ -2645,12 +2615,12 @@ snapshots: rxjs: 7.8.1 tslib: 2.6.3 - '@polkadot/types@12.2.1': + '@polkadot/types@12.2.3': dependencies: '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) - '@polkadot/types-augment': 12.2.1 - '@polkadot/types-codec': 12.2.1 - '@polkadot/types-create': 12.2.1 + '@polkadot/types-augment': 12.2.3 + '@polkadot/types-codec': 12.2.3 + '@polkadot/types-create': 12.2.3 '@polkadot/util': 13.0.2 '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) rxjs: 7.8.1 @@ -2920,14 +2890,14 @@ snapshots: - bufferutil - utf-8-validate - '@scio-labs/use-inkathon@0.10.0(@nightlylabs/wallet-selector-polkadot@0.2.6(@polkadot/util@13.0.2))(@polkadot/api-contract@12.2.1)(@polkadot/api@12.2.1)(@polkadot/extension-inject@0.49.3(@polkadot/api@12.2.1)(@polkadot/util@13.0.2))(@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2))(@polkadot/types@12.2.1)(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@scio-labs/use-inkathon@0.11.0(@nightlylabs/wallet-selector-polkadot@0.2.6(@polkadot/util@13.0.2))(@polkadot/api-contract@12.2.3)(@polkadot/api@12.2.3)(@polkadot/extension-inject@0.49.3(@polkadot/api@12.2.3)(@polkadot/util@13.0.2))(@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2))(@polkadot/types@12.2.3)(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nightlylabs/wallet-selector-polkadot': 0.2.6(@polkadot/util@13.0.2) - '@polkadot/api': 12.2.1 - '@polkadot/api-contract': 12.2.1 - '@polkadot/extension-inject': 0.49.3(@polkadot/api@12.2.1)(@polkadot/util@13.0.2) + '@polkadot/api': 12.2.3 + '@polkadot/api-contract': 12.2.3 + '@polkadot/extension-inject': 0.49.3(@polkadot/api@12.2.3)(@polkadot/util@13.0.2) '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) - '@polkadot/types': 12.2.1 + '@polkadot/types': 12.2.3 '@polkadot/util': 13.0.2 '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) react: 18.3.1 @@ -2941,10 +2911,7 @@ snapshots: '@substrate/connect-extension-protocol@2.0.0': optional: true - '@substrate/connect-known-chains@1.1.11': - optional: true - - '@substrate/connect-known-chains@1.1.9': + '@substrate/connect-known-chains@1.2.0': optional: true '@substrate/connect@0.7.33': @@ -2959,7 +2926,7 @@ snapshots: '@substrate/connect@0.8.10': dependencies: '@substrate/connect-extension-protocol': 2.0.0 - '@substrate/connect-known-chains': 1.1.9 + '@substrate/connect-known-chains': 1.2.0 '@substrate/light-client-extension-helpers': 0.0.6(smoldot@2.0.22) smoldot: 2.0.22 transitivePeerDependencies: @@ -2970,7 +2937,7 @@ snapshots: '@substrate/connect@0.8.8': dependencies: '@substrate/connect-extension-protocol': 2.0.0 - '@substrate/connect-known-chains': 1.1.11 + '@substrate/connect-known-chains': 1.2.0 '@substrate/light-client-extension-helpers': 0.0.4(smoldot@2.0.22) smoldot: 2.0.22 transitivePeerDependencies: @@ -2985,7 +2952,7 @@ snapshots: '@polkadot-api/json-rpc-provider-proxy': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 '@polkadot-api/substrate-client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 '@substrate/connect-extension-protocol': 2.0.0 - '@substrate/connect-known-chains': 1.1.11 + '@substrate/connect-known-chains': 1.2.0 rxjs: 7.8.1 smoldot: 2.0.22 optional: true @@ -2997,7 +2964,7 @@ snapshots: '@polkadot-api/observable-client': 0.1.0(rxjs@7.8.1) '@polkadot-api/substrate-client': 0.0.1 '@substrate/connect-extension-protocol': 2.0.0 - '@substrate/connect-known-chains': 1.1.9 + '@substrate/connect-known-chains': 1.2.0 rxjs: 7.8.1 smoldot: 2.0.22 optional: true @@ -3006,22 +2973,22 @@ snapshots: '@types/bn.js@5.1.5': dependencies: - '@types/node': 20.14.12 + '@types/node': 20.14.13 - '@types/node@20.14.12': + '@types/node@20.14.13': dependencies: undici-types: 5.26.5 '@types/trusted-types@2.0.7': {} - '@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 7.17.0 - '@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.17.0 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -3032,12 +2999,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 7.17.0 - '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.17.0 + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.5 eslint: 8.57.0 optionalDependencies: @@ -3045,16 +3012,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.17.0': + '@typescript-eslint/scope-manager@7.18.0': dependencies: - '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/visitor-keys': 7.17.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) - debug: 4.3.5 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + debug: 4.3.6 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: @@ -3062,12 +3029,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.17.0': {} + '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@7.17.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/visitor-keys': 7.17.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 @@ -3079,20 +3046,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.17.0 - '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.17.0': + '@typescript-eslint/visitor-keys@7.18.0': dependencies: - '@typescript-eslint/types': 7.17.0 + '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -3158,14 +3125,14 @@ snapshots: array-union@2.1.0: {} - autoprefixer@10.4.19(postcss@8.4.39): + autoprefixer@10.4.19(postcss@8.4.40): dependencies: browserslist: 4.23.2 - caniuse-lite: 1.0.30001643 + caniuse-lite: 1.0.30001644 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.4.39 + postcss: 8.4.40 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -3189,8 +3156,8 @@ snapshots: browserslist@4.23.2: dependencies: - caniuse-lite: 1.0.30001643 - electron-to-chromium: 1.5.0 + caniuse-lite: 1.0.30001644 + electron-to-chromium: 1.5.3 node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.2) @@ -3198,7 +3165,7 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001643: {} + caniuse-lite@1.0.30001644: {} chalk@2.4.2: dependencies: @@ -3261,13 +3228,13 @@ snapshots: csv-parse@5.5.6: {} - csv-stringify@6.5.0: {} + csv-stringify@6.5.1: {} - csv@6.3.9: + csv@6.3.10: dependencies: csv-generate: 4.4.1 csv-parse: 5.5.6 - csv-stringify: 6.5.0 + csv-stringify: 6.5.1 stream-transform: 3.3.2 data-uri-to-buffer@4.0.1: {} @@ -3276,6 +3243,10 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.6: + dependencies: + ms: 2.1.2 + deep-is@0.1.4: {} didyoumean@1.2.2: {} @@ -3294,7 +3265,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.0: {} + electron-to-chromium@1.5.3: {} emoji-regex@8.0.0: {} @@ -3671,7 +3642,7 @@ snapshots: nock@13.5.4: dependencies: - debug: 4.3.5 + debug: 4.3.6 json-stringify-safe: 5.0.1 propagate: 2.0.1 transitivePeerDependencies: @@ -3753,38 +3724,38 @@ snapshots: pirates@4.0.6: {} - postcss-import@15.1.0(postcss@8.4.39): + postcss-import@15.1.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 + postcss: 8.4.40 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.39): + postcss-js@4.0.1(postcss@8.4.40): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.39 + postcss: 8.4.40 - postcss-lit@1.1.1(postcss@8.4.39): + postcss-lit@1.1.1(postcss@8.4.40): dependencies: - '@babel/generator': 7.24.10 - '@babel/parser': 7.24.8 - '@babel/traverse': 7.24.8 + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.0 + '@babel/traverse': 7.25.2 lilconfig: 2.1.0 - postcss: 8.4.39 + postcss: 8.4.40 transitivePeerDependencies: - supports-color - postcss-load-config@4.0.2(postcss@8.4.39): + postcss-load-config@4.0.2(postcss@8.4.40): dependencies: lilconfig: 3.1.2 - yaml: 2.4.5 + yaml: 2.5.0 optionalDependencies: - postcss: 8.4.39 + postcss: 8.4.40 - postcss-nested@6.2.0(postcss@8.4.39): + postcss-nested@6.2.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 + postcss: 8.4.40 postcss-selector-parser: 6.1.1 postcss-selector-parser@6.1.1: @@ -3794,7 +3765,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.39: + postcss@8.4.40: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 @@ -3937,7 +3908,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tailwindcss@3.4.6: + tailwindcss@3.4.7: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -3953,11 +3924,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.1 - postcss: 8.4.39 - postcss-import: 15.1.0(postcss@8.4.39) - postcss-js: 4.0.1(postcss@8.4.39) - postcss-load-config: 4.0.2(postcss@8.4.39) - postcss-nested: 6.2.0(postcss@8.4.39) + postcss: 8.4.40 + postcss-import: 15.1.0(postcss@8.4.40) + postcss-js: 4.0.1(postcss@8.4.40) + postcss-load-config: 4.0.2(postcss@8.4.40) + postcss-nested: 6.2.0(postcss@8.4.40) postcss-selector-parser: 6.1.1 resolve: 1.22.8 sucrase: 3.35.0 @@ -4058,6 +4029,6 @@ snapshots: ws@8.18.0: {} - yaml@2.4.5: {} + yaml@2.5.0: {} yocto-queue@0.1.0: {} From ab64a72a9f1cb441fa09262b542ab06b9e3306d0 Mon Sep 17 00:00:00 2001 From: Dennis Zoma Date: Tue, 30 Jul 2024 14:50:10 +0200 Subject: [PATCH 12/14] feat(scripts): Ensure chopsticks compatability by passing nonce manually --- scripts/deploy/deployFeeCalculator.ts | 17 +++++++++++------ scripts/deploy/deployNameChecker.ts | 22 ++++++++++++++++------ scripts/deploy/deployRegistry.ts | 18 +++++++++++------- scripts/deploy/deployRouter.ts | 3 ++- 4 files changed, 40 insertions(+), 20 deletions(-) diff --git a/scripts/deploy/deployFeeCalculator.ts b/scripts/deploy/deployFeeCalculator.ts index 4a4f113..1b2fcaf 100644 --- a/scripts/deploy/deployFeeCalculator.ts +++ b/scripts/deploy/deployFeeCalculator.ts @@ -32,11 +32,16 @@ export const deployFeeCalculator: DeployFn = async ( customArgs, ) const { abi, wasm } = await getDeploymentData('azns_fee_calculator') + const nonce = await api.rpc.system.accountNextIndex(account.address) - return await deployContract(api, account, abi, wasm, 'new', [ - args.admin, - args.maxRegistrationDuration, - args.commonPrice, - args.pricePoints, - ]) + return await deployContract( + api, + account, + abi, + wasm, + 'new', + [args.admin, args.maxRegistrationDuration, args.commonPrice, args.pricePoints], + undefined, + { nonce }, + ) } diff --git a/scripts/deploy/deployNameChecker.ts b/scripts/deploy/deployNameChecker.ts index 6dced04..10f1e81 100644 --- a/scripts/deploy/deployNameChecker.ts +++ b/scripts/deploy/deployNameChecker.ts @@ -29,11 +29,21 @@ export const deployNameChecker: DeployFn = async ( customArgs, ) const { abi, wasm } = await getDeploymentData('azns_name_checker') + const nonce = await api.rpc.system.accountNextIndex(account.address) - return await deployContract(api, account, abi, wasm, 'new', [ - args.admin, - args.allowedLength, - args.allowedUnicodeRanges, - args.disallowedUnicodeRangesForEdges, - ]) + return await deployContract( + api, + account, + abi, + wasm, + 'new', + [ + args.admin, + args.allowedLength, + args.allowedUnicodeRanges, + args.disallowedUnicodeRangesForEdges, + ], + undefined, + { nonce }, + ) } diff --git a/scripts/deploy/deployRegistry.ts b/scripts/deploy/deployRegistry.ts index 74695af..628a683 100644 --- a/scripts/deploy/deployRegistry.ts +++ b/scripts/deploy/deployRegistry.ts @@ -24,12 +24,16 @@ export const deployRegistry: DeployFn = async ({ api, account }, c customArgs, ) const { abi, wasm } = await getDeploymentData('azns_registry') + const nonce = await api.rpc.system.accountNextIndex(account.address) - return await deployContract(api, account, abi, wasm, 'new', [ - args.admin, - args.nameCheckerAddress, - args.feeCalculatorAddress, - args.tld, - args.baseUri, - ]) + return await deployContract( + api, + account, + abi, + wasm, + 'new', + [args.admin, args.nameCheckerAddress, args.feeCalculatorAddress, args.tld, args.baseUri], + undefined, + { nonce }, + ) } diff --git a/scripts/deploy/deployRouter.ts b/scripts/deploy/deployRouter.ts index c652c2e..7ec9d61 100644 --- a/scripts/deploy/deployRouter.ts +++ b/scripts/deploy/deployRouter.ts @@ -18,8 +18,9 @@ export const deployRouter: DeployFn = async ({ api, account }, custo customArgs, ) const { abi, wasm } = await getDeploymentData('azns_router') + const nonce = await api.rpc.system.accountNextIndex(account.address) - return await deployContract(api, account, abi, wasm, 'new', [args.admin]) + return await deployContract(api, account, abi, wasm, 'new', [args.admin], undefined, { nonce }) } /** From 671d233b69c9718c68e4cd3a11d54e3fd70627b6 Mon Sep 17 00:00:00 2001 From: Nimish Agrawal Date: Tue, 30 Jul 2024 21:02:20 +0530 Subject: [PATCH 13/14] feat: bonus-name must be atleast 5 characters --- src/azns_registry/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/azns_registry/lib.rs b/src/azns_registry/lib.rs index bd7e1e1..53c4191 100644 --- a/src/azns_registry/lib.rs +++ b/src/azns_registry/lib.rs @@ -1553,7 +1553,7 @@ mod azns_registry { } let name = name.unwrap(); - if !self.is_name_allowed(&name) { + if !self.is_name_allowed(&name) || name.len() < 5 { return Err(Error::NameNotAllowed); } // The name must not be a reserved name @@ -3448,7 +3448,7 @@ mod tests { ); // Reserved names cannot be redeemed as bonus - let reserved_name = String::from("bob"); + let reserved_name = String::from("bobby"); let reserved_list = vec![(reserved_name.clone(), None)]; contract .add_reserved_names(reserved_list, false) From cc5371789c6dabaa0761c55b65356837a1b20d82 Mon Sep 17 00:00:00 2001 From: Nimish Agrawal Date: Wed, 31 Jul 2024 19:35:55 +0530 Subject: [PATCH 14/14] chore: bump `azns_(fee_calculator|registry)` to 1.1.0 from 1.0.0 --- src/azns_fee_calculator/Cargo.toml | 2 +- src/azns_registry/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/azns_fee_calculator/Cargo.toml b/src/azns_fee_calculator/Cargo.toml index c54a7b6..6aaeb3e 100755 --- a/src/azns_fee_calculator/Cargo.toml +++ b/src/azns_fee_calculator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "azns_fee_calculator" -version = "1.0.0" +version = "1.1.0" authors = ["AZERO.ID "] edition = "2021" diff --git a/src/azns_registry/Cargo.toml b/src/azns_registry/Cargo.toml index 9a46aca..0bb365f 100755 --- a/src/azns_registry/Cargo.toml +++ b/src/azns_registry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "azns_registry" -version = "1.0.0" +version = "1.1.0" authors = ["AZERO.ID "] edition = "2021" publish = false