From de24954cf12ac540f4cd81d540206790039d8b98 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 21 Feb 2023 13:34:29 +0100 Subject: [PATCH 1/2] Update CAIP limits and allowed charset --- crates/assets/src/asset.rs | 6 +++--- crates/assets/src/chain.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/assets/src/asset.rs b/crates/assets/src/asset.rs index 60b7e2b7d7..a0774e3f0c 100644 --- a/crates/assets/src/asset.rs +++ b/crates/assets/src/asset.rs @@ -48,7 +48,7 @@ pub mod v1 { /// The minimum length of a valid asset ID reference. pub const MINIMUM_REFERENCE_LENGTH: usize = 1; /// The maximum length of a valid asset ID reference. - pub const MAXIMUM_REFERENCE_LENGTH: usize = 64; + pub const MAXIMUM_REFERENCE_LENGTH: usize = 128; const MAXIMUM_REFERENCE_LENGTH_U32: u32 = MAXIMUM_REFERENCE_LENGTH as u32; /// The minimum length of a valid asset ID identifier. pub const MINIMUM_IDENTIFIER_LENGTH: usize = 1; @@ -604,7 +604,7 @@ pub mod v1 { check_reference_length_bounds(input)?; input.iter().try_for_each(|c| { - if !matches!(c, b'-' | b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9') { + if !matches!(c, b'-' | b'.' | b'%' | b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9') { log::trace!("Provided input has some invalid values as expected by a generic asset reference."); Err(ReferenceError::InvalidFormat) } else { @@ -653,7 +653,7 @@ pub mod v1 { check_identifier_length_bounds(input)?; input.iter().try_for_each(|c| { - if !matches!(c, b'-' | b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9') { + if !matches!(c, b'-' | b'.' | b'%' | b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9') { log::trace!("Provided input has some invalid values as expected by a generic asset identifier."); Err(IdentifierError::InvalidFormat) } else { diff --git a/crates/assets/src/chain.rs b/crates/assets/src/chain.rs index cb26ff947d..815ff182b2 100644 --- a/crates/assets/src/chain.rs +++ b/crates/assets/src/chain.rs @@ -591,7 +591,7 @@ mod v1 { check_reference_length_bounds(input)?; input.iter().try_for_each(|c| { - if !matches!(c, b'-' | b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9') { + if !matches!(c, b'-' | b'_' | b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9') { log::trace!("Provided input has some invalid values as expected by a generic chain reference."); Err(ReferenceError::InvalidFormat) } else { From 960d113c662e7b501844841b2c625c068ecd2e1c Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 21 Feb 2023 14:33:18 +0100 Subject: [PATCH 2/2] Fix tests --- crates/assets/src/asset.rs | 6 +++--- crates/assets/src/chain.rs | 1 + runtimes/common/src/constants.rs | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/assets/src/asset.rs b/crates/assets/src/asset.rs index a0774e3f0c..ed1cfa210d 100644 --- a/crates/assets/src/asset.rs +++ b/crates/assets/src/asset.rs @@ -727,7 +727,7 @@ pub mod v1 { "slip44:›", "slip44:😁", // Max chars + 1 - "slip44:99999999999999999999999999999999999999999999999999999999999999999", + "slip44:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", ]; for asset in invalid_assets { assert!( @@ -899,7 +899,7 @@ pub mod v1 { let valid_assets = [ "123:a", "12345678:-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-", - "12345678:-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-:-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678901234567890123-", + "12345678:-.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%-:-.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890123456789012%", "para:411f057b9107718c9624d6aa4a3f23c1", "para:kilt-spiritnet", "w3n:john-doe", @@ -928,7 +928,7 @@ pub mod v1 { "valid:valid:", // Too long "too-loong:valid", - "valid:too-loooooooooooooooooooooooooooooooooooooooooooooooooooooooooong", + "valid:too-loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong", "valid:valid:too-loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong", // Wrong characters "no-val!d:valid", diff --git a/crates/assets/src/chain.rs b/crates/assets/src/chain.rs index 815ff182b2..eb64a9933c 100644 --- a/crates/assets/src/chain.rs +++ b/crates/assets/src/chain.rs @@ -806,6 +806,7 @@ mod v1 { let valid_chains = [ // Edge cases "abc:-", + "abc:_", "-as01-aa:A", "12345678:abcdefghjklmnopqrstuvwxyzABCD012", // Filecoin examples -> https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-23.md diff --git a/runtimes/common/src/constants.rs b/runtimes/common/src/constants.rs index 7ff7dc6326..f10dba4501 100644 --- a/runtimes/common/src/constants.rs +++ b/runtimes/common/src/constants.rs @@ -437,7 +437,7 @@ pub mod public_credentials { use super::*; /// The size is checked in the runtime by a test. - pub const MAX_PUBLIC_CREDENTIAL_STORAGE_LENGTH: u32 = 355; + pub const MAX_PUBLIC_CREDENTIAL_STORAGE_LENGTH: u32 = 419; // Each credential would have a different deposit, so no multiplier here pub const PUBLIC_CREDENTIAL_DEPOSIT: Balance = deposit(1, MAX_PUBLIC_CREDENTIAL_STORAGE_LENGTH);