diff --git a/chain/rust/src/byron/utils.rs b/chain/rust/src/byron/utils.rs index 0dc3291a..b098f6be 100644 --- a/chain/rust/src/byron/utils.rs +++ b/chain/rust/src/byron/utils.rs @@ -154,14 +154,16 @@ impl AddressContent { // mainnet is implied if omitted let protocol_magic = self.byron_protocol_magic(); - match protocol_magic { - magic if magic == NetworkInfo::mainnet().protocol_magic() => { - Ok(NetworkInfo::mainnet().network_id()) - } - magic if magic == NetworkInfo::testnet().protocol_magic() => { - Ok(NetworkInfo::testnet().network_id()) - } - _ => Err(ByronAddressError::UnknownNetwork(protocol_magic)), + if protocol_magic == NetworkInfo::mainnet().protocol_magic() { + Ok(NetworkInfo::mainnet().network_id()) + } else if protocol_magic == NetworkInfo::testnet().protocol_magic() + || protocol_magic == NetworkInfo::preprod().protocol_magic() + || protocol_magic == NetworkInfo::preview().protocol_magic() + || protocol_magic == NetworkInfo::sancho_testnet().protocol_magic() + { + Ok(NetworkInfo::testnet().network_id()) + } else { + Err(ByronAddressError::UnknownNetwork(protocol_magic)) } } diff --git a/chain/rust/src/genesis/network_info.rs b/chain/rust/src/genesis/network_info.rs index d1dafcf0..eb9aef0d 100644 --- a/chain/rust/src/genesis/network_info.rs +++ b/chain/rust/src/genesis/network_info.rs @@ -1,6 +1,9 @@ use crate::{byron::ProtocolMagic, plutus::CostModels}; use cml_core::{ - network::{BYRON_MAINNET_NETWORK_MAGIC, BYRON_TESTNET_NETWORK_MAGIC}, + network::{ + BYRON_MAINNET_NETWORK_MAGIC, BYRON_TESTNET_NETWORK_MAGIC, PREPROD_NETWORK_MAGIC, + PREVIEW_NETWORK_MAGIC, SANCHO_TESTNET_NETWORK_MAGIC, + }, Int, }; @@ -16,25 +19,50 @@ impl NetworkInfo { protocol_magic, } } + pub fn network_id(&self) -> u8 { self.network_id } + pub fn protocol_magic(&self) -> ProtocolMagic { self.protocol_magic } - pub fn testnet() -> NetworkInfo { - NetworkInfo { + /// This is the old testnet - most likely you want to use preview()/preprod() + pub fn testnet() -> Self { + Self { network_id: 0b0000, protocol_magic: ProtocolMagic::from(BYRON_TESTNET_NETWORK_MAGIC), } } - pub fn mainnet() -> NetworkInfo { - NetworkInfo { + + pub fn mainnet() -> Self { + Self { network_id: 0b0001, protocol_magic: ProtocolMagic::from(BYRON_MAINNET_NETWORK_MAGIC), } } + + pub fn preview() -> Self { + Self { + network_id: 0b0000, + protocol_magic: ProtocolMagic::from(PREVIEW_NETWORK_MAGIC), + } + } + + pub fn preprod() -> Self { + Self { + network_id: 0b0000, + protocol_magic: ProtocolMagic::from(PREPROD_NETWORK_MAGIC), + } + } + + pub fn sancho_testnet() -> Self { + Self { + network_id: 0b0000, + protocol_magic: ProtocolMagic::from(SANCHO_TESTNET_NETWORK_MAGIC), + } + } } // TODO: https://github.com/dcSpark/cardano-multiplatform-lib/issues/92 diff --git a/chain/wasm/src/genesis/mod.rs b/chain/wasm/src/genesis/mod.rs new file mode 100644 index 00000000..94897451 --- /dev/null +++ b/chain/wasm/src/genesis/mod.rs @@ -0,0 +1 @@ +pub mod network_info; diff --git a/chain/wasm/src/genesis/network_info.rs b/chain/wasm/src/genesis/network_info.rs new file mode 100644 index 00000000..18541028 --- /dev/null +++ b/chain/wasm/src/genesis/network_info.rs @@ -0,0 +1,45 @@ +use crate::byron::utils::ProtocolMagic; +use cml_core_wasm::impl_wasm_conversions; +use wasm_bindgen::prelude::wasm_bindgen; + +#[wasm_bindgen] +pub struct NetworkInfo(cml_chain::genesis::network_info::NetworkInfo); + +impl_wasm_conversions!(cml_chain::genesis::network_info::NetworkInfo, NetworkInfo); + +#[wasm_bindgen] +impl NetworkInfo { + pub fn new(network_id: u8, protocol_magic: &ProtocolMagic) -> Self { + cml_chain::genesis::network_info::NetworkInfo::new(network_id, *protocol_magic.as_ref()) + .into() + } + + pub fn network_id(&self) -> u8 { + self.0.network_id() + } + + pub fn protocol_magic(&self) -> ProtocolMagic { + self.0.protocol_magic().into() + } + + /// This is the old testnet - most likely you want to use preview()/preprod() + pub fn testnet() -> Self { + cml_chain::genesis::network_info::NetworkInfo::testnet().into() + } + + pub fn mainnet() -> Self { + cml_chain::genesis::network_info::NetworkInfo::mainnet().into() + } + + pub fn preview() -> Self { + cml_chain::genesis::network_info::NetworkInfo::preview().into() + } + + pub fn preprod() -> Self { + cml_chain::genesis::network_info::NetworkInfo::preprod().into() + } + + pub fn sancho_testnet() -> Self { + cml_chain::genesis::network_info::NetworkInfo::sancho_testnet().into() + } +} diff --git a/chain/wasm/src/lib.rs b/chain/wasm/src/lib.rs index d9176e9d..5432aef5 100644 --- a/chain/wasm/src/lib.rs +++ b/chain/wasm/src/lib.rs @@ -20,6 +20,7 @@ pub mod certs; pub mod crypto; pub mod deposit; pub mod fees; +pub mod genesis; pub mod governance; pub mod json; pub mod min_ada; diff --git a/core/rust/src/network.rs b/core/rust/src/network.rs index a5e7688f..5e3f631a 100644 --- a/core/rust/src/network.rs +++ b/core/rust/src/network.rs @@ -6,6 +6,9 @@ use std::io::{BufRead, Write}; pub static BYRON_MAINNET_NETWORK_MAGIC: u32 = 764824073; pub static BYRON_TESTNET_NETWORK_MAGIC: u32 = 1097911063; +pub static SANCHO_TESTNET_NETWORK_MAGIC: u32 = 4; +pub static PREPROD_NETWORK_MAGIC: u32 = 1; +pub static PREVIEW_NETWORK_MAGIC: u32 = 2; impl std::fmt::Display for ProtocolMagic { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {