diff --git a/Cargo.toml b/Cargo.toml index a1bbf770..8b77506d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,8 +4,7 @@ members = [ "pallas-multiplexer", "pallas-miniprotocols", "pallas-crypto", - "pallas-alonzo", - "pallas-byron", + "pallas-primitives", "pallas", ] diff --git a/README.md b/README.md index d64c1292..7eebedeb 100644 --- a/README.md +++ b/README.md @@ -39,12 +39,12 @@ As already explained, _Pallas_ aims at being an expanding set of components. The ### Ouroboros Ledger -| Crates | Description | -| ------------------------------- | ----------------------------------------------------------------------- | -| [pallas-alonzo](/pallas-alonzo) | Ledger primitives and cbor codec for the Alonzo era | -| pallas-ticking | Time passage implementation for consensus algorithm | -| pallas-applying | Logic for validating and applying new blocks and txs to the chain state | -| pallas-forecasting | Ledger forecasting algorithm to be used by the consensus layer | +| Crates | Description | +| --------------------------------------- | ----------------------------------------------------------------------- | +| [pallas-primitives](/pallas-primitives) | Ledger primitives and cbor codec for the different Cardano eras | +| pallas-ticking | Time passage implementation for consensus algorithm | +| pallas-applying | Logic for validating and applying new blocks and txs to the chain state | +| pallas-forecasting | Ledger forecasting algorithm to be used by the consensus layer | ## Etymology diff --git a/examples/block-download/src/main.rs b/examples/block-download/src/main.rs index 3c6b5119..ff36e5e8 100644 --- a/examples/block-download/src/main.rs +++ b/examples/block-download/src/main.rs @@ -1,14 +1,18 @@ use net2::TcpStreamExt; -use pallas::ledger::alonzo::*; -use pallas::ouroboros::network::blockfetch::{BatchClient, Observer}; -use pallas::ouroboros::network::handshake::{ - n2n::{Client, VersionTable}, - MAINNET_MAGIC, +use pallas::network::{ + miniprotocols::{ + handshake::n2n::{Client, VersionTable}, + run_agent, Point, MAINNET_MAGIC, + }, + multiplexer::Multiplexer, }; -use pallas::ouroboros::network::machines::primitives::Point; -use pallas::ouroboros::network::machines::run_agent; -use pallas::ouroboros::network::multiplexer::Multiplexer; + +use pallas::{ + ledger::primitives::{alonzo::*, Fragment}, + network::miniprotocols::blockfetch::{BatchClient, Observer}, +}; + use std::net::TcpStream; #[derive(Debug)] diff --git a/examples/byron-decoder/src/main.rs b/examples/byron-decoder/src/main.rs index a41e8e9e..4adc5957 100644 --- a/examples/byron-decoder/src/main.rs +++ b/examples/byron-decoder/src/main.rs @@ -1,14 +1,17 @@ use net2::TcpStreamExt; -use pallas::ledger::byron::*; -use pallas::ouroboros::network::blockfetch::{BatchClient, Observer}; -use pallas::ouroboros::network::handshake::{ - n2n::{Client, VersionTable}, - MAINNET_MAGIC, +use pallas::{ + ledger::primitives::{byron::Block, Fragment}, + network::{ + miniprotocols::{ + blockfetch::{BatchClient, Observer}, + handshake::n2n::{Client, VersionTable}, + run_agent, Point, MAINNET_MAGIC, + }, + multiplexer::Multiplexer, + }, }; -use pallas::ouroboros::network::machines::primitives::Point; -use pallas::ouroboros::network::machines::run_agent; -use pallas::ouroboros::network::multiplexer::Multiplexer; + use std::net::TcpStream; #[derive(Debug)] diff --git a/pallas-alonzo/Cargo.toml b/pallas-alonzo/Cargo.toml deleted file mode 100644 index b3634559..00000000 --- a/pallas-alonzo/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -name = "pallas-alonzo" -description = "Ledger primitives and cbor codec for the Alonzo era" -version = "0.4.0" -edition = "2021" -repository = "https://github.com/txpipe/pallas" -homepage = "https://github.com/txpipe/pallas" -documentation = "https://docs.rs/pallas-alonzo" -license = "Apache-2.0" -readme = "README.md" -authors = [ - "Santiago Carmuega " -] - -[dependencies] -minicbor = { version = "0.13", features = ["std"] } -minicbor-derive = "0.8.0" -hex = "0.4.3" -log = "0.4.14" -pallas-crypto = { version = "0.4.0", path = "../pallas-crypto" } diff --git a/pallas-alonzo/README.md b/pallas-alonzo/README.md deleted file mode 100644 index 91b2bf2d..00000000 --- a/pallas-alonzo/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Pallas Alonzo - diff --git a/pallas-alonzo/src/lib.rs b/pallas-alonzo/src/lib.rs deleted file mode 100644 index e26af565..00000000 --- a/pallas-alonzo/src/lib.rs +++ /dev/null @@ -1,10 +0,0 @@ -//! Ledger primitives and cbor codec for the Alonzo era - -mod framework; -mod model; -mod utils; - -pub use framework::*; -pub use model::*; - -pub mod crypto; diff --git a/pallas-alonzo/src/utils.rs b/pallas-alonzo/src/utils.rs deleted file mode 100644 index c400a7c4..00000000 --- a/pallas-alonzo/src/utils.rs +++ /dev/null @@ -1,146 +0,0 @@ -use std::ops::Deref; - -use minicbor::{Decode, Encode}; - -/// Custom collection to ensure ordered pairs of values -/// -/// Since the ordering of the entries requires a particular order to maintain -/// canonicalization for isomorphic decoding / encoding operators, we use a Vec -/// as the underlaying struct for storage of the items (as opposed to a BTreeMap -/// or HashMap). -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub enum KeyValuePairs { - Def(Vec<(K, V)>), - Indef(Vec<(K, V)>), -} - -impl Deref for KeyValuePairs { - type Target = Vec<(K, V)>; - - fn deref(&self) -> &Self::Target { - match self { - KeyValuePairs::Def(x) => x, - KeyValuePairs::Indef(x) => x, - } - } -} - -impl<'b, K, V> minicbor::decode::Decode<'b> for KeyValuePairs -where - K: Encode + Decode<'b>, - V: Encode + Decode<'b>, -{ - fn decode(d: &mut minicbor::Decoder<'b>) -> Result { - let datatype = d.datatype()?; - - let items: Result, _> = d.map_iter::()?.collect(); - let items = items?; - - match datatype { - minicbor::data::Type::Map => Ok(KeyValuePairs::Def(items)), - minicbor::data::Type::MapIndef => Ok(KeyValuePairs::Indef(items)), - _ => Err(minicbor::decode::Error::Message( - "invalid data type for keyvaluepairs", - )), - } - } -} - -impl minicbor::encode::Encode for KeyValuePairs -where - K: Encode, - V: Encode, -{ - fn encode( - &self, - e: &mut minicbor::Encoder, - ) -> Result<(), minicbor::encode::Error> { - match self { - KeyValuePairs::Def(x) => { - e.map(x.len() as u64)?; - - for (k, v) in x.iter() { - k.encode(e)?; - v.encode(e)?; - } - } - KeyValuePairs::Indef(x) => { - e.begin_map()?; - - for (k, v) in x.iter() { - k.encode(e)?; - v.encode(e)?; - } - - e.end()?; - } - } - - Ok(()) - } -} - -/// A struct that maintains a reference to whether a cbor array was indef or not -#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] -pub enum MaybeIndefArray { - Def(Vec), - Indef(Vec), -} - -impl Deref for MaybeIndefArray { - type Target = Vec; - - fn deref(&self) -> &Self::Target { - match self { - MaybeIndefArray::Def(x) => x, - MaybeIndefArray::Indef(x) => x, - } - } -} - -impl<'b, A> minicbor::decode::Decode<'b> for MaybeIndefArray -where - A: minicbor::decode::Decode<'b>, -{ - fn decode(d: &mut minicbor::Decoder<'b>) -> Result { - let datatype = d.datatype()?; - - match datatype { - minicbor::data::Type::Array => Ok(Self::Def(d.decode()?)), - minicbor::data::Type::ArrayIndef => Ok(Self::Indef(d.decode()?)), - _ => Err(minicbor::decode::Error::Message( - "unknown data type of maybe indef array", - )), - } - } -} - -impl minicbor::encode::Encode for MaybeIndefArray -where - A: minicbor::encode::Encode, -{ - fn encode( - &self, - e: &mut minicbor::Encoder, - ) -> Result<(), minicbor::encode::Error> { - match self { - MaybeIndefArray::Def(x) => { - e.encode(x)?; - } - MaybeIndefArray::Indef(x) if x.is_empty() => { - e.encode(x)?; - } - MaybeIndefArray::Indef(x) => { - e.begin_array()?; - - for v in x.iter() { - e.encode(v)?; - } - - e.end()?; - } - }; - - Ok(()) - } -} diff --git a/pallas-byron/README.md b/pallas-byron/README.md deleted file mode 100644 index b3a50d3b..00000000 --- a/pallas-byron/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Pallas Byron - diff --git a/pallas-byron/src/framework.rs b/pallas-byron/src/framework.rs deleted file mode 100644 index 497501b0..00000000 --- a/pallas-byron/src/framework.rs +++ /dev/null @@ -1,22 +0,0 @@ -pub type Error = Box; - -pub trait Fragment<'a> -where - Self: Sized, -{ - fn encode_fragment(&self) -> Result, Error>; - fn decode_fragment(bytes: &'a [u8]) -> Result; -} - -impl<'a, T> Fragment<'a> for T -where - T: minicbor::Encode + minicbor::Decode<'a> + Sized, -{ - fn encode_fragment(&self) -> Result, Error> { - minicbor::to_vec(self).map_err(|e| e.into()) - } - - fn decode_fragment(bytes: &'a [u8]) -> Result { - minicbor::decode(bytes).map_err(|e| e.into()) - } -} diff --git a/pallas-miniprotocols/Cargo.toml b/pallas-miniprotocols/Cargo.toml index d0e9a70a..9bc51f84 100644 --- a/pallas-miniprotocols/Cargo.toml +++ b/pallas-miniprotocols/Cargo.toml @@ -22,4 +22,4 @@ net2 = "0.2.37" [dev-dependencies] env_logger = "0.9.0" -pallas-alonzo = { version = "0.4.0", path = "../pallas-alonzo/" } +pallas-primitives = { version = "0.4.0", path = "../pallas-primitives/" } diff --git a/pallas-miniprotocols/examples/blockfetch.rs b/pallas-miniprotocols/examples/blockfetch.rs index 9737fab5..230d7575 100644 --- a/pallas-miniprotocols/examples/blockfetch.rs +++ b/pallas-miniprotocols/examples/blockfetch.rs @@ -1,13 +1,9 @@ use net2::TcpStreamExt; -use pallas_miniprotocols::Point; use std::net::TcpStream; use pallas_miniprotocols::blockfetch::{BatchClient, NoopObserver}; -use pallas_miniprotocols::handshake::{ - n2n::{Client, VersionTable}, - MAINNET_MAGIC, -}; -use pallas_miniprotocols::run_agent; +use pallas_miniprotocols::handshake::n2n::{Client, VersionTable}; +use pallas_miniprotocols::{run_agent, Point, MAINNET_MAGIC}; use pallas_multiplexer::Multiplexer; fn main() { diff --git a/pallas-miniprotocols/examples/chainsync-blocks.rs b/pallas-miniprotocols/examples/chainsync-blocks.rs index 7b17718f..426a0bdd 100644 --- a/pallas-miniprotocols/examples/chainsync-blocks.rs +++ b/pallas-miniprotocols/examples/chainsync-blocks.rs @@ -1,10 +1,9 @@ -use pallas_alonzo::{crypto, Block, BlockWrapper, Fragment}; +use pallas_primitives::alonzo::{crypto, Block, BlockWrapper}; +use pallas_primitives::Fragment; use pallas_miniprotocols::chainsync::{BlockLike, Consumer, NoopObserver}; use pallas_miniprotocols::handshake::n2c::{Client, VersionTable}; -use pallas_miniprotocols::handshake::MAINNET_MAGIC; -use pallas_miniprotocols::run_agent; -use pallas_miniprotocols::Point; +use pallas_miniprotocols::{run_agent, Point, MAINNET_MAGIC}; use pallas_miniprotocols::{DecodePayload, EncodePayload, PayloadDecoder, PayloadEncoder}; use pallas_multiplexer::Multiplexer; use std::os::unix::net::UnixStream; diff --git a/pallas-miniprotocols/examples/chainsync-headers.rs b/pallas-miniprotocols/examples/chainsync-headers.rs index d9a45328..1d688479 100644 --- a/pallas-miniprotocols/examples/chainsync-headers.rs +++ b/pallas-miniprotocols/examples/chainsync-headers.rs @@ -1,14 +1,15 @@ use minicbor::data::Tag; use net2::TcpStreamExt; -use pallas_alonzo::{crypto, Fragment, Header}; +use pallas_primitives::alonzo::{crypto, Header}; +use pallas_primitives::Fragment; + use pallas_miniprotocols::Point; use std::net::TcpStream; use pallas_miniprotocols::chainsync::{BlockLike, Consumer, NoopObserver}; use pallas_miniprotocols::handshake::n2n::{Client, VersionTable}; -use pallas_miniprotocols::handshake::MAINNET_MAGIC; use pallas_miniprotocols::{ - run_agent, DecodePayload, EncodePayload, PayloadDecoder, PayloadEncoder, + run_agent, DecodePayload, EncodePayload, PayloadDecoder, PayloadEncoder, MAINNET_MAGIC, }; use pallas_multiplexer::Multiplexer; diff --git a/pallas-miniprotocols/examples/handshake-client.rs b/pallas-miniprotocols/examples/handshake-client.rs index 3245d264..8d8cdc11 100644 --- a/pallas-miniprotocols/examples/handshake-client.rs +++ b/pallas-miniprotocols/examples/handshake-client.rs @@ -2,8 +2,7 @@ use net2::TcpStreamExt; use std::net::TcpStream; use pallas_miniprotocols::handshake::n2c::{Client, VersionTable}; -use pallas_miniprotocols::handshake::MAINNET_MAGIC; -use pallas_miniprotocols::run_agent; +use pallas_miniprotocols::{run_agent, MAINNET_MAGIC}; use pallas_multiplexer::Multiplexer; fn main() { diff --git a/pallas-miniprotocols/examples/handshake-node.rs b/pallas-miniprotocols/examples/handshake-node.rs index 680a69b5..6939783f 100644 --- a/pallas-miniprotocols/examples/handshake-node.rs +++ b/pallas-miniprotocols/examples/handshake-node.rs @@ -2,8 +2,7 @@ use net2::TcpStreamExt; use std::net::TcpStream; use pallas_miniprotocols::handshake::n2n::{Client, VersionTable}; -use pallas_miniprotocols::handshake::MAINNET_MAGIC; -use pallas_miniprotocols::run_agent; +use pallas_miniprotocols::{run_agent, MAINNET_MAGIC}; use pallas_multiplexer::Multiplexer; fn main() { diff --git a/pallas-miniprotocols/examples/localstate-chainpoint.rs b/pallas-miniprotocols/examples/localstate-chainpoint.rs index 32c21487..1ae8c1e0 100644 --- a/pallas-miniprotocols/examples/localstate-chainpoint.rs +++ b/pallas-miniprotocols/examples/localstate-chainpoint.rs @@ -1,8 +1,10 @@ use pallas_miniprotocols::handshake::n2c::{Client, VersionTable}; -use pallas_miniprotocols::handshake::MAINNET_MAGIC; -use pallas_miniprotocols::localstate::queries::RequestV10; -use pallas_miniprotocols::localstate::{queries::QueryV10, OneShotClient}; +use pallas_miniprotocols::localstate::{ + queries::{QueryV10, RequestV10}, + OneShotClient, +}; use pallas_miniprotocols::run_agent; +use pallas_miniprotocols::MAINNET_MAGIC; use pallas_multiplexer::Multiplexer; use std::os::unix::net::UnixStream; diff --git a/pallas-miniprotocols/examples/txsubmission-naive.rs b/pallas-miniprotocols/examples/txsubmission-naive.rs index 75450ab3..4a1a0b01 100644 --- a/pallas-miniprotocols/examples/txsubmission-naive.rs +++ b/pallas-miniprotocols/examples/txsubmission-naive.rs @@ -2,9 +2,8 @@ use net2::TcpStreamExt; use std::net::TcpStream; use pallas_miniprotocols::handshake::n2c::{Client, VersionTable}; -use pallas_miniprotocols::handshake::MAINNET_MAGIC; -use pallas_miniprotocols::run_agent; use pallas_miniprotocols::txsubmission::NaiveProvider; +use pallas_miniprotocols::{run_agent, MAINNET_MAGIC}; use pallas_multiplexer::Multiplexer; fn main() { diff --git a/pallas-miniprotocols/src/blockfetch/mod.rs b/pallas-miniprotocols/src/blockfetch/mod.rs index eb7df59a..bb2d7d6e 100644 --- a/pallas-miniprotocols/src/blockfetch/mod.rs +++ b/pallas-miniprotocols/src/blockfetch/mod.rs @@ -5,7 +5,7 @@ use crate::machines::{ Transition, }; -use crate::primitives::Point; +use crate::common::Point; use log::debug; diff --git a/pallas-miniprotocols/src/chainsync/clients.rs b/pallas-miniprotocols/src/chainsync/clients.rs index 3e2f0556..a44526ca 100644 --- a/pallas-miniprotocols/src/chainsync/clients.rs +++ b/pallas-miniprotocols/src/chainsync/clients.rs @@ -6,8 +6,8 @@ use crate::machines::{ Agent, DecodePayload, EncodePayload, MachineError, MachineOutput, Transition, }; +use crate::common::Point; use crate::payloads::{PayloadDecoder, PayloadEncoder}; -use crate::primitives::Point; use super::{Message, State, Tip}; diff --git a/pallas-miniprotocols/src/chainsync/codec.rs b/pallas-miniprotocols/src/chainsync/codec.rs index 2eeea027..c61ec788 100644 --- a/pallas-miniprotocols/src/chainsync/codec.rs +++ b/pallas-miniprotocols/src/chainsync/codec.rs @@ -1,5 +1,5 @@ +use crate::common::Point; use crate::machines::{CodecError, DecodePayload, EncodePayload, PayloadDecoder, PayloadEncoder}; -use crate::primitives::Point; use super::{Message, Tip}; diff --git a/pallas-miniprotocols/src/chainsync/protocol.rs b/pallas-miniprotocols/src/chainsync/protocol.rs index 95a181ca..c3596969 100644 --- a/pallas-miniprotocols/src/chainsync/protocol.rs +++ b/pallas-miniprotocols/src/chainsync/protocol.rs @@ -1,7 +1,7 @@ use std::fmt::Debug; +use crate::common::Point; use crate::machines::{DecodePayload, EncodePayload}; -use crate::primitives::Point; #[derive(Debug)] pub struct Tip(pub Point, pub u64); diff --git a/pallas-miniprotocols/src/codec.rs b/pallas-miniprotocols/src/codec.rs index cbc1d2e7..6db35e3f 100644 --- a/pallas-miniprotocols/src/codec.rs +++ b/pallas-miniprotocols/src/codec.rs @@ -1,5 +1,5 @@ +use super::common::*; use super::payloads::*; -use super::primitives::*; impl EncodePayload for Point { fn encode_payload(&self, e: &mut PayloadEncoder) -> Result<(), Box> { diff --git a/pallas-miniprotocols/src/primitives.rs b/pallas-miniprotocols/src/common.rs similarity index 68% rename from pallas-miniprotocols/src/primitives.rs rename to pallas-miniprotocols/src/common.rs index c7d18353..fd8742b4 100644 --- a/pallas-miniprotocols/src/primitives.rs +++ b/pallas-miniprotocols/src/common.rs @@ -1,5 +1,11 @@ use std::fmt::Debug; +/// Well-known magic for testnet +pub const TESTNET_MAGIC: u64 = 1097911063; + +/// Well-known magic for mainnet +pub const MAINNET_MAGIC: u64 = 764824073; + /// A point within a chain #[derive(Clone)] pub struct Point(pub u64, pub Vec); diff --git a/pallas-miniprotocols/src/handshake/common.rs b/pallas-miniprotocols/src/handshake/common.rs index 94a9c2a1..489092d7 100644 --- a/pallas-miniprotocols/src/handshake/common.rs +++ b/pallas-miniprotocols/src/handshake/common.rs @@ -5,9 +5,6 @@ use crate::{ use itertools::Itertools; use std::{collections::HashMap, fmt::Debug}; -pub const TESTNET_MAGIC: u64 = 1097911063; -pub const MAINNET_MAGIC: u64 = 764824073; - #[derive(Debug, Clone)] pub struct VersionTable where diff --git a/pallas-miniprotocols/src/handshake/mod.rs b/pallas-miniprotocols/src/handshake/mod.rs index ad00c1f5..1ef133fc 100644 --- a/pallas-miniprotocols/src/handshake/mod.rs +++ b/pallas-miniprotocols/src/handshake/mod.rs @@ -2,5 +2,3 @@ mod common; pub mod n2c; pub mod n2n; - -pub use common::{MAINNET_MAGIC, TESTNET_MAGIC}; diff --git a/pallas-miniprotocols/src/lib.rs b/pallas-miniprotocols/src/lib.rs index ed7c9135..ae42887e 100644 --- a/pallas-miniprotocols/src/lib.rs +++ b/pallas-miniprotocols/src/lib.rs @@ -1,7 +1,7 @@ mod codec; +mod common; mod machines; mod payloads; -mod primitives; pub mod blockfetch; pub mod chainsync; @@ -10,6 +10,6 @@ pub mod localstate; pub mod txsubmission; pub use codec::*; +pub use common::*; pub use machines::*; pub use payloads::*; -pub use primitives::*; diff --git a/pallas-miniprotocols/src/localstate/mod.rs b/pallas-miniprotocols/src/localstate/mod.rs index ac4c3786..62b9e5d5 100644 --- a/pallas-miniprotocols/src/localstate/mod.rs +++ b/pallas-miniprotocols/src/localstate/mod.rs @@ -9,7 +9,7 @@ use crate::machines::{ Agent, DecodePayload, EncodePayload, MachineError, MachineOutput, Transition, }; -use crate::primitives::Point; +use crate::common::Point; #[derive(Debug, PartialEq, Clone)] pub enum State { diff --git a/pallas-miniprotocols/src/localstate/queries.rs b/pallas-miniprotocols/src/localstate/queries.rs index 6b9bb24b..8ddad8f9 100644 --- a/pallas-miniprotocols/src/localstate/queries.rs +++ b/pallas-miniprotocols/src/localstate/queries.rs @@ -1,6 +1,6 @@ +use crate::common::Point; use crate::machines::{DecodePayload, EncodePayload, PayloadDecoder}; use crate::payloads::PayloadEncoder; -use crate::primitives::Point; use minicbor::{data::Cbor, Decoder}; use super::Query; diff --git a/pallas-byron/Cargo.toml b/pallas-primitives/Cargo.toml similarity index 82% rename from pallas-byron/Cargo.toml rename to pallas-primitives/Cargo.toml index abedf663..36ff4c72 100644 --- a/pallas-byron/Cargo.toml +++ b/pallas-primitives/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "pallas-byron" -description = "Ledger primitives and cbor codec for the Byron era" +name = "pallas-primitives" +description = "Ledger primitives and cbor codec for the different Cardano eras" version = "0.4.0" edition = "2021" repository = "https://github.com/txpipe/pallas" @@ -11,7 +11,6 @@ readme = "README.md" authors = [ "Santiago Carmuega ", "Lucas Rosa ", - ] [dependencies] diff --git a/pallas-primitives/README.md b/pallas-primitives/README.md new file mode 100644 index 00000000..70514956 --- /dev/null +++ b/pallas-primitives/README.md @@ -0,0 +1,2 @@ +# Pallas Primitives + diff --git a/pallas-alonzo/src/crypto.rs b/pallas-primitives/src/alonzo/crypto.rs similarity index 92% rename from pallas-alonzo/src/crypto.rs rename to pallas-primitives/src/alonzo/crypto.rs index 0ee66b03..320563d7 100644 --- a/pallas-alonzo/src/crypto.rs +++ b/pallas-primitives/src/alonzo/crypto.rs @@ -1,4 +1,4 @@ -use crate::{AuxiliaryData, Header, PlutusData, TransactionBody}; +use super::{AuxiliaryData, Header, PlutusData, TransactionBody}; use pallas_crypto::hash::{Hash, Hasher}; pub fn hash_block_header(data: &Header) -> Hash<32> { @@ -19,7 +19,8 @@ pub fn hash_plutus_data(data: &PlutusData) -> Hash<32> { #[cfg(test)] mod tests { - use crate::{BlockWrapper, Fragment}; + use crate::alonzo::BlockWrapper; + use crate::Fragment; use super::hash_transaction; diff --git a/pallas-primitives/src/alonzo/mod.rs b/pallas-primitives/src/alonzo/mod.rs new file mode 100644 index 00000000..fe3b048c --- /dev/null +++ b/pallas-primitives/src/alonzo/mod.rs @@ -0,0 +1,5 @@ +mod model; + +pub mod crypto; + +pub use model::*; diff --git a/pallas-alonzo/src/model.rs b/pallas-primitives/src/alonzo/model.rs similarity index 98% rename from pallas-alonzo/src/model.rs rename to pallas-primitives/src/alonzo/model.rs index 53535d08..1fd4b38b 100644 --- a/pallas-alonzo/src/model.rs +++ b/pallas-primitives/src/alonzo/model.rs @@ -2,7 +2,6 @@ //! //! Handcrafted, idiomatic rust artifacts based on based on the [Alonzo CDDL](https://github.com/input-output-hk/cardano-ledger/blob/master/eras/alonzo/test-suite/cddl-files/alonzo.cddl) file in IOHK repo. -use log::warn; use minicbor::{bytes::ByteVec, data::Tag}; use minicbor_derive::{Decode, Encode}; use pallas_crypto::hash::Hash; @@ -10,31 +9,6 @@ use std::{collections::BTreeMap, ops::Deref}; use crate::utils::{KeyValuePairs, MaybeIndefArray}; -#[derive(Debug, PartialEq, PartialOrd, Eq, Ord)] -pub struct SkipCbor {} - -impl<'b, const N: usize> minicbor::Decode<'b> for SkipCbor { - fn decode(d: &mut minicbor::Decoder<'b>) -> Result { - { - let probe = d.probe(); - warn!("skipped cbor value {}: {:?}", N, probe.datatype()?); - println!("skipped cbor value {}: {:?}", N, probe.datatype()?); - } - - d.skip()?; - Ok(SkipCbor {}) - } -} - -impl minicbor::Encode for SkipCbor { - fn encode( - &self, - _e: &mut minicbor::Encoder, - ) -> Result<(), minicbor::encode::Error> { - todo!() - } -} - #[derive(Encode, Decode, Debug, PartialEq, Clone)] pub struct VrfCert(#[n(0)] pub ByteVec, #[n(1)] pub ByteVec); @@ -1418,7 +1392,8 @@ pub struct BlockWrapper(#[n(0)] pub u16, #[n(1)] pub Block); #[cfg(test)] mod tests { - use crate::{BlockWrapper, Fragment}; + use super::BlockWrapper; + use crate::Fragment; use minicbor::{self, to_vec}; #[test] diff --git a/pallas-alonzo/src/test_data/test1.block b/pallas-primitives/src/alonzo/test_data/test1.block similarity index 100% rename from pallas-alonzo/src/test_data/test1.block rename to pallas-primitives/src/alonzo/test_data/test1.block diff --git a/pallas-alonzo/src/test_data/test10.block b/pallas-primitives/src/alonzo/test_data/test10.block similarity index 100% rename from pallas-alonzo/src/test_data/test10.block rename to pallas-primitives/src/alonzo/test_data/test10.block diff --git a/pallas-alonzo/src/test_data/test11.block b/pallas-primitives/src/alonzo/test_data/test11.block similarity index 100% rename from pallas-alonzo/src/test_data/test11.block rename to pallas-primitives/src/alonzo/test_data/test11.block diff --git a/pallas-alonzo/src/test_data/test12.block b/pallas-primitives/src/alonzo/test_data/test12.block similarity index 100% rename from pallas-alonzo/src/test_data/test12.block rename to pallas-primitives/src/alonzo/test_data/test12.block diff --git a/pallas-alonzo/src/test_data/test13.block b/pallas-primitives/src/alonzo/test_data/test13.block similarity index 100% rename from pallas-alonzo/src/test_data/test13.block rename to pallas-primitives/src/alonzo/test_data/test13.block diff --git a/pallas-alonzo/src/test_data/test14.block b/pallas-primitives/src/alonzo/test_data/test14.block similarity index 100% rename from pallas-alonzo/src/test_data/test14.block rename to pallas-primitives/src/alonzo/test_data/test14.block diff --git a/pallas-alonzo/src/test_data/test2.block b/pallas-primitives/src/alonzo/test_data/test2.block similarity index 100% rename from pallas-alonzo/src/test_data/test2.block rename to pallas-primitives/src/alonzo/test_data/test2.block diff --git a/pallas-alonzo/src/test_data/test3.block b/pallas-primitives/src/alonzo/test_data/test3.block similarity index 100% rename from pallas-alonzo/src/test_data/test3.block rename to pallas-primitives/src/alonzo/test_data/test3.block diff --git a/pallas-alonzo/src/test_data/test4.block b/pallas-primitives/src/alonzo/test_data/test4.block similarity index 100% rename from pallas-alonzo/src/test_data/test4.block rename to pallas-primitives/src/alonzo/test_data/test4.block diff --git a/pallas-alonzo/src/test_data/test5.block b/pallas-primitives/src/alonzo/test_data/test5.block similarity index 100% rename from pallas-alonzo/src/test_data/test5.block rename to pallas-primitives/src/alonzo/test_data/test5.block diff --git a/pallas-alonzo/src/test_data/test6.block b/pallas-primitives/src/alonzo/test_data/test6.block similarity index 100% rename from pallas-alonzo/src/test_data/test6.block rename to pallas-primitives/src/alonzo/test_data/test6.block diff --git a/pallas-alonzo/src/test_data/test7.block b/pallas-primitives/src/alonzo/test_data/test7.block similarity index 100% rename from pallas-alonzo/src/test_data/test7.block rename to pallas-primitives/src/alonzo/test_data/test7.block diff --git a/pallas-alonzo/src/test_data/test8.block b/pallas-primitives/src/alonzo/test_data/test8.block similarity index 100% rename from pallas-alonzo/src/test_data/test8.block rename to pallas-primitives/src/alonzo/test_data/test8.block diff --git a/pallas-alonzo/src/test_data/test9.block b/pallas-primitives/src/alonzo/test_data/test9.block similarity index 100% rename from pallas-alonzo/src/test_data/test9.block rename to pallas-primitives/src/alonzo/test_data/test9.block diff --git a/pallas-byron/src/lib.rs b/pallas-primitives/src/byron/mod.rs similarity index 68% rename from pallas-byron/src/lib.rs rename to pallas-primitives/src/byron/mod.rs index a5acf0f0..316d97dc 100644 --- a/pallas-byron/src/lib.rs +++ b/pallas-primitives/src/byron/mod.rs @@ -1,10 +1,7 @@ //! Ledger primitives and cbor codec for the Byron era -mod framework; mod model; -mod utils; -pub use framework::*; pub use model::*; // pub mod crypto; diff --git a/pallas-byron/src/model.rs b/pallas-primitives/src/byron/model.rs similarity index 96% rename from pallas-byron/src/model.rs rename to pallas-primitives/src/byron/model.rs index 8621ad15..88c73a34 100644 --- a/pallas-byron/src/model.rs +++ b/pallas-primitives/src/byron/model.rs @@ -2,7 +2,6 @@ //! //! Handcrafted, idiomatic rust artifacts based on based on the [Byron CDDL](https://github.com/input-output-hk/cardano-ledger/blob/master/eras/byron/cddl-spec/byron.cddl) file in IOHK repo. -use log::warn; use minicbor::bytes::ByteVec; use minicbor_derive::{Decode, Encode}; use pallas_crypto::hash::Hash; @@ -11,31 +10,6 @@ use crate::utils::{ CborWrap, EmptyMap, KeyValuePairs, MaybeIndefArray, OrderPreservingProperties, TagWrap, }; -#[derive(Debug, PartialEq, PartialOrd, Eq, Ord)] -pub struct SkipCbor {} - -impl<'b, const N: usize> minicbor::Decode<'b> for SkipCbor { - fn decode(d: &mut minicbor::Decoder<'b>) -> Result { - { - let probe = d.probe(); - warn!("skipped cbor value {}: {:?}", N, probe.datatype()?); - println!("skipped cbor value {}: {:?}", N, probe.datatype()?); - } - - d.skip()?; - Ok(SkipCbor {}) - } -} - -impl minicbor::Encode for SkipCbor { - fn encode( - &self, - _e: &mut minicbor::Encoder, - ) -> Result<(), minicbor::encode::Error> { - todo!() - } -} - // Basic Cardano Types pub type Blake2b256 = Hash<32>; @@ -926,7 +900,9 @@ impl minicbor::Encode for Block { #[cfg(test)] mod tests { - use crate::{Block, Fragment}; + use crate::byron::Block; + use crate::Fragment; + use minicbor::{self, to_vec}; #[test] diff --git a/pallas-byron/src/test_data/test1.block b/pallas-primitives/src/byron/test_data/test1.block similarity index 100% rename from pallas-byron/src/test_data/test1.block rename to pallas-primitives/src/byron/test_data/test1.block diff --git a/pallas-byron/src/test_data/test2.block b/pallas-primitives/src/byron/test_data/test2.block similarity index 100% rename from pallas-byron/src/test_data/test2.block rename to pallas-primitives/src/byron/test_data/test2.block diff --git a/pallas-byron/src/test_data/test3.block b/pallas-primitives/src/byron/test_data/test3.block similarity index 100% rename from pallas-byron/src/test_data/test3.block rename to pallas-primitives/src/byron/test_data/test3.block diff --git a/pallas-alonzo/src/framework.rs b/pallas-primitives/src/framework.rs similarity index 100% rename from pallas-alonzo/src/framework.rs rename to pallas-primitives/src/framework.rs diff --git a/pallas-primitives/src/lib.rs b/pallas-primitives/src/lib.rs new file mode 100644 index 00000000..0b85a7f8 --- /dev/null +++ b/pallas-primitives/src/lib.rs @@ -0,0 +1,9 @@ +//! Ledger primitives and cbor codec for the Cardano eras + +mod framework; + +pub mod alonzo; +pub mod byron; +pub mod utils; + +pub use framework::*; diff --git a/pallas-byron/src/utils.rs b/pallas-primitives/src/utils.rs similarity index 90% rename from pallas-byron/src/utils.rs rename to pallas-primitives/src/utils.rs index 40e6f9c8..4b8bcf92 100644 --- a/pallas-byron/src/utils.rs +++ b/pallas-primitives/src/utils.rs @@ -2,6 +2,32 @@ use std::ops::Deref; use minicbor::{data::Tag, Decode, Encode}; +/// Utility for skipping parts of the CBOR payload, use only for debugging +#[derive(Debug, PartialEq, PartialOrd, Eq, Ord)] +pub struct SkipCbor {} + +impl<'b, const N: usize> minicbor::Decode<'b> for SkipCbor { + fn decode(d: &mut minicbor::Decoder<'b>) -> Result { + { + let probe = d.probe(); + log::warn!("skipped cbor value {}: {:?}", N, probe.datatype()?); + println!("skipped cbor value {}: {:?}", N, probe.datatype()?); + } + + d.skip()?; + Ok(SkipCbor {}) + } +} + +impl minicbor::Encode for SkipCbor { + fn encode( + &self, + _e: &mut minicbor::Encoder, + ) -> Result<(), minicbor::encode::Error> { + todo!() + } +} + /// Custom collection to ensure ordered pairs of values /// /// Since the ordering of the entries requires a particular order to maintain diff --git a/pallas/Cargo.toml b/pallas/Cargo.toml index 581785fb..82b683c2 100644 --- a/pallas/Cargo.toml +++ b/pallas/Cargo.toml @@ -15,6 +15,5 @@ authors = [ [dependencies] pallas-multiplexer = { version = "0.4.0", path = "../pallas-multiplexer/" } pallas-miniprotocols = { version = "0.4.0", path = "../pallas-miniprotocols/" } -pallas-byron = { version = "0.4.0", path = "../pallas-byron/" } -pallas-alonzo = { version = "0.4.0", path = "../pallas-alonzo/" } +pallas-primitives = { version = "0.4.0", path = "../pallas-primitives/" } pallas-crypto = { version = "0.4.0", path = "../pallas-crypto/" } diff --git a/pallas/src/ledger/mod.rs b/pallas/src/ledger.rs similarity index 50% rename from pallas/src/ledger/mod.rs rename to pallas/src/ledger.rs index a18a550a..81be084e 100644 --- a/pallas/src/ledger/mod.rs +++ b/pallas/src/ledger.rs @@ -1,7 +1,4 @@ //! Ledger primitives and cbor codecs for different Cardano eras #[doc(inline)] -pub use pallas_byron as byron; - -#[doc(inline)] -pub use pallas_alonzo as alonzo; +pub use pallas_primitives as primitives; diff --git a/pallas/src/lib.rs b/pallas/src/lib.rs index 52a27934..c6115f3e 100644 --- a/pallas/src/lib.rs +++ b/pallas/src/lib.rs @@ -9,7 +9,9 @@ #![warn(missing_docs)] #![warn(missing_doc_code_examples)] -pub mod ouroboros; +pub mod network; pub mod ledger; + +#[doc(inline)] pub use pallas_crypto as crypto; diff --git a/pallas/src/ouroboros/network.rs b/pallas/src/network.rs similarity index 100% rename from pallas/src/ouroboros/network.rs rename to pallas/src/network.rs diff --git a/pallas/src/ouroboros/mod.rs b/pallas/src/ouroboros/mod.rs deleted file mode 100644 index 7aea3be7..00000000 --- a/pallas/src/ouroboros/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -//! Ouroboros protocol artifacts - -pub mod network;