From 584586d5668ca246aa82cb7a1b1e04eed6f46788 Mon Sep 17 00:00:00 2001 From: David Edey Date: Wed, 20 Sep 2023 22:32:25 +0100 Subject: [PATCH 1/6] tweak: Decimal parsing error code improvement --- radix-engine-common/src/math/bnum_integer.rs | 3 +- .../src/math/bnum_integer/convert.rs | 15 ++-- radix-engine-common/src/math/decimal.rs | 69 +++++++++++++++---- .../src/math/precise_decimal.rs | 68 ++++++++++++++---- 4 files changed, 120 insertions(+), 35 deletions(-) diff --git a/radix-engine-common/src/math/bnum_integer.rs b/radix-engine-common/src/math/bnum_integer.rs index 37e853992b3..99a25ef8dd5 100644 --- a/radix-engine-common/src/math/bnum_integer.rs +++ b/radix-engine-common/src/math/bnum_integer.rs @@ -515,9 +515,10 @@ macro_rules! error { #[derive(Debug, Clone, PartialEq, Eq)] pub enum [] { NegativeToUnsigned, - Overflow, InvalidLength, InvalidDigit, + Empty, + Overflow, } #[cfg(not(feature = "alloc"))] diff --git a/radix-engine-common/src/math/bnum_integer/convert.rs b/radix-engine-common/src/math/bnum_integer/convert.rs index 3f72aad2538..03d721ed46a 100644 --- a/radix-engine-common/src/math/bnum_integer/convert.rs +++ b/radix-engine-common/src/math/bnum_integer/convert.rs @@ -58,7 +58,7 @@ impl_to_primitive! { U448, BUint::<7>, (u8, u16, u32, u64, u128, usize, i8, i16, impl_to_primitive! { U512, BUint::<8>, (u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize) } impl_to_primitive! { U768, BUint::<12>, (u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize) } -macro_rules! impl_from_builtin{ +macro_rules! impl_from_builtin { ($t:ident, $wrapped:ty, ($($o:ident),*)) => { paste! { $( @@ -73,7 +73,7 @@ macro_rules! impl_from_builtin{ }; } -macro_rules! impl_try_from_builtin{ +macro_rules! impl_try_from_builtin { ($t:ident, $wrapped:ty, ($($o:ident),*)) => { paste! { $( @@ -92,7 +92,7 @@ macro_rules! impl_try_from_builtin{ }; } -macro_rules! impl_to_builtin{ +macro_rules! impl_to_builtin { ($t:ident, $wrapped:ty, ($($o:ident),*)) => { paste! { $( @@ -219,7 +219,14 @@ macro_rules! impl_from_string { fn from_str(val: &str) -> Result { match <$wrapped>::from_str(val) { Ok(val) => Ok(Self(val)), - Err(_) => Err([]::InvalidDigit), + Err(err) => Err(match err.kind() { + core::num::IntErrorKind::Empty => []::Empty, + core::num::IntErrorKind::InvalidDigit => []::InvalidDigit, + core::num::IntErrorKind::PosOverflow => []::Overflow, + core::num::IntErrorKind::NegOverflow => []::Overflow, + core::num::IntErrorKind::Zero => unreachable!(), + _ => []::InvalidDigit, // Enum is non-exhaustive, sensible fallback is InvalidDigit + }) } } } diff --git a/radix-engine-common/src/math/decimal.rs b/radix-engine-common/src/math/decimal.rs index fd8a73cb758..8070ae8a3ea 100644 --- a/radix-engine-common/src/math/decimal.rs +++ b/radix-engine-common/src/math/decimal.rs @@ -740,36 +740,51 @@ impl FromStr for Decimal { type Err = ParseDecimalError; fn from_str(s: &str) -> Result { - let tens = I192::TEN; let v: Vec<&str> = s.split('.').collect(); - let mut int = match I192::from_str(v[0]) { + let integer_part = match I192::from_str(v[0]) { Ok(val) => val, - Err(_) => return Err(ParseDecimalError::InvalidDigit), + Err(err) => match err { + ParseI192Error::NegativeToUnsigned => unreachable!("Not possible to be thrown by from_str"), + ParseI192Error::Overflow => return Err(ParseDecimalError::Overflow), + ParseI192Error::InvalidLength => unreachable!("Not possible to be thrown by from_str"), + ParseI192Error::InvalidDigit => return Err(ParseDecimalError::InvalidDigit), + ParseI192Error::Empty => I192::ZERO, + }, }; - int *= tens.pow(Self::SCALE); + let mut subunits = integer_part.checked_mul(Self::ONE.0).ok_or(ParseDecimalError::Overflow)?; if v.len() == 2 { let scale = if let Some(scale) = Self::SCALE.checked_sub(v[1].len() as u32) { Ok(scale) } else { - Err(Self::Err::UnsupportedDecimalPlace) + Err(Self::Err::MoreThanEighteenDecimalPlaces) }?; - let frac = match I192::from_str(v[1]) { + let fractional_part = match I192::from_str(v[1]) { Ok(val) => val, - Err(_) => return Err(ParseDecimalError::InvalidDigit), + Err(err) => match err { + ParseI192Error::NegativeToUnsigned => unreachable!("Not possible to be thrown by from_str"), + ParseI192Error::Overflow => return Err(ParseDecimalError::Overflow), + ParseI192Error::InvalidLength => unreachable!("Not possible to be thrown by from_str"), + ParseI192Error::InvalidDigit => return Err(ParseDecimalError::InvalidDigit), + ParseI192Error::Empty => return Err(ParseDecimalError::EmptyFractionalPart), + }, }; + + // The product of these must be less than Self::SCALE + let fractional_subunits = fractional_part.checked_mul(I192::TEN.pow(scale)).expect("No overflow possible"); + // if input is -0. then from_str returns 0 and we loose '-' sign. // Therefore check for '-' in input directly - if int.is_negative() || v[0].starts_with('-') { - int -= frac * tens.pow(scale); + if integer_part.is_negative() || v[0].starts_with('-') { + subunits = subunits.checked_sub(fractional_subunits).ok_or(ParseDecimalError::Overflow)?; } else { - int += frac * tens.pow(scale); + subunits = subunits.checked_add(fractional_subunits).ok_or(ParseDecimalError::Overflow)?; } } - Ok(Self(int)) + Ok(Self(subunits)) } } @@ -811,11 +826,11 @@ impl fmt::Debug for Decimal { #[derive(Debug, Clone, PartialEq, Eq)] pub enum ParseDecimalError { InvalidDecimal(String), - InvalidChar(char), InvalidDigit, - UnsupportedDecimalPlace, - InvalidLength(usize), Overflow, + EmptyFractionalPart, + MoreThanEighteenDecimalPlaces, + InvalidLength(usize), } #[cfg(not(feature = "alloc"))] @@ -904,6 +919,10 @@ mod tests { Decimal::from_str("0.000000000000000001").unwrap(), Decimal(1i128.into()), ); + assert_eq!( + Decimal::from_str("0.0000000000000000001"), + Err(ParseDecimalError::MoreThanEighteenDecimalPlaces), + ); assert_eq!( Decimal::from_str("0.123456789123456789").unwrap(), Decimal(123456789123456789i128.into()), @@ -921,11 +940,31 @@ mod tests { .unwrap(), Decimal::MAX, ); + assert_eq!( + Decimal::from_str("3138550867693340381917894711603833208051.177722232017256448"), + Err(ParseDecimalError::Overflow), + ); + assert_eq!( + Decimal::from_str("3138550867693340381917894711603833208052.177722232017256447"), + Err(ParseDecimalError::Overflow), + ); assert_eq!( Decimal::from_str("-3138550867693340381917894711603833208051.177722232017256448") .unwrap(), Decimal::MIN, ); + assert_eq!( + Decimal::from_str("-3138550867693340381917894711603833208051.177722232017256449"), + Err(ParseDecimalError::Overflow), + ); + assert_eq!( + Decimal::from_str(".000000000000000231").unwrap(), + Decimal(231.into()), + ); + assert_eq!( + Decimal::from_str("231."), + Err(ParseDecimalError::EmptyFractionalPart), + ); assert_eq!(test_dec!("0"), Decimal::ZERO); assert_eq!(test_dec!("1"), Decimal::ONE); @@ -1886,7 +1925,7 @@ mod tests { // Assert assert!(matches!( decimal, - Err(ParseDecimalError::UnsupportedDecimalPlace) + Err(ParseDecimalError::MoreThanEighteenDecimalPlaces) )) } diff --git a/radix-engine-common/src/math/precise_decimal.rs b/radix-engine-common/src/math/precise_decimal.rs index bda55570749..a1e92bd44d6 100644 --- a/radix-engine-common/src/math/precise_decimal.rs +++ b/radix-engine-common/src/math/precise_decimal.rs @@ -778,37 +778,51 @@ impl FromStr for PreciseDecimal { type Err = ParsePreciseDecimalError; fn from_str(s: &str) -> Result { - let tens = I256::TEN; let v: Vec<&str> = s.split('.').collect(); - let mut int = match I256::from_str(v[0]) { + let integer_part = match I256::from_str(v[0]) { Ok(val) => val, - Err(_) => return Err(ParsePreciseDecimalError::InvalidDigit), + Err(err) => match err { + ParseI256Error::NegativeToUnsigned => unreachable!("Not possible to be thrown by from_str"), + ParseI256Error::Overflow => return Err(ParsePreciseDecimalError::Overflow), + ParseI256Error::InvalidLength => unreachable!("Not possible to be thrown by from_str"), + ParseI256Error::InvalidDigit => return Err(ParsePreciseDecimalError::InvalidDigit), + ParseI256Error::Empty => I256::ZERO, + }, }; - int *= tens.pow(Self::SCALE); + let mut subunits = integer_part.checked_mul(Self::ONE.0).ok_or(ParsePreciseDecimalError::Overflow)?; if v.len() == 2 { let scale = if let Some(scale) = Self::SCALE.checked_sub(v[1].len() as u32) { Ok(scale) } else { - Err(Self::Err::UnsupportedDecimalPlace) + Err(Self::Err::MoreThanThirtySixDecimalPlaces) }?; - let frac = match I256::from_str(v[1]) { + let fractional_part = match I256::from_str(v[1]) { Ok(val) => val, - Err(_) => return Err(ParsePreciseDecimalError::InvalidDigit), + Err(err) => match err { + ParseI256Error::NegativeToUnsigned => unreachable!("Not possible to be thrown by from_str"), + ParseI256Error::Overflow => return Err(ParsePreciseDecimalError::Overflow), + ParseI256Error::InvalidLength => unreachable!("Not possible to be thrown by from_str"), + ParseI256Error::InvalidDigit => return Err(ParsePreciseDecimalError::InvalidDigit), + ParseI256Error::Empty => return Err(ParsePreciseDecimalError::EmptyFractionalPart), + }, }; + // The product of these must be less than Self::SCALE + let fractional_subunits = fractional_part.checked_mul(I256::TEN.pow(scale)).expect("No overflow possible"); + // if input is -0. then from_str returns 0 and we loose '-' sign. // Therefore check for '-' in input directly - if int.is_negative() || v[0].starts_with('-') { - int -= frac * tens.pow(scale); + if integer_part.is_negative() || v[0].starts_with('-') { + subunits = subunits.checked_sub(fractional_subunits).ok_or(ParsePreciseDecimalError::Overflow)?; } else { - int += frac * tens.pow(scale); + subunits = subunits.checked_add(fractional_subunits).ok_or(ParsePreciseDecimalError::Overflow)?; } } - Ok(Self(int)) + Ok(Self(subunits)) } } @@ -850,11 +864,11 @@ impl fmt::Debug for PreciseDecimal { #[derive(Debug, Clone, PartialEq, Eq)] pub enum ParsePreciseDecimalError { InvalidDecimal(String), - InvalidChar(char), InvalidDigit, - UnsupportedDecimalPlace, - InvalidLength(usize), Overflow, + EmptyFractionalPart, + MoreThanThirtySixDecimalPlaces, + InvalidLength(usize), } #[cfg(not(feature = "alloc"))] @@ -983,6 +997,10 @@ mod tests { PreciseDecimal::from_str("0.000000000000000001").unwrap(), PreciseDecimal(I256::from(10).pow(18)), ); + assert_eq!( + PreciseDecimal::from_str("0.0000000000000000000000000000000000001"), + Err(ParsePreciseDecimalError::MoreThanThirtySixDecimalPlaces), + ); assert_eq!( PreciseDecimal::from_str("0.123456789123456789").unwrap(), PreciseDecimal(I256::from(123456789123456789i128) * I256::from(10i8).pow(18)), @@ -1004,6 +1022,14 @@ mod tests { .unwrap(), PreciseDecimal::MAX, ); + assert_eq!( + PreciseDecimal::from_str("57896044618658097711785492504343953926634.992332820282019728792003956564819968"), + Err(ParsePreciseDecimalError::Overflow), + ); + assert_eq!( + PreciseDecimal::from_str("157896044618658097711785492504343953926634"), + Err(ParsePreciseDecimalError::Overflow), + ); assert_eq!( PreciseDecimal::from_str( "-57896044618658097711785492504343953926634.992332820282019728792003956564819968" @@ -1011,6 +1037,18 @@ mod tests { .unwrap(), PreciseDecimal::MIN, ); + assert_eq!( + PreciseDecimal::from_str("-57896044618658097711785492504343953926634.992332820282019728792003956564819969"), + Err(ParsePreciseDecimalError::Overflow), + ); + assert_eq!( + PreciseDecimal::from_str(".000000000000000231").unwrap(), + PreciseDecimal(I256::from(231) * I256::TEN.pow(18)), + ); + assert_eq!( + PreciseDecimal::from_str("231."), + Err(ParsePreciseDecimalError::EmptyFractionalPart), + ); assert_eq!(test_pdec!("0"), PreciseDecimal::ZERO); assert_eq!(test_pdec!("1"), PreciseDecimal::ONE); @@ -2076,7 +2114,7 @@ mod tests { // Assert assert!(matches!( decimal, - Err(ParsePreciseDecimalError::UnsupportedDecimalPlace) + Err(ParsePreciseDecimalError::MoreThanThirtySixDecimalPlaces) )) } From 5f2d49b38f5e2faa0926a03c4eea2a6107a8db62 Mon Sep 17 00:00:00 2001 From: David Edey Date: Wed, 20 Sep 2023 22:33:00 +0100 Subject: [PATCH 2/6] feature: dec and pdec macros support float literals --- radix-engine-macros/src/decimal.rs | 32 ++++++++++++++++++----- radix-engine-tests/tests/decimal.rs | 39 ++++++++++++++++++++++++----- 2 files changed, 59 insertions(+), 12 deletions(-) diff --git a/radix-engine-macros/src/decimal.rs b/radix-engine-macros/src/decimal.rs index 6dc6603bd1a..1aede7bcd3b 100644 --- a/radix-engine-macros/src/decimal.rs +++ b/radix-engine-macros/src/decimal.rs @@ -15,12 +15,31 @@ macro_rules! get_decimal { Expr::Lit(lit) => match &lit.lit { Lit::Str(lit_str) => $type::try_from(lit_str.value()) .map_err(|err| Error::new(lit_str.span(), format!("Parsing failed due to {:?}", err))), - Lit::Int(lit_int) => $type::try_from(lit_int.base10_digits()) - .map_err(|err| Error::new(lit_int.span(), format!("Parsing failed due to {:?}", err))), - Lit::Bool(lit_bool) => Ok($type::from(lit_bool.value)), + Lit::Int(lit_int) => { + if lit_int.suffix() != "" { + Err(Error::new( + lit_int.span(), + format!("No suffix is allowed. Remove the {}.", lit_int.suffix()), + )) + } else { + $type::try_from(lit_int.base10_digits()) + .map_err(|err| Error::new(lit_int.span(), format!("Parsing failed due to {:?}", err))) + } + } + Lit::Float(lit_float) => { + if lit_float.suffix() != "" { + Err(Error::new( + lit_float.span(), + format!("No suffix is allowed. Remove the {}.", lit_float.suffix()), + )) + } else { + $type::try_from(lit_float.base10_digits()) + .map_err(|err| Error::new(lit_float.span(), format!("Parsing failed due to {:?}", err))) + } + } other_lit => Err(Error::new( other_lit.span(), - "Not supported literal. This macro only supports string, integer and bool literal expressions.", + "This macro only supports string, integer and float literals.", )), }, Expr::Unary(unary) => match unary.op { @@ -36,12 +55,12 @@ macro_rules! get_decimal { } other_unary => Err(Error::new( other_unary.span(), - "Not supported unary operator. This macro only supports '-' unary operator.", + "This macro only supports string, integer and float literals.", )), }, other_expr => Err(Error::new( other_expr.span(), - "Not supported expression. This macro only supports string, integer and bool literal expressions.", + "This macro only supports string, integer and float literals.", )), } } @@ -49,6 +68,7 @@ macro_rules! get_decimal { } }; } + get_decimal!(Decimal); get_decimal!(PreciseDecimal); diff --git a/radix-engine-tests/tests/decimal.rs b/radix-engine-tests/tests/decimal.rs index 7720c9e14be..78f1524efbe 100644 --- a/radix-engine-tests/tests/decimal.rs +++ b/radix-engine-tests/tests/decimal.rs @@ -18,11 +18,11 @@ fn test_dec_macro() { const X2: Decimal = dec!(-111); assert_eq!(X2, Decimal::try_from(-111).unwrap()); - const X3: Decimal = dec!(129u128); - assert_eq!(X3, Decimal::try_from(129u128).unwrap()); + const X3: Decimal = dec!(129); + assert_eq!(X3, Decimal::try_from(129).unwrap()); - const X4: Decimal = dec!(-1_000_000_i64); - assert_eq!(X4, Decimal::try_from(-1_000_000_i64).unwrap()); + const X4: Decimal = dec!(-1_000_000); + assert_eq!(X4, Decimal::try_from(-1_000_000).unwrap()); static X5: Decimal = dec!(1); assert_eq!(X5, Decimal::ONE); @@ -38,6 +38,21 @@ fn test_dec_macro() { static X9: Decimal = dec!("0.01"); assert_eq!(X9, Decimal::ONE_HUNDREDTH); + + const X10: Decimal = dec!(1.1); + assert_eq!(X10, Decimal::try_from("1.1").unwrap()); + + const X11: Decimal = dec!(1.12313214124); + assert_eq!(X11, Decimal::try_from("1.12313214124").unwrap()); + + const X12: Decimal = dec!("3138550867693340381917894711603833208051.177722232017256447"); + assert_eq!(X12, Decimal::MAX); + + const X13: Decimal = dec!("-3138550867693340381917894711603833208051.177722232017256448"); + assert_eq!(X13, Decimal::MIN); + + Decimal::try_from("3138550867693340381917894711603833208052.177722232017256447"); + const X14: Decimal = dec!(3138550867693340381917894711603833208051.177722232017256447); } #[test] @@ -59,10 +74,10 @@ fn test_pdec_macro() { const X2: PreciseDecimal = pdec!(-111); assert_eq!(X2, PreciseDecimal::try_from(-111).unwrap()); - const X3: PreciseDecimal = pdec!(129u128); + const X3: PreciseDecimal = pdec!(129); assert_eq!(X3, PreciseDecimal::try_from(129u128).unwrap()); - const X4: PreciseDecimal = pdec!(-1_000_000_i64); + const X4: PreciseDecimal = pdec!(-1_000_000); assert_eq!(X4, PreciseDecimal::try_from(-1_000_000_i64).unwrap()); static X5: PreciseDecimal = pdec!(1); @@ -79,4 +94,16 @@ fn test_pdec_macro() { static X9: PreciseDecimal = pdec!("0.01"); assert_eq!(X9, PreciseDecimal::ONE_HUNDREDTH); + + const X10: PreciseDecimal = pdec!(21.1); + assert_eq!(X10, PreciseDecimal::try_from("21.1").unwrap()); + + const X11: PreciseDecimal = pdec!(0.12313214124); + assert_eq!(X11, PreciseDecimal::try_from("0.12313214124").unwrap()); + + const X12: PreciseDecimal = pdec!("57896044618658097711785492504343953926634.992332820282019728792003956564819967"); + assert_eq!(X12, PreciseDecimal::MAX); + + const X13: PreciseDecimal = pdec!("-57896044618658097711785492504343953926634.992332820282019728792003956564819968"); + assert_eq!(X13, PreciseDecimal::MIN); } From 1e0e728c56dee76161bbed029151746bf226a883 Mon Sep 17 00:00:00 2001 From: David Edey Date: Wed, 20 Sep 2023 22:36:20 +0100 Subject: [PATCH 3/6] chore: Run ./format.sh --- radix-engine-common/src/math/decimal.rs | 32 +++++++++---- .../src/math/precise_decimal.rs | 48 ++++++++++++++----- radix-engine-tests/tests/decimal.rs | 6 ++- 3 files changed, 64 insertions(+), 22 deletions(-) diff --git a/radix-engine-common/src/math/decimal.rs b/radix-engine-common/src/math/decimal.rs index 8070ae8a3ea..265f07889c1 100644 --- a/radix-engine-common/src/math/decimal.rs +++ b/radix-engine-common/src/math/decimal.rs @@ -745,15 +745,21 @@ impl FromStr for Decimal { let integer_part = match I192::from_str(v[0]) { Ok(val) => val, Err(err) => match err { - ParseI192Error::NegativeToUnsigned => unreachable!("Not possible to be thrown by from_str"), + ParseI192Error::NegativeToUnsigned => { + unreachable!("Not possible to be thrown by from_str") + } ParseI192Error::Overflow => return Err(ParseDecimalError::Overflow), - ParseI192Error::InvalidLength => unreachable!("Not possible to be thrown by from_str"), + ParseI192Error::InvalidLength => { + unreachable!("Not possible to be thrown by from_str") + } ParseI192Error::InvalidDigit => return Err(ParseDecimalError::InvalidDigit), ParseI192Error::Empty => I192::ZERO, }, }; - let mut subunits = integer_part.checked_mul(Self::ONE.0).ok_or(ParseDecimalError::Overflow)?; + let mut subunits = integer_part + .checked_mul(Self::ONE.0) + .ok_or(ParseDecimalError::Overflow)?; if v.len() == 2 { let scale = if let Some(scale) = Self::SCALE.checked_sub(v[1].len() as u32) { @@ -765,23 +771,33 @@ impl FromStr for Decimal { let fractional_part = match I192::from_str(v[1]) { Ok(val) => val, Err(err) => match err { - ParseI192Error::NegativeToUnsigned => unreachable!("Not possible to be thrown by from_str"), + ParseI192Error::NegativeToUnsigned => { + unreachable!("Not possible to be thrown by from_str") + } ParseI192Error::Overflow => return Err(ParseDecimalError::Overflow), - ParseI192Error::InvalidLength => unreachable!("Not possible to be thrown by from_str"), + ParseI192Error::InvalidLength => { + unreachable!("Not possible to be thrown by from_str") + } ParseI192Error::InvalidDigit => return Err(ParseDecimalError::InvalidDigit), ParseI192Error::Empty => return Err(ParseDecimalError::EmptyFractionalPart), }, }; // The product of these must be less than Self::SCALE - let fractional_subunits = fractional_part.checked_mul(I192::TEN.pow(scale)).expect("No overflow possible"); + let fractional_subunits = fractional_part + .checked_mul(I192::TEN.pow(scale)) + .expect("No overflow possible"); // if input is -0. then from_str returns 0 and we loose '-' sign. // Therefore check for '-' in input directly if integer_part.is_negative() || v[0].starts_with('-') { - subunits = subunits.checked_sub(fractional_subunits).ok_or(ParseDecimalError::Overflow)?; + subunits = subunits + .checked_sub(fractional_subunits) + .ok_or(ParseDecimalError::Overflow)?; } else { - subunits = subunits.checked_add(fractional_subunits).ok_or(ParseDecimalError::Overflow)?; + subunits = subunits + .checked_add(fractional_subunits) + .ok_or(ParseDecimalError::Overflow)?; } } Ok(Self(subunits)) diff --git a/radix-engine-common/src/math/precise_decimal.rs b/radix-engine-common/src/math/precise_decimal.rs index a1e92bd44d6..6f03973d95e 100644 --- a/radix-engine-common/src/math/precise_decimal.rs +++ b/radix-engine-common/src/math/precise_decimal.rs @@ -783,15 +783,21 @@ impl FromStr for PreciseDecimal { let integer_part = match I256::from_str(v[0]) { Ok(val) => val, Err(err) => match err { - ParseI256Error::NegativeToUnsigned => unreachable!("Not possible to be thrown by from_str"), + ParseI256Error::NegativeToUnsigned => { + unreachable!("Not possible to be thrown by from_str") + } ParseI256Error::Overflow => return Err(ParsePreciseDecimalError::Overflow), - ParseI256Error::InvalidLength => unreachable!("Not possible to be thrown by from_str"), + ParseI256Error::InvalidLength => { + unreachable!("Not possible to be thrown by from_str") + } ParseI256Error::InvalidDigit => return Err(ParsePreciseDecimalError::InvalidDigit), ParseI256Error::Empty => I256::ZERO, }, }; - let mut subunits = integer_part.checked_mul(Self::ONE.0).ok_or(ParsePreciseDecimalError::Overflow)?; + let mut subunits = integer_part + .checked_mul(Self::ONE.0) + .ok_or(ParsePreciseDecimalError::Overflow)?; if v.len() == 2 { let scale = if let Some(scale) = Self::SCALE.checked_sub(v[1].len() as u32) { @@ -803,23 +809,37 @@ impl FromStr for PreciseDecimal { let fractional_part = match I256::from_str(v[1]) { Ok(val) => val, Err(err) => match err { - ParseI256Error::NegativeToUnsigned => unreachable!("Not possible to be thrown by from_str"), + ParseI256Error::NegativeToUnsigned => { + unreachable!("Not possible to be thrown by from_str") + } ParseI256Error::Overflow => return Err(ParsePreciseDecimalError::Overflow), - ParseI256Error::InvalidLength => unreachable!("Not possible to be thrown by from_str"), - ParseI256Error::InvalidDigit => return Err(ParsePreciseDecimalError::InvalidDigit), - ParseI256Error::Empty => return Err(ParsePreciseDecimalError::EmptyFractionalPart), + ParseI256Error::InvalidLength => { + unreachable!("Not possible to be thrown by from_str") + } + ParseI256Error::InvalidDigit => { + return Err(ParsePreciseDecimalError::InvalidDigit) + } + ParseI256Error::Empty => { + return Err(ParsePreciseDecimalError::EmptyFractionalPart) + } }, }; // The product of these must be less than Self::SCALE - let fractional_subunits = fractional_part.checked_mul(I256::TEN.pow(scale)).expect("No overflow possible"); + let fractional_subunits = fractional_part + .checked_mul(I256::TEN.pow(scale)) + .expect("No overflow possible"); // if input is -0. then from_str returns 0 and we loose '-' sign. // Therefore check for '-' in input directly if integer_part.is_negative() || v[0].starts_with('-') { - subunits = subunits.checked_sub(fractional_subunits).ok_or(ParsePreciseDecimalError::Overflow)?; + subunits = subunits + .checked_sub(fractional_subunits) + .ok_or(ParsePreciseDecimalError::Overflow)?; } else { - subunits = subunits.checked_add(fractional_subunits).ok_or(ParsePreciseDecimalError::Overflow)?; + subunits = subunits + .checked_add(fractional_subunits) + .ok_or(ParsePreciseDecimalError::Overflow)?; } } Ok(Self(subunits)) @@ -1023,7 +1043,9 @@ mod tests { PreciseDecimal::MAX, ); assert_eq!( - PreciseDecimal::from_str("57896044618658097711785492504343953926634.992332820282019728792003956564819968"), + PreciseDecimal::from_str( + "57896044618658097711785492504343953926634.992332820282019728792003956564819968" + ), Err(ParsePreciseDecimalError::Overflow), ); assert_eq!( @@ -1038,7 +1060,9 @@ mod tests { PreciseDecimal::MIN, ); assert_eq!( - PreciseDecimal::from_str("-57896044618658097711785492504343953926634.992332820282019728792003956564819969"), + PreciseDecimal::from_str( + "-57896044618658097711785492504343953926634.992332820282019728792003956564819969" + ), Err(ParsePreciseDecimalError::Overflow), ); assert_eq!( diff --git a/radix-engine-tests/tests/decimal.rs b/radix-engine-tests/tests/decimal.rs index 78f1524efbe..b63c5a19c56 100644 --- a/radix-engine-tests/tests/decimal.rs +++ b/radix-engine-tests/tests/decimal.rs @@ -101,9 +101,11 @@ fn test_pdec_macro() { const X11: PreciseDecimal = pdec!(0.12313214124); assert_eq!(X11, PreciseDecimal::try_from("0.12313214124").unwrap()); - const X12: PreciseDecimal = pdec!("57896044618658097711785492504343953926634.992332820282019728792003956564819967"); + const X12: PreciseDecimal = + pdec!("57896044618658097711785492504343953926634.992332820282019728792003956564819967"); assert_eq!(X12, PreciseDecimal::MAX); - const X13: PreciseDecimal = pdec!("-57896044618658097711785492504343953926634.992332820282019728792003956564819968"); + const X13: PreciseDecimal = + pdec!("-57896044618658097711785492504343953926634.992332820282019728792003956564819968"); assert_eq!(X13, PreciseDecimal::MIN); } From 22f7a126519fdbcdf2303059778dc66ea81d95b1 Mon Sep 17 00:00:00 2001 From: David Edey Date: Wed, 20 Sep 2023 23:00:04 +0100 Subject: [PATCH 4/6] fix: Further improvements to dec/pdec macro. --- .../src/math/bnum_integer/convert.rs | 2 +- radix-engine-common/src/math/decimal.rs | 18 ++++--- .../src/math/precise_decimal.rs | 16 ++++-- radix-engine-macros/src/decimal.rs | 51 ++++++++++++++++--- radix-engine-tests/tests/decimal.rs | 4 +- 5 files changed, 71 insertions(+), 20 deletions(-) diff --git a/radix-engine-common/src/math/bnum_integer/convert.rs b/radix-engine-common/src/math/bnum_integer/convert.rs index 03d721ed46a..5ddc2954b8f 100644 --- a/radix-engine-common/src/math/bnum_integer/convert.rs +++ b/radix-engine-common/src/math/bnum_integer/convert.rs @@ -224,7 +224,7 @@ macro_rules! impl_from_string { core::num::IntErrorKind::InvalidDigit => []::InvalidDigit, core::num::IntErrorKind::PosOverflow => []::Overflow, core::num::IntErrorKind::NegOverflow => []::Overflow, - core::num::IntErrorKind::Zero => unreachable!(), + core::num::IntErrorKind::Zero => unreachable!("Zero is only issued for non-zero type"), _ => []::InvalidDigit, // Enum is non-exhaustive, sensible fallback is InvalidDigit }) } diff --git a/radix-engine-common/src/math/decimal.rs b/radix-engine-common/src/math/decimal.rs index 265f07889c1..c6c57ddc289 100644 --- a/radix-engine-common/src/math/decimal.rs +++ b/radix-engine-common/src/math/decimal.rs @@ -742,18 +742,22 @@ impl FromStr for Decimal { fn from_str(s: &str) -> Result { let v: Vec<&str> = s.split('.').collect(); + if v.len() > 2 { + return Err(ParseDecimalError::MoreThanOneDecimalPoint); + } + let integer_part = match I192::from_str(v[0]) { Ok(val) => val, Err(err) => match err { ParseI192Error::NegativeToUnsigned => { - unreachable!("Not possible to be thrown by from_str") + unreachable!("NegativeToUnsigned is only for parsing unsigned types, not I192") } ParseI192Error::Overflow => return Err(ParseDecimalError::Overflow), ParseI192Error::InvalidLength => { - unreachable!("Not possible to be thrown by from_str") + unreachable!("InvalidLength is only for parsing &[u8], not &str") } ParseI192Error::InvalidDigit => return Err(ParseDecimalError::InvalidDigit), - ParseI192Error::Empty => I192::ZERO, + ParseI192Error::Empty => I192::ZERO, // Allows parsing ".123" }, }; @@ -772,11 +776,13 @@ impl FromStr for Decimal { Ok(val) => val, Err(err) => match err { ParseI192Error::NegativeToUnsigned => { - unreachable!("Not possible to be thrown by from_str") + unreachable!( + "NegativeToUnsigned is only for parsing unsigned types, no I192" + ) } ParseI192Error::Overflow => return Err(ParseDecimalError::Overflow), ParseI192Error::InvalidLength => { - unreachable!("Not possible to be thrown by from_str") + unreachable!("InvalidLength is only for parsing &[u8], not &str") } ParseI192Error::InvalidDigit => return Err(ParseDecimalError::InvalidDigit), ParseI192Error::Empty => return Err(ParseDecimalError::EmptyFractionalPart), @@ -841,11 +847,11 @@ impl fmt::Debug for Decimal { /// Represents an error when parsing Decimal from another type. #[derive(Debug, Clone, PartialEq, Eq)] pub enum ParseDecimalError { - InvalidDecimal(String), InvalidDigit, Overflow, EmptyFractionalPart, MoreThanEighteenDecimalPlaces, + MoreThanOneDecimalPoint, InvalidLength(usize), } diff --git a/radix-engine-common/src/math/precise_decimal.rs b/radix-engine-common/src/math/precise_decimal.rs index 6f03973d95e..1c8c675a81f 100644 --- a/radix-engine-common/src/math/precise_decimal.rs +++ b/radix-engine-common/src/math/precise_decimal.rs @@ -780,15 +780,19 @@ impl FromStr for PreciseDecimal { fn from_str(s: &str) -> Result { let v: Vec<&str> = s.split('.').collect(); + if v.len() > 2 { + return Err(ParsePreciseDecimalError::MoreThanOneDecimalPoint); + } + let integer_part = match I256::from_str(v[0]) { Ok(val) => val, Err(err) => match err { ParseI256Error::NegativeToUnsigned => { - unreachable!("Not possible to be thrown by from_str") + unreachable!("NegativeToUnsigned is only for parsing unsigned types, not I256") } ParseI256Error::Overflow => return Err(ParsePreciseDecimalError::Overflow), ParseI256Error::InvalidLength => { - unreachable!("Not possible to be thrown by from_str") + unreachable!("InvalidLength is only for parsing &[u8], not &str") } ParseI256Error::InvalidDigit => return Err(ParsePreciseDecimalError::InvalidDigit), ParseI256Error::Empty => I256::ZERO, @@ -810,11 +814,13 @@ impl FromStr for PreciseDecimal { Ok(val) => val, Err(err) => match err { ParseI256Error::NegativeToUnsigned => { - unreachable!("Not possible to be thrown by from_str") + unreachable!( + "NegativeToUnsigned is only for parsing unsigned types, not I256" + ) } ParseI256Error::Overflow => return Err(ParsePreciseDecimalError::Overflow), ParseI256Error::InvalidLength => { - unreachable!("Not possible to be thrown by from_str") + unreachable!("InvalidLength is only for parsing &[u8], not &str") } ParseI256Error::InvalidDigit => { return Err(ParsePreciseDecimalError::InvalidDigit) @@ -883,11 +889,11 @@ impl fmt::Debug for PreciseDecimal { /// Represents an error when parsing PreciseDecimal from another type. #[derive(Debug, Clone, PartialEq, Eq)] pub enum ParsePreciseDecimalError { - InvalidDecimal(String), InvalidDigit, Overflow, EmptyFractionalPart, MoreThanThirtySixDecimalPlaces, + MoreThanOneDecimalPoint, InvalidLength(usize), } diff --git a/radix-engine-macros/src/decimal.rs b/radix-engine-macros/src/decimal.rs index 1aede7bcd3b..ae63aabfd6c 100644 --- a/radix-engine-macros/src/decimal.rs +++ b/radix-engine-macros/src/decimal.rs @@ -1,11 +1,10 @@ use paste::paste; use proc_macro::TokenStream; use quote::quote; -use radix_engine_common::prelude::CheckedNeg; +use radix_engine_common::prelude::*; use syn::{parse, spanned::Spanned, Error, Expr, Lit, Result, UnOp}; extern crate radix_engine_common; -use radix_engine_common::math::{Decimal, PreciseDecimal}; macro_rules! get_decimal { ($type:ident) => { @@ -14,7 +13,7 @@ macro_rules! get_decimal { match expr { Expr::Lit(lit) => match &lit.lit { Lit::Str(lit_str) => $type::try_from(lit_str.value()) - .map_err(|err| Error::new(lit_str.span(), format!("Parsing failed due to {:?}", err))), + .map_err(|err| Error::new(lit_str.span(), [< $type:snake:lower _error_reason >](err).to_string())), Lit::Int(lit_int) => { if lit_int.suffix() != "" { Err(Error::new( @@ -23,7 +22,7 @@ macro_rules! get_decimal { )) } else { $type::try_from(lit_int.base10_digits()) - .map_err(|err| Error::new(lit_int.span(), format!("Parsing failed due to {:?}", err))) + .map_err(|err| Error::new(lit_int.span(), [< $type:snake:lower _error_reason >](err).to_string())) } } Lit::Float(lit_float) => { @@ -34,7 +33,7 @@ macro_rules! get_decimal { )) } else { $type::try_from(lit_float.base10_digits()) - .map_err(|err| Error::new(lit_float.span(), format!("Parsing failed due to {:?}", err))) + .map_err(|err| Error::new(lit_float.span(), [< $type:snake:lower _error_reason >](err).to_string())) } } other_lit => Err(Error::new( @@ -47,7 +46,7 @@ macro_rules! get_decimal { let res = [< get_ $type:snake:lower _from_expr >](unary.expr.as_ref()); match res { Ok(val) => { - let val = val.checked_neg().ok_or(Error::new(unary_neg.span, "Parsing failed due to Overflow"))?; + let val = val.checked_neg().ok_or(Error::new(unary_neg.span, "Parsing failed due to overflow."))?; Ok(val) }, Err(err) => Err(Error::new(unary_neg.span, err)), @@ -69,6 +68,46 @@ macro_rules! get_decimal { }; } +fn decimal_error_reason(error: ParseDecimalError) -> &'static str { + match error { + ParseDecimalError::InvalidDigit => "There is an invalid character.", + ParseDecimalError::Overflow => "The number is too large to fit in a decimal.", + ParseDecimalError::EmptyFractionalPart => { + "The number cannot have an empty fractional part." + } + ParseDecimalError::MoreThanEighteenDecimalPlaces => { + "A decimal cannot have more than eighteen decimal places." + } + ParseDecimalError::MoreThanOneDecimalPoint => { + "A decimal cannot have more than one decimal point." + } + ParseDecimalError::InvalidLength(_) => { + unreachable!("Not a possible error from the from_str function") + } + } +} + +fn precise_decimal_error_reason(error: ParsePreciseDecimalError) -> &'static str { + match error { + ParsePreciseDecimalError::InvalidDigit => "There is an invalid character", + ParsePreciseDecimalError::Overflow => { + "The number being too large to fit in a precise decimal" + } + ParsePreciseDecimalError::EmptyFractionalPart => { + "The number cannot have an empty fractional part." + } + ParsePreciseDecimalError::MoreThanThirtySixDecimalPlaces => { + "A precise decimal cannot have more than thirty-six decimal places." + } + ParsePreciseDecimalError::MoreThanOneDecimalPoint => { + "A precise decimal cannot have more than one decimal point." + } + ParsePreciseDecimalError::InvalidLength(_) => { + unreachable!("Not a possible error from the from_str function") + } + } +} + get_decimal!(Decimal); get_decimal!(PreciseDecimal); diff --git a/radix-engine-tests/tests/decimal.rs b/radix-engine-tests/tests/decimal.rs index b63c5a19c56..c86bba70deb 100644 --- a/radix-engine-tests/tests/decimal.rs +++ b/radix-engine-tests/tests/decimal.rs @@ -51,8 +51,8 @@ fn test_dec_macro() { const X13: Decimal = dec!("-3138550867693340381917894711603833208051.177722232017256448"); assert_eq!(X13, Decimal::MIN); - Decimal::try_from("3138550867693340381917894711603833208052.177722232017256447"); - const X14: Decimal = dec!(3138550867693340381917894711603833208051.177722232017256447); + const X14: Decimal = dec!(".000000000000000048"); + assert_eq!(X14, Decimal(I192::from(48))); } #[test] From d208ef7eff4dbac0670d3490a16fb96ba8053374 Mon Sep 17 00:00:00 2001 From: David Edey Date: Wed, 20 Sep 2023 23:08:44 +0100 Subject: [PATCH 5/6] tweak: Disallow dec!(".123") and require "0.123" --- radix-engine-common/src/math/decimal.rs | 9 ++++++--- radix-engine-common/src/math/precise_decimal.rs | 9 ++++++--- radix-engine-macros/src/decimal.rs | 10 ++++++++-- radix-engine-tests/tests/decimal.rs | 2 +- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/radix-engine-common/src/math/decimal.rs b/radix-engine-common/src/math/decimal.rs index c6c57ddc289..113dc6d7ddc 100644 --- a/radix-engine-common/src/math/decimal.rs +++ b/radix-engine-common/src/math/decimal.rs @@ -757,7 +757,9 @@ impl FromStr for Decimal { unreachable!("InvalidLength is only for parsing &[u8], not &str") } ParseI192Error::InvalidDigit => return Err(ParseDecimalError::InvalidDigit), - ParseI192Error::Empty => I192::ZERO, // Allows parsing ".123" + // We have decided to be restrictive to force people to type "0.123" instead of ".123" + // for clarity, and to align with how rust's float literal works + ParseI192Error::Empty => return Err(ParseDecimalError::EmptyIntegralPart), }, }; @@ -849,6 +851,7 @@ impl fmt::Debug for Decimal { pub enum ParseDecimalError { InvalidDigit, Overflow, + EmptyIntegralPart, EmptyFractionalPart, MoreThanEighteenDecimalPlaces, MoreThanOneDecimalPoint, @@ -980,8 +983,8 @@ mod tests { Err(ParseDecimalError::Overflow), ); assert_eq!( - Decimal::from_str(".000000000000000231").unwrap(), - Decimal(231.into()), + Decimal::from_str(".000000000000000231"), + Err(ParseDecimalError::EmptyIntegralPart), ); assert_eq!( Decimal::from_str("231."), diff --git a/radix-engine-common/src/math/precise_decimal.rs b/radix-engine-common/src/math/precise_decimal.rs index 1c8c675a81f..894bfb44b71 100644 --- a/radix-engine-common/src/math/precise_decimal.rs +++ b/radix-engine-common/src/math/precise_decimal.rs @@ -795,7 +795,9 @@ impl FromStr for PreciseDecimal { unreachable!("InvalidLength is only for parsing &[u8], not &str") } ParseI256Error::InvalidDigit => return Err(ParsePreciseDecimalError::InvalidDigit), - ParseI256Error::Empty => I256::ZERO, + // We have decided to be restrictive to force people to type "0.123" instead of ".123" + // for clarity, and to align with how rust's float literal works + ParseI256Error::Empty => return Err(ParsePreciseDecimalError::EmptyIntegralPart), }, }; @@ -891,6 +893,7 @@ impl fmt::Debug for PreciseDecimal { pub enum ParsePreciseDecimalError { InvalidDigit, Overflow, + EmptyIntegralPart, EmptyFractionalPart, MoreThanThirtySixDecimalPlaces, MoreThanOneDecimalPoint, @@ -1072,8 +1075,8 @@ mod tests { Err(ParsePreciseDecimalError::Overflow), ); assert_eq!( - PreciseDecimal::from_str(".000000000000000231").unwrap(), - PreciseDecimal(I256::from(231) * I256::TEN.pow(18)), + PreciseDecimal::from_str(".000000000000000231"), + Err(ParsePreciseDecimalError::EmptyIntegralPart), ); assert_eq!( PreciseDecimal::from_str("231."), diff --git a/radix-engine-macros/src/decimal.rs b/radix-engine-macros/src/decimal.rs index ae63aabfd6c..dec1679c6c1 100644 --- a/radix-engine-macros/src/decimal.rs +++ b/radix-engine-macros/src/decimal.rs @@ -72,8 +72,11 @@ fn decimal_error_reason(error: ParseDecimalError) -> &'static str { match error { ParseDecimalError::InvalidDigit => "There is an invalid character.", ParseDecimalError::Overflow => "The number is too large to fit in a decimal.", + ParseDecimalError::EmptyIntegralPart => { + "If there is a decimal point, the number must include at least one digit before it. Use a 0 if necessary." + }, ParseDecimalError::EmptyFractionalPart => { - "The number cannot have an empty fractional part." + "If there is a decimal point, the number must include at least one digit after it." } ParseDecimalError::MoreThanEighteenDecimalPlaces => { "A decimal cannot have more than eighteen decimal places." @@ -93,8 +96,11 @@ fn precise_decimal_error_reason(error: ParsePreciseDecimalError) -> &'static str ParsePreciseDecimalError::Overflow => { "The number being too large to fit in a precise decimal" } + ParsePreciseDecimalError::EmptyIntegralPart => { + "If there is a decimal point, the number must include at least one digit before it. Use a 0 if necessary." + } ParsePreciseDecimalError::EmptyFractionalPart => { - "The number cannot have an empty fractional part." + "If there is a decimal point, the number must include at least one digit after it." } ParsePreciseDecimalError::MoreThanThirtySixDecimalPlaces => { "A precise decimal cannot have more than thirty-six decimal places." diff --git a/radix-engine-tests/tests/decimal.rs b/radix-engine-tests/tests/decimal.rs index c86bba70deb..938c8b760a4 100644 --- a/radix-engine-tests/tests/decimal.rs +++ b/radix-engine-tests/tests/decimal.rs @@ -51,7 +51,7 @@ fn test_dec_macro() { const X13: Decimal = dec!("-3138550867693340381917894711603833208051.177722232017256448"); assert_eq!(X13, Decimal::MIN); - const X14: Decimal = dec!(".000000000000000048"); + const X14: Decimal = dec!("0.000000000000000048"); assert_eq!(X14, Decimal(I192::from(48))); } From 59be1f72dd73e0ea55ff28ab5c0d229d44c416a4 Mon Sep 17 00:00:00 2001 From: Yulong Wu Date: Wed, 20 Sep 2023 23:20:27 +0100 Subject: [PATCH 6/6] Update assets --- assets/faucet.wasm | Bin 110113 -> 110330 bytes assets/flash_loan.wasm | Bin 153220 -> 153421 bytes assets/genesis_helper.wasm | Bin 200644 -> 200859 bytes assets/global_n_owned.wasm | Bin 85512 -> 85512 bytes assets/kv_store.wasm | Bin 102859 -> 102859 bytes assets/max_transaction.wasm | Bin 122500 -> 122500 bytes assets/metadata.wasm | Bin 140673 -> 140673 bytes assets/radiswap.wasm | Bin 165704 -> 165893 bytes radix-engine-tests/assets/cost_flash_loan.csv | 16 ++-- ...ost_mint_large_size_nfts_from_manifest.csv | 14 ++-- ...ost_mint_small_size_nfts_from_manifest.csv | 14 ++-- .../assets/cost_publish_large_package.csv | 14 ++-- radix-engine-tests/assets/cost_radiswap.csv | 16 ++-- ...eebd00ff42776644de7d877889dbfb60d245.blob} | Bin 85512 -> 85512 bytes .../001--global_n_owned_emitting_events.rtm | 2 +- ...6c04adcadcf52e7012c9a73fbc5fada95247.blob} | Bin 102859 -> 102859 bytes .../001--kv-store-with-remote-type.rtm | 2 +- ...4ae5890c3862bd44ca63a03214a15f928bf0.blob} | Bin 122500 -> 122500 bytes .../001--max_transaction-publish-package.rtm | 2 +- ...002--max_transaction-with-large-events.rtm | 2 +- ...x_transaction-with-large-state-updates.rtm | 2 +- ...db19d00f496f2527cc5de39abfa9b2613ed3.blob} | Bin 140673 -> 140673 bytes ...-metadata-create-package-with-metadata.rtm | 2 +- ...etadata-create-component-with-metadata.rtm | 4 +- ...d423ee0bfc99f64090a598f716e4a637a162.blob} | Bin 165704 -> 165893 bytes ...resource-with-remote-type-registration.rtm | 2 +- ...non-fungible-resource-with-remote-type.rtm | 2 +- ...d423ee0bfc99f64090a598f716e4a637a162.blob} | Bin 165704 -> 165893 bytes ...003--radiswap-publish-and-create-pools.rtm | 2 +- .../radiswap/004--radiswap-add-liquidity.rtm | 4 +- .../005--radiswap-distribute-tokens.rtm | 12 +-- .../radiswap/006--radiswap-swap-tokens.rtm | 2 +- .../radiswap/007--radiswap-remove-tokens.rtm | 6 +- .../008--radiswap-set-two-way-linking.rtm | 72 +++++++++--------- 34 files changed, 96 insertions(+), 96 deletions(-) rename transaction-scenarios/generated-examples/global_n_owned/{001--global_n_owned_emitting_events-db41095f97022cf2e312d3a7d33bc486a21ce176cb0b81d3c0636fef0ead8aa3.blob => 001--global_n_owned_emitting_events-8f03801b99371af496eecddf3b52eebd00ff42776644de7d877889dbfb60d245.blob} (99%) rename transaction-scenarios/generated-examples/kv_store_with_remote_type/{001--kv-store-with-remote-type-fad43b935cb3d720f1416151cc42ff1ba5baf3d5a1958bf727006ce655ff8ea8.blob => 001--kv-store-with-remote-type-d7adc8e0dbf214357b45e5dbb2576c04adcadcf52e7012c9a73fbc5fada95247.blob} (99%) rename transaction-scenarios/generated-examples/max_transaction/{001--max_transaction-publish-package-e06f34ca02af4aafab5d06108c015fc43f94260137b5134e56684c5d6a8d47f6.blob => 001--max_transaction-publish-package-a8961f1d96f2c923408e8625c93f4ae5890c3862bd44ca63a03214a15f928bf0.blob} (99%) rename transaction-scenarios/generated-examples/metadata/{001--metadata-create-package-with-metadata-63cec0a11885ddb316115aa3d1d1d41e08e5ee0a1d9710cc2fa6b30486e7cd4b.blob => 001--metadata-create-package-with-metadata-38e22f0cc569bce97b325509d965db19d00f496f2527cc5de39abfa9b2613ed3.blob} (99%) rename transaction-scenarios/generated-examples/{radiswap/003--radiswap-publish-and-create-pools-70fca0bc6630134acc829b3a527e09e4d33765e4b6fe42fe465038dbd0217508.blob => non_fungible_resource_with_remote_type/001--non-fungible-resource-with-remote-type-registration-8e6815d5a4b836e30b4ae8becf7bd423ee0bfc99f64090a598f716e4a637a162.blob} (63%) rename transaction-scenarios/generated-examples/{non_fungible_resource_with_remote_type/001--non-fungible-resource-with-remote-type-registration-70fca0bc6630134acc829b3a527e09e4d33765e4b6fe42fe465038dbd0217508.blob => radiswap/003--radiswap-publish-and-create-pools-8e6815d5a4b836e30b4ae8becf7bd423ee0bfc99f64090a598f716e4a637a162.blob} (63%) diff --git a/assets/faucet.wasm b/assets/faucet.wasm index acf87c9dd6bfb1b44b03e353dd20615331bb36aa..b9c95ca3070bb99868ab31f81cf9db458459d28c 100644 GIT binary patch delta 15366 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 delta 15006 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 diff --git a/assets/flash_loan.wasm b/assets/flash_loan.wasm index 51f27aa002ace6ddc3e13019cc7ccdcc146e00e8..6558f32ab6906aa19bb140a5b0c38e06957bc0c1 100644 GIT binary patch delta 17725 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 MX~{^ka47BgKhpD_HUIzs delta 18165 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 diff --git a/assets/global_n_owned.wasm b/assets/global_n_owned.wasm index d698c752bc45217761ad46eb561d150661a87fc8..fa655ec564be8017ca02f2c7ed4d3764b10f00fd 100755 GIT binary patch delta 19 bcmeB}!`d;2wP6e6O=reE+iy8D>Tv-8P+tdb delta 19 bcmeB}!`d;2wP6e6O=rff+iy8D>Tv-8P%Z~& diff --git a/assets/kv_store.wasm b/assets/kv_store.wasm index f860f223ec238bf688c956077c72bd545bce54b8..aa81d2eb04a93d63ea2654d7421598e7b277f368 100755 GIT binary patch delta 19 bcmX@TnCutt8+ud$6T6+NiRXhk8 delta 19 bcmZoX&Cz(8qhSl9>utuZ+ud$6T6+NiRSO6b diff --git a/assets/radiswap.wasm b/assets/radiswap.wasm index b1da9271b090447256f1e7a1a19952b572291dd3..6187c5a1b1f4ee976320d0fdd4823b5c24252a23 100644 GIT binary patch delta 18296 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
  • ie`%iL;;kL@0mqe@lH2`af=E;F!!TOXyz1y(S1BN~`sN*wFKQk&6a3T1` z=YTZRS4=+v&$Z{&-eM-G3s+ptlcMvfc~;_zR? z0@uLLgIvbEA`BV*vS?M^iz@#EDz<9)J%_pOL4H3FVSUd3J~C>o)YfFWRGU+fu`Aj z4}pj9ajDJyeXRV;QzBjdGG2@#zs!3@%z4uAYPP=s&JL`bAP?3ZsMo7hccIRN3-&(@ z%CSrZ>knZaMlo3LR?#mX%@=PsWYn23{HulEfPtf47%=qyVS~p$H+bNv!GrF5=B2?5 zgK5;Swm+u;k{ns5Qd>=#Hv!5fzJ{DNK|EEvc?}Eo{s5_sAEO%_&O(@lUw!;!pT|W# z*=eH43jYN|642zXDaTC|8KQPgxn!bfFZ$G!XC~q)U{+1dmX7|Z`0?(7bpz6vQK_Db zIupDBek?}3Y&L$30*e#ZSxg(@2cc5+#>kn%m0_Bq-Yn3D%&EweBc~RM#^F6{X-aIe zYsnpjqHWAr)Dr79$RfnR(1+hnk9 zrK~nZbO<|I$6DZ$96m)Pg{9Zk6g4i%Ia5Tv@YbmEhWgf(JEn-vHJ(GAnKKzV6Nyn` OajCpc2iah%Nck^cEp~4J delta 18015 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 diff --git a/radix-engine-tests/assets/cost_flash_loan.csv b/radix-engine-tests/assets/cost_flash_loan.csv index f808532ac0b..660271a1a81 100644 --- a/radix-engine-tests/assets/cost_flash_loan.csv +++ b/radix-engine-tests/assets/cost_flash_loan.csv @@ -1,11 +1,11 @@ -Total Cost (XRD) , 0.62796092592, 100.0% -- Execution Cost (XRD) , 0.4675297, 74.5% +Total Cost (XRD) , 0.62812212592, 100.0% +- Execution Cost (XRD) , 0.4676909, 74.5% - Finalization Cost (XRD) , 0.0322574, 5.1% - Tipping Cost (XRD) , 0, 0.0% - Storage Cost (XRD) , 0.12817382592, 20.4% - Tipping Cost (XRD) , 0, 0.0% - Royalty Cost (XRD) , 0, 0.0% -Execution Cost Breakdown , 9350594, 100.0% +Execution Cost Breakdown , 9353818, 100.0% - AfterInvoke , 1884, 0.0% - AllocateNodeId , 5141, 0.1% - BeforeInvoke , 7694, 0.1% @@ -20,13 +20,13 @@ Execution Cost Breakdown , - OpenSubstate::GlobalFungibleResourceManager , 259797, 2.8% - OpenSubstate::GlobalGenericComponent , 47692, 0.5% - OpenSubstate::GlobalNonFungibleResourceManager , 632452, 6.8% -- OpenSubstate::GlobalPackage , 3397563, 36.3% +- OpenSubstate::GlobalPackage , 3398653, 36.3% - OpenSubstate::InternalFungibleVault , 290575, 3.1% - OpenSubstate::InternalGenericComponent , 211658, 2.3% - PinNode , 636, 0.0% -- PrepareWasmCode , 964444, 10.3% +- PrepareWasmCode , 965508, 10.3% - QueryActor , 10500, 0.1% -- ReadSubstate , 1322045, 14.1% +- ReadSubstate , 1323109, 14.1% - RunNativeCode::AuthZone_pop , 33696, 0.4% - RunNativeCode::AuthZone_push , 47700, 0.5% - RunNativeCode::Worktop_drain , 11224, 0.1% @@ -54,8 +54,8 @@ Execution Cost Breakdown , - RunNativeCode::try_deposit_batch_or_abort , 121257, 1.3% - RunNativeCode::unlock_amount_FungibleVault , 46544, 0.5% - RunNativeCode::withdraw , 57851, 0.6% -- RunWasmCode::BasicFlashLoan_repay_loan , 74634, 0.8% -- RunWasmCode::BasicFlashLoan_take_loan , 68685, 0.7% +- RunWasmCode::BasicFlashLoan_repay_loan , 74637, 0.8% +- RunWasmCode::BasicFlashLoan_take_loan , 68688, 0.7% - ValidateTxPayload , 18800, 0.2% - VerifyTxSignatures , 14000, 0.1% - WriteSubstate , 33968, 0.4% diff --git a/radix-engine-tests/assets/cost_mint_large_size_nfts_from_manifest.csv b/radix-engine-tests/assets/cost_mint_large_size_nfts_from_manifest.csv index ec5e3a05066..aca6518fdc8 100644 --- a/radix-engine-tests/assets/cost_mint_large_size_nfts_from_manifest.csv +++ b/radix-engine-tests/assets/cost_mint_large_size_nfts_from_manifest.csv @@ -1,11 +1,11 @@ -Total Cost (XRD) , 207.47896963518, 100.0% -- Execution Cost (XRD) , 2.5892222, 1.2% +Total Cost (XRD) , 207.47905608518, 100.0% +- Execution Cost (XRD) , 2.58930865, 1.2% - Finalization Cost (XRD) , 2.47943445, 1.2% - Tipping Cost (XRD) , 0, 0.0% - Storage Cost (XRD) , 202.41031298518, 97.6% - Tipping Cost (XRD) , 0, 0.0% - Royalty Cost (XRD) , 0, 0.0% -Execution Cost Breakdown , 51784444, 100.0% +Execution Cost Breakdown , 51786173, 100.0% - AfterInvoke , 4752, 0.0% - AllocateNodeId , 2231, 0.0% - BeforeInvoke , 2093962, 4.0% @@ -20,15 +20,15 @@ Execution Cost Breakdown , - OpenSubstate::GlobalFungibleResourceManager , 121872, 0.2% - OpenSubstate::GlobalGenericComponent , 43690, 0.1% - OpenSubstate::GlobalNonFungibleResourceManager , 14330, 0.0% -- OpenSubstate::GlobalPackage , 2965171, 5.7% +- OpenSubstate::GlobalPackage , 2965764, 5.7% - OpenSubstate::InternalFungibleVault , 90202, 0.2% - OpenSubstate::InternalGenericComponent , 59014, 0.1% - OpenSubstate::InternalKeyValueStore , 40536, 0.1% - OpenSubstate::InternalNonFungibleVault , 133804, 0.3% - PinNode , 240, 0.0% -- PrepareWasmCode , 351598, 0.7% +- PrepareWasmCode , 352162, 0.7% - QueryActor , 2000, 0.0% -- ReadSubstate , 630926, 1.2% +- ReadSubstate , 631490, 1.2% - RunNativeCode::Worktop_drain , 11224, 0.0% - RunNativeCode::Worktop_drop , 17918, 0.0% - RunNativeCode::Worktop_put , 29033, 0.1% @@ -42,7 +42,7 @@ Execution Cost Breakdown , - RunNativeCode::lock_fee , 45243, 0.1% - RunNativeCode::put_NonFungibleVault , 35354, 0.1% - RunNativeCode::try_deposit_batch_or_abort , 121257, 0.2% -- RunWasmCode::Faucet_lock_fee , 24132, 0.0% +- RunWasmCode::Faucet_lock_fee , 24140, 0.0% - SetSubstate , 35917, 0.1% - ValidateTxPayload , 41840720, 80.8% - VerifyTxSignatures , 7000, 0.0% diff --git a/radix-engine-tests/assets/cost_mint_small_size_nfts_from_manifest.csv b/radix-engine-tests/assets/cost_mint_small_size_nfts_from_manifest.csv index bfb9863ba8f..2360b78ed63 100644 --- a/radix-engine-tests/assets/cost_mint_small_size_nfts_from_manifest.csv +++ b/radix-engine-tests/assets/cost_mint_small_size_nfts_from_manifest.csv @@ -1,11 +1,11 @@ -Total Cost (XRD) , 6.54699700536, 100.0% -- Execution Cost (XRD) , 0.2976836, 4.5% +Total Cost (XRD) , 6.54708345536, 100.0% +- Execution Cost (XRD) , 0.29777005, 4.5% - Finalization Cost (XRD) , 2.4964143, 38.1% - Tipping Cost (XRD) , 0, 0.0% - Storage Cost (XRD) , 3.75289910536, 57.3% - Tipping Cost (XRD) , 0, 0.0% - Royalty Cost (XRD) , 0, 0.0% -Execution Cost Breakdown , 5953672, 100.0% +Execution Cost Breakdown , 5955401, 100.0% - AfterInvoke , 4806, 0.1% - AllocateNodeId , 2231, 0.0% - BeforeInvoke , 10522, 0.2% @@ -20,15 +20,15 @@ Execution Cost Breakdown , - OpenSubstate::GlobalFungibleResourceManager , 121872, 2.0% - OpenSubstate::GlobalGenericComponent , 43690, 0.7% - OpenSubstate::GlobalNonFungibleResourceManager , 14330, 0.2% -- OpenSubstate::GlobalPackage , 2965171, 49.8% +- OpenSubstate::GlobalPackage , 2965764, 49.8% - OpenSubstate::InternalFungibleVault , 90202, 1.5% - OpenSubstate::InternalGenericComponent , 59122, 1.0% - OpenSubstate::InternalKeyValueStore , 40536, 0.7% - OpenSubstate::InternalNonFungibleVault , 135427, 2.3% - PinNode , 240, 0.0% -- PrepareWasmCode , 351598, 5.9% +- PrepareWasmCode , 352162, 5.9% - QueryActor , 2000, 0.0% -- ReadSubstate , 632087, 10.6% +- ReadSubstate , 632651, 10.6% - RunNativeCode::Worktop_drain , 11224, 0.2% - RunNativeCode::Worktop_drop , 17918, 0.3% - RunNativeCode::Worktop_put , 29033, 0.5% @@ -42,7 +42,7 @@ Execution Cost Breakdown , - RunNativeCode::lock_fee , 45243, 0.8% - RunNativeCode::put_NonFungibleVault , 35354, 0.6% - RunNativeCode::try_deposit_batch_or_abort , 121257, 2.0% -- RunWasmCode::Faucet_lock_fee , 24132, 0.4% +- RunWasmCode::Faucet_lock_fee , 24140, 0.4% - SetSubstate , 36370, 0.6% - ValidateTxPayload , 171920, 2.9% - VerifyTxSignatures , 7000, 0.1% diff --git a/radix-engine-tests/assets/cost_publish_large_package.csv b/radix-engine-tests/assets/cost_publish_large_package.csv index eedec3c9bd1..5ecd03e79f7 100644 --- a/radix-engine-tests/assets/cost_publish_large_package.csv +++ b/radix-engine-tests/assets/cost_publish_large_package.csv @@ -1,11 +1,11 @@ -Total Cost (XRD) , 304.85392360219, 100.0% -- Execution Cost (XRD) , 4.94841595, 1.6% +Total Cost (XRD) , 304.85401005219, 100.0% +- Execution Cost (XRD) , 4.9485024, 1.6% - Finalization Cost (XRD) , 0.07669735, 0.0% - Tipping Cost (XRD) , 0, 0.0% - Storage Cost (XRD) , 299.82881030219, 98.4% - Tipping Cost (XRD) , 0, 0.0% - Royalty Cost (XRD) , 0, 0.0% -Execution Cost Breakdown , 98968319, 100.0% +Execution Cost Breakdown , 98970048, 100.0% - AfterInvoke , 326, 0.0% - AllocateNodeId , 1552, 0.0% - BeforeInvoke , 2096226, 2.1% @@ -18,14 +18,14 @@ Execution Cost Breakdown , - MoveModule , 1960, 0.0% - OpenSubstate::GlobalFungibleResourceManager , 126616, 0.1% - OpenSubstate::GlobalGenericComponent , 43690, 0.0% -- OpenSubstate::GlobalPackage , 2517043, 2.5% +- OpenSubstate::GlobalPackage , 2517636, 2.5% - OpenSubstate::InternalFungibleVault , 91807, 0.1% - OpenSubstate::InternalGenericComponent , 18072, 0.0% - OpenSubstate::InternalKeyValueStore , 40536, 0.0% - PinNode , 156, 0.0% -- PrepareWasmCode , 351598, 0.4% +- PrepareWasmCode , 352162, 0.4% - QueryActor , 1500, 0.0% -- ReadSubstate , 467449, 0.5% +- ReadSubstate , 468013, 0.5% - RunNativeCode::Worktop_drop , 17918, 0.0% - RunNativeCode::create , 24592, 0.0% - RunNativeCode::create_empty_vault_FungibleResourceManager , 35570, 0.0% @@ -33,7 +33,7 @@ Execution Cost Breakdown , - RunNativeCode::get_amount_FungibleVault , 14451, 0.0% - RunNativeCode::lock_fee , 45243, 0.0% - RunNativeCode::publish_wasm_advanced , 46852012, 47.3% -- RunWasmCode::Faucet_lock_fee , 24132, 0.0% +- RunWasmCode::Faucet_lock_fee , 24140, 0.0% - SetSubstate , 403, 0.0% - ValidateTxPayload , 41911240, 42.3% - VerifyTxSignatures , 7000, 0.0% diff --git a/radix-engine-tests/assets/cost_radiswap.csv b/radix-engine-tests/assets/cost_radiswap.csv index 2148cc0ffae..db6f1f756c7 100644 --- a/radix-engine-tests/assets/cost_radiswap.csv +++ b/radix-engine-tests/assets/cost_radiswap.csv @@ -1,11 +1,11 @@ -Total Cost (XRD) , 0.57327492273, 100.0% -- Execution Cost (XRD) , 0.36733995, 64.1% +Total Cost (XRD) , 0.57335252273, 100.0% +- Execution Cost (XRD) , 0.36741755, 64.1% - Finalization Cost (XRD) , 0.0427613, 7.5% - Tipping Cost (XRD) , 0, 0.0% - Storage Cost (XRD) , 0.16317367273, 28.5% - Tipping Cost (XRD) , 0, 0.0% - Royalty Cost (XRD) , 0, 0.0% -Execution Cost Breakdown , 7346799, 100.0% +Execution Cost Breakdown , 7348351, 100.0% - AfterInvoke , 1444, 0.0% - AllocateNodeId , 3395, 0.0% - BeforeInvoke , 3714, 0.1% @@ -18,14 +18,14 @@ Execution Cost Breakdown , - OpenSubstate::GlobalAccount , 656205, 8.9% - OpenSubstate::GlobalFungibleResourceManager , 425889, 5.8% - OpenSubstate::GlobalGenericComponent , 44192, 0.6% -- OpenSubstate::GlobalPackage , 2669770, 36.3% -- OpenSubstate::GlobalTwoResourcePool , 657608, 9.0% +- OpenSubstate::GlobalPackage , 2670303, 36.3% +- OpenSubstate::GlobalTwoResourcePool , 657608, 8.9% - OpenSubstate::InternalFungibleVault , 355473, 4.8% - OpenSubstate::InternalGenericComponent , 125641, 1.7% - PinNode , 408, 0.0% -- PrepareWasmCode , 502826, 6.8% +- PrepareWasmCode , 503334, 6.8% - QueryActor , 4500, 0.1% -- ReadSubstate , 742202, 10.1% +- ReadSubstate , 742710, 10.1% - RunNativeCode::Worktop_drain , 11224, 0.2% - RunNativeCode::Worktop_drop , 17918, 0.2% - RunNativeCode::Worktop_put , 58066, 0.8% @@ -43,7 +43,7 @@ Execution Cost Breakdown , - RunNativeCode::take_advanced_FungibleVault , 44567, 0.6% - RunNativeCode::try_deposit_batch_or_abort , 121257, 1.7% - RunNativeCode::withdraw , 57851, 0.8% -- RunWasmCode::Radiswap_swap , 94262, 1.3% +- RunWasmCode::Radiswap_swap , 94265, 1.3% - ValidateTxPayload , 13120, 0.2% - VerifyTxSignatures , 14000, 0.2% - WriteSubstate , 19286, 0.3% diff --git a/transaction-scenarios/generated-examples/global_n_owned/001--global_n_owned_emitting_events-db41095f97022cf2e312d3a7d33bc486a21ce176cb0b81d3c0636fef0ead8aa3.blob b/transaction-scenarios/generated-examples/global_n_owned/001--global_n_owned_emitting_events-8f03801b99371af496eecddf3b52eebd00ff42776644de7d877889dbfb60d245.blob similarity index 99% rename from transaction-scenarios/generated-examples/global_n_owned/001--global_n_owned_emitting_events-db41095f97022cf2e312d3a7d33bc486a21ce176cb0b81d3c0636fef0ead8aa3.blob rename to transaction-scenarios/generated-examples/global_n_owned/001--global_n_owned_emitting_events-8f03801b99371af496eecddf3b52eebd00ff42776644de7d877889dbfb60d245.blob index d698c752bc45217761ad46eb561d150661a87fc8..fa655ec564be8017ca02f2c7ed4d3764b10f00fd 100644 GIT binary patch delta 19 bcmeB}!`d;2wP6e6O=reE+iy8D>Tv-8P+tdb delta 19 bcmeB}!`d;2wP6e6O=rff+iy8D>Tv-8P%Z~& diff --git a/transaction-scenarios/generated-examples/global_n_owned/001--global_n_owned_emitting_events.rtm b/transaction-scenarios/generated-examples/global_n_owned/001--global_n_owned_emitting_events.rtm index 0b2c7dbc84f..7e3d153995e 100644 --- a/transaction-scenarios/generated-examples/global_n_owned/001--global_n_owned_emitting_events.rtm +++ b/transaction-scenarios/generated-examples/global_n_owned/001--global_n_owned_emitting_events.rtm @@ -346,7 +346,7 @@ PUBLISH_PACKAGE_ADVANCED ) ) ) - Blob("db41095f97022cf2e312d3a7d33bc486a21ce176cb0b81d3c0636fef0ead8aa3") + Blob("8f03801b99371af496eecddf3b52eebd00ff42776644de7d877889dbfb60d245") Map() Enum<1u8>( AddressReservation("package_address_reservation") diff --git a/transaction-scenarios/generated-examples/kv_store_with_remote_type/001--kv-store-with-remote-type-fad43b935cb3d720f1416151cc42ff1ba5baf3d5a1958bf727006ce655ff8ea8.blob b/transaction-scenarios/generated-examples/kv_store_with_remote_type/001--kv-store-with-remote-type-d7adc8e0dbf214357b45e5dbb2576c04adcadcf52e7012c9a73fbc5fada95247.blob similarity index 99% rename from transaction-scenarios/generated-examples/kv_store_with_remote_type/001--kv-store-with-remote-type-fad43b935cb3d720f1416151cc42ff1ba5baf3d5a1958bf727006ce655ff8ea8.blob rename to transaction-scenarios/generated-examples/kv_store_with_remote_type/001--kv-store-with-remote-type-d7adc8e0dbf214357b45e5dbb2576c04adcadcf52e7012c9a73fbc5fada95247.blob index f860f223ec238bf688c956077c72bd545bce54b8..aa81d2eb04a93d63ea2654d7421598e7b277f368 100644 GIT binary patch delta 19 bcmX@TnC() Enum<1u8>( AddressReservation("package_address_reservation") diff --git a/transaction-scenarios/generated-examples/max_transaction/001--max_transaction-publish-package-e06f34ca02af4aafab5d06108c015fc43f94260137b5134e56684c5d6a8d47f6.blob b/transaction-scenarios/generated-examples/max_transaction/001--max_transaction-publish-package-a8961f1d96f2c923408e8625c93f4ae5890c3862bd44ca63a03214a15f928bf0.blob similarity index 99% rename from transaction-scenarios/generated-examples/max_transaction/001--max_transaction-publish-package-e06f34ca02af4aafab5d06108c015fc43f94260137b5134e56684c5d6a8d47f6.blob rename to transaction-scenarios/generated-examples/max_transaction/001--max_transaction-publish-package-a8961f1d96f2c923408e8625c93f4ae5890c3862bd44ca63a03214a15f928bf0.blob index cbcc0d9c339e5560c3964cd242769754de0d4e19..1954c49b16be841ce01a9a7dee95b9411d02c72c 100644 GIT binary patch delta 19 bcmZqK%igk=y() Enum<1u8>( AddressReservation("package_address_reservation") diff --git a/transaction-scenarios/generated-examples/max_transaction/002--max_transaction-with-large-events.rtm b/transaction-scenarios/generated-examples/max_transaction/002--max_transaction-with-large-events.rtm index 8180e97ef61..25394317a22 100644 --- a/transaction-scenarios/generated-examples/max_transaction/002--max_transaction-with-large-events.rtm +++ b/transaction-scenarios/generated-examples/max_transaction/002--max_transaction-with-large-events.rtm @@ -4,7 +4,7 @@ CALL_METHOD Decimal("5000") ; CALL_FUNCTION - Address("package_sim1phdj32uaa6zjfn8uh6h5epm6syvty8hdvf7p7ver4myqnmxtxs3xx2") + Address("package_sim1phr6jj0e8yldqush40lyxlsy4uqyltxly0x5y2ghy8ugr9nldkfaja") "MaxTransaction" "max_events" 255u32 diff --git a/transaction-scenarios/generated-examples/max_transaction/003--max_transaction-with-large-state-updates.rtm b/transaction-scenarios/generated-examples/max_transaction/003--max_transaction-with-large-state-updates.rtm index 40665adf02f..c6772280d77 100644 --- a/transaction-scenarios/generated-examples/max_transaction/003--max_transaction-with-large-state-updates.rtm +++ b/transaction-scenarios/generated-examples/max_transaction/003--max_transaction-with-large-state-updates.rtm @@ -4,7 +4,7 @@ CALL_METHOD Decimal("5000") ; CALL_METHOD - Address("component_sim1cqyspzwxtz5sy5ncvpjalumlq378svdfu0acrcxmaq8lts7649xej6") + Address("component_sim1cq97km8l03g9fmf6kc42dtmgjgm3l4u50y9wl9tv5hmzypjnvfcx2v") "max_state_updates" 21u32 ; diff --git a/transaction-scenarios/generated-examples/metadata/001--metadata-create-package-with-metadata-63cec0a11885ddb316115aa3d1d1d41e08e5ee0a1d9710cc2fa6b30486e7cd4b.blob b/transaction-scenarios/generated-examples/metadata/001--metadata-create-package-with-metadata-38e22f0cc569bce97b325509d965db19d00f496f2527cc5de39abfa9b2613ed3.blob similarity index 99% rename from transaction-scenarios/generated-examples/metadata/001--metadata-create-package-with-metadata-63cec0a11885ddb316115aa3d1d1d41e08e5ee0a1d9710cc2fa6b30486e7cd4b.blob rename to transaction-scenarios/generated-examples/metadata/001--metadata-create-package-with-metadata-38e22f0cc569bce97b325509d965db19d00f496f2527cc5de39abfa9b2613ed3.blob index 37a9c12ec9640cbc65317126b168a7236119b347..2db263785a81d4daaecf616cd1589d5455d01d8f 100644 GIT binary patch delta 19 bcmZoX&Cz(8qhSl9>utt8+ud$6T6+NiRXhk8 delta 19 bcmZoX&Cz(8qhSl9>utuZ+ud$6T6+NiRSO6b diff --git a/transaction-scenarios/generated-examples/metadata/001--metadata-create-package-with-metadata.rtm b/transaction-scenarios/generated-examples/metadata/001--metadata-create-package-with-metadata.rtm index da1524bdb79..6be09299f28 100644 --- a/transaction-scenarios/generated-examples/metadata/001--metadata-create-package-with-metadata.rtm +++ b/transaction-scenarios/generated-examples/metadata/001--metadata-create-package-with-metadata.rtm @@ -475,7 +475,7 @@ PUBLISH_PACKAGE_ADVANCED ) ) ) - Blob("63cec0a11885ddb316115aa3d1d1d41e08e5ee0a1d9710cc2fa6b30486e7cd4b") + Blob("38e22f0cc569bce97b325509d965db19d00f496f2527cc5de39abfa9b2613ed3") Map( "address" => Tuple( Enum<1u8>( diff --git a/transaction-scenarios/generated-examples/metadata/002--metadata-create-component-with-metadata.rtm b/transaction-scenarios/generated-examples/metadata/002--metadata-create-component-with-metadata.rtm index f9f61bbe5ab..ba8f98bf850 100644 --- a/transaction-scenarios/generated-examples/metadata/002--metadata-create-component-with-metadata.rtm +++ b/transaction-scenarios/generated-examples/metadata/002--metadata-create-component-with-metadata.rtm @@ -4,7 +4,7 @@ CALL_METHOD Decimal("5000") ; ALLOCATE_GLOBAL_ADDRESS - Address("package_sim1pkgacxu8legg42uh73e3jsmjzerna3qrvua2hshyezt2knvlzqk2wj") + Address("package_sim1phvravcrk8zgjz9ecfjed0cdkmqympwqzar8wmm05qnltqrl5rqx7c") "MetadataTest" AddressReservation("metadata_component_address_reservation") NamedAddress("metadata_component_address") @@ -14,7 +14,7 @@ CALL_METHOD "free" ; CALL_FUNCTION - Address("package_sim1pkgacxu8legg42uh73e3jsmjzerna3qrvua2hshyezt2knvlzqk2wj") + Address("package_sim1phvravcrk8zgjz9ecfjed0cdkmqympwqzar8wmm05qnltqrl5rqx7c") "MetadataTest" "new_with_address" AddressReservation("metadata_component_address_reservation") diff --git a/transaction-scenarios/generated-examples/radiswap/003--radiswap-publish-and-create-pools-70fca0bc6630134acc829b3a527e09e4d33765e4b6fe42fe465038dbd0217508.blob b/transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/001--non-fungible-resource-with-remote-type-registration-8e6815d5a4b836e30b4ae8becf7bd423ee0bfc99f64090a598f716e4a637a162.blob similarity index 63% rename from transaction-scenarios/generated-examples/radiswap/003--radiswap-publish-and-create-pools-70fca0bc6630134acc829b3a527e09e4d33765e4b6fe42fe465038dbd0217508.blob rename to transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/001--non-fungible-resource-with-remote-type-registration-8e6815d5a4b836e30b4ae8becf7bd423ee0bfc99f64090a598f716e4a637a162.blob index b1da9271b090447256f1e7a1a19952b572291dd3..6187c5a1b1f4ee976320d0fdd4823b5c24252a23 100644 GIT binary patch delta 18296 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
  • ie`%iL;;kL@0mqe@lH2`af=E;F!!TOXyz1y(S1BN~`sN*wFKQk&6a3T1` z=YTZRS4=+v&$Z{&-eM-G3s+ptlcMvfc~;_zR? z0@uLLgIvbEA`BV*vS?M^iz@#EDz<9)J%_pOL4H3FVSUd3J~C>o)YfFWRGU+fu`Aj z4}pj9ajDJyeXRV;QzBjdGG2@#zs!3@%z4uAYPP=s&JL`bAP?3ZsMo7hccIRN3-&(@ z%CSrZ>knZaMlo3LR?#mX%@=PsWYn23{HulEfPtf47%=qyVS~p$H+bNv!GrF5=B2?5 zgK5;Swm+u;k{ns5Qd>=#Hv!5fzJ{DNK|EEvc?}Eo{s5_sAEO%_&O(@lUw!;!pT|W# z*=eH43jYN|642zXDaTC|8KQPgxn!bfFZ$G!XC~q)U{+1dmX7|Z`0?(7bpz6vQK_Db zIupDBek?}3Y&L$30*e#ZSxg(@2cc5+#>kn%m0_Bq-Yn3D%&EweBc~RM#^F6{X-aIe zYsnpjqHWAr)Dr79$RfnR(1+hnk9 zrK~nZbO<|I$6DZ$96m)Pg{9Zk6g4i%Ia5Tv@YbmEhWgf(JEn-vHJ(GAnKKzV6Nyn` OajCpc2iah%Nck^cEp~4J delta 18015 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 diff --git a/transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/001--non-fungible-resource-with-remote-type-registration.rtm b/transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/001--non-fungible-resource-with-remote-type-registration.rtm index 130bb7e7fac..cc5751d02fc 100644 --- a/transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/001--non-fungible-resource-with-remote-type-registration.rtm +++ b/transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/001--non-fungible-resource-with-remote-type-registration.rtm @@ -498,7 +498,7 @@ PUBLISH_PACKAGE_ADVANCED ) ) ) - Blob("70fca0bc6630134acc829b3a527e09e4d33765e4b6fe42fe465038dbd0217508") + Blob("8e6815d5a4b836e30b4ae8becf7bd423ee0bfc99f64090a598f716e4a637a162") Map( "name" => Tuple( Enum<1u8>( diff --git a/transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/002--non-fungible-resource-with-remote-type.rtm b/transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/002--non-fungible-resource-with-remote-type.rtm index 0bc8a6c6b33..d171a987d54 100644 --- a/transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/002--non-fungible-resource-with-remote-type.rtm +++ b/transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/002--non-fungible-resource-with-remote-type.rtm @@ -9,7 +9,7 @@ CREATE_NON_FUNGIBLE_RESOURCE_WITH_INITIAL_SUPPLY true Enum<1u8>( Tuple( - Address("package_sim1p4c2r34uxxa8ukdywmaknetxssfrsphyrplwukgh82wlr0pyv9szm8"), + Address("package_sim1ph8m5jh2834c4r0t6lpwhw93ljg3gjdy3q53zf5wzkxgzu7vu4kx9p"), "Radiswap", "RemoveLiquidityEvent" ), diff --git a/transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/001--non-fungible-resource-with-remote-type-registration-70fca0bc6630134acc829b3a527e09e4d33765e4b6fe42fe465038dbd0217508.blob b/transaction-scenarios/generated-examples/radiswap/003--radiswap-publish-and-create-pools-8e6815d5a4b836e30b4ae8becf7bd423ee0bfc99f64090a598f716e4a637a162.blob similarity index 63% rename from transaction-scenarios/generated-examples/non_fungible_resource_with_remote_type/001--non-fungible-resource-with-remote-type-registration-70fca0bc6630134acc829b3a527e09e4d33765e4b6fe42fe465038dbd0217508.blob rename to transaction-scenarios/generated-examples/radiswap/003--radiswap-publish-and-create-pools-8e6815d5a4b836e30b4ae8becf7bd423ee0bfc99f64090a598f716e4a637a162.blob index b1da9271b090447256f1e7a1a19952b572291dd3..6187c5a1b1f4ee976320d0fdd4823b5c24252a23 100644 GIT binary patch delta 18296 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
  • ie`%iL;;kL@0mqe@lH2`af=E;F!!TOXyz1y(S1BN~`sN*wFKQk&6a3T1` z=YTZRS4=+v&$Z{&-eM-G3s+ptlcMvfc~;_zR? z0@uLLgIvbEA`BV*vS?M^iz@#EDz<9)J%_pOL4H3FVSUd3J~C>o)YfFWRGU+fu`Aj z4}pj9ajDJyeXRV;QzBjdGG2@#zs!3@%z4uAYPP=s&JL`bAP?3ZsMo7hccIRN3-&(@ z%CSrZ>knZaMlo3LR?#mX%@=PsWYn23{HulEfPtf47%=qyVS~p$H+bNv!GrF5=B2?5 zgK5;Swm+u;k{ns5Qd>=#Hv!5fzJ{DNK|EEvc?}Eo{s5_sAEO%_&O(@lUw!;!pT|W# z*=eH43jYN|642zXDaTC|8KQPgxn!bfFZ$G!XC~q)U{+1dmX7|Z`0?(7bpz6vQK_Db zIupDBek?}3Y&L$30*e#ZSxg(@2cc5+#>kn%m0_Bq-Yn3D%&EweBc~RM#^F6{X-aIe zYsnpjqHWAr)Dr79$RfnR(1+hnk9 zrK~nZbO<|I$6DZ$96m)Pg{9Zk6g4i%Ia5Tv@YbmEhWgf(JEn-vHJ(GAnKKzV6Nyn` OajCpc2iah%Nck^cEp~4J delta 18015 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 diff --git a/transaction-scenarios/generated-examples/radiswap/003--radiswap-publish-and-create-pools.rtm b/transaction-scenarios/generated-examples/radiswap/003--radiswap-publish-and-create-pools.rtm index 265e092608c..4b2cace831f 100644 --- a/transaction-scenarios/generated-examples/radiswap/003--radiswap-publish-and-create-pools.rtm +++ b/transaction-scenarios/generated-examples/radiswap/003--radiswap-publish-and-create-pools.rtm @@ -514,7 +514,7 @@ PUBLISH_PACKAGE_ADVANCED ) ) ) - Blob("70fca0bc6630134acc829b3a527e09e4d33765e4b6fe42fe465038dbd0217508") + Blob("8e6815d5a4b836e30b4ae8becf7bd423ee0bfc99f64090a598f716e4a637a162") Map( "name" => Tuple( Enum<1u8>( diff --git a/transaction-scenarios/generated-examples/radiswap/004--radiswap-add-liquidity.rtm b/transaction-scenarios/generated-examples/radiswap/004--radiswap-add-liquidity.rtm index c0f4a6d11c7..ec80ad7a6f6 100644 --- a/transaction-scenarios/generated-examples/radiswap/004--radiswap-add-liquidity.rtm +++ b/transaction-scenarios/generated-examples/radiswap/004--radiswap-add-liquidity.rtm @@ -34,7 +34,7 @@ TAKE_ALL_FROM_WORKTOP Bucket("pool_1_resource_2") ; CALL_METHOD - Address("component_sim1czl6f4wcyv3dwd34nrcr2cd39x8krfl745krmkxcaa67rs4fgna962") + Address("component_sim1cp50jhvtwesghjnzfmtwvww56dczhgmuehnvkzjpyzxk2w8hwrfd85") "add_liquidity" Bucket("pool_1_resource_1") Bucket("pool_1_resource_2") @@ -48,7 +48,7 @@ TAKE_ALL_FROM_WORKTOP Bucket("pool_2_resource_2") ; CALL_METHOD - Address("component_sim1crm9fecpkqa2xq3vyvaxnjtncxqr05h78u8kxlc5e8ka9234xj08tn") + Address("component_sim1cpawfjjaxc9v5jlug9scu2tky534udlrj65d47nq8s7sj2jv93hhfh") "add_liquidity" Bucket("pool_2_resource_1") Bucket("pool_2_resource_2") diff --git a/transaction-scenarios/generated-examples/radiswap/005--radiswap-distribute-tokens.rtm b/transaction-scenarios/generated-examples/radiswap/005--radiswap-distribute-tokens.rtm index 3447d182368..2ee6c1cbe2c 100644 --- a/transaction-scenarios/generated-examples/radiswap/005--radiswap-distribute-tokens.rtm +++ b/transaction-scenarios/generated-examples/radiswap/005--radiswap-distribute-tokens.rtm @@ -40,13 +40,13 @@ CALL_METHOD CALL_METHOD Address("account_sim168qgdkgfqxpnswu38wy6fy5v0q0um52zd0umuely5t9xrf88t3unc0") "withdraw" - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w") + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus") Decimal("333") ; CALL_METHOD Address("account_sim168qgdkgfqxpnswu38wy6fy5v0q0um52zd0umuely5t9xrf88t3unc0") "withdraw" - Address("resource_sim1tkhnevmz0hen4syfzlexs9gktfqgh8xf7h74wxj0vq5fc06xackyud") + Address("resource_sim1thek23fvvp4wgwhlh8vx38sgxtr4xsncurpjhj0jqvf0vhexv8n7kv") Decimal("333") ; CALL_METHOD @@ -82,13 +82,13 @@ CALL_METHOD CALL_METHOD Address("account_sim168qgdkgfqxpnswu38wy6fy5v0q0um52zd0umuely5t9xrf88t3unc0") "withdraw" - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w") + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus") Decimal("333") ; CALL_METHOD Address("account_sim168qgdkgfqxpnswu38wy6fy5v0q0um52zd0umuely5t9xrf88t3unc0") "withdraw" - Address("resource_sim1tkhnevmz0hen4syfzlexs9gktfqgh8xf7h74wxj0vq5fc06xackyud") + Address("resource_sim1thek23fvvp4wgwhlh8vx38sgxtr4xsncurpjhj0jqvf0vhexv8n7kv") Decimal("333") ; CALL_METHOD @@ -124,13 +124,13 @@ CALL_METHOD CALL_METHOD Address("account_sim168qgdkgfqxpnswu38wy6fy5v0q0um52zd0umuely5t9xrf88t3unc0") "withdraw" - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w") + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus") Decimal("333") ; CALL_METHOD Address("account_sim168qgdkgfqxpnswu38wy6fy5v0q0um52zd0umuely5t9xrf88t3unc0") "withdraw" - Address("resource_sim1tkhnevmz0hen4syfzlexs9gktfqgh8xf7h74wxj0vq5fc06xackyud") + Address("resource_sim1thek23fvvp4wgwhlh8vx38sgxtr4xsncurpjhj0jqvf0vhexv8n7kv") Decimal("333") ; CALL_METHOD diff --git a/transaction-scenarios/generated-examples/radiswap/006--radiswap-swap-tokens.rtm b/transaction-scenarios/generated-examples/radiswap/006--radiswap-swap-tokens.rtm index 61de957a9c1..3ac4a1d137d 100644 --- a/transaction-scenarios/generated-examples/radiswap/006--radiswap-swap-tokens.rtm +++ b/transaction-scenarios/generated-examples/radiswap/006--radiswap-swap-tokens.rtm @@ -14,7 +14,7 @@ TAKE_ALL_FROM_WORKTOP Bucket("input") ; CALL_METHOD - Address("component_sim1czl6f4wcyv3dwd34nrcr2cd39x8krfl745krmkxcaa67rs4fgna962") + Address("component_sim1cp50jhvtwesghjnzfmtwvww56dczhgmuehnvkzjpyzxk2w8hwrfd85") "swap" Bucket("input") ; diff --git a/transaction-scenarios/generated-examples/radiswap/007--radiswap-remove-tokens.rtm b/transaction-scenarios/generated-examples/radiswap/007--radiswap-remove-tokens.rtm index 4b3d7898fdd..2b01774981d 100644 --- a/transaction-scenarios/generated-examples/radiswap/007--radiswap-remove-tokens.rtm +++ b/transaction-scenarios/generated-examples/radiswap/007--radiswap-remove-tokens.rtm @@ -6,15 +6,15 @@ CALL_METHOD CALL_METHOD Address("account_sim168j3paqgngj74yzaljq4n422rtsmupaec3wnqq5425fd85cnd8xmdz") "withdraw" - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w") + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus") Decimal("100") ; TAKE_ALL_FROM_WORKTOP - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w") + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus") Bucket("pool_units") ; CALL_METHOD - Address("component_sim1czl6f4wcyv3dwd34nrcr2cd39x8krfl745krmkxcaa67rs4fgna962") + Address("component_sim1cp50jhvtwesghjnzfmtwvww56dczhgmuehnvkzjpyzxk2w8hwrfd85") "remove_liquidity" Bucket("pool_units") ; diff --git a/transaction-scenarios/generated-examples/radiswap/008--radiswap-set-two-way-linking.rtm b/transaction-scenarios/generated-examples/radiswap/008--radiswap-set-two-way-linking.rtm index de3ea43b57a..a6bff476450 100644 --- a/transaction-scenarios/generated-examples/radiswap/008--radiswap-set-two-way-linking.rtm +++ b/transaction-scenarios/generated-examples/radiswap/008--radiswap-set-two-way-linking.rtm @@ -16,45 +16,45 @@ SET_METADATA "claimed_entities" Enum<136u8>( Array
    ( - Address("component_sim1czl6f4wcyv3dwd34nrcr2cd39x8krfl745krmkxcaa67rs4fgna962"), - Address("pool_sim1c45qmem32g3ydvhdjtarkg2t2v7my4fqpunj6yyufm6w6385sy7cm6"), - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w"), - Address("component_sim1crm9fecpkqa2xq3vyvaxnjtncxqr05h78u8kxlc5e8ka9234xj08tn"), - Address("pool_sim1c55spkpxn2gcetkm9n7r2ew6u99m0u83tc8u77ef9treq493vhv9ep"), - Address("resource_sim1tkhnevmz0hen4syfzlexs9gktfqgh8xf7h74wxj0vq5fc06xackyud") + Address("component_sim1cp50jhvtwesghjnzfmtwvww56dczhgmuehnvkzjpyzxk2w8hwrfd85"), + Address("pool_sim1cktvef6jr67kk6audy8jsdwlmqyuwzy64tmvu7gd028sa3v962d7lr"), + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus"), + Address("component_sim1cpawfjjaxc9v5jlug9scu2tky534udlrj65d47nq8s7sj2jv93hhfh"), + Address("pool_sim1ckpw5w3zkfnd4l50lm7zuu5k53h8zwta6gpljvj7efdp0pxpte0xe6"), + Address("resource_sim1thek23fvvp4wgwhlh8vx38sgxtr4xsncurpjhj0jqvf0vhexv8n7kv") ) ) ; SET_METADATA - Address("component_sim1czl6f4wcyv3dwd34nrcr2cd39x8krfl745krmkxcaa67rs4fgna962") + Address("component_sim1cp50jhvtwesghjnzfmtwvww56dczhgmuehnvkzjpyzxk2w8hwrfd85") "dapp_definition" Enum<8u8>( Address("account_sim129uea6ms5wjstpze559am5ddw293cr2nxeqrha4ae4536dlw5x8whd") ) ; SET_METADATA - Address("component_sim1crm9fecpkqa2xq3vyvaxnjtncxqr05h78u8kxlc5e8ka9234xj08tn") + Address("component_sim1cpawfjjaxc9v5jlug9scu2tky534udlrj65d47nq8s7sj2jv93hhfh") "dapp_definition" Enum<8u8>( Address("account_sim129uea6ms5wjstpze559am5ddw293cr2nxeqrha4ae4536dlw5x8whd") ) ; SET_METADATA - Address("pool_sim1c45qmem32g3ydvhdjtarkg2t2v7my4fqpunj6yyufm6w6385sy7cm6") + Address("pool_sim1cktvef6jr67kk6audy8jsdwlmqyuwzy64tmvu7gd028sa3v962d7lr") "dapp_definition" Enum<8u8>( Address("account_sim129uea6ms5wjstpze559am5ddw293cr2nxeqrha4ae4536dlw5x8whd") ) ; SET_METADATA - Address("pool_sim1c55spkpxn2gcetkm9n7r2ew6u99m0u83tc8u77ef9treq493vhv9ep") + Address("pool_sim1ckpw5w3zkfnd4l50lm7zuu5k53h8zwta6gpljvj7efdp0pxpte0xe6") "dapp_definition" Enum<8u8>( Address("account_sim129uea6ms5wjstpze559am5ddw293cr2nxeqrha4ae4536dlw5x8whd") ) ; SET_METADATA - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w") + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus") "dapp_definitions" Enum<136u8>( Array
    ( @@ -63,7 +63,7 @@ SET_METADATA ) ; SET_METADATA - Address("resource_sim1tkhnevmz0hen4syfzlexs9gktfqgh8xf7h74wxj0vq5fc06xackyud") + Address("resource_sim1thek23fvvp4wgwhlh8vx38sgxtr4xsncurpjhj0jqvf0vhexv8n7kv") "dapp_definitions" Enum<136u8>( Array
    ( @@ -72,21 +72,21 @@ SET_METADATA ) ; SET_METADATA - Address("component_sim1czl6f4wcyv3dwd34nrcr2cd39x8krfl745krmkxcaa67rs4fgna962") + Address("component_sim1cp50jhvtwesghjnzfmtwvww56dczhgmuehnvkzjpyzxk2w8hwrfd85") "name" Enum<0u8>( "Radiswap 1 - XRD/BTC: Component" ) ; SET_METADATA - Address("component_sim1czl6f4wcyv3dwd34nrcr2cd39x8krfl745krmkxcaa67rs4fgna962") + Address("component_sim1cp50jhvtwesghjnzfmtwvww56dczhgmuehnvkzjpyzxk2w8hwrfd85") "description" Enum<0u8>( "[EXAMPLE] A Radiswap component between test tokens \"XRD\" and \"BTC\"" ) ; SET_METADATA - Address("component_sim1czl6f4wcyv3dwd34nrcr2cd39x8krfl745krmkxcaa67rs4fgna962") + Address("component_sim1cp50jhvtwesghjnzfmtwvww56dczhgmuehnvkzjpyzxk2w8hwrfd85") "tags" Enum<128u8>( Array( @@ -98,28 +98,28 @@ SET_METADATA ) ; SET_METADATA - Address("component_sim1czl6f4wcyv3dwd34nrcr2cd39x8krfl745krmkxcaa67rs4fgna962") + Address("component_sim1cp50jhvtwesghjnzfmtwvww56dczhgmuehnvkzjpyzxk2w8hwrfd85") "info_url" Enum<13u8>( "https://radiswap.radixdlt.com/" ) ; SET_METADATA - Address("pool_sim1c45qmem32g3ydvhdjtarkg2t2v7my4fqpunj6yyufm6w6385sy7cm6") + Address("pool_sim1cktvef6jr67kk6audy8jsdwlmqyuwzy64tmvu7gd028sa3v962d7lr") "name" Enum<0u8>( "Radiswap 1 - XRD/BTC: Pool" ) ; SET_METADATA - Address("pool_sim1c45qmem32g3ydvhdjtarkg2t2v7my4fqpunj6yyufm6w6385sy7cm6") + Address("pool_sim1cktvef6jr67kk6audy8jsdwlmqyuwzy64tmvu7gd028sa3v962d7lr") "description" Enum<0u8>( "[EXAMPLE] The underyling pool between test tokens \"XRD\" and \"BTC\"" ) ; SET_METADATA - Address("pool_sim1c45qmem32g3ydvhdjtarkg2t2v7my4fqpunj6yyufm6w6385sy7cm6") + Address("pool_sim1cktvef6jr67kk6audy8jsdwlmqyuwzy64tmvu7gd028sa3v962d7lr") "tags" Enum<128u8>( Array( @@ -131,28 +131,28 @@ SET_METADATA ) ; SET_METADATA - Address("pool_sim1c45qmem32g3ydvhdjtarkg2t2v7my4fqpunj6yyufm6w6385sy7cm6") + Address("pool_sim1cktvef6jr67kk6audy8jsdwlmqyuwzy64tmvu7gd028sa3v962d7lr") "info_url" Enum<13u8>( "https://radiswap.radixdlt.com/" ) ; SET_METADATA - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w") + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus") "name" Enum<0u8>( "Radiswap 1 - XRD/BTC: Pool Units" ) ; SET_METADATA - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w") + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus") "description" Enum<0u8>( "[EXAMPLE] The pool units resource for the underlying pool between test tokens \"XRD\" and \"BTC\"" ) ; SET_METADATA - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w") + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus") "tags" Enum<128u8>( Array( @@ -164,28 +164,28 @@ SET_METADATA ) ; SET_METADATA - Address("resource_sim1thnzdvm43l9chdmj7ma6smse6uh0vrlm2pfhth678vnn43kwelzs0w") + Address("resource_sim1t5cale6dpqa6dwrytfaclg2nd64n0y9ktu6rnkku7cmk2rrl5rscus") "info_url" Enum<13u8>( "https://radiswap.radixdlt.com/" ) ; SET_METADATA - Address("component_sim1crm9fecpkqa2xq3vyvaxnjtncxqr05h78u8kxlc5e8ka9234xj08tn") + Address("component_sim1cpawfjjaxc9v5jlug9scu2tky534udlrj65d47nq8s7sj2jv93hhfh") "name" Enum<0u8>( "Radiswap 2 - ETH/ETC: Component" ) ; SET_METADATA - Address("component_sim1crm9fecpkqa2xq3vyvaxnjtncxqr05h78u8kxlc5e8ka9234xj08tn") + Address("component_sim1cpawfjjaxc9v5jlug9scu2tky534udlrj65d47nq8s7sj2jv93hhfh") "description" Enum<0u8>( "[EXAMPLE] A Radiswap dApp between test tokens \"ETH\" and \"ETC\"" ) ; SET_METADATA - Address("component_sim1crm9fecpkqa2xq3vyvaxnjtncxqr05h78u8kxlc5e8ka9234xj08tn") + Address("component_sim1cpawfjjaxc9v5jlug9scu2tky534udlrj65d47nq8s7sj2jv93hhfh") "tags" Enum<128u8>( Array( @@ -197,28 +197,28 @@ SET_METADATA ) ; SET_METADATA - Address("component_sim1crm9fecpkqa2xq3vyvaxnjtncxqr05h78u8kxlc5e8ka9234xj08tn") + Address("component_sim1cpawfjjaxc9v5jlug9scu2tky534udlrj65d47nq8s7sj2jv93hhfh") "info_url" Enum<13u8>( "https://radiswap.radixdlt.com/" ) ; SET_METADATA - Address("pool_sim1c55spkpxn2gcetkm9n7r2ew6u99m0u83tc8u77ef9treq493vhv9ep") + Address("pool_sim1ckpw5w3zkfnd4l50lm7zuu5k53h8zwta6gpljvj7efdp0pxpte0xe6") "name" Enum<0u8>( "Radiswap 2 - ETH/ETC: Pool" ) ; SET_METADATA - Address("pool_sim1c55spkpxn2gcetkm9n7r2ew6u99m0u83tc8u77ef9treq493vhv9ep") + Address("pool_sim1ckpw5w3zkfnd4l50lm7zuu5k53h8zwta6gpljvj7efdp0pxpte0xe6") "description" Enum<0u8>( "[EXAMPLE] The underyling pool between test tokens \"ETH\" and \"ETC\"" ) ; SET_METADATA - Address("pool_sim1c55spkpxn2gcetkm9n7r2ew6u99m0u83tc8u77ef9treq493vhv9ep") + Address("pool_sim1ckpw5w3zkfnd4l50lm7zuu5k53h8zwta6gpljvj7efdp0pxpte0xe6") "tags" Enum<128u8>( Array( @@ -230,28 +230,28 @@ SET_METADATA ) ; SET_METADATA - Address("pool_sim1c55spkpxn2gcetkm9n7r2ew6u99m0u83tc8u77ef9treq493vhv9ep") + Address("pool_sim1ckpw5w3zkfnd4l50lm7zuu5k53h8zwta6gpljvj7efdp0pxpte0xe6") "info_url" Enum<13u8>( "https://radiswap.radixdlt.com/" ) ; SET_METADATA - Address("resource_sim1tkhnevmz0hen4syfzlexs9gktfqgh8xf7h74wxj0vq5fc06xackyud") + Address("resource_sim1thek23fvvp4wgwhlh8vx38sgxtr4xsncurpjhj0jqvf0vhexv8n7kv") "name" Enum<0u8>( "Radiswap 2 - ETH/ETC: Pool Units" ) ; SET_METADATA - Address("resource_sim1tkhnevmz0hen4syfzlexs9gktfqgh8xf7h74wxj0vq5fc06xackyud") + Address("resource_sim1thek23fvvp4wgwhlh8vx38sgxtr4xsncurpjhj0jqvf0vhexv8n7kv") "description" Enum<0u8>( "[EXAMPLE] The pool units resource for the underlying pool between test tokens \"ETH\" and \"ETC\"" ) ; SET_METADATA - Address("resource_sim1tkhnevmz0hen4syfzlexs9gktfqgh8xf7h74wxj0vq5fc06xackyud") + Address("resource_sim1thek23fvvp4wgwhlh8vx38sgxtr4xsncurpjhj0jqvf0vhexv8n7kv") "tags" Enum<128u8>( Array( @@ -263,7 +263,7 @@ SET_METADATA ) ; SET_METADATA - Address("resource_sim1tkhnevmz0hen4syfzlexs9gktfqgh8xf7h74wxj0vq5fc06xackyud") + Address("resource_sim1thek23fvvp4wgwhlh8vx38sgxtr4xsncurpjhj0jqvf0vhexv8n7kv") "info_url" Enum<13u8>( "https://radiswap.radixdlt.com/"