From 767ec2ef34ad11884edc41f9d339657552164814 Mon Sep 17 00:00:00 2001 From: Emma Turner Date: Fri, 28 Jun 2024 14:31:47 +0100 Subject: [PATCH 1/5] Rollup/SDK: bump crypto/data-encoding crates to 0.6.0 --- src/kernel_sdk/CHANGES.md | 1 + src/kernel_sdk/Cargo.lock | 43 +-- src/kernel_sdk/Cargo.toml | 10 +- src/kernel_sdk/debug/Cargo.toml | 5 +- src/kernel_sdk/encoding/Cargo.toml | 26 +- src/kernel_sdk/encoding/src/contract.rs | 6 +- .../encoding/src/contract/testing.rs | 6 +- src/kernel_sdk/encoding/src/dac/pages.rs | 21 +- src/kernel_sdk/encoding/src/entrypoint.rs | 2 +- src/kernel_sdk/encoding/src/lib.rs | 11 +- src/kernel_sdk/encoding/src/michelson.rs | 38 +-- .../encoding/src/michelson/micheline.rs | 48 +-- .../encoding/src/michelson/ticket.rs | 8 +- src/kernel_sdk/encoding/src/outbox.rs | 4 +- src/kernel_sdk/encoding/src/public_key.rs | 309 ------------------ .../encoding/src/public_key_hash.rs | 182 ----------- src/kernel_sdk/encoding/src/timestamp.rs | 4 +- src/kernel_sdk/entrypoint/Cargo.toml | 24 +- src/kernel_sdk/host/Cargo.toml | 6 +- src/kernel_sdk/host/src/metadata.rs | 5 +- src/kernel_sdk/installer-client/Cargo.toml | 2 +- src/kernel_sdk/installer-config/Cargo.toml | 33 +- src/kernel_sdk/mock/Cargo.toml | 9 +- src/kernel_sdk/mock/src/lib.rs | 17 +- src/kernel_sdk/mock/src/state/mod.rs | 4 +- src/kernel_sdk/mock/tests/dac.rs | 16 +- src/kernel_sdk/panic-hook/Cargo.toml | 2 +- src/kernel_sdk/sdk/Cargo.toml | 25 +- src/kernel_sdk/utils/Cargo.toml | 12 +- 29 files changed, 215 insertions(+), 664 deletions(-) delete mode 100644 src/kernel_sdk/encoding/src/public_key.rs delete mode 100644 src/kernel_sdk/encoding/src/public_key_hash.rs diff --git a/src/kernel_sdk/CHANGES.md b/src/kernel_sdk/CHANGES.md index c7cd62f70ccd..e75d30f0a736 100644 --- a/src/kernel_sdk/CHANGES.md +++ b/src/kernel_sdk/CHANGES.md @@ -22,6 +22,7 @@ - Add `AtomicBatch2` ... `AtomicBatch5` structs implementing `AtomicBatch` and constructed from tuples of `OutboxMessageTransaction` with potentially different parameter types. - Add `--keep-going` option to native cli, to control whether the kernel should exit once the inbox has been drained. +- Bump `tezos_crypto_rs`/`tezos_data_encoding` to `0.6.0` release. ### Installer client/kernel diff --git a/src/kernel_sdk/Cargo.lock b/src/kernel_sdk/Cargo.lock index f7f5ecc5b803..ed8e061bc820 100644 --- a/src/kernel_sdk/Cargo.lock +++ b/src/kernel_sdk/Cargo.lock @@ -83,12 +83,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - [[package]] name = "base64" version = "0.13.1" @@ -171,6 +165,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bumpalo" version = "3.16.0" @@ -666,11 +669,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -882,9 +885,9 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "num-bigint" -version = "0.3.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -1601,7 +1604,6 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", - "tezos_data_encoding_derive", "thiserror", "time", ] @@ -1725,18 +1727,19 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" +checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" dependencies = [ "anyhow", - "base58", "blst", + "bs58", "byteorder 1.5.0", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", + "nom", "num-bigint", "num-traits", "p256", @@ -1744,15 +1747,16 @@ dependencies = [ "serde", "strum", "strum_macros", + "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" +checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" dependencies = [ "bit-vec", "bitvec", @@ -1762,16 +1766,15 @@ dependencies = [ "num-bigint", "num-traits", "serde", - "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" +checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" dependencies = [ "lazy_static", "once_cell", diff --git a/src/kernel_sdk/Cargo.toml b/src/kernel_sdk/Cargo.toml index 5dc2b257937e..a674c6650e1b 100644 --- a/src/kernel_sdk/Cargo.toml +++ b/src/kernel_sdk/Cargo.toml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 TriliTech +# SPDX-FileCopyrightText: 2023-2024 TriliTech # SPDX-FileCopyrightText: 2023 Nomadic Labs # # SPDX-License-Identifier: MIT @@ -24,3 +24,11 @@ members = [ "installer-client", "installer-config", ] + +[workspace.dependencies.tezos_crypto_rs] +version = "0.6.0" +default-features = false + +[workspace.dependencies.tezos_data_encoding] +version = "0.6.0" +default-features = false diff --git a/src/kernel_sdk/debug/Cargo.toml b/src/kernel_sdk/debug/Cargo.toml index 48e3f784785c..299e5f3ffa43 100644 --- a/src/kernel_sdk/debug/Cargo.toml +++ b/src/kernel_sdk/debug/Cargo.toml @@ -26,4 +26,7 @@ default-features = false default = ["alloc"] alloc = [] testing = ["tezos-smart-rollup-core/testing"] -proto-alpha = ["tezos-smart-rollup-core/proto-alpha", "tezos-smart-rollup-host/proto-alpha"] +proto-alpha = [ + "tezos-smart-rollup-core/proto-alpha", + "tezos-smart-rollup-host/proto-alpha", +] diff --git a/src/kernel_sdk/encoding/Cargo.toml b/src/kernel_sdk/encoding/Cargo.toml index 00542df353df..0f3925be34e6 100644 --- a/src/kernel_sdk/encoding/Cargo.toml +++ b/src/kernel_sdk/encoding/Cargo.toml @@ -18,16 +18,13 @@ categories = ["no-std", "no-std::no-alloc", "encoding", "wasm"] path = "src/lib.rs" [dependencies] -tezos_data_encoding = { version = "=0.5.2", optional = true } -tezos_data_encoding_derive = { version = "=0.5.2", optional = true } nom = { version = "7.1", default-features = false } -tezos_crypto_rs = { version = "=0.5.2", default-features = false, optional = true } -num-bigint = { version = "0.3", optional = true } +num-bigint = { version = "0.4", optional = true } num-traits = { version = "0.2.8", optional = true } time = { version = "0.3", features = [ - "formatting", - "parsing", + "formatting", + "parsing", ], optional = true } proptest = { version = "1.0", optional = true } hex = { version = "0.4.3", optional = true } @@ -48,11 +45,22 @@ path = "../host" version = "0.2.2" default-features = false +[dependencies.tezos_crypto_rs] +workspace = true +optional = true + +[dependencies.tezos_data_encoding] +workspace = true +optional = true + [features] -default = ["alloc", "tezos-encoding", "crypto", "bls" ] +default = ["alloc", "tezos-encoding", "crypto", "bls"] testing = ["crypto", "num-bigint", "num-traits", "proptest"] crypto = ["tezos_crypto_rs"] bls = ["tezos_crypto_rs/bls"] alloc = ["crypto", "thiserror", "hex", "num-traits", "num-bigint", "regex"] -tezos-encoding = ["tezos_data_encoding", "tezos_data_encoding_derive", "time"] -proto-alpha = ["tezos-smart-rollup-core/proto-alpha", "tezos-smart-rollup-host/proto-alpha"] +tezos-encoding = ["dep:tezos_data_encoding", "time"] +proto-alpha = [ + "tezos-smart-rollup-core/proto-alpha", + "tezos-smart-rollup-host/proto-alpha", +] diff --git a/src/kernel_sdk/encoding/src/contract.rs b/src/kernel_sdk/encoding/src/contract.rs index d207c64b1dc1..26360576fb00 100644 --- a/src/kernel_sdk/encoding/src/contract.rs +++ b/src/kernel_sdk/encoding/src/contract.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 TriliTech +// SPDX-FileCopyrightText: 2023-2024 TriliTech // // SPDX-License-Identifier: MIT @@ -77,7 +77,7 @@ impl Into for Contract { has_encoding!(Contract, CONTRACT_ENCODING, { Encoding::Custom }); -impl NomReader for Contract { +impl NomReader<'_> for Contract { fn nom_read(input: &[u8]) -> NomResult { alt(( map( @@ -169,7 +169,7 @@ mod test { let pkh = Contract::from_b58check(kt1); - assert!(matches!(pkh, Ok(Contract::Originated(ContractKt1Hash(_))))); + assert!(matches!(pkh, Ok(Contract::Originated(_)))); let kt1_from_pkh = pkh.unwrap().to_b58check(); diff --git a/src/kernel_sdk/encoding/src/contract/testing.rs b/src/kernel_sdk/encoding/src/contract/testing.rs index c3305e194059..ea3aa80f4d2f 100644 --- a/src/kernel_sdk/encoding/src/contract/testing.rs +++ b/src/kernel_sdk/encoding/src/contract/testing.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // // SPDX-License-Identifier: MIT @@ -6,6 +6,7 @@ use super::Contract; use crypto::hash::ContractKt1Hash; +use crypto::hash::HashTrait; use crypto::hash::HashType; use proptest::prelude::*; @@ -13,8 +14,7 @@ impl Contract { /// Randomly selected originated contract. pub fn arb_originated() -> BoxedStrategy { any::<[u8; HashType::ContractKt1Hash.size()]>() - .prop_map(Vec::from) - .prop_map(ContractKt1Hash) + .prop_map(|c| ContractKt1Hash::try_from_bytes(&c).unwrap()) .prop_map(Contract::Originated) .boxed() } diff --git a/src/kernel_sdk/encoding/src/dac/pages.rs b/src/kernel_sdk/encoding/src/dac/pages.rs index 93ad89fe9961..0b06f25260a7 100644 --- a/src/kernel_sdk/encoding/src/dac/pages.rs +++ b/src/kernel_sdk/encoding/src/dac/pages.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // SPDX-FileCopyrightText: 2023 Marigold // // SPDX-License-Identifier: MIT @@ -52,6 +52,17 @@ pub(crate) const MAX_USABLE_PAGE_SIZE: usize = MAX_PAGE_SIZE - PAGE_PREFIX_SIZE; #[cfg(feature = "alloc")] pub use encoding::{prepare_preimages, Page, V0ContentPage, V0HashPage}; use tezos_smart_rollup_core::PREIMAGE_HASH_SIZE; +#[cfg(feature = "alloc")] +use thiserror::Error; + +/// Errors encountered while constructing a preimage hash. +#[cfg(feature = "alloc")] +#[derive(Debug, Error)] +pub enum PreimageHashError { + /// Preimages are limited to [`MAX_PAGE_SIZE`] bytes. + #[error("Content too large to be a preimage page")] + InputLengthTooLarge, +} /// Hashes `content` into a preimage hash. /// @@ -59,12 +70,12 @@ use tezos_smart_rollup_core::PREIMAGE_HASH_SIZE; #[cfg(feature = "alloc")] pub fn make_preimage_hash( content: &[u8], -) -> Result<[u8; PREIMAGE_HASH_SIZE], crypto::blake2b::Blake2bError> { +) -> Result<[u8; PREIMAGE_HASH_SIZE], PreimageHashError> { if content.len() > MAX_PAGE_SIZE { - return Err(crypto::blake2b::Blake2bError::Other); + return Err(PreimageHashError::InputLengthTooLarge); } - let hash = crypto::blake2b::digest_256(content)?; + let hash = crypto::blake2b::digest_256(content); let mut root_hash: [u8; PREIMAGE_HASH_SIZE] = [0; PREIMAGE_HASH_SIZE]; root_hash[1..].copy_from_slice(&hash); Ok(root_hash) @@ -154,7 +165,7 @@ mod encoding { pub fn prepare_preimages( content: &[u8], mut handle: impl FnMut(PreimageHash, Vec), - ) -> Result { + ) -> Result { let mut hashes = Vec::new(); for chunk in content.chunks(V0ContentPage::MAX_CONTENT_SIZE) { diff --git a/src/kernel_sdk/encoding/src/entrypoint.rs b/src/kernel_sdk/encoding/src/entrypoint.rs index fae95259be4a..b9276f4655b8 100644 --- a/src/kernel_sdk/encoding/src/entrypoint.rs +++ b/src/kernel_sdk/encoding/src/entrypoint.rs @@ -79,7 +79,7 @@ impl TryFrom for Entrypoint { has_encoding!(Entrypoint, ENTRYPOINT_SIMPLE_ENCODING, { Encoding::Custom }); -impl NomReader for Entrypoint { +impl NomReader<'_> for Entrypoint { fn nom_read(input: &[u8]) -> tezos_data_encoding::nom::NomResult { map( // Can't use tezos_data_encoding 'bounded_string' here, as we have an diff --git a/src/kernel_sdk/encoding/src/lib.rs b/src/kernel_sdk/encoding/src/lib.rs index 1fb82e64f015..8c1cc23bb5c6 100644 --- a/src/kernel_sdk/encoding/src/lib.rs +++ b/src/kernel_sdk/encoding/src/lib.rs @@ -26,14 +26,17 @@ pub mod inbox; pub mod michelson; #[cfg(feature = "alloc")] pub mod outbox; -#[cfg(feature = "crypto")] -pub mod public_key; -#[cfg(feature = "crypto")] -pub mod public_key_hash; #[cfg(feature = "crypto")] pub mod smart_rollup; pub mod timestamp; +#[cfg(feature = "crypto")] +#[doc(inline)] +pub use tezos_crypto_rs::public_key; +#[cfg(feature = "crypto")] +#[doc(inline)] +pub use tezos_crypto_rs::public_key_hash; + #[cfg(feature = "testing")] pub mod testing; diff --git a/src/kernel_sdk/encoding/src/michelson.rs b/src/kernel_sdk/encoding/src/michelson.rs index eafd7ee68135..10476d035a16 100644 --- a/src/kernel_sdk/encoding/src/michelson.rs +++ b/src/kernel_sdk/encoding/src/michelson.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // SPDX-FileCopyrightText: 2023 Nomadic Labs // SPDX-FileCopyrightText: 2024 Marigold // @@ -85,7 +85,7 @@ pub mod v1_primitives { // combine MichelsonTicketContent and Michelson traits /// marker trait for michelson encoding pub trait Michelson: - HasEncoding + BinWriter + NomReader + Debug + PartialEq + Eq + HasEncoding + BinWriter + for<'a> NomReader<'a> + Debug + PartialEq + Eq { } @@ -278,7 +278,7 @@ impl HasEncoding for MichelsonNat { // -------- // DECODING // -------- -impl NomReader for MichelsonContract { +impl NomReader<'_> for MichelsonContract { fn nom_read(input: &[u8]) -> NomResult { map( nom_read_micheline_bytes(Contract::nom_read), @@ -287,7 +287,7 @@ impl NomReader for MichelsonContract { } } -impl NomReader for MichelsonUnit { +impl NomReader<'_> for MichelsonUnit { fn nom_read(input: &[u8]) -> NomResult { map( MichelinePrimNoArgsNoAnnots::<{ prim::UNIT_TAG }>::nom_read, @@ -296,12 +296,12 @@ impl NomReader for MichelsonUnit { } } -impl NomReader for MichelsonPair +impl<'a, Arg0, Arg1> NomReader<'a> for MichelsonPair where - Arg0: NomReader + Debug + PartialEq + Eq, - Arg1: NomReader + Debug + PartialEq + Eq, + Arg0: NomReader<'a> + Debug + PartialEq + Eq, + Arg1: NomReader<'a> + Debug + PartialEq + Eq, { - fn nom_read(input: &[u8]) -> NomResult { + fn nom_read(input: &'a [u8]) -> NomResult { map( MichelinePrim2ArgsNoAnnots::<_, _, { prim::PAIR_TAG }>::nom_read, Into::into, @@ -609,12 +609,12 @@ where } } -impl NomReader for MichelsonOr +impl<'a, Arg0, Arg1> NomReader<'a> for MichelsonOr where - Arg0: NomReader + Debug + PartialEq + Eq, - Arg1: NomReader + Debug + PartialEq + Eq, + Arg0: NomReader<'a> + Debug + PartialEq + Eq, + Arg1: NomReader<'a> + Debug + PartialEq + Eq, { - fn nom_read(input: &[u8]) -> NomResult { + fn nom_read(input: &'a [u8]) -> NomResult { alt(( map( MichelinePrim1ArgNoAnnots::<_, { prim::LEFT_TAG }>::nom_read, @@ -628,11 +628,11 @@ where } } -impl NomReader for MichelsonOption +impl<'a, Arg> NomReader<'a> for MichelsonOption where - Arg: NomReader + Debug + PartialEq + Eq, + Arg: NomReader<'a> + Debug + PartialEq + Eq, { - fn nom_read(input: &[u8]) -> NomResult { + fn nom_read(input: &'a [u8]) -> NomResult { alt(( map( MichelinePrimNoArgsNoAnnots::<{ prim::NONE_TAG }>::nom_read, @@ -646,25 +646,25 @@ where } } -impl NomReader for MichelsonString { +impl NomReader<'_> for MichelsonString { fn nom_read(input: &[u8]) -> NomResult { map(nom_read_micheline_string, MichelsonString)(input) } } -impl NomReader for MichelsonBytes { +impl NomReader<'_> for MichelsonBytes { fn nom_read(input: &[u8]) -> NomResult { map(nom_read_micheline_bytes(nom_read::bytes), MichelsonBytes)(input) } } -impl NomReader for MichelsonInt { +impl NomReader<'_> for MichelsonInt { fn nom_read(input: &[u8]) -> NomResult { map(nom_read_micheline_int, MichelsonInt)(input) } } -impl NomReader for MichelsonNat { +impl NomReader<'_> for MichelsonNat { fn nom_read(input: &[u8]) -> NomResult { use nom::error::{ErrorKind, ParseError}; use tezos_data_encoding::nom::error::*; diff --git a/src/kernel_sdk/encoding/src/michelson/micheline.rs b/src/kernel_sdk/encoding/src/michelson/micheline.rs index 69108a3fcb12..9c954e49d2a1 100644 --- a/src/kernel_sdk/encoding/src/michelson/micheline.rs +++ b/src/kernel_sdk/encoding/src/michelson/micheline.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // SPDX-FileCopyrightText: 2023 Nomadic Labs // SPDX-FileCopyrightText: 2024 Marigold // @@ -89,7 +89,7 @@ pub(crate) mod annots { } } - impl NomReader for Annotations { + impl NomReader<'_> for Annotations { fn nom_read(input: &[u8]) -> NomResult { // TODO: #6665 // this does two passes over the input buffer (up to `dynamic` size) @@ -425,25 +425,25 @@ where // ---------- // NOM_READER // ---------- -impl NomReader for MichelineInt { +impl NomReader<'_> for MichelineInt { fn nom_read(input: &[u8]) -> NomResult { map(nom_read_micheline_int, MichelineInt)(input) } } -impl NomReader for MichelineString { +impl NomReader<'_> for MichelineString { fn nom_read(input: &[u8]) -> NomResult { map(nom_read_micheline_string, MichelineString)(input) } } -impl NomReader for MichelineBytes { +impl NomReader<'_> for MichelineBytes { fn nom_read(input: &[u8]) -> NomResult { map(nom_read_micheline_bytes(nom_read::bytes), MichelineBytes)(input) } } -impl NomReader for MichelinePrimNoArgsNoAnnots { +impl NomReader<'_> for MichelinePrimNoArgsNoAnnots { fn nom_read(input: &[u8]) -> NomResult { map( tag([MICHELINE_PRIM_NO_ARGS_NO_ANNOTS_TAG, PRIM_TAG]), @@ -452,7 +452,7 @@ impl NomReader for MichelinePrimNoArgsNoAnnots { } } -impl NomReader for MichelinePrimNoArgsSomeAnnots { +impl NomReader<'_> for MichelinePrimNoArgsSomeAnnots { fn nom_read(input: &[u8]) -> NomResult { let parse = preceded( tag([MICHELINE_PRIM_NO_ARGS_SOME_ANNOTS_TAG, PRIM_TAG]), @@ -463,11 +463,12 @@ impl NomReader for MichelinePrimNoArgsSomeAnnots { } } -impl NomReader for MichelinePrim1ArgNoAnnots +impl<'a, Arg, const PRIM_TAG: u8> NomReader<'a> + for MichelinePrim1ArgNoAnnots where - Arg: NomReader + Debug + PartialEq + Eq, + Arg: NomReader<'a> + Debug + PartialEq + Eq, { - fn nom_read(input: &[u8]) -> NomResult { + fn nom_read(input: &'a [u8]) -> NomResult { let parse = preceded( tag([MICHELINE_PRIM_1_ARG_NO_ANNOTS_TAG, PRIM_TAG]), Arg::nom_read, @@ -477,11 +478,12 @@ where } } -impl NomReader for MichelinePrim1ArgSomeAnnots +impl<'a, Arg, const PRIM_TAG: u8> NomReader<'a> + for MichelinePrim1ArgSomeAnnots where - Arg: NomReader + Debug + PartialEq + Eq, + Arg: NomReader<'a> + Debug + PartialEq + Eq, { - fn nom_read(input: &[u8]) -> NomResult { + fn nom_read(input: &'a [u8]) -> NomResult { let parse = preceded( tag([MICHELINE_PRIM_1_ARG_SOME_ANNOTS_TAG, PRIM_TAG]), pair(Arg::nom_read, Annotations::nom_read), @@ -494,13 +496,13 @@ where } } -impl NomReader +impl<'a, Arg1, Arg2, const PRIM_TAG: u8> NomReader<'a> for MichelinePrim2ArgsNoAnnots where - Arg1: NomReader + Debug + PartialEq + Eq, - Arg2: NomReader + Debug + PartialEq + Eq, + Arg1: NomReader<'a> + Debug + PartialEq + Eq, + Arg2: NomReader<'a> + Debug + PartialEq + Eq, { - fn nom_read(input: &[u8]) -> NomResult { + fn nom_read(input: &'a [u8]) -> NomResult { let parse = preceded( tag([MICHELINE_PRIM_2_ARGS_NO_ANNOTS_TAG, PRIM_TAG]), pair(Arg1::nom_read, Arg2::nom_read), @@ -513,13 +515,13 @@ where } } -impl NomReader +impl<'a, Arg1, Arg2, const PRIM_TAG: u8> NomReader<'a> for MichelinePrim2ArgsSomeAnnots where - Arg1: NomReader + Debug + PartialEq + Eq, - Arg2: NomReader + Debug + PartialEq + Eq, + Arg1: NomReader<'a> + Debug + PartialEq + Eq, + Arg2: NomReader<'a> + Debug + PartialEq + Eq, { - fn nom_read(input: &[u8]) -> NomResult { + fn nom_read(input: &'a [u8]) -> NomResult { let parse = preceded( tag([MICHELINE_PRIM_2_ARGS_SOME_ANNOTS_TAG, PRIM_TAG]), pair(Arg1::nom_read, pair(Arg2::nom_read, Annotations::nom_read)), @@ -631,7 +633,7 @@ impl Node { } } -impl NomReader for Node { +impl NomReader<'_> for Node { fn nom_read(input: &[u8]) -> NomResult { nom::branch::alt(( map(nom_read_micheline_int, Node::Int), @@ -775,7 +777,7 @@ fn nom_read_tagged_micheline<'a, T: Clone, const TAG: u8>( /// Read dynamically-sized bytes with a prefix of [MICHELINE_BYTES_TAG] into `parser`. pub(crate) fn nom_read_micheline_bytes<'a, T: Clone>( - parser: impl FnMut(NomInput) -> NomResult, + parser: impl FnMut(NomInput<'a>) -> NomResult, ) -> impl FnMut(NomInput<'a>) -> NomResult<'a, T> { nom_read_tagged_micheline::<_, { MICHELINE_BYTES_TAG }>(nom_read::dynamic(parser)) } diff --git a/src/kernel_sdk/encoding/src/michelson/ticket.rs b/src/kernel_sdk/encoding/src/michelson/ticket.rs index fa9908e40b2f..e1c7faf83bb0 100644 --- a/src/kernel_sdk/encoding/src/michelson/ticket.rs +++ b/src/kernel_sdk/encoding/src/michelson/ticket.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // SPDX-FileCopyrightText: 2023 Nomadic Labs // SPDX-FileCopyrightText: 2023-2024 Marigold // @@ -161,7 +161,7 @@ fn get_ticket_arguments(input: &[u8]) -> NomResult<[Node; 4]> { Ok((fst, ([arg0, arg1, arg2, arg3]))) } -impl NomReader for TypedTicket { +impl NomReader<'_> for TypedTicket { fn nom_read(input: &[u8]) -> NomResult { // 1st: extract each field of the input let (fst, [arg0, arg1, arg2, arg3]) = get_ticket_arguments(input)?; @@ -255,7 +255,7 @@ pub struct Ticket(pub(crate) LegacyTicketRepr Michelson for Ticket where Expr: MichelsonTicketContent {} -impl NomReader for Ticket +impl NomReader<'_> for Ticket where Expr: MichelsonTicketContent, { @@ -317,7 +317,7 @@ impl Ticket { self.creator().bin_write(&mut bytes)?; self.contents().bin_write(&mut bytes)?; - let digest = digest_256(bytes.as_slice())?; + let digest = digest_256(bytes.as_slice()); let digest: [u8; TICKET_HASH_SIZE] = digest.try_into().unwrap(); Ok(TicketHash { diff --git a/src/kernel_sdk/encoding/src/outbox.rs b/src/kernel_sdk/encoding/src/outbox.rs index 114923049bf7..782b3eb99e5c 100644 --- a/src/kernel_sdk/encoding/src/outbox.rs +++ b/src/kernel_sdk/encoding/src/outbox.rs @@ -53,7 +53,7 @@ pub struct OutboxMessageTransactionBatch { /// This trait is already derived for homogeneous [OutboxMessageTransactionBatch] type /// and for code-generated structs supporting transactions with different Michelson types /// [AtomicBatch2] and further up to [AtomicBatch5]. -pub trait AtomicBatch: HasEncoding + BinWriter + NomReader {} +pub trait AtomicBatch: HasEncoding + BinWriter + for<'a> NomReader<'a> {} impl OutboxMessageTransactionBatch { /// Returns the number of transactions in the batch. @@ -136,7 +136,7 @@ macro_rules! impl_outbox_message_encodable { } } - impl<$( []: Michelson ),+> NomReader for $s<$( [] ),+> { + impl<$( []: Michelson ),+> NomReader<'_> for $s<$( [] ),+> { fn nom_read(input: &[u8]) -> tezos_data_encoding::nom::NomResult { use tezos_data_encoding::nom::dynamic; use nom::sequence::tuple; diff --git a/src/kernel_sdk/encoding/src/public_key.rs b/src/kernel_sdk/encoding/src/public_key.rs deleted file mode 100644 index 3e7d90268fc8..000000000000 --- a/src/kernel_sdk/encoding/src/public_key.rs +++ /dev/null @@ -1,309 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Marigold -// -// SPDX-License-Identifier: MIT - -//! Public Key of Layer1. - -use std::fmt::Display; -use tezos_crypto_rs::hash::{ - PublicKeyEd25519, PublicKeyP256, PublicKeySecp256k1, Signature, -}; -use tezos_crypto_rs::{CryptoError, PublicKeySignatureVerifier}; -use tezos_data_encoding::enc::BinWriter; -use tezos_data_encoding::encoding::HasEncoding; -use tezos_data_encoding::nom::NomReader; - -use crypto::base58::{FromBase58Check, FromBase58CheckError}; -use crypto::hash::{Hash, HashTrait, HashType}; - -/// Public Key of Layer1. -#[derive(Debug, Clone, PartialEq, Eq, HasEncoding, BinWriter, NomReader)] -pub enum PublicKey { - /// Tz1 - public key - Ed25519(PublicKeyEd25519), - /// Tz2 - public key - Secp256k1(PublicKeySecp256k1), - /// Tz3 - public key - P256(PublicKeyP256), -} - -impl Display for PublicKey { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::Ed25519(tz1) => write!(f, "{}", tz1), - Self::Secp256k1(tz2) => write!(f, "{}", tz2), - Self::P256(tz3) => write!(f, "{}", tz3), - } - } -} - -impl PublicKey { - /// Conversion from base58-encoding string (with prefix). - pub fn from_b58check(data: &str) -> Result { - let bytes = data.from_base58check()?; - let public_key = if bytes - .starts_with(HashType::PublicKeyEd25519.base58check_prefix()) - { - PublicKey::Ed25519(PublicKeyEd25519::from_b58check(data)?) - } else if bytes.starts_with(HashType::PublicKeySecp256k1.base58check_prefix()) { - PublicKey::Secp256k1(PublicKeySecp256k1::from_b58check(data)?) - } else if bytes.starts_with(HashType::PublicKeyP256.base58check_prefix()) { - PublicKey::P256(PublicKeyP256::from_b58check(data)?) - } else { - return Err(FromBase58CheckError::InvalidBase58); - }; - Ok(public_key) - } - - /// Conversion to base58-encoding string (with prefix). - pub fn to_b58check(&self) -> String { - match self { - Self::Ed25519(tz1) => tz1.to_b58check(), - Self::Secp256k1(tz2) => tz2.to_b58check(), - Self::P256(tz3) => tz3.to_b58check(), - } - } -} - -impl From for Hash { - fn from(pkh: PublicKey) -> Self { - match pkh { - PublicKey::Ed25519(tz1) => tz1.into(), - PublicKey::Secp256k1(tz2) => tz2.into(), - PublicKey::P256(tz3) => tz3.into(), - } - } -} - -impl TryFrom<&str> for PublicKey { - type Error = FromBase58CheckError; - - fn try_from(value: &str) -> Result { - Self::from_b58check(value) - } -} - -impl PublicKeySignatureVerifier for PublicKey { - type Signature = Signature; - type Error = CryptoError; - - fn verify_signature( - &self, - signature: &Self::Signature, - msg: &[u8], - ) -> Result { - match self { - PublicKey::Ed25519(ed25519) => ed25519.verify_signature(signature, msg), - PublicKey::Secp256k1(secp256k1) => secp256k1.verify_signature(signature, msg), - PublicKey::P256(p256) => p256.verify_signature(signature, msg), - } - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn tz1_b58check() { - let tz1 = "edpkuDMUm7Y53wp4gxeLBXuiAhXZrLn8XB1R83ksvvesH8Lp8bmCfK"; - - let pkh = PublicKey::from_b58check(tz1); - - assert!(matches!(pkh, Ok(PublicKey::Ed25519(_)))); - - let tz1_from_pkh = pkh.unwrap().to_b58check(); - - assert_eq!(tz1, &tz1_from_pkh); - } - - #[test] - fn tz2_b58check() { - let tz2 = "sppk7Zik17H7AxECMggqD1FyXUQdrGRFtz9X7aR8W2BhaJoWwSnPEGA"; - - let public_key = PublicKey::from_b58check(tz2); - - assert!(matches!(public_key, Ok(PublicKey::Secp256k1(_)))); - - let tz2_from_pk = public_key.unwrap().to_b58check(); - - assert_eq!(tz2, &tz2_from_pk); - } - - #[test] - fn tz3_b58check() { - let tz3 = "p2pk67VpBjWwoPULwXCpayec6rFxaAKv8VjJ8cVMHmLDCYARu31zx5Z"; - - let public_key = PublicKey::from_b58check(tz3); - - assert!(matches!(public_key, Ok(PublicKey::P256(_)))); - - let tz3_from_pk = public_key.unwrap().to_b58check(); - - assert_eq!(tz3, &tz3_from_pk); - } - - #[test] - fn tz1_encoding() { - let tz1 = "edpkuDMUm7Y53wp4gxeLBXuiAhXZrLn8XB1R83ksvvesH8Lp8bmCfK"; - - let public_key = PublicKey::from_b58check(tz1).expect("expected valid tz1 hash"); - - let mut bin = Vec::new(); - public_key - .bin_write(&mut bin) - .expect("serialization should work"); - - let deserde_pk = NomReader::nom_read(bin.as_slice()) - .expect("deserialization should work") - .1; - - // Check tag encoding - assert_eq!(0_u8, bin[0]); - assert_eq!(public_key, deserde_pk); - } - - #[test] - fn tz2_encoding() { - let tz2 = "sppk7Zik17H7AxECMggqD1FyXUQdrGRFtz9X7aR8W2BhaJoWwSnPEGA"; - - let public_key = PublicKey::from_b58check(tz2).expect("expected valid tz2 hash"); - - let mut bin = Vec::new(); - public_key - .bin_write(&mut bin) - .expect("serialization should work"); - - let deserde_pk = NomReader::nom_read(bin.as_slice()) - .expect("deserialization should work") - .1; - - // Check tag encoding - assert_eq!(1_u8, bin[0]); - assert_eq!(public_key, deserde_pk); - } - - #[test] - fn tz3_encoding() { - let tz3 = "p2pk67VpBjWwoPULwXCpayec6rFxaAKv8VjJ8cVMHmLDCYARu31zx5Z"; - - let public_key = PublicKey::from_b58check(tz3).expect("expected valid tz3 hash"); - - let mut bin = Vec::new(); - public_key - .bin_write(&mut bin) - .expect("serialization should work"); - - let deserde_pk = NomReader::nom_read(bin.as_slice()) - .expect("deserialization should work") - .1; - - // Check tag encoding - assert_eq!(2_u8, bin[0]); - assert_eq!(public_key, deserde_pk); - } - - #[test] - fn tz1_signature_signature_verification_succeeds() { - let tz1 = PublicKey::from_b58check( - "edpkvWR5truf7AMF3PZVCXx7ieQLCW4MpNDzM3VwPfmFWVbBZwswBw", - ) - .expect("public key decoding should work"); - let sig: Signature = Signature::from_base58_check( - "sigdGBG68q2vskMuac4AzyNb1xCJTfuU8MiMbQtmZLUCYydYrtTd5Lessn1EFLTDJzjXoYxRasZxXbx6tHnirbEJtikcMHt3" - ).expect("signature decoding should work"); - let msg = hex::decode( - "bcbb7b77cb0712e4cd02160308cfd53e8dde8a7980c4ff28b62deb12304913c2", - ) - .expect("payload decoding should work"); - - let result = tz1 - .verify_signature(&sig, &msg) - .expect("signature should be correct"); - assert!(result); - } - - #[test] - fn tz1_signature_signature_verification_fails() { - let tz1 = PublicKey::from_b58check( - "edpkuDMUm7Y53wp4gxeLBXuiAhXZrLn8XB1R83ksvvesH8Lp8bmCfK", - ) - .expect("public key decoding should work"); - let sig = Signature::from_base58_check( - "sigdGBG68q2vskMuac4AzyNb1xCJTfuU8MiMbQtmZLUCYydYrtTd5Lessn1EFLTDJzjXoYxRasZxXbx6tHnirbEJtikcMHt3" - ).expect("signature decoding should work"); - let msg = hex::decode( - "bcbb7b77cb0712e4cd02160308cfd53e8dde8a7980c4ff28b62deb12304913c2", - ) - .expect("payload decoding should work"); - - let result = tz1.verify_signature(&sig, &msg); - assert!(result.is_err()); - } - - #[test] - fn tz2_signature_signature_verification_succeeds() { - let tz2 = PublicKey::from_b58check( - "sppk7cwkTzCPptCSxSTvGNg4uqVcuTbyWooLnJp4yxJNH5DReUGxYvs", - ) - .expect("public key decoding should work"); - let sig = Signature::from_base58_check("sigrJ2jqanLupARzKGvzWgL1Lv6NGUqDovHKQg9MX4PtNtHXgcvG6131MRVzujJEXfvgbuRtfdGbXTFaYJJjuUVLNNZTf5q1").expect("signature decoding should work"); - let msg = hex::decode( - "5538e2cc90c9b053a12e2d2f3a985aff1809eac59501db4d644e4bb381b06b4b", - ) - .expect("payload decoding should work"); - - let result = tz2.verify_signature(&sig, &msg).unwrap(); - assert!(result); - } - - #[test] - fn tz2_signature_signature_verification_fails() { - let tz2 = "sppk7Zik17H7AxECMggqD1FyXUQdrGRFtz9X7aR8W2BhaJoWwSnPEGA"; - let tz2 = PublicKey::from_b58check(tz2).expect("parsing should world"); - let sig = Signature::from_base58_check("sigrJ2jqanLupARzKGvzWgL1Lv6NGUqDovHKQg9MX4PtNtHXgcvG6131MRVzujJEXfvgbuRtfdGbXTFaYJJjuUVLNNZTf5q1").expect("signature decoding should work"); - let msg = hex::decode( - "5538e2cc90c9b053a12e2d2f3a985aff1809eac59501db4d644e4bb381b06b4b", - ) - .expect("payload decoding should work"); - - let result = tz2.verify_signature(&sig, &msg).unwrap(); - assert!(!result); - } - - #[test] - fn tz3_signature_signature_verification_succeeds() { - let tz3 = PublicKey::from_b58check( - "p2pk67Cwb5Ke6oSmqeUbJxURXMe3coVnH9tqPiB2xD84CYhHbBKs4oM", - ) - .expect("decoding public key should work"); - let sig = Signature::from_base58_check( - "sigNCaj9CnmD94eZH9C7aPPqBbVCJF72fYmCFAXqEbWfqE633WNFWYQJFnDUFgRUQXR8fQ5tKSfJeTe6UAi75eTzzQf7AEc1" - ).expect("signature decoding should work"); - let msg = hex::decode( - "5538e2cc90c9b053a12e2d2f3a985aff1809eac59501db4d644e4bb381b06b4b", - ) - .expect("payload decoding should work"); - - let result = tz3.verify_signature(&sig, &msg).unwrap(); - assert!(result); - } - - #[test] - fn tz3_signature_signature_verification_fails() { - let tz3 = PublicKey::from_b58check( - "p2pk67VpBjWwoPULwXCpayec6rFxaAKv8VjJ8cVMHmLDCYARu31zx5Z", - ) - .expect("decoding public key should work"); - let sig = Signature::from_base58_check( - "sigNCaj9CnmD94eZH9C7aPPqBbVCJF72fYmCFAXqEbWfqE633WNFWYQJFnDUFgRUQXR8fQ5tKSfJeTe6UAi75eTzzQf7AEc1" - ).expect("signature decoding should work"); - let msg = hex::decode( - "5538e2cc90c9b053a12e2d2f3a985aff1809eac59501db4d644e4bb381b06b4b", - ) - .expect("payload decoding should work"); - - let result = tz3.verify_signature(&sig, &msg).unwrap(); - assert!(!result); - } -} diff --git a/src/kernel_sdk/encoding/src/public_key_hash.rs b/src/kernel_sdk/encoding/src/public_key_hash.rs deleted file mode 100644 index d7ab951cbda3..000000000000 --- a/src/kernel_sdk/encoding/src/public_key_hash.rs +++ /dev/null @@ -1,182 +0,0 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech -// -// SPDX-License-Identifier: MIT - -//! Hash of Layer1 contract ids. - -use std::fmt::Display; -use tezos_data_encoding::enc::BinWriter; -use tezos_data_encoding::encoding::HasEncoding; -use tezos_data_encoding::nom::NomReader; - -use crypto::base58::{FromBase58Check, FromBase58CheckError}; -use crypto::hash::{ - ContractTz1Hash, ContractTz2Hash, ContractTz3Hash, Hash, HashTrait, HashType, -}; - -/// Hash of Layer1 contract ids. -#[derive( - Debug, Clone, PartialEq, Eq, PartialOrd, Ord, HasEncoding, BinWriter, NomReader, -)] -pub enum PublicKeyHash { - /// Tz1-contract - Ed25519(ContractTz1Hash), - /// Tz2-contract - Secp256k1(ContractTz2Hash), - /// Tz3-contract - P256(ContractTz3Hash), -} - -impl Display for PublicKeyHash { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::Ed25519(tz1) => write!(f, "{}", tz1), - Self::Secp256k1(tz2) => write!(f, "{}", tz2), - Self::P256(tz3) => write!(f, "{}", tz3), - } - } -} - -impl PublicKeyHash { - /// Conversion from base58-encoding string (with prefix). - pub fn from_b58check(data: &str) -> Result { - let bytes = data.from_base58check()?; - match bytes { - _ if bytes.starts_with(HashType::ContractTz1Hash.base58check_prefix()) => Ok( - PublicKeyHash::Ed25519(ContractTz1Hash::from_b58check(data)?), - ), - _ if bytes.starts_with(HashType::ContractTz2Hash.base58check_prefix()) => Ok( - PublicKeyHash::Secp256k1(ContractTz2Hash::from_b58check(data)?), - ), - _ if bytes.starts_with(HashType::ContractTz3Hash.base58check_prefix()) => { - Ok(PublicKeyHash::P256(ContractTz3Hash::from_b58check(data)?)) - } - _ => Err(FromBase58CheckError::InvalidBase58), - } - } - - /// Conversion to base58-encoding string (with prefix). - pub fn to_b58check(&self) -> String { - match self { - Self::Ed25519(tz1) => tz1.to_b58check(), - Self::Secp256k1(tz2) => tz2.to_b58check(), - Self::P256(tz3) => tz3.to_b58check(), - } - } -} - -impl From for Hash { - fn from(pkh: PublicKeyHash) -> Self { - match pkh { - PublicKeyHash::Ed25519(tz1) => tz1.into(), - PublicKeyHash::Secp256k1(tz2) => tz2.into(), - PublicKeyHash::P256(tz3) => tz3.into(), - } - } -} - -impl TryFrom<&str> for PublicKeyHash { - type Error = FromBase58CheckError; - - fn try_from(value: &str) -> Result { - Self::from_b58check(value) - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn tz1_b58check() { - let tz1 = "tz1RjtZUVeLhADFHDL8UwDZA6vjWWhojpu5w"; - - let pkh = PublicKeyHash::from_b58check(tz1); - - assert!(matches!(pkh, Ok(PublicKeyHash::Ed25519(_)))); - - let tz1_from_pkh = pkh.unwrap().to_b58check(); - - assert_eq!(tz1, &tz1_from_pkh); - } - - #[test] - fn tz2_b58check() { - let tz2 = "tz2VGBaXuS6rnaa5hpC92qkgadRJKdEbeGwc"; - - let pkh = PublicKeyHash::from_b58check(tz2); - - assert!(matches!(pkh, Ok(PublicKeyHash::Secp256k1(_)))); - - let tz2_from_pkh = pkh.unwrap().to_b58check(); - - assert_eq!(tz2, &tz2_from_pkh); - } - - #[test] - fn tz3_b58check() { - let tz3 = "tz3WEJYwJ6pPwVbSL8FrSoAXRmFHHZTuEnMA"; - - let pkh = PublicKeyHash::from_b58check(tz3); - - assert!(matches!(pkh, Ok(PublicKeyHash::P256(_)))); - - let tz3_from_pkh = pkh.unwrap().to_b58check(); - - assert_eq!(tz3, &tz3_from_pkh); - } - - #[test] - fn tz1_encoding() { - let tz1 = "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"; - - let pkh = PublicKeyHash::from_b58check(tz1).expect("expected valid tz1 hash"); - - let mut bin = Vec::new(); - pkh.bin_write(&mut bin).expect("serialization should work"); - - let deserde_pkh = NomReader::nom_read(bin.as_slice()) - .expect("deserialization should work") - .1; - - // Check tag encoding - assert_eq!(0_u8, bin[0]); - assert_eq!(pkh, deserde_pkh); - } - - #[test] - fn tz2_encoding() { - let tz2 = "tz2KZPgf2rshxNUBXFcTaCemik1LH1v9qz3F"; - - let pkh = PublicKeyHash::from_b58check(tz2).expect("expected valid tz2 hash"); - - let mut bin = Vec::new(); - pkh.bin_write(&mut bin).expect("serialization should work"); - - let deserde_pkh = NomReader::nom_read(bin.as_slice()) - .expect("deserialization should work") - .1; - - // Check tag encoding - assert_eq!(1_u8, bin[0]); - assert_eq!(pkh, deserde_pkh); - } - - #[test] - fn tz3_encoding() { - let tz3 = "tz3fTJbAxj1LQCEKDKmYLWKP6e5vNC9vwvyo"; - - let pkh = PublicKeyHash::from_b58check(tz3).expect("expected valid tz3 hash"); - - let mut bin = Vec::new(); - pkh.bin_write(&mut bin).expect("serialization should work"); - - let deserde_pkh = NomReader::nom_read(bin.as_slice()) - .expect("deserialization should work") - .1; - - // Check tag encoding - assert_eq!(2_u8, bin[0]); - assert_eq!(pkh, deserde_pkh); - } -} diff --git a/src/kernel_sdk/encoding/src/timestamp.rs b/src/kernel_sdk/encoding/src/timestamp.rs index 9ed2c381bd62..a213d209bb38 100644 --- a/src/kernel_sdk/encoding/src/timestamp.rs +++ b/src/kernel_sdk/encoding/src/timestamp.rs @@ -1,5 +1,5 @@ // SPDX-FileCopyrightText: 2020-2022 SimpleStaking, Viable Systems and Tezedge Contributors -// SPDX-FileCopyrightText: 2023 TriliTech +// SPDX-FileCopyrightText: 2023-2024 TriliTech // // SPDX-License-Identifier: MIT @@ -46,7 +46,7 @@ mod encoding { } } - impl NomReader for Timestamp { + impl NomReader<'_> for Timestamp { fn nom_read(input: &[u8]) -> tezos_data_encoding::nom::NomResult { nom::combinator::map( nom::number::complete::i64(nom::number::Endianness::Big), diff --git a/src/kernel_sdk/entrypoint/Cargo.toml b/src/kernel_sdk/entrypoint/Cargo.toml index 21b4fb27ba0f..2df681b7466b 100644 --- a/src/kernel_sdk/entrypoint/Cargo.toml +++ b/src/kernel_sdk/entrypoint/Cargo.toml @@ -60,27 +60,27 @@ features = ["proto-alpha"] [features] default = [ - "std", - "alloc", - "dlmalloc", - "panic-hook-debug", - "panic-hook-abort", - "panic-hook", + "std", + "alloc", + "dlmalloc", + "panic-hook-debug", + "panic-hook-abort", + "panic-hook", ] std = ["tezos-smart-rollup-panic-hook/std", "tezos-smart-rollup-host/std"] alloc = [] panic-hook = ["tezos-smart-rollup-panic-hook"] panic-hook-debug = [ - "panic-hook", - "tezos-smart-rollup-panic-hook/debug", - "tezos-smart-rollup-debug/default", + "panic-hook", + "tezos-smart-rollup-panic-hook/debug", + "tezos-smart-rollup-debug/default", ] panic-hook-abort = ["panic-hook", "tezos-smart-rollup-panic-hook/abort"] testing = [] proto-alpha = [ - "tezos-smart-rollup-core/proto-alpha", - "tezos-smart-rollup-host/proto-alpha", - "tezos-smart-rollup-debug/proto-alpha", + "tezos-smart-rollup-core/proto-alpha", + "tezos-smart-rollup-host/proto-alpha", + "tezos-smart-rollup-debug/proto-alpha", ] experimental-host-in-memory-store = ["tezos-smart-rollup-mock"] native-kernel = [ diff --git a/src/kernel_sdk/host/Cargo.toml b/src/kernel_sdk/host/Cargo.toml index 38c945fb9c88..fd8ed21e9870 100644 --- a/src/kernel_sdk/host/Cargo.toml +++ b/src/kernel_sdk/host/Cargo.toml @@ -21,13 +21,11 @@ path = "../core" version = "0.2.2" [dependencies.tezos_crypto_rs] -version = "=0.5.2" -default-features = false +workspace = true optional = true [dependencies.tezos_data_encoding] -version = "=0.5.2" -default-features = false +workspace = true optional = true [dependencies.thiserror] diff --git a/src/kernel_sdk/host/src/metadata.rs b/src/kernel_sdk/host/src/metadata.rs index 7e45c342b0f6..bc710c461ab8 100644 --- a/src/kernel_sdk/host/src/metadata.rs +++ b/src/kernel_sdk/host/src/metadata.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 TriliTech +// SPDX-FileCopyrightText: 2023-2024 TriliTech // SPDX-FileCopyrightText: 2023 Marigold // // SPDX-License-Identifier: MIT @@ -31,7 +31,8 @@ impl RollupMetadata { /// The address of the smart rollup. #[cfg(feature = "crypto")] pub fn address(&self) -> SmartRollupHash { - SmartRollupHash(self.raw_rollup_address.to_vec()) + use tezos_crypto_rs::hash::HashTrait; + SmartRollupHash::try_from_bytes(&self.raw_rollup_address).unwrap() } } diff --git a/src/kernel_sdk/installer-client/Cargo.toml b/src/kernel_sdk/installer-client/Cargo.toml index 5e690360c59d..494dc9ecfbcb 100644 --- a/src/kernel_sdk/installer-client/Cargo.toml +++ b/src/kernel_sdk/installer-client/Cargo.toml @@ -41,7 +41,7 @@ path = "../installer-config" version = "0.2.2" [dependencies.tezos_data_encoding] -version = "=0.5.2" +workspace = true [dependencies.tezos-smart-rollup-host] path = "../host" diff --git a/src/kernel_sdk/installer-config/Cargo.toml b/src/kernel_sdk/installer-config/Cargo.toml index 7b19d31595d2..40dd86efe0c4 100644 --- a/src/kernel_sdk/installer-config/Cargo.toml +++ b/src/kernel_sdk/installer-config/Cargo.toml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 TriliTech +# SPDX-FileCopyrightText: 2023-2024 TriliTech # # SPDX-License-Identifier: MIT @@ -12,10 +12,10 @@ repository = "https://gitlab.com/tezos/tezos.git" description = "Installer configuration for installer kernel of Tezos Smart Rollups." keywords = ["tezos", "smart", "rollup", "installer", "config"] categories = [ - "development-tools", - "parser-implementations", - "config", - "no-std::no-alloc", + "development-tools", + "parser-implementations", + "config", + "no-std::no-alloc", ] [dependencies.tezos-smart-rollup-host] @@ -38,7 +38,7 @@ version = "7.1" default-features = false [dependencies.tezos_data_encoding] -version = "=0.5.2" +workspace = true optional = true [dependencies.serde] @@ -55,8 +55,7 @@ version = "0.4.3" optional = true [dependencies.tezos_crypto_rs] -version = "=0.5.2" -default-features = false +workspace = true optional = true [dependencies.thiserror] @@ -71,14 +70,14 @@ version = "0.2.2" default = ["std"] std = ["alloc"] alloc = [ - "tezos_data_encoding", - "tezos-smart-rollup-host/alloc", - "tezos-smart-rollup-encoding/alloc", - "tezos-smart-rollup-encoding/tezos-encoding", - "serde", - "serde_yaml", - "hex", - "tezos_crypto_rs", - "thiserror", + "dep:tezos_data_encoding", + "tezos-smart-rollup-host/alloc", + "tezos-smart-rollup-encoding/alloc", + "tezos-smart-rollup-encoding/tezos-encoding", + "serde", + "serde_yaml", + "hex", + "dep:tezos_crypto_rs", + "thiserror", ] testing = [] diff --git a/src/kernel_sdk/mock/Cargo.toml b/src/kernel_sdk/mock/Cargo.toml index 1353e8f984a9..9ffeaffc5407 100644 --- a/src/kernel_sdk/mock/Cargo.toml +++ b/src/kernel_sdk/mock/Cargo.toml @@ -15,8 +15,8 @@ categories = ["development-tools", "development-tools::testing"] [dependencies] hex = "0.4" -tezos_crypto_rs = { version = "=0.5.2", default-features = false } -tezos_data_encoding = "=0.5.2" +tezos_crypto_rs.workspace = true +tezos_data_encoding.workspace = true [dependencies.tezos-smart-rollup-encoding] path = "../encoding" @@ -38,4 +38,7 @@ version = "0.2.2" features = ["default"] [features] -proto-alpha = ["tezos-smart-rollup-core/proto-alpha", "tezos-smart-rollup-host/proto-alpha"] +proto-alpha = [ + "tezos-smart-rollup-core/proto-alpha", + "tezos-smart-rollup-host/proto-alpha", +] diff --git a/src/kernel_sdk/mock/src/lib.rs b/src/kernel_sdk/mock/src/lib.rs index 25ba93094596..3278f961ebef 100644 --- a/src/kernel_sdk/mock/src/lib.rs +++ b/src/kernel_sdk/mock/src/lib.rs @@ -12,6 +12,7 @@ mod state; extern crate tezos_crypto_rs as crypto; use crypto::hash::ContractKt1Hash; +use crypto::hash::HashTrait; use crypto::hash::HashType; use crypto::hash::SmartRollupHash; use tezos_data_encoding::enc::BinWriter; @@ -67,11 +68,10 @@ impl fmt::Debug for MockHost { impl Default for MockHost { fn default() -> Self { - let address = SmartRollupAddress::new(SmartRollupHash(vec![ - 0; - HashType::SmartRollupHash - .size() - ])); + let address = SmartRollupAddress::new( + SmartRollupHash::try_from_bytes(&[0; HashType::SmartRollupHash.size()]) + .unwrap(), + ); Self::with_address(&address) } @@ -112,8 +112,7 @@ impl MockHost { pub fn with_address(address: &SmartRollupAddress) -> Self { let raw_rollup_address = address .hash() - .0 - .as_slice() + .as_ref() .try_into() .expect("Incorrect length for SmartRollupHash"); @@ -315,10 +314,10 @@ fn info_for_level(level: i32) -> inbox::InfoPerLevel { * NAIROBI_BLOCK_TIME + NAIROBI_ACTIVATION_TIMESTAMP; - let hash = crypto::blake2b::digest_256(×tamp.to_le_bytes()).unwrap(); + let hash = crypto::blake2b::digest_256(×tamp.to_le_bytes()); inbox::InfoPerLevel { - predecessor: crypto::hash::BlockHash(hash), + predecessor: crypto::hash::BlockHash::try_from_bytes(&hash).unwrap(), predecessor_timestamp: Timestamp::from(timestamp), } } diff --git a/src/kernel_sdk/mock/src/state/mod.rs b/src/kernel_sdk/mock/src/state/mod.rs index e46d928dc77c..cc3aae2244fc 100644 --- a/src/kernel_sdk/mock/src/state/mod.rs +++ b/src/kernel_sdk/mock/src/state/mod.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // SPDX-FileCopyrightText: 2023 Marigold // SPDX-FileCopyrightText: 2022-2023 Nomadic Labs // @@ -44,7 +44,7 @@ impl Default for HostState { let raw_rollup_address: [u8; 20] = SmartRollupHash::from_base58_check("sr1V6huFSUBUujzubUCg9nNXqpzfG9t4XD1h") .unwrap() - .0 + .as_ref() .try_into() .unwrap(); diff --git a/src/kernel_sdk/mock/tests/dac.rs b/src/kernel_sdk/mock/tests/dac.rs index 3421546b66ed..7cd27a599028 100644 --- a/src/kernel_sdk/mock/tests/dac.rs +++ b/src/kernel_sdk/mock/tests/dac.rs @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2023-2024 TriliTech +// +// SPDX-License-Identifier: MIT + //! Test of reveal preimage mechanism from [encoding::dac]. use tezos_crypto_rs::hash::BlsSignature; @@ -9,6 +13,10 @@ use tezos_smart_rollup_host::runtime::Runtime; const MAX_DAC_ONE_SHOT_SIZE: usize = 10063860; +fn dummy_bls_sig() -> BlsSignature { + BlsSignature::from_base58_check("BLsig9WknWnGmPcJw1q9oCBr53UyjAWxxYNS5wz5HBKmCcuxCfK1Hwhs92YDFocvxUhXfUosgcTuzAEuAAjKzjy7isNhU3o2e8snmZyo9E85oRudCpM1MNtkeAAYEkSXUPLKtRYa9yFwni").unwrap() +} + #[test] fn certificate_reveal_to_store_small() { let data = vec![7]; @@ -23,7 +31,7 @@ fn certificate_reveal_to_store_small() { let cert = Certificate::V0(V0Certificate { root_hash, - aggregated_signature: BlsSignature(Vec::new()), + aggregated_signature: dummy_bls_sig(), witnesses: tezos_data_encoding::types::Zarith(0.into()), }); @@ -53,7 +61,7 @@ fn certificate_reveal_to_store_med() { let cert = Certificate::V0(V0Certificate { root_hash, - aggregated_signature: BlsSignature(Vec::new()), + aggregated_signature: dummy_bls_sig(), witnesses: tezos_data_encoding::types::Zarith(0.into()), }); @@ -82,7 +90,7 @@ fn certificate_reveal_to_store_max() { let cert = Certificate::V0(V0Certificate { root_hash, - aggregated_signature: BlsSignature(Vec::new()), + aggregated_signature: dummy_bls_sig(), witnesses: tezos_data_encoding::types::Zarith(0.into()), }); @@ -106,7 +114,7 @@ fn certificate_reveal_to_store_too_large() { let cert = Certificate::V0(V0Certificate { root_hash, - aggregated_signature: BlsSignature(Vec::new()), + aggregated_signature: dummy_bls_sig(), witnesses: tezos_data_encoding::types::Zarith(0.into()), }); diff --git a/src/kernel_sdk/panic-hook/Cargo.toml b/src/kernel_sdk/panic-hook/Cargo.toml index 1b3bd57a6641..b516a6f5275c 100644 --- a/src/kernel_sdk/panic-hook/Cargo.toml +++ b/src/kernel_sdk/panic-hook/Cargo.toml @@ -23,4 +23,4 @@ default = ["abort", "debug", "std"] abort = ["std"] debug = [] std = [] -proto-alpha=["tezos-smart-rollup-core/proto-alpha"] +proto-alpha = ["tezos-smart-rollup-core/proto-alpha"] diff --git a/src/kernel_sdk/sdk/Cargo.toml b/src/kernel_sdk/sdk/Cargo.toml index e7937c5d9a1c..0a48c76d8966 100644 --- a/src/kernel_sdk/sdk/Cargo.toml +++ b/src/kernel_sdk/sdk/Cargo.toml @@ -64,12 +64,11 @@ version = "0.2.2" optional = true [dependencies.tezos_crypto_rs] -version = "=0.5.2" -default-features = false +workspace = true optional = true [dependencies.tezos_data_encoding] -version = "=0.5.2" +workspace = true optional = true [dependencies.serde_json] @@ -95,29 +94,29 @@ default = [ "bls", "testing", ] -crypto = ["tezos_crypto_rs"] +crypto = ["dep:tezos_crypto_rs"] bls = ["tezos-smart-rollup-encoding/bls"] debug_alloc = ["tezos-smart-rollup-debug/alloc"] alloc = ["tezos-smart-rollup-entrypoint/alloc"] dlmalloc = ["tezos-smart-rollup-entrypoint/dlmalloc"] panic-hook = ["tezos-smart-rollup-entrypoint/default"] data-encoding = [ - "tezos_data_encoding", - "tezos-smart-rollup-encoding/alloc", - "tezos-smart-rollup-encoding/tezos-encoding", - "tezos-smart-rollup-encoding/crypto", + "tezos_data_encoding", + "tezos-smart-rollup-encoding/alloc", + "tezos-smart-rollup-encoding/tezos-encoding", + "tezos-smart-rollup-encoding/crypto", ] storage = ["tezos-smart-rollup-storage"] std = ["alloc", "debug_alloc", "tezos-smart-rollup-entrypoint/std"] testing = ["crypto", "tezos-smart-rollup-mock"] proto-alpha = [ - "tezos-smart-rollup-core/proto-alpha", - "tezos-smart-rollup-host/proto-alpha", - "tezos-smart-rollup-mock/proto-alpha", + "tezos-smart-rollup-core/proto-alpha", + "tezos-smart-rollup-host/proto-alpha", + "tezos-smart-rollup-mock/proto-alpha", ] experimental-host-in-memory-store = [ - "tezos-smart-rollup-entrypoint/proto-alpha", - "tezos-smart-rollup-entrypoint/experimental-host-in-memory-store", + "tezos-smart-rollup-entrypoint/proto-alpha", + "tezos-smart-rollup-entrypoint/experimental-host-in-memory-store", ] extra = ["alloc", "std", "utils", "dep:serde_json"] utils = ["dep:tezos-smart-rollup-utils"] diff --git a/src/kernel_sdk/utils/Cargo.toml b/src/kernel_sdk/utils/Cargo.toml index c8badf369b77..d15c26e1cf06 100644 --- a/src/kernel_sdk/utils/Cargo.toml +++ b/src/kernel_sdk/utils/Cargo.toml @@ -16,6 +16,10 @@ categories = ["development-tools"] [features] default = [] +[dependencies] +tezos_crypto_rs.workspace = true +tezos_data_encoding.workspace = true + [dependencies.tezos-smart-rollup-encoding] path = "../encoding" version = "0.2.2" @@ -26,14 +30,6 @@ features = ["alloc", "tezos-encoding"] path = "../mock" version = "0.2.2" -[dependencies.tezos_crypto_rs] -version = "=0.5.2" -default-features = false - -[dependencies.tezos_data_encoding] -version = "=0.5.2" -default-features = false - [dependencies.hex] version = "0.4" features = ["serde"] -- GitLab From 98b101d4fa617f3b4781f8affc51a8497a0e6308 Mon Sep 17 00:00:00 2001 From: Emma Turner Date: Fri, 28 Jun 2024 14:31:47 +0100 Subject: [PATCH 2/5] Riscv/sandbox: bump crypto/encoding to 0.6.0 --- src/riscv/Cargo.lock | 38 ++++++++-------- src/riscv/Cargo.toml | 2 +- src/riscv/lib/src/pvm/dummy_pvm.rs | 2 +- src/riscv/lib/src/pvm/sbi.rs | 3 +- src/riscv/lib/src/storage.rs | 3 +- src/riscv/sandbox/src/commands/debug.rs | 2 +- src/riscv/sandbox/src/commands/run.rs | 2 +- src/rust_deps/Cargo.lock | 58 +++++++++++-------------- 8 files changed, 52 insertions(+), 58 deletions(-) diff --git a/src/riscv/Cargo.lock b/src/riscv/Cargo.lock index 67a63055b74e..664e506d495e 100644 --- a/src/riscv/Cargo.lock +++ b/src/riscv/Cargo.lock @@ -126,12 +126,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - [[package]] name = "base64" version = "0.13.1" @@ -229,6 +223,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bstr" version = "0.2.17" @@ -1161,11 +1164,10 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.3.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", "serde", @@ -2263,7 +2265,6 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", - "tezos_data_encoding_derive", "thiserror", "time", ] @@ -2347,18 +2348,19 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" +checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" dependencies = [ "anyhow", - "base58", "blst", + "bs58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", + "nom", "num-bigint", "num-traits", "p256", @@ -2366,15 +2368,16 @@ dependencies = [ "serde", "strum 0.20.0", "strum_macros 0.20.1", + "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" +checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" dependencies = [ "bit-vec", "bitvec", @@ -2384,16 +2387,15 @@ dependencies = [ "num-bigint", "num-traits", "serde", - "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" +checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" dependencies = [ "lazy_static", "once_cell", diff --git a/src/riscv/Cargo.toml b/src/riscv/Cargo.toml index 6aefa0cc6d28..d100fccf29fe 100644 --- a/src/riscv/Cargo.toml +++ b/src/riscv/Cargo.toml @@ -40,7 +40,7 @@ path = "../kernel_sdk/sdk" features = ["utils"] [workspace.dependencies.tezos_crypto_rs] -version = "0.5.2" +version = "0.6.0" default-features = false [workspace.dependencies.strum] diff --git a/src/riscv/lib/src/pvm/dummy_pvm.rs b/src/riscv/lib/src/pvm/dummy_pvm.rs index 6cf2b7e499f7..3d2cd461ed1c 100644 --- a/src/riscv/lib/src/pvm/dummy_pvm.rs +++ b/src/riscv/lib/src/pvm/dummy_pvm.rs @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2024 Nomadic Labs +// SPDX-FileCopyrightText: 2024 Trilitech // // SPDX-License-Identifier: MIT @@ -153,7 +154,6 @@ impl DummyPvm { pub fn hash(&self) -> Hash { tezos_crypto_rs::blake2b::digest_256(self.to_bytes()) - .unwrap() .try_into() .unwrap() } diff --git a/src/riscv/lib/src/pvm/sbi.rs b/src/riscv/lib/src/pvm/sbi.rs index aeec9f9ebcdd..2e4855cefd06 100644 --- a/src/riscv/lib/src/pvm/sbi.rs +++ b/src/riscv/lib/src/pvm/sbi.rs @@ -279,8 +279,7 @@ where let mut msg_bytes = vec![0u8; arg_msg_len as usize]; machine.bus.read_all(msg_addr, &mut msg_bytes)?; - let hash = - tezos_crypto_rs::blake2b::digest_256(msg_bytes.as_slice()).map_err(|_| SbiError::Failed)?; + let hash = tezos_crypto_rs::blake2b::digest_256(msg_bytes.as_slice()); machine.bus.write_all(out_addr, hash.as_slice())?; Ok(hash.len() as u64) diff --git a/src/riscv/lib/src/storage.rs b/src/riscv/lib/src/storage.rs index 1944872b2d31..d0575e32df9e 100644 --- a/src/riscv/lib/src/storage.rs +++ b/src/riscv/lib/src/storage.rs @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2024 Nomadic Labs +// SPDX-FileCopyrightText: 2024 Trilitech // // SPDX-License-Identifier: MIT @@ -82,7 +83,7 @@ impl Store { pub fn store(&self, data: &[u8]) -> Result { // This is safe to unwrap because `digest_256` always returns // a `DIGEST_SIZE`-long `Vec`. - let hash: Hash = tezos_crypto_rs::blake2b::digest_256(data)? + let hash: Hash = tezos_crypto_rs::blake2b::digest_256(data) .try_into() .unwrap(); let file_name = self.path_of_hash(&hash); diff --git a/src/riscv/sandbox/src/commands/debug.rs b/src/riscv/sandbox/src/commands/debug.rs index b1ff9426c3ea..41f9dafbdc58 100644 --- a/src/riscv/sandbox/src/commands/debug.rs +++ b/src/riscv/sandbox/src/commands/debug.rs @@ -68,7 +68,7 @@ fn debug_pvm( program, initrd, inbox.build(), - rollup_address.into_hash().0.try_into().unwrap(), + rollup_address.into_hash().as_ref().try_into().unwrap(), opts.common.inbox.origination_level, )?, ) diff --git a/src/riscv/sandbox/src/commands/run.rs b/src/riscv/sandbox/src/commands/run.rs index 5ebfb9cefecf..6874a8d674bd 100644 --- a/src/riscv/sandbox/src/commands/run.rs +++ b/src/riscv/sandbox/src/commands/run.rs @@ -65,7 +65,7 @@ fn run_pvm(program: &[u8], initrd: Option<&[u8]>, opts: &RunOptions) -> Result<( initrd, inbox.build(), hooks, - rollup_address.into_hash().0.try_into().unwrap(), + rollup_address.into_hash().as_ref().try_into().unwrap(), opts.common.inbox.origination_level, )?; diff --git a/src/rust_deps/Cargo.lock b/src/rust_deps/Cargo.lock index 43e4f96b3c83..53dadb87a853 100644 --- a/src/rust_deps/Cargo.lock +++ b/src/rust_deps/Cargo.lock @@ -181,12 +181,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - [[package]] name = "base64" version = "0.13.1" @@ -368,6 +362,15 @@ dependencies = [ "sha2 0.9.9", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bumpalo" version = "3.16.0" @@ -1245,7 +1248,7 @@ dependencies = [ "block-modes", "cipher", "libm", - "num-bigint 0.4.4", + "num-bigint", "num-integer", "num-traits", ] @@ -2057,18 +2060,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", - "serde", -] - [[package]] name = "num-bigint" version = "0.4.4" @@ -2078,6 +2069,7 @@ dependencies = [ "autocfg", "num-integer", "num-traits", + "serde", ] [[package]] @@ -3413,7 +3405,7 @@ version = "0.2.2" dependencies = [ "hex", "nom 7.1.3", - "num-bigint 0.3.3", + "num-bigint", "num-traits", "paste", "regex", @@ -3421,7 +3413,6 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", - "tezos_data_encoding_derive", "thiserror", "time", ] @@ -3465,52 +3456,53 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" +checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" dependencies = [ "anyhow", - "base58", + "bs58 0.5.1", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "num-bigint 0.3.3", + "nom 7.1.3", + "num-bigint", "num-traits", "p256", "rand 0.7.3", "serde", "strum 0.20.0", "strum_macros 0.20.1", + "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" +checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" dependencies = [ "bit-vec", "bitvec", "hex", "lazy_static", "nom 7.1.3", - "num-bigint 0.3.3", + "num-bigint", "num-traits", "serde", - "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" +checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" dependencies = [ "lazy_static", "once_cell", @@ -4389,7 +4381,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1322a31b757f0087f110cc4a85dc5c6ccf83d0533bac04c4d3d1ce9112cc602" dependencies = [ "bech32", - "bs58", + "bs58 0.4.0", "f4jumble", "zcash_encoding", ] @@ -4439,7 +4431,7 @@ dependencies = [ "blake2b_simd 1.0.2", "blake2s_simd", "bls12_381", - "bs58", + "bs58 0.4.0", "byteorder", "chacha20poly1305", "equihash", -- GitLab From daef38c68b61d50f2813d00c36a26a6106dd24a5 Mon Sep 17 00:00:00 2001 From: Emma Turner Date: Fri, 28 Jun 2024 14:31:47 +0100 Subject: [PATCH 3/5] Kernel/EVM: bump crypto/encoding to 0.6.0 --- etherlink/kernel_evm/Cargo.lock | 62 ++++++++----------- etherlink/kernel_evm/Cargo.toml | 19 ++++-- .../evm_execution/src/fa_bridge/test_utils.rs | 5 +- .../kernel_evm/evm_execution/src/storage.rs | 4 +- .../kernel/src/blueprint_storage.rs | 7 ++- etherlink/kernel_evm/kernel/src/inbox.rs | 7 ++- etherlink/kernel_evm/kernel/src/parsing.rs | 6 +- .../kernel/src/sequencer_blueprint.rs | 12 ++-- 8 files changed, 64 insertions(+), 58 deletions(-) diff --git a/etherlink/kernel_evm/Cargo.lock b/etherlink/kernel_evm/Cargo.lock index 8ef17ce30050..f39c87548fd7 100644 --- a/etherlink/kernel_evm/Cargo.lock +++ b/etherlink/kernel_evm/Cargo.lock @@ -182,12 +182,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - [[package]] name = "base64" version = "0.13.1" @@ -270,6 +264,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "byte-slice-cast" version = "1.2.2" @@ -557,9 +560,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -713,7 +716,7 @@ dependencies = [ "evm", "hex", "libsecp256k1", - "num-bigint 0.3.3", + "num-bigint", "num-traits", "pretty_assertions", "primitive-types", @@ -1276,7 +1279,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ - "num-bigint 0.4.4", + "num-bigint", "num-complex", "num-integer", "num-iter", @@ -1284,18 +1287,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", - "serde", -] - [[package]] name = "num-bigint" version = "0.4.4" @@ -1305,6 +1296,7 @@ dependencies = [ "autocfg", "num-integer", "num-traits", + "serde", ] [[package]] @@ -1355,7 +1347,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", - "num-bigint 0.4.4", + "num-bigint", "num-integer", "num-traits", ] @@ -2256,7 +2248,7 @@ version = "0.2.2" dependencies = [ "hex", "nom", - "num-bigint 0.3.3", + "num-bigint", "num-traits", "paste", "regex", @@ -2264,7 +2256,6 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", - "tezos_data_encoding_derive", "thiserror", "time", ] @@ -2349,53 +2340,54 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" +checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" dependencies = [ "anyhow", - "base58", "blst", + "bs58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "num-bigint 0.3.3", + "nom", + "num-bigint", "num-traits", "p256", "rand 0.7.3", "serde", "strum", "strum_macros", + "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" +checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" dependencies = [ "bit-vec", "bitvec", "hex", "lazy_static", "nom", - "num-bigint 0.3.3", + "num-bigint", "num-traits", "serde", - "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" +checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" dependencies = [ "lazy_static", "once_cell", diff --git a/etherlink/kernel_evm/Cargo.toml b/etherlink/kernel_evm/Cargo.toml index 4d2aa6ac45cb..d6e66f3d50b7 100644 --- a/etherlink/kernel_evm/Cargo.toml +++ b/etherlink/kernel_evm/Cargo.toml @@ -8,7 +8,14 @@ [workspace] -members = ["ethereum", "kernel", "evm_execution", "evm_evaluation", "indexable_storage", "logging"] +members = [ + "ethereum", + "kernel", + "evm_execution", + "evm_evaluation", + "indexable_storage", + "logging", +] [workspace.dependencies] @@ -18,7 +25,7 @@ anyhow = "1.0" # types primitive-types = { version = "0.12.1", default-features = false } -num-bigint = "0.3" +num-bigint = "0.4" num-traits = "0.2.8" num-derive = "0.3" ethereum = { version = "0.14.0", default-features = false } @@ -29,7 +36,7 @@ bytes = "^1" # serialization hex = "0.4" hex-literal = "0.4.1" -tezos_data_encoding = "0.5.2" +tezos_data_encoding = "0.6" const-decoder = { version = "0.3.0" } rlp = "0.5.2" @@ -42,7 +49,7 @@ bn = { package = "substrate-bn", version = "0.6", default-features = false } sha2 = { version = "0.10.6", default-features = false } sha3 = { version = "0.10.6", default-features = false } ripemd = { version = "0.1.3", default-features = false } -tezos_crypto_rs = { version = "0.5.2", default-features = false } +tezos_crypto_rs = { version = "0.6", default-features = false } libsecp256k1 = { version = "0.7", default-features = false, features = [ "static-context", "hmac", @@ -76,5 +83,7 @@ proptest = { version = "1.0" } pretty_assertions = { version = "1.4.0" } # alloy -alloy-sol-types = { version = "0.7.6", default-features = false, features = ["json"]} +alloy-sol-types = { version = "0.7.6", default-features = false, features = [ + "json", +] } alloy-primitives = { version = "0.7.6", default-features = false } diff --git a/etherlink/kernel_evm/evm_execution/src/fa_bridge/test_utils.rs b/etherlink/kernel_evm/evm_execution/src/fa_bridge/test_utils.rs index c4041418186a..3cf044c4e2cf 100644 --- a/etherlink/kernel_evm/evm_execution/src/fa_bridge/test_utils.rs +++ b/etherlink/kernel_evm/evm_execution/src/fa_bridge/test_utils.rs @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2023 PK Lab +// SPDX-FileCopyrightText: 2024 Trilitech // // SPDX-License-Identifier: MIT @@ -226,7 +227,9 @@ pub fn set_balance( /// Create ticket with dummy creator and content pub fn dummy_ticket() -> FA2_1Ticket { - let ticketer = ContractKt1Hash([1u8; 20].to_vec()); + use tezos_crypto_rs::hash::HashTrait; + + let ticketer = ContractKt1Hash::try_from_bytes(&[1u8; 20]).unwrap(); FA2_1Ticket::new( Contract::from_b58check(&ticketer.to_base58_check()).unwrap(), MichelsonPair(0.into(), MichelsonOption(None)), diff --git a/etherlink/kernel_evm/evm_execution/src/storage.rs b/etherlink/kernel_evm/evm_execution/src/storage.rs index b9f1968c8cd2..047c139d60ee 100644 --- a/etherlink/kernel_evm/evm_execution/src/storage.rs +++ b/etherlink/kernel_evm/evm_execution/src/storage.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 TriliTech +// SPDX-FileCopyrightText: 2022,2024 TriliTech // SPDX-FileCopyrightText: 2024 Functori // // SPDX-License-Identifier: MIT @@ -204,7 +204,7 @@ pub mod blocks { .enumerate() .for_each(|(i, hash)| { let keccak_hash = - H256::from_slice(Keccak256::digest(hash.0).as_slice()); + H256::from_slice(Keccak256::digest(hash.as_ref()).as_slice()); if i == DELETE_BLOCKS_N { last_kept_block_hash = Some(keccak_hash) } diff --git a/etherlink/kernel_evm/kernel/src/blueprint_storage.rs b/etherlink/kernel_evm/kernel/src/blueprint_storage.rs index d210ddc9cd04..edc1144f0ded 100644 --- a/etherlink/kernel_evm/kernel/src/blueprint_storage.rs +++ b/etherlink/kernel_evm/kernel/src/blueprint_storage.rs @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2023 Nomadic Labs +// SPDX-FileCopyrightText: 2024 TriliTech // // SPDX-License-Identifier: MIT @@ -485,7 +486,7 @@ mod tests { use crate::Timestamp; use primitive_types::H256; use tezos_crypto_rs::hash::ContractKt1Hash; - use tezos_crypto_rs::hash::Signature; + use tezos_crypto_rs::hash::UnknownSignature; use tezos_ethereum::transaction::TRANSACTION_HASH_SIZE; use tezos_smart_rollup_encoding::public_key::PublicKey; use tezos_smart_rollup_mock::MockHost; @@ -539,7 +540,7 @@ mod tests { }; let blueprint_with_hashes_bytes = rlp::Encodable::rlp_bytes(&blueprint_with_invalid_hash); - let signature = Signature::from_base58_check( + let signature = UnknownSignature::from_base58_check( "sigdGBG68q2vskMuac4AzyNb1xCJTfuU8MiMbQtmZLUCYydYrtTd5Lessn1EFLTDJzjXoYxRasZxXbx6tHnirbEJtikcMHt3" ).expect("signature decoding should work"); @@ -606,7 +607,7 @@ mod tests { }; let blueprint_with_hashes_bytes = rlp::Encodable::rlp_bytes(&blueprint_with_invalid_parent_hash); - let signature = Signature::from_base58_check( + let signature = UnknownSignature::from_base58_check( "sigdGBG68q2vskMuac4AzyNb1xCJTfuU8MiMbQtmZLUCYydYrtTd5Lessn1EFLTDJzjXoYxRasZxXbx6tHnirbEJtikcMHt3" ).expect("signature decoding should work"); diff --git a/etherlink/kernel_evm/kernel/src/inbox.rs b/etherlink/kernel_evm/kernel/src/inbox.rs index 46369c1155e0..80f1d17b2e67 100644 --- a/etherlink/kernel_evm/kernel/src/inbox.rs +++ b/etherlink/kernel_evm/kernel/src/inbox.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // SPDX-FileCopyrightText: 2023 Nomadic Labs // SPDX-FileCopyrightText: 2023 Functori // SPDX-FileCopyrightText: 2023 Marigold @@ -702,6 +702,7 @@ mod tests { use crate::inbox::TransactionContent::Ethereum; use crate::parsing::RollupType; use crate::storage::*; + use tezos_crypto_rs::hash::HashTrait; use tezos_crypto_rs::hash::SmartRollupHash; use tezos_data_encoding::types::Bytes; use tezos_ethereum::transaction::TRANSACTION_HASH_SIZE; @@ -721,7 +722,9 @@ mod tests { const ZERO_TX_HASH: TransactionHash = [0; TRANSACTION_HASH_SIZE]; fn smart_rollup_address() -> SmartRollupAddress { - SmartRollupAddress::new(SmartRollupHash(SMART_ROLLUP_ADDRESS.into())) + SmartRollupAddress::new( + SmartRollupHash::try_from_bytes(&SMART_ROLLUP_ADDRESS).unwrap(), + ) } fn input_to_bytes( diff --git a/etherlink/kernel_evm/kernel/src/parsing.rs b/etherlink/kernel_evm/kernel/src/parsing.rs index 246fd1b102b3..6823ad4ab3ff 100644 --- a/etherlink/kernel_evm/kernel/src/parsing.rs +++ b/etherlink/kernel_evm/kernel/src/parsing.rs @@ -307,12 +307,10 @@ impl SequencerInput { return InputResult::Unparsable; } let bytes = unsigned_seq_blueprint.rlp_bytes().to_vec(); - // The sequencer signs the hash of the blueprint. - let msg = tezos_crypto_rs::blake2b::digest_256(&bytes).unwrap(); let correctly_signed = context .sequencer - .verify_signature(&seq_blueprint.signature, &msg) + .verify_signature(&seq_blueprint.signature.clone().into(), &bytes) .unwrap_or(false); if correctly_signed { @@ -504,7 +502,7 @@ impl InputResult { inbox_msg_id: u32, enable_fa_deposits: bool, ) -> Self { - if transfer.destination.hash().0 != smart_rollup_address { + if transfer.destination.hash().as_ref() != smart_rollup_address { log!( host, Info, diff --git a/etherlink/kernel_evm/kernel/src/sequencer_blueprint.rs b/etherlink/kernel_evm/kernel/src/sequencer_blueprint.rs index c06a39810d02..3017f706e014 100644 --- a/etherlink/kernel_evm/kernel/src/sequencer_blueprint.rs +++ b/etherlink/kernel_evm/kernel/src/sequencer_blueprint.rs @@ -5,7 +5,7 @@ use primitive_types::{H256, U256}; use rlp::{Decodable, DecoderError, Encodable}; -use tezos_crypto_rs::hash::Signature; +use tezos_crypto_rs::hash::UnknownSignature; use tezos_ethereum::rlp_helpers::{ self, append_timestamp, append_u16_le, append_u256_le, decode_field_u16_le, decode_field_u256_le, decode_timestamp, @@ -78,7 +78,7 @@ pub struct UnsignedSequencerBlueprint { #[derive(PartialEq, Debug, Clone)] pub struct SequencerBlueprint { pub blueprint: UnsignedSequencerBlueprint, - pub signature: Signature, + pub signature: UnknownSignature, } impl From<&SequencerBlueprint> for UnsignedSequencerBlueprint { @@ -104,7 +104,7 @@ impl Encodable for SequencerBlueprint { append_u256_le(stream, &self.blueprint.number); append_u16_le(stream, &self.blueprint.nb_chunks); append_u16_le(stream, &self.blueprint.chunk_index); - stream.append(&self.signature.0); + stream.append(&self.signature.as_ref()); } } @@ -124,7 +124,7 @@ impl Decodable for SequencerBlueprint { decode_field_u16_le(&rlp_helpers::next(&mut it)?, "chunk_index")?; let bytes: Vec = rlp_helpers::decode_field(&rlp_helpers::next(&mut it)?, "signature")?; - let signature = Signature::try_from(bytes.as_slice()) + let signature = UnknownSignature::try_from(bytes.as_slice()) .map_err(|_| DecoderError::Custom("Invalid signature encoding"))?; let blueprint = UnsignedSequencerBlueprint { chunk, @@ -147,7 +147,7 @@ mod tests { use crate::inbox::TransactionContent::Ethereum; use primitive_types::{H160, U256}; use rlp::Encodable; - use tezos_crypto_rs::hash::Signature; + use tezos_crypto_rs::hash::UnknownSignature; use tezos_ethereum::rlp_helpers::FromRlpBytes; use tezos_ethereum::{ transaction::TRANSACTION_HASH_SIZE, tx_common::EthereumTransactionCommon, @@ -197,7 +197,7 @@ mod tests { transactions, }; let chunk = rlp::Encodable::rlp_bytes(&blueprint); - let signature = Signature::from_base58_check( + let signature = UnknownSignature::from_base58_check( "sigdGBG68q2vskMuac4AzyNb1xCJTfuU8MiMbQtmZLUCYydYrtTd5Lessn1EFLTDJzjXoYxRasZxXbx6tHnirbEJtikcMHt3" ).expect("signature decoding should work"); -- GitLab From e21dc730a167eca3ec6bcb442adc3877d5a421fe Mon Sep 17 00:00:00 2001 From: Emma Turner Date: Fri, 28 Jun 2024 14:31:47 +0100 Subject: [PATCH 4/5] Kernel/Examples: bump crypto/encoding to 0.6.0 --- src/kernel_dal_echo/Cargo.lock | 101 +++++++++--------- src/kernel_dal_echo/Cargo.toml | 27 +++-- src/kernel_tx_demo/Cargo.lock | 39 +++---- src/kernel_tx_demo/Cargo.toml | 5 +- src/kernel_tx_demo/kernel/Cargo.toml | 28 ++--- .../kernel/src/inbox/external/mod.rs | 9 +- .../kernel/src/inbox/external/testing.rs | 13 +-- .../kernel/src/inbox/external/v1.rs | 10 +- .../kernel/src/inbox/external/v1/sendable.rs | 10 +- .../kernel/src/inbox/external/v1/testing.rs | 14 ++- .../src/inbox/external/v1/verifiable.rs | 25 ++--- src/kernel_tx_demo/kernel/src/lib.rs | 8 +- src/kernel_tx_demo/kernel/src/storage.rs | 7 +- .../kernel/src/transactions/external_inbox.rs | 5 +- src/riscv/dummy_kernel/Cargo.lock | 37 ++++--- src/riscv/dummy_kernel/Cargo.toml | 2 +- src/riscv/dummy_kernel/src/main.rs | 2 +- 17 files changed, 176 insertions(+), 166 deletions(-) diff --git a/src/kernel_dal_echo/Cargo.lock b/src/kernel_dal_echo/Cargo.lock index b19f6652dc60..3301f126832c 100644 --- a/src/kernel_dal_echo/Cargo.lock +++ b/src/kernel_dal_echo/Cargo.lock @@ -35,12 +35,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - [[package]] name = "base64" version = "0.13.1" @@ -114,6 +108,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "byteorder" version = "1.5.0" @@ -484,9 +487,6 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -dependencies = [ - "serde", -] [[package]] name = "hmac" @@ -761,9 +761,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.3.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -1085,12 +1085,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - [[package]] name = "sct" version = "0.7.1" @@ -1127,17 +1121,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "serde_json" -version = "1.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" -dependencies = [ - "itoa", - "ryu", - "serde", -] - [[package]] name = "sha2" version = "0.9.9" @@ -1285,7 +1268,6 @@ version = "0.2.2" dependencies = [ "hermit", "hex", - "serde_json", "tezos-smart-rollup-core", "tezos-smart-rollup-debug", "tezos-smart-rollup-encoding", @@ -1294,7 +1276,6 @@ dependencies = [ "tezos-smart-rollup-macros", "tezos-smart-rollup-mock", "tezos-smart-rollup-storage", - "tezos-smart-rollup-utils", "tezos_crypto_rs", "tezos_data_encoding", ] @@ -1332,7 +1313,6 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", - "tezos_data_encoding_derive", "thiserror", "time", ] @@ -1399,32 +1379,21 @@ dependencies = [ "thiserror", ] -[[package]] -name = "tezos-smart-rollup-utils" -version = "0.2.2" -dependencies = [ - "hex", - "serde", - "serde_json", - "tezos-smart-rollup-encoding", - "tezos_crypto_rs", - "tezos_data_encoding", -] - [[package]] name = "tezos_crypto_rs" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" +checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" dependencies = [ "anyhow", - "base58", "blst", + "bs58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", + "nom", "num-bigint", "num-traits", "p256", @@ -1432,15 +1401,16 @@ dependencies = [ "serde", "strum", "strum_macros", + "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" +checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" dependencies = [ "bit-vec", "bitvec", @@ -1450,16 +1420,15 @@ dependencies = [ "num-bigint", "num-traits", "serde", - "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" +checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" dependencies = [ "lazy_static", "once_cell", @@ -1535,6 +1504,21 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinyvec" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "typenum" version = "1.17.0" @@ -1885,3 +1869,18 @@ dependencies = [ "quote", "syn 2.0.66", ] + +[[patch.unused]] +name = "tezos_crypto_rs" +version = "0.5.2" +source = "git+https://github.com/trilitech/tezedge.git?rev=0468da39f3133dbe6355fa8d443d3aeee10e3c0b#0468da39f3133dbe6355fa8d443d3aeee10e3c0b" + +[[patch.unused]] +name = "tezos_data_encoding" +version = "0.5.2" +source = "git+https://github.com/trilitech/tezedge.git?rev=0468da39f3133dbe6355fa8d443d3aeee10e3c0b#0468da39f3133dbe6355fa8d443d3aeee10e3c0b" + +[[patch.unused]] +name = "tezos_data_encoding_derive" +version = "0.5.2" +source = "git+https://github.com/trilitech/tezedge.git?rev=0468da39f3133dbe6355fa8d443d3aeee10e3c0b#0468da39f3133dbe6355fa8d443d3aeee10e3c0b" diff --git a/src/kernel_dal_echo/Cargo.toml b/src/kernel_dal_echo/Cargo.toml index d40e34f07263..2ba18bdef1df 100644 --- a/src/kernel_dal_echo/Cargo.toml +++ b/src/kernel_dal_echo/Cargo.toml @@ -5,16 +5,29 @@ [workspace] -members = [ - "kernel", -] +members = ["kernel"] [workspace.dependencies] tezos-smart-rollup = { path = "../kernel_sdk/sdk", features = ["proto-alpha"] } -tezos-smart-rollup-core = { path = "../kernel_sdk/core", features = ["proto-alpha"] } -tezos-smart-rollup-host = { path = "../kernel_sdk/host", features = ["proto-alpha"] } +tezos-smart-rollup-core = { path = "../kernel_sdk/core", features = [ + "proto-alpha", +] } +tezos-smart-rollup-host = { path = "../kernel_sdk/host", features = [ + "proto-alpha", +] } tezos-smart-rollup-debug = { path = "../kernel_sdk/debug" } tezos-smart-rollup-entrypoint = { path = "../kernel_sdk/entrypoint" } tezos-smart-rollup-storage = { path = "../kernel_sdk/storage" } -tezos-smart-rollup-encoding = { path = "../kernel_sdk/encoding", default-features = false, features = ["alloc", "tezos-encoding", "crypto"] } -tezos-smart-rollup-mock = { path = "../kernel_sdk/mock", features = ["proto-alpha"] } +tezos-smart-rollup-encoding = { path = "../kernel_sdk/encoding", default-features = false, features = [ + "alloc", + "tezos-encoding", + "crypto", +] } +tezos-smart-rollup-mock = { path = "../kernel_sdk/mock", features = [ + "proto-alpha", +] } + +[patch.crates-io] +tezos_crypto_rs = { git = "https://github.com/trilitech/tezedge.git", rev = "0468da39f3133dbe6355fa8d443d3aeee10e3c0b" } +tezos_data_encoding = { git = "https://github.com/trilitech/tezedge.git", rev = "0468da39f3133dbe6355fa8d443d3aeee10e3c0b" } +tezos_data_encoding_derive = { git = "https://github.com/trilitech/tezedge.git", rev = "0468da39f3133dbe6355fa8d443d3aeee10e3c0b" } diff --git a/src/kernel_tx_demo/Cargo.lock b/src/kernel_tx_demo/Cargo.lock index 50b89a43094c..bc8b9cca3fe9 100644 --- a/src/kernel_tx_demo/Cargo.lock +++ b/src/kernel_tx_demo/Cargo.lock @@ -120,12 +120,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - [[package]] name = "base64" version = "0.9.3" @@ -248,6 +242,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "byte-tools" version = "0.3.1" @@ -1467,14 +1470,14 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.3.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg 1.1.0", "num-integer", "num-traits", - "rand 0.7.3", + "rand 0.8.5", "serde", ] @@ -2491,7 +2494,6 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", - "tezos_data_encoding_derive", "thiserror", "time 0.3.23", ] @@ -2561,18 +2563,19 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" +checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" dependencies = [ "anyhow", - "base58", "blst", + "bs58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", + "nom", "num-bigint", "num-traits", "p256", @@ -2581,15 +2584,16 @@ dependencies = [ "serde", "strum", "strum_macros", + "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" +checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" dependencies = [ "bit-vec", "bitvec", @@ -2599,16 +2603,15 @@ dependencies = [ "num-bigint", "num-traits", "serde", - "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" +checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" dependencies = [ "lazy_static", "once_cell", diff --git a/src/kernel_tx_demo/Cargo.toml b/src/kernel_tx_demo/Cargo.toml index 9527ba8a6631..125c97fc1895 100644 --- a/src/kernel_tx_demo/Cargo.toml +++ b/src/kernel_tx_demo/Cargo.toml @@ -5,10 +5,7 @@ [workspace] -members = [ - "kernel", - "collector", -] +members = ["kernel", "collector"] [workspace.dependencies] tezos-smart-rollup = { path = "../kernel_sdk/sdk" } diff --git a/src/kernel_tx_demo/kernel/Cargo.toml b/src/kernel_tx_demo/kernel/Cargo.toml index bdb556469939..021f07b84657 100644 --- a/src/kernel_tx_demo/kernel/Cargo.toml +++ b/src/kernel_tx_demo/kernel/Cargo.toml @@ -15,11 +15,11 @@ crate-type = ["cdylib", "rlib"] nom = "7.1" thiserror = "1.0" hex = "0.4" -num-bigint = "0.3" +num-bigint = "0.4" num-traits = "0.2.8" -tezos_data_encoding = "0.5.2" -tezos_crypto_rs = { version = "0.5.2", default-features = false } +tezos_data_encoding = "0.6" +tezos_crypto_rs = { version = "0.6", default-features = false } # Adding these to 'dev_dependencies' causes the rand feature in crypto to be enabled # on wasm builds, when building the entire workspace. @@ -38,20 +38,20 @@ tezos-smart-rollup-mock.workspace = true [features] default = ["tx-kernel"] dal = [ - "tezos-smart-rollup/proto-alpha", - "tezos-smart-rollup-core/proto-alpha", - "tezos-smart-rollup-host/proto-alpha", - "tezos-smart-rollup-mock/proto-alpha", + "tezos-smart-rollup/proto-alpha", + "tezos-smart-rollup-core/proto-alpha", + "tezos-smart-rollup-host/proto-alpha", + "tezos-smart-rollup-mock/proto-alpha", ] debug = [] testing = [ - "rand", - "proptest", - "tezos-smart-rollup-core/testing", - "tezos-smart-rollup-host/testing", - "tezos-smart-rollup-entrypoint/testing", - "tezos-smart-rollup-encoding/testing", - "tezos_crypto_rs/std", + "rand", + "proptest", + "tezos-smart-rollup-core/testing", + "tezos-smart-rollup-host/testing", + "tezos-smart-rollup-entrypoint/testing", + "tezos-smart-rollup-encoding/testing", + "tezos_crypto_rs/std", ] tx-kernel = [] tx-kernel-no-sig-verif = ["tx-kernel"] diff --git a/src/kernel_tx_demo/kernel/src/inbox/external/mod.rs b/src/kernel_tx_demo/kernel/src/inbox/external/mod.rs index 95bfeb40a3cb..a97e249947ca 100644 --- a/src/kernel_tx_demo/kernel/src/inbox/external/mod.rs +++ b/src/kernel_tx_demo/kernel/src/inbox/external/mod.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // // SPDX-License-Identifier: MIT @@ -76,12 +76,12 @@ pub enum Signer { impl Signer { /// Return the tz1 account-address of the signer. - pub fn address(&self) -> Result { + pub fn address(&self) -> ContractTz1Hash { use crypto::PublicKeyWithHash; match self { Signer::PublicKey(pk) => pk.pk_hash(), - Signer::Tz1(address) => Ok(address.clone()), + Signer::Tz1(address) => address.clone(), } } } @@ -90,6 +90,7 @@ impl Signer { mod test { use super::*; use crypto::hash::BlsSignature; + use crypto::hash::HashTrait; use proptest::prelude::*; use tezos_data_encoding::enc::BinWriter; use tezos_data_encoding::nom::NomReader; @@ -136,7 +137,7 @@ mod test { let expected = V0Certificate { root_hash: PreimageHash::from(&root_hash), - aggregated_signature: BlsSignature(aggregated_signature.to_vec()), + aggregated_signature: BlsSignature::try_from_bytes(&aggregated_signature).unwrap(), witnesses: make_witnesses(witnesses as usize), }; let (_remaining, actual_message) = ParsedExternalInboxMessage::parse(&valid_bytes) diff --git a/src/kernel_tx_demo/kernel/src/inbox/external/testing.rs b/src/kernel_tx_demo/kernel/src/inbox/external/testing.rs index 82b12a826829..531797ae49f7 100644 --- a/src/kernel_tx_demo/kernel/src/inbox/external/testing.rs +++ b/src/kernel_tx_demo/kernel/src/inbox/external/testing.rs @@ -1,8 +1,9 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // // SPDX-License-Identifier: MIT //! Arbitrary generation of [Signer], linked to a [SecretKeyEd25519]. +use crypto::hash::HashTrait; use crypto::hash::HashType; use crypto::hash::PublicKeyEd25519; use crypto::hash::SecretKeyEd25519; @@ -17,10 +18,10 @@ impl Signer { pub fn arb() -> BoxedStrategy { (any::(), any::<[u8; HashType::SeedEd25519.size()]>()) .prop_map(|(is_address, seed)| { - let seed = SeedEd25519(seed.to_vec()); + let seed = SeedEd25519::try_from_bytes(&seed).unwrap(); let (pk, _sk) = seed.keypair().unwrap(); if is_address { - Signer::Tz1(pk.pk_hash().unwrap()) + Signer::Tz1(pk.pk_hash()) } else { Signer::PublicKey(pk) } @@ -32,10 +33,10 @@ impl Signer { pub fn arb_with_sk() -> BoxedStrategy<(Signer, SecretKeyEd25519)> { (any::(), any::<[u8; HashType::SeedEd25519.size()]>()) .prop_map(|(is_address, seed)| { - let seed = SeedEd25519(seed.to_vec()); + let seed = SeedEd25519::try_from_bytes(&seed).unwrap(); let (pk, sk) = seed.keypair().unwrap(); let signer = if is_address { - Signer::Tz1(pk.pk_hash().unwrap()) + Signer::Tz1(pk.pk_hash()) } else { Signer::PublicKey(pk) }; @@ -51,7 +52,7 @@ pub fn gen_ed25519_keys() -> (PublicKeyEd25519, SecretKeyEd25519) { let mut seed = [0; 32]; rand::thread_rng().fill_bytes(&mut seed); - let seed = tezos_crypto_rs::hash::SeedEd25519(seed.to_vec()); + let seed = tezos_crypto_rs::hash::SeedEd25519::try_from_bytes(&seed).unwrap(); seed.keypair().unwrap() } diff --git a/src/kernel_tx_demo/kernel/src/inbox/external/v1.rs b/src/kernel_tx_demo/kernel/src/inbox/external/v1.rs index 8978e6a8bfd2..9a655d139890 100644 --- a/src/kernel_tx_demo/kernel/src/inbox/external/v1.rs +++ b/src/kernel_tx_demo/kernel/src/inbox/external/v1.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // // SPDX-License-Identifier: MIT @@ -12,7 +12,6 @@ use self::verifiable::TransactionError; use super::Signer; -use crypto::hash::TryFromPKError; use crypto::hash::{ContractKt1Hash, ContractTz1Hash}; use crypto::CryptoError; use nom::combinator::map; @@ -91,7 +90,7 @@ impl HasEncoding for TicketAmount { } } -impl NomReader for TicketAmount { +impl NomReader<'_> for TicketAmount { fn nom_read(input: &[u8]) -> tezos_data_encoding::nom::NomResult { nom::combinator::map(nom::number::complete::le_u64, |amount| Self { amount })(input) } @@ -110,7 +109,7 @@ impl HasEncoding for TicketIndex { } } -impl NomReader for TicketIndex { +impl NomReader<'_> for TicketIndex { fn nom_read(input: &[u8]) -> tezos_data_encoding::nom::NomResult { nom::combinator::map(nom::number::complete::le_u64, |index| Self { index })(input) } @@ -200,9 +199,6 @@ pub enum ToBytesError { /// Bls signing/aggregation error #[error("Bls error in signatures {0}")] Bls(#[from] CryptoError), - /// Unable to convert pk to hash. - #[error("Failed to convert pk to hash: {0}")] - FromPk(#[from] TryFromPKError), /// Serialization error #[error("Unable to serialize operation: {0}")] Binary(#[from] BinError), diff --git a/src/kernel_tx_demo/kernel/src/inbox/external/v1/sendable.rs b/src/kernel_tx_demo/kernel/src/inbox/external/v1/sendable.rs index fd42eac0eb4a..760ec79b8647 100644 --- a/src/kernel_tx_demo/kernel/src/inbox/external/v1/sendable.rs +++ b/src/kernel_tx_demo/kernel/src/inbox/external/v1/sendable.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // // SPDX-License-Identifier: MIT @@ -6,7 +6,6 @@ use super::{Operation, ToBytesError}; use crypto::hash::SecretKeyEd25519; -use tezos_crypto_rs::blake2b::digest_256; use tezos_data_encoding::enc::{self, BinError, BinWriter}; use tezos_data_encoding::encoding::{Encoding, HasEncoding}; @@ -36,11 +35,8 @@ impl BinWriter for Batch { .map(|(op, sk)| { let mut bytes = Vec::new(); op.bin_write(&mut bytes)?; - // TODO: https://github.com/trilitech/tezedge/issues/44 - // Consider moving the hashing logic into `sk.sign`. - let hash = digest_256(&bytes)?; - let mut sig = sk.sign(hash.as_slice())?; - bytes.append(&mut sig.0); + let sig = sk.sign(bytes.as_slice())?; + bytes.extend_from_slice(sig.as_ref()); Ok(bytes) }) diff --git a/src/kernel_tx_demo/kernel/src/inbox/external/v1/testing.rs b/src/kernel_tx_demo/kernel/src/inbox/external/v1/testing.rs index 54eeca47f02f..a0d03ac858ef 100644 --- a/src/kernel_tx_demo/kernel/src/inbox/external/v1/testing.rs +++ b/src/kernel_tx_demo/kernel/src/inbox/external/v1/testing.rs @@ -4,6 +4,7 @@ //! Generation of arbitrary operations for testing. use crate::{fake_hash::arb_kt1, inbox::Signer}; +use crypto::hash::HashTrait; use tezos_smart_rollup_encoding::{entrypoint::Entrypoint, michelson::ticket::StringTicket}; use super::{Operation, OperationContent}; @@ -33,8 +34,12 @@ impl OperationContent { .prop_map(|(hash, ticket)| { let amount = ticket.amount_as().unwrap(); let ticket_hash = ticket.hash().unwrap(); - OperationContent::transfer(ContractTz1Hash(hash.to_vec()), ticket_hash, amount) - .unwrap() + OperationContent::transfer( + ContractTz1Hash::try_from_bytes(&hash).unwrap(), + ticket_hash, + amount, + ) + .unwrap() }) .boxed() } @@ -44,7 +49,8 @@ impl Operation { /// Generation strategy for operations. pub fn arb_with_signer() -> BoxedStrategy<(Operation, SecretKeyEd25519)> { ( - any::<[u8; HashType::SeedEd25519.size()]>().prop_map(|s| SeedEd25519(s.to_vec())), + any::<[u8; HashType::SeedEd25519.size()]>() + .prop_map(|s| SeedEd25519::try_from_bytes(&s).unwrap()), i64::arbitrary().prop_map(|i| if i < 0 { -(i + 1) } else { i }), // Mix of withdrawals & transfers bool::arbitrary().prop_flat_map(|transfer| { @@ -59,7 +65,7 @@ impl Operation { .prop_map(|(seed, counter, contents, signer_as_address)| { let (pk, sk) = seed.keypair().unwrap(); let signer = if signer_as_address { - Signer::Tz1(pk.pk_hash().unwrap()) + Signer::Tz1(pk.pk_hash()) } else { Signer::PublicKey(pk) }; diff --git a/src/kernel_tx_demo/kernel/src/inbox/external/v1/verifiable.rs b/src/kernel_tx_demo/kernel/src/inbox/external/v1/verifiable.rs index 16b83a35fe70..4dd3191a7538 100644 --- a/src/kernel_tx_demo/kernel/src/inbox/external/v1/verifiable.rs +++ b/src/kernel_tx_demo/kernel/src/inbox/external/v1/verifiable.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // // SPDX-License-Identifier: MIT @@ -11,15 +11,14 @@ use crate::storage::get_or_set_ticket_id; use crate::storage::Account; use crate::storage::{account_path, AccountStorage, AccountStorageError}; use crate::transactions::withdrawal::Withdrawal; -use crypto::hash::Signature; -use crypto::hash::{ContractTz1Hash, TryFromPKError}; +use crypto::hash::ContractTz1Hash; use crypto::CryptoError; use crypto::PublicKeySignatureVerifier; use nom::combinator::{consumed, map}; use nom::sequence::pair; use num_bigint::{BigInt, TryFromBigIntError}; -use tezos_crypto_rs::blake2b::digest_256; use tezos_crypto_rs::blake2b::Blake2bError; +use tezos_crypto_rs::hash::Ed25519Signature; use tezos_data_encoding::nom::NomReader; #[cfg(feature = "debug")] use tezos_smart_rollup_debug::debug_msg; @@ -40,9 +39,6 @@ pub enum TransactionError { /// The expected counter did not match the actual given. #[error("Account operation counter at {0}, transaction had {1}")] InvalidOperationCounter(i64, i64), - /// Unable to hash compressed public key. - #[error("Unable to convert compressed public key to Layer2 address {0}")] - AddressOfPublicKey(#[from] TryFromPKError), /// Invalid ticket amount #[error("ticket amount out of range of u64 {0}")] InvalidAmount(TryFromBigIntError), @@ -98,7 +94,7 @@ impl From> for TransactionError { pub struct VerifiableOperation<'a> { pub(crate) parsed: &'a [u8], pub(crate) operation: Operation, - pub(crate) signature: Signature, + pub(crate) signature: Ed25519Signature, } impl<'a> VerifiableOperation<'a> { @@ -121,10 +117,7 @@ impl<'a> VerifiableOperation<'a> { } }; - // TODO: https://github.com/trilitech/tezedge/issues/44 - // Consider moving the hashing logic into `verify_signature`. - let hash = digest_256(self.parsed)?; - pk.verify_signature(&self.signature, &hash)?; + pk.verify_signature(&self.signature, self.parsed)?; Ok(()) } @@ -137,7 +130,7 @@ impl<'a> VerifiableOperation<'a> { host: &mut Host, account_storage: &mut AccountStorage, ) -> Result, TransactionError> { - let signer_address = self.operation.signer.address()?; + let signer_address = self.operation.signer.address(); let signer_path: OwnedPath = account_path(&signer_address)?; @@ -223,7 +216,7 @@ impl<'a> VerifiableOperation<'a> { /// Parse an operation, remembering the parsed slice. pub fn parse(input: &'a [u8]) -> tezos_data_encoding::nom::NomResult { map( - pair(consumed(Operation::nom_read), Signature::nom_read), + pair(consumed(Operation::nom_read), Ed25519Signature::nom_read), |((parsed, operation), signature)| Self { parsed, operation, @@ -298,7 +291,7 @@ mod test { #[test] fn verifiable_operation_encode_decode( (operation, _key) in Operation::arb_with_signer(), - sig in any::<[u8; HashType::Signature.size()]>(), + sig in any::<[u8; HashType::Ed25519Signature.size()]>(), remaining_input in any::>(), ) { let mut encoded = Vec::new(); @@ -311,7 +304,7 @@ mod test { assert_eq!(remaining_input, remaining, "Incorrect remaining bytes"); assert_eq!(operation, decoded.operation, "Operations do not match"); - assert_eq!(sig.as_slice(), decoded.signature.0.as_slice(), "Sigs do not match"); + assert_eq!(sig.as_slice(), decoded.signature.as_ref(), "Sigs do not match"); } } } diff --git a/src/kernel_tx_demo/kernel/src/lib.rs b/src/kernel_tx_demo/kernel/src/lib.rs index 47c7cdd1103b..76ac692f3068 100644 --- a/src/kernel_tx_demo/kernel/src/lib.rs +++ b/src/kernel_tx_demo/kernel/src/lib.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // SPDX-FileCopyrightText: 2023 Marigold // SPDX-FileCopyrightText: 2022-2023 Nomadic Labs // @@ -231,7 +231,7 @@ fn filter_inbox_message<'a, Host: Runtime>( destination, .. })) => { - if rollup_address.0 != destination.hash().0 { + if rollup_address != destination.hash() { #[cfg(feature = "debug")] debug_msg!( host, @@ -336,7 +336,7 @@ mod test { let mut mock_runtime = MockHost::default(); let destination = - ContractTz1Hash::from_b58check("tz4MSfZsn6kMDczShy8PMeB628TNukn9hi2K").unwrap(); + ContractTz1Hash::from_b58check("tz1XdRrrqrMfsFKA8iuw53xHzug9ipr6MuHq").unwrap(); let ticket_creator = Contract::from_b58check("KT1JW6PwhfaEJu6U3ENsxUeja48AdtqSoekd").unwrap(); @@ -374,7 +374,7 @@ mod test { let mut mock_runtime = MockHost::default(); // setup message - let receiver = gen_ed25519_keys().0.pk_hash().unwrap(); + let receiver = gen_ed25519_keys().0.pk_hash(); let originator = Contract::Originated( ContractKt1Hash::from_b58check("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq").unwrap(), ); diff --git a/src/kernel_tx_demo/kernel/src/storage.rs b/src/kernel_tx_demo/kernel/src/storage.rs index a97407efee6c..8e08e55da33a 100644 --- a/src/kernel_tx_demo/kernel/src/storage.rs +++ b/src/kernel_tx_demo/kernel/src/storage.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // // SPDX-License-Identifier: MIT @@ -10,6 +10,7 @@ //! and the updates to accounts that happen within said transactions. use crypto::hash::ContractTz1Hash; +use crypto::hash::HashTrait; use crypto::hash::HashType; use crypto::hash::PublicKeyEd25519; use num_bigint::{BigInt, TryFromBigIntError}; @@ -379,7 +380,7 @@ impl Account { ) -> Result<(), AccountStorageError> { let path = concat(&self.path, &PUBLIC_KEY_PATH)?; - host.store_write(&path, &pk.0, 0) + host.store_write(&path, pk.as_ref(), 0) .map_err(AccountStorageError::from) } @@ -413,7 +414,7 @@ impl Account { let mut buffer = [0_u8; PK_SIZE]; match host.store_read_slice(&path, 0, &mut buffer) { - Ok(PK_SIZE) => Ok(Some(PublicKeyEd25519(buffer.to_vec()))), + Ok(PK_SIZE) => Ok(Some(PublicKeyEd25519::try_from_bytes(&buffer).unwrap())), Ok(_) => Err(AccountStorageError::MalformedSignature), Err(PathNotFound | HostErr(StoreNotAValue)) => Ok(None), Err(error) => Err(AccountStorageError::from(error)), diff --git a/src/kernel_tx_demo/kernel/src/transactions/external_inbox.rs b/src/kernel_tx_demo/kernel/src/transactions/external_inbox.rs index 453cfacc4a94..9a413520e527 100644 --- a/src/kernel_tx_demo/kernel/src/transactions/external_inbox.rs +++ b/src/kernel_tx_demo/kernel/src/transactions/external_inbox.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2022-2024 TriliTech // SPDX-FileCopyrightText: 2023 Marigold // // SPDX-License-Identifier: MIT @@ -10,6 +10,7 @@ use crate::inbox::v1::ParsedBatch; use crate::inbox::ParsedExternalInboxMessage; use crate::storage::AccountStorage; use crate::transactions::withdrawal::Withdrawal; +use crypto::hash::HashTrait; use crypto::hash::PublicKeyBls; use crypto::CryptoError; #[cfg(feature = "debug")] @@ -81,7 +82,7 @@ pub(crate) fn get_dac_committee( let mut dac_member = [0; 48]; host.store_read_slice(&path, 0, &mut dac_member) .map_err(LoadDacCommitteeError::RuntimeError)?; - let pk = PublicKeyBls(dac_member.to_vec()); + let pk = PublicKeyBls::try_from_bytes(&dac_member).unwrap(); res.push(pk); } Ok(res) diff --git a/src/riscv/dummy_kernel/Cargo.lock b/src/riscv/dummy_kernel/Cargo.lock index f418e2c82654..1548d5ceb5b4 100644 --- a/src/riscv/dummy_kernel/Cargo.lock +++ b/src/riscv/dummy_kernel/Cargo.lock @@ -35,12 +35,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - [[package]] name = "base64" version = "0.13.1" @@ -101,6 +95,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "byteorder" version = "1.5.0" @@ -564,9 +567,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.3.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -1082,7 +1085,6 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", - "tezos_data_encoding_derive", "thiserror", "time", ] @@ -1141,17 +1143,18 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" +checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" dependencies = [ "anyhow", - "base58", + "bs58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", + "nom", "num-bigint", "num-traits", "p256", @@ -1159,15 +1162,16 @@ dependencies = [ "serde", "strum", "strum_macros", + "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" +checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" dependencies = [ "bit-vec", "bitvec", @@ -1177,16 +1181,15 @@ dependencies = [ "num-bigint", "num-traits", "serde", - "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" +checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" dependencies = [ "lazy_static", "once_cell", diff --git a/src/riscv/dummy_kernel/Cargo.toml b/src/riscv/dummy_kernel/Cargo.toml index f163d6741cb5..5de1e5f4368f 100644 --- a/src/riscv/dummy_kernel/Cargo.toml +++ b/src/riscv/dummy_kernel/Cargo.toml @@ -4,7 +4,7 @@ version = "0.0.0" edition = "2021" [dependencies.tezos_crypto_rs] -version = "0.5.2" +version = "0.6.0" default-features = false [dependencies.tezos-smart-rollup] diff --git a/src/riscv/dummy_kernel/src/main.rs b/src/riscv/dummy_kernel/src/main.rs index 3e1609350461..3742cf01254c 100644 --- a/src/riscv/dummy_kernel/src/main.rs +++ b/src/riscv/dummy_kernel/src/main.rs @@ -15,7 +15,7 @@ pub fn entry(host: &mut impl Runtime) { debug_msg!(host, "I am {}\n", SmartRollupAddress::new(meta.address())); debug_msg!(host, "{:#?}\n", meta); - let hash = digest_256(msg.as_bytes()).unwrap(); + let hash = digest_256(msg.as_bytes()); debug_msg!(host, "{:02X?}\n", hash); unsafe { -- GitLab From 585e40c23b99281e6f59c0207f1821d57134eabf Mon Sep 17 00:00:00 2001 From: Emma Turner Date: Tue, 2 Jul 2024 14:14:54 +0100 Subject: [PATCH 5/5] Kernel/JSTZ: bump crypto/encoding to 0.6.0 --- src/riscv/jstz/Cargo.lock | 67 +++++++++++++++++---------------------- src/riscv/jstz/Cargo.toml | 10 +++--- 2 files changed, 34 insertions(+), 43 deletions(-) diff --git a/src/riscv/jstz/Cargo.lock b/src/riscv/jstz/Cargo.lock index 2f9de79c2c5f..7dc527db049b 100644 --- a/src/riscv/jstz/Cargo.lock +++ b/src/riscv/jstz/Cargo.lock @@ -120,12 +120,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" -[[package]] -name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - [[package]] name = "base64" version = "0.13.1" @@ -211,7 +205,7 @@ dependencies = [ "boa_interner", "boa_macros", "indexmap", - "num-bigint 0.4.5", + "num-bigint", "rustc-hash", ] @@ -233,7 +227,7 @@ dependencies = [ "icu_normalizer", "indexmap", "itertools", - "num-bigint 0.4.5", + "num-bigint", "num-integer", "num-traits", "num_enum", @@ -303,7 +297,7 @@ dependencies = [ "boa_profiler", "fast-float", "icu_properties", - "num-bigint 0.4.5", + "num-bigint", "num-traits", "regress", "rustc-hash", @@ -314,6 +308,15 @@ name = "boa_profiler" version = "0.17.0" source = "git+https://github.com/trilitech/boa.git?branch=ryutamago/fix-undefined-to-json#78c8540eb0167abd62975f47d40aa55a7bbcf5d0" +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bumpalo" version = "3.16.0" @@ -1121,7 +1124,7 @@ dependencies = [ [[package]] name = "jstz_api" version = "0.1.0-alpha.0" -source = "git+https://github.com/jstz-dev/jstz.git?rev=5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70#5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" +source = "git+https://github.com/jstz-dev/jstz.git?branch=emturner-rv-57#522c248f5034969c376ff4d5cf75953d014579f9" dependencies = [ "base64 0.21.7", "boa_engine", @@ -1145,7 +1148,7 @@ dependencies = [ [[package]] name = "jstz_core" version = "0.1.0-alpha.0" -source = "git+https://github.com/jstz-dev/jstz.git?rev=5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70#5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" +source = "git+https://github.com/jstz-dev/jstz.git?branch=emturner-rv-57#522c248f5034969c376ff4d5cf75953d014579f9" dependencies = [ "bincode", "boa_engine", @@ -1163,7 +1166,7 @@ dependencies = [ [[package]] name = "jstz_crypto" version = "0.1.0-alpha.0" -source = "git+https://github.com/jstz-dev/jstz.git?rev=5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70#5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" +source = "git+https://github.com/jstz-dev/jstz.git?branch=emturner-rv-57#522c248f5034969c376ff4d5cf75953d014579f9" dependencies = [ "anyhow", "boa_gc", @@ -1177,7 +1180,7 @@ dependencies = [ [[package]] name = "jstz_kernel" version = "0.1.0-alpha.0" -source = "git+https://github.com/jstz-dev/jstz.git?rev=5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70#5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" +source = "git+https://github.com/jstz-dev/jstz.git?branch=emturner-rv-57#522c248f5034969c376ff4d5cf75953d014579f9" dependencies = [ "bincode", "boa_engine", @@ -1196,7 +1199,7 @@ dependencies = [ [[package]] name = "jstz_proto" version = "0.1.0-alpha.0" -source = "git+https://github.com/jstz-dev/jstz.git?rev=5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70#5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" +source = "git+https://github.com/jstz-dev/jstz.git?branch=emturner-rv-57#522c248f5034969c376ff4d5cf75953d014579f9" dependencies = [ "boa_engine", "boa_gc", @@ -1339,18 +1342,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", - "serde", -] - [[package]] name = "num-bigint" version = "0.4.5" @@ -2108,7 +2099,7 @@ version = "0.2.2" dependencies = [ "hex", "nom", - "num-bigint 0.3.3", + "num-bigint", "num-traits", "paste", "regex", @@ -2116,7 +2107,6 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", - "tezos_data_encoding_derive", "thiserror", "time", ] @@ -2202,52 +2192,53 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" +checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" dependencies = [ "anyhow", - "base58", + "bs58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "num-bigint 0.3.3", + "nom", + "num-bigint", "num-traits", "p256", "rand 0.7.3", "serde", "strum", "strum_macros", + "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" +checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" dependencies = [ "bit-vec", "bitvec", "hex", "lazy_static", "nom", - "num-bigint 0.3.3", + "num-bigint", "num-traits", "serde", - "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" +checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" dependencies = [ "lazy_static", "once_cell", diff --git a/src/riscv/jstz/Cargo.toml b/src/riscv/jstz/Cargo.toml index 802243843295..e9ce18182abb 100644 --- a/src/riscv/jstz/Cargo.toml +++ b/src/riscv/jstz/Cargo.toml @@ -44,15 +44,15 @@ features = [ [workspace.dependencies.jstz_kernel] git = "https://github.com/jstz-dev/jstz.git" -rev = "5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" +branch = "emturner-rv-57" [workspace.dependencies.jstz_crypto] git = "https://github.com/jstz-dev/jstz.git" -rev = "5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" +branch = "emturner-rv-57" [workspace.dependencies.jstz_proto] git = "https://github.com/jstz-dev/jstz.git" -rev = "5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" +branch = "emturner-rv-57" [workspace.dependencies.serde] version = "1.0.197" @@ -67,9 +67,9 @@ version = "4.4.6" features = ["derive"] [workspace.dependencies.tezos_crypto_rs] -version = "0.5.2" +version = "0.6.0" default-features = false [workspace.dependencies.tezos_data_encoding] -version = "0.5.2" +version = "0.6.0" default-features = false -- GitLab