From 90dd5ede04a9032ce76d5ccd710ce95e352ab571 Mon Sep 17 00:00:00 2001 From: Michael Zaikin Date: Tue, 16 Jul 2024 16:51:41 +0100 Subject: [PATCH 1/5] Revert "Kernel/EVM: bump crypto/encoding to 0.6.0" This reverts commit daef38c68b61d50f2813d00c36a26a6106dd24a5. --- 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, 58 insertions(+), 64 deletions(-) diff --git a/etherlink/kernel_evm/Cargo.lock b/etherlink/kernel_evm/Cargo.lock index f39c87548fd7..8ef17ce30050 100644 --- a/etherlink/kernel_evm/Cargo.lock +++ b/etherlink/kernel_evm/Cargo.lock @@ -182,6 +182,12 @@ 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" @@ -264,15 +270,6 @@ 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" @@ -560,9 +557,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" @@ -716,7 +713,7 @@ dependencies = [ "evm", "hex", "libsecp256k1", - "num-bigint", + "num-bigint 0.3.3", "num-traits", "pretty_assertions", "primitive-types", @@ -1279,7 +1276,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ - "num-bigint", + "num-bigint 0.4.4", "num-complex", "num-integer", "num-iter", @@ -1287,6 +1284,18 @@ 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" @@ -1296,7 +1305,6 @@ dependencies = [ "autocfg", "num-integer", "num-traits", - "serde", ] [[package]] @@ -1347,7 +1355,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", - "num-bigint", + "num-bigint 0.4.4", "num-integer", "num-traits", ] @@ -2248,7 +2256,7 @@ version = "0.2.2" dependencies = [ "hex", "nom", - "num-bigint", + "num-bigint 0.3.3", "num-traits", "paste", "regex", @@ -2256,6 +2264,7 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", + "tezos_data_encoding_derive", "thiserror", "time", ] @@ -2340,54 +2349,53 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" +checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" dependencies = [ "anyhow", + "base58", "blst", - "bs58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "nom", - "num-bigint", + "num-bigint 0.3.3", "num-traits", "p256", "rand 0.7.3", "serde", "strum", "strum_macros", - "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" +checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" dependencies = [ "bit-vec", "bitvec", "hex", "lazy_static", "nom", - "num-bigint", + "num-bigint 0.3.3", "num-traits", "serde", + "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" +checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" dependencies = [ "lazy_static", "once_cell", diff --git a/etherlink/kernel_evm/Cargo.toml b/etherlink/kernel_evm/Cargo.toml index d6e66f3d50b7..4d2aa6ac45cb 100644 --- a/etherlink/kernel_evm/Cargo.toml +++ b/etherlink/kernel_evm/Cargo.toml @@ -8,14 +8,7 @@ [workspace] -members = [ - "ethereum", - "kernel", - "evm_execution", - "evm_evaluation", - "indexable_storage", - "logging", -] +members = ["ethereum", "kernel", "evm_execution", "evm_evaluation", "indexable_storage", "logging"] [workspace.dependencies] @@ -25,7 +18,7 @@ anyhow = "1.0" # types primitive-types = { version = "0.12.1", default-features = false } -num-bigint = "0.4" +num-bigint = "0.3" num-traits = "0.2.8" num-derive = "0.3" ethereum = { version = "0.14.0", default-features = false } @@ -36,7 +29,7 @@ bytes = "^1" # serialization hex = "0.4" hex-literal = "0.4.1" -tezos_data_encoding = "0.6" +tezos_data_encoding = "0.5.2" const-decoder = { version = "0.3.0" } rlp = "0.5.2" @@ -49,7 +42,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.6", default-features = false } +tezos_crypto_rs = { version = "0.5.2", default-features = false } libsecp256k1 = { version = "0.7", default-features = false, features = [ "static-context", "hmac", @@ -83,7 +76,5 @@ 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 3cf044c4e2cf..c4041418186a 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,5 +1,4 @@ // SPDX-FileCopyrightText: 2023 PK Lab -// SPDX-FileCopyrightText: 2024 Trilitech // // SPDX-License-Identifier: MIT @@ -227,9 +226,7 @@ pub fn set_balance( /// Create ticket with dummy creator and content pub fn dummy_ticket() -> FA2_1Ticket { - use tezos_crypto_rs::hash::HashTrait; - - let ticketer = ContractKt1Hash::try_from_bytes(&[1u8; 20]).unwrap(); + let ticketer = ContractKt1Hash([1u8; 20].to_vec()); 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 047c139d60ee..b9f1968c8cd2 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,2024 TriliTech +// SPDX-FileCopyrightText: 2022 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.as_ref()).as_slice()); + H256::from_slice(Keccak256::digest(hash.0).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 edc1144f0ded..d210ddc9cd04 100644 --- a/etherlink/kernel_evm/kernel/src/blueprint_storage.rs +++ b/etherlink/kernel_evm/kernel/src/blueprint_storage.rs @@ -1,5 +1,4 @@ // SPDX-FileCopyrightText: 2023 Nomadic Labs -// SPDX-FileCopyrightText: 2024 TriliTech // // SPDX-License-Identifier: MIT @@ -486,7 +485,7 @@ mod tests { use crate::Timestamp; use primitive_types::H256; use tezos_crypto_rs::hash::ContractKt1Hash; - use tezos_crypto_rs::hash::UnknownSignature; + use tezos_crypto_rs::hash::Signature; use tezos_ethereum::transaction::TRANSACTION_HASH_SIZE; use tezos_smart_rollup_encoding::public_key::PublicKey; use tezos_smart_rollup_mock::MockHost; @@ -540,7 +539,7 @@ mod tests { }; let blueprint_with_hashes_bytes = rlp::Encodable::rlp_bytes(&blueprint_with_invalid_hash); - let signature = UnknownSignature::from_base58_check( + let signature = Signature::from_base58_check( "sigdGBG68q2vskMuac4AzyNb1xCJTfuU8MiMbQtmZLUCYydYrtTd5Lessn1EFLTDJzjXoYxRasZxXbx6tHnirbEJtikcMHt3" ).expect("signature decoding should work"); @@ -607,7 +606,7 @@ mod tests { }; let blueprint_with_hashes_bytes = rlp::Encodable::rlp_bytes(&blueprint_with_invalid_parent_hash); - let signature = UnknownSignature::from_base58_check( + let signature = Signature::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 80f1d17b2e67..46369c1155e0 100644 --- a/etherlink/kernel_evm/kernel/src/inbox.rs +++ b/etherlink/kernel_evm/kernel/src/inbox.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 TriliTech // SPDX-FileCopyrightText: 2023 Nomadic Labs // SPDX-FileCopyrightText: 2023 Functori // SPDX-FileCopyrightText: 2023 Marigold @@ -702,7 +702,6 @@ 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; @@ -722,9 +721,7 @@ mod tests { const ZERO_TX_HASH: TransactionHash = [0; TRANSACTION_HASH_SIZE]; fn smart_rollup_address() -> SmartRollupAddress { - SmartRollupAddress::new( - SmartRollupHash::try_from_bytes(&SMART_ROLLUP_ADDRESS).unwrap(), - ) + SmartRollupAddress::new(SmartRollupHash(SMART_ROLLUP_ADDRESS.into())) } fn input_to_bytes( diff --git a/etherlink/kernel_evm/kernel/src/parsing.rs b/etherlink/kernel_evm/kernel/src/parsing.rs index 6823ad4ab3ff..246fd1b102b3 100644 --- a/etherlink/kernel_evm/kernel/src/parsing.rs +++ b/etherlink/kernel_evm/kernel/src/parsing.rs @@ -307,10 +307,12 @@ 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.clone().into(), &bytes) + .verify_signature(&seq_blueprint.signature, &msg) .unwrap_or(false); if correctly_signed { @@ -502,7 +504,7 @@ impl InputResult { inbox_msg_id: u32, enable_fa_deposits: bool, ) -> Self { - if transfer.destination.hash().as_ref() != smart_rollup_address { + if transfer.destination.hash().0 != 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 3017f706e014..c06a39810d02 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::UnknownSignature; +use tezos_crypto_rs::hash::Signature; 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: UnknownSignature, + pub signature: Signature, } 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.as_ref()); + stream.append(&self.signature.0); } } @@ -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 = UnknownSignature::try_from(bytes.as_slice()) + let signature = Signature::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::UnknownSignature; + use tezos_crypto_rs::hash::Signature; 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 = UnknownSignature::from_base58_check( + let signature = Signature::from_base58_check( "sigdGBG68q2vskMuac4AzyNb1xCJTfuU8MiMbQtmZLUCYydYrtTd5Lessn1EFLTDJzjXoYxRasZxXbx6tHnirbEJtikcMHt3" ).expect("signature decoding should work"); -- GitLab From e324302d92b92ada1f6e443d6f8bf30ef4b368ec Mon Sep 17 00:00:00 2001 From: Michael Zaikin Date: Thu, 18 Jul 2024 11:06:39 +0100 Subject: [PATCH 2/5] Revert "Rollup/SDK: bump crypto/data-encoding crates to 0.6.0" This reverts commit 767ec2ef34ad11884edc41f9d339657552164814. --- 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, 664 insertions(+), 215 deletions(-) create mode 100644 src/kernel_sdk/encoding/src/public_key.rs create 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 b59bc990de1b..6233edaa7daa 100644 --- a/src/kernel_sdk/CHANGES.md +++ b/src/kernel_sdk/CHANGES.md @@ -22,7 +22,6 @@ - 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. - Implement the generic `reveal` host function in the `MockHost`, this allows in particular to use the DAL host functions in the mockup. ### Installer client/kernel diff --git a/src/kernel_sdk/Cargo.lock b/src/kernel_sdk/Cargo.lock index ed8e061bc820..f7f5ecc5b803 100644 --- a/src/kernel_sdk/Cargo.lock +++ b/src/kernel_sdk/Cargo.lock @@ -83,6 +83,12 @@ 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" @@ -165,15 +171,6 @@ 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" @@ -669,11 +666,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] @@ -885,9 +882,9 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" dependencies = [ "autocfg", "num-integer", @@ -1604,6 +1601,7 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", + "tezos_data_encoding_derive", "thiserror", "time", ] @@ -1727,19 +1725,18 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" +checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" dependencies = [ "anyhow", + "base58", "blst", - "bs58", "byteorder 1.5.0", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "nom", "num-bigint", "num-traits", "p256", @@ -1747,16 +1744,15 @@ dependencies = [ "serde", "strum", "strum_macros", - "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" +checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" dependencies = [ "bit-vec", "bitvec", @@ -1766,15 +1762,16 @@ dependencies = [ "num-bigint", "num-traits", "serde", + "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" +checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" dependencies = [ "lazy_static", "once_cell", diff --git a/src/kernel_sdk/Cargo.toml b/src/kernel_sdk/Cargo.toml index a674c6650e1b..5dc2b257937e 100644 --- a/src/kernel_sdk/Cargo.toml +++ b/src/kernel_sdk/Cargo.toml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023-2024 TriliTech +# SPDX-FileCopyrightText: 2023 TriliTech # SPDX-FileCopyrightText: 2023 Nomadic Labs # # SPDX-License-Identifier: MIT @@ -24,11 +24,3 @@ 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 299e5f3ffa43..48e3f784785c 100644 --- a/src/kernel_sdk/debug/Cargo.toml +++ b/src/kernel_sdk/debug/Cargo.toml @@ -26,7 +26,4 @@ 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 0f3925be34e6..00542df353df 100644 --- a/src/kernel_sdk/encoding/Cargo.toml +++ b/src/kernel_sdk/encoding/Cargo.toml @@ -18,13 +18,16 @@ 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.4", optional = true } +num-bigint = { version = "0.3", 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 } @@ -45,22 +48,11 @@ 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 = ["dep:tezos_data_encoding", "time"] -proto-alpha = [ - "tezos-smart-rollup-core/proto-alpha", - "tezos-smart-rollup-host/proto-alpha", -] +tezos-encoding = ["tezos_data_encoding", "tezos_data_encoding_derive", "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 26360576fb00..d207c64b1dc1 100644 --- a/src/kernel_sdk/encoding/src/contract.rs +++ b/src/kernel_sdk/encoding/src/contract.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023-2024 TriliTech +// SPDX-FileCopyrightText: 2023 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(_)))); + assert!(matches!(pkh, Ok(Contract::Originated(ContractKt1Hash(_))))); 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 ea3aa80f4d2f..c3305e194059 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 TriliTech // // SPDX-License-Identifier: MIT @@ -6,7 +6,6 @@ use super::Contract; use crypto::hash::ContractKt1Hash; -use crypto::hash::HashTrait; use crypto::hash::HashType; use proptest::prelude::*; @@ -14,7 +13,8 @@ impl Contract { /// Randomly selected originated contract. pub fn arb_originated() -> BoxedStrategy { any::<[u8; HashType::ContractKt1Hash.size()]>() - .prop_map(|c| ContractKt1Hash::try_from_bytes(&c).unwrap()) + .prop_map(Vec::from) + .prop_map(ContractKt1Hash) .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 0b06f25260a7..93ad89fe9961 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 TriliTech // SPDX-FileCopyrightText: 2023 Marigold // // SPDX-License-Identifier: MIT @@ -52,17 +52,6 @@ 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. /// @@ -70,12 +59,12 @@ pub enum PreimageHashError { #[cfg(feature = "alloc")] pub fn make_preimage_hash( content: &[u8], -) -> Result<[u8; PREIMAGE_HASH_SIZE], PreimageHashError> { +) -> Result<[u8; PREIMAGE_HASH_SIZE], crypto::blake2b::Blake2bError> { if content.len() > MAX_PAGE_SIZE { - return Err(PreimageHashError::InputLengthTooLarge); + return Err(crypto::blake2b::Blake2bError::Other); } - 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) @@ -165,7 +154,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 b9276f4655b8..fae95259be4a 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 8c1cc23bb5c6..1fb82e64f015 100644 --- a/src/kernel_sdk/encoding/src/lib.rs +++ b/src/kernel_sdk/encoding/src/lib.rs @@ -26,17 +26,14 @@ 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 10476d035a16..eafd7ee68135 100644 --- a/src/kernel_sdk/encoding/src/michelson.rs +++ b/src/kernel_sdk/encoding/src/michelson.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 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 + for<'a> NomReader<'a> + Debug + PartialEq + Eq + HasEncoding + BinWriter + NomReader + 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<'a, Arg0, Arg1> NomReader<'a> for MichelsonPair +impl NomReader for MichelsonPair where - Arg0: NomReader<'a> + Debug + PartialEq + Eq, - Arg1: NomReader<'a> + Debug + PartialEq + Eq, + Arg0: NomReader + Debug + PartialEq + Eq, + Arg1: NomReader + Debug + PartialEq + Eq, { - fn nom_read(input: &'a [u8]) -> NomResult { + fn nom_read(input: &[u8]) -> NomResult { map( MichelinePrim2ArgsNoAnnots::<_, _, { prim::PAIR_TAG }>::nom_read, Into::into, @@ -609,12 +609,12 @@ where } } -impl<'a, Arg0, Arg1> NomReader<'a> for MichelsonOr +impl NomReader for MichelsonOr where - Arg0: NomReader<'a> + Debug + PartialEq + Eq, - Arg1: NomReader<'a> + Debug + PartialEq + Eq, + Arg0: NomReader + Debug + PartialEq + Eq, + Arg1: NomReader + Debug + PartialEq + Eq, { - fn nom_read(input: &'a [u8]) -> NomResult { + fn nom_read(input: &[u8]) -> NomResult { alt(( map( MichelinePrim1ArgNoAnnots::<_, { prim::LEFT_TAG }>::nom_read, @@ -628,11 +628,11 @@ where } } -impl<'a, Arg> NomReader<'a> for MichelsonOption +impl NomReader for MichelsonOption where - Arg: NomReader<'a> + Debug + PartialEq + Eq, + Arg: NomReader + Debug + PartialEq + Eq, { - fn nom_read(input: &'a [u8]) -> NomResult { + fn nom_read(input: &[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 9c954e49d2a1..69108a3fcb12 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022 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,12 +463,11 @@ impl NomReader<'_> for MichelinePrimNoArgsSomeAnnots NomReader<'a> - for MichelinePrim1ArgNoAnnots +impl NomReader for MichelinePrim1ArgNoAnnots where - Arg: NomReader<'a> + Debug + PartialEq + Eq, + Arg: NomReader + Debug + PartialEq + Eq, { - fn nom_read(input: &'a [u8]) -> NomResult { + fn nom_read(input: &[u8]) -> NomResult { let parse = preceded( tag([MICHELINE_PRIM_1_ARG_NO_ANNOTS_TAG, PRIM_TAG]), Arg::nom_read, @@ -478,12 +477,11 @@ where } } -impl<'a, Arg, const PRIM_TAG: u8> NomReader<'a> - for MichelinePrim1ArgSomeAnnots +impl NomReader for MichelinePrim1ArgSomeAnnots where - Arg: NomReader<'a> + Debug + PartialEq + Eq, + Arg: NomReader + Debug + PartialEq + Eq, { - fn nom_read(input: &'a [u8]) -> NomResult { + fn nom_read(input: &[u8]) -> NomResult { let parse = preceded( tag([MICHELINE_PRIM_1_ARG_SOME_ANNOTS_TAG, PRIM_TAG]), pair(Arg::nom_read, Annotations::nom_read), @@ -496,13 +494,13 @@ where } } -impl<'a, Arg1, Arg2, const PRIM_TAG: u8> NomReader<'a> +impl NomReader for MichelinePrim2ArgsNoAnnots where - Arg1: NomReader<'a> + Debug + PartialEq + Eq, - Arg2: NomReader<'a> + Debug + PartialEq + Eq, + Arg1: NomReader + Debug + PartialEq + Eq, + Arg2: NomReader + Debug + PartialEq + Eq, { - fn nom_read(input: &'a [u8]) -> NomResult { + fn nom_read(input: &[u8]) -> NomResult { let parse = preceded( tag([MICHELINE_PRIM_2_ARGS_NO_ANNOTS_TAG, PRIM_TAG]), pair(Arg1::nom_read, Arg2::nom_read), @@ -515,13 +513,13 @@ where } } -impl<'a, Arg1, Arg2, const PRIM_TAG: u8> NomReader<'a> +impl NomReader for MichelinePrim2ArgsSomeAnnots where - Arg1: NomReader<'a> + Debug + PartialEq + Eq, - Arg2: NomReader<'a> + Debug + PartialEq + Eq, + Arg1: NomReader + Debug + PartialEq + Eq, + Arg2: NomReader + Debug + PartialEq + Eq, { - fn nom_read(input: &'a [u8]) -> NomResult { + fn nom_read(input: &[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)), @@ -633,7 +631,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), @@ -777,7 +775,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<'a>) -> NomResult, + parser: impl FnMut(NomInput) -> 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 e1c7faf83bb0..fa9908e40b2f 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 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 782b3eb99e5c..114923049bf7 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 + for<'a> NomReader<'a> {} +pub trait AtomicBatch: HasEncoding + BinWriter + NomReader {} 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 new file mode 100644 index 000000000000..3e7d90268fc8 --- /dev/null +++ b/src/kernel_sdk/encoding/src/public_key.rs @@ -0,0 +1,309 @@ +// 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 new file mode 100644 index 000000000000..d7ab951cbda3 --- /dev/null +++ b/src/kernel_sdk/encoding/src/public_key_hash.rs @@ -0,0 +1,182 @@ +// 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 a213d209bb38..9ed2c381bd62 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-2024 TriliTech +// SPDX-FileCopyrightText: 2023 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 2df681b7466b..21b4fb27ba0f 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 fd8ed21e9870..38c945fb9c88 100644 --- a/src/kernel_sdk/host/Cargo.toml +++ b/src/kernel_sdk/host/Cargo.toml @@ -21,11 +21,13 @@ path = "../core" version = "0.2.2" [dependencies.tezos_crypto_rs] -workspace = true +version = "=0.5.2" +default-features = false optional = true [dependencies.tezos_data_encoding] -workspace = true +version = "=0.5.2" +default-features = false optional = true [dependencies.thiserror] diff --git a/src/kernel_sdk/host/src/metadata.rs b/src/kernel_sdk/host/src/metadata.rs index bc710c461ab8..7e45c342b0f6 100644 --- a/src/kernel_sdk/host/src/metadata.rs +++ b/src/kernel_sdk/host/src/metadata.rs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023-2024 TriliTech +// SPDX-FileCopyrightText: 2023 TriliTech // SPDX-FileCopyrightText: 2023 Marigold // // SPDX-License-Identifier: MIT @@ -31,8 +31,7 @@ impl RollupMetadata { /// The address of the smart rollup. #[cfg(feature = "crypto")] pub fn address(&self) -> SmartRollupHash { - use tezos_crypto_rs::hash::HashTrait; - SmartRollupHash::try_from_bytes(&self.raw_rollup_address).unwrap() + SmartRollupHash(self.raw_rollup_address.to_vec()) } } diff --git a/src/kernel_sdk/installer-client/Cargo.toml b/src/kernel_sdk/installer-client/Cargo.toml index 494dc9ecfbcb..5e690360c59d 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] -workspace = true +version = "=0.5.2" [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 40dd86efe0c4..7b19d31595d2 100644 --- a/src/kernel_sdk/installer-config/Cargo.toml +++ b/src/kernel_sdk/installer-config/Cargo.toml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023-2024 TriliTech +# SPDX-FileCopyrightText: 2023 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] -workspace = true +version = "=0.5.2" optional = true [dependencies.serde] @@ -55,7 +55,8 @@ version = "0.4.3" optional = true [dependencies.tezos_crypto_rs] -workspace = true +version = "=0.5.2" +default-features = false optional = true [dependencies.thiserror] @@ -70,14 +71,14 @@ version = "0.2.2" default = ["std"] std = ["alloc"] alloc = [ - "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", + "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", ] testing = [] diff --git a/src/kernel_sdk/mock/Cargo.toml b/src/kernel_sdk/mock/Cargo.toml index 9ffeaffc5407..1353e8f984a9 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.workspace = true -tezos_data_encoding.workspace = true +tezos_crypto_rs = { version = "=0.5.2", default-features = false } +tezos_data_encoding = "=0.5.2" [dependencies.tezos-smart-rollup-encoding] path = "../encoding" @@ -38,7 +38,4 @@ 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 3278f961ebef..25ba93094596 100644 --- a/src/kernel_sdk/mock/src/lib.rs +++ b/src/kernel_sdk/mock/src/lib.rs @@ -12,7 +12,6 @@ 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; @@ -68,10 +67,11 @@ impl fmt::Debug for MockHost { impl Default for MockHost { fn default() -> Self { - let address = SmartRollupAddress::new( - SmartRollupHash::try_from_bytes(&[0; HashType::SmartRollupHash.size()]) - .unwrap(), - ); + let address = SmartRollupAddress::new(SmartRollupHash(vec![ + 0; + HashType::SmartRollupHash + .size() + ])); Self::with_address(&address) } @@ -112,7 +112,8 @@ impl MockHost { pub fn with_address(address: &SmartRollupAddress) -> Self { let raw_rollup_address = address .hash() - .as_ref() + .0 + .as_slice() .try_into() .expect("Incorrect length for SmartRollupHash"); @@ -314,10 +315,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()); + let hash = crypto::blake2b::digest_256(×tamp.to_le_bytes()).unwrap(); inbox::InfoPerLevel { - predecessor: crypto::hash::BlockHash::try_from_bytes(&hash).unwrap(), + predecessor: crypto::hash::BlockHash(hash), 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 25b43e5e2991..b7aa9f71a043 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 TriliTech // SPDX-FileCopyrightText: 2023 Marigold // SPDX-FileCopyrightText: 2022-2023 Nomadic Labs // @@ -47,7 +47,7 @@ impl Default for HostState { let raw_rollup_address: [u8; 20] = SmartRollupHash::from_base58_check("sr1V6huFSUBUujzubUCg9nNXqpzfG9t4XD1h") .unwrap() - .as_ref() + .0 .try_into() .unwrap(); diff --git a/src/kernel_sdk/mock/tests/dac.rs b/src/kernel_sdk/mock/tests/dac.rs index 7cd27a599028..3421546b66ed 100644 --- a/src/kernel_sdk/mock/tests/dac.rs +++ b/src/kernel_sdk/mock/tests/dac.rs @@ -1,7 +1,3 @@ -// SPDX-FileCopyrightText: 2023-2024 TriliTech -// -// SPDX-License-Identifier: MIT - //! Test of reveal preimage mechanism from [encoding::dac]. use tezos_crypto_rs::hash::BlsSignature; @@ -13,10 +9,6 @@ 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]; @@ -31,7 +23,7 @@ fn certificate_reveal_to_store_small() { let cert = Certificate::V0(V0Certificate { root_hash, - aggregated_signature: dummy_bls_sig(), + aggregated_signature: BlsSignature(Vec::new()), witnesses: tezos_data_encoding::types::Zarith(0.into()), }); @@ -61,7 +53,7 @@ fn certificate_reveal_to_store_med() { let cert = Certificate::V0(V0Certificate { root_hash, - aggregated_signature: dummy_bls_sig(), + aggregated_signature: BlsSignature(Vec::new()), witnesses: tezos_data_encoding::types::Zarith(0.into()), }); @@ -90,7 +82,7 @@ fn certificate_reveal_to_store_max() { let cert = Certificate::V0(V0Certificate { root_hash, - aggregated_signature: dummy_bls_sig(), + aggregated_signature: BlsSignature(Vec::new()), witnesses: tezos_data_encoding::types::Zarith(0.into()), }); @@ -114,7 +106,7 @@ fn certificate_reveal_to_store_too_large() { let cert = Certificate::V0(V0Certificate { root_hash, - aggregated_signature: dummy_bls_sig(), + aggregated_signature: BlsSignature(Vec::new()), 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 b516a6f5275c..1b3bd57a6641 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 0a48c76d8966..e7937c5d9a1c 100644 --- a/src/kernel_sdk/sdk/Cargo.toml +++ b/src/kernel_sdk/sdk/Cargo.toml @@ -64,11 +64,12 @@ version = "0.2.2" optional = true [dependencies.tezos_crypto_rs] -workspace = true +version = "=0.5.2" +default-features = false optional = true [dependencies.tezos_data_encoding] -workspace = true +version = "=0.5.2" optional = true [dependencies.serde_json] @@ -94,29 +95,29 @@ default = [ "bls", "testing", ] -crypto = ["dep:tezos_crypto_rs"] +crypto = ["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 d15c26e1cf06..c8badf369b77 100644 --- a/src/kernel_sdk/utils/Cargo.toml +++ b/src/kernel_sdk/utils/Cargo.toml @@ -16,10 +16,6 @@ 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" @@ -30,6 +26,14 @@ 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 f5572b7c3f998ffe94db5801fbe4b4827e3ae7c0 Mon Sep 17 00:00:00 2001 From: Michael Zaikin Date: Thu, 18 Jul 2024 11:06:50 +0100 Subject: [PATCH 3/5] Revert "Riscv/sandbox: bump crypto/encoding to 0.6.0" This reverts commit 98b101d4fa617f3b4781f8affc51a8497a0e6308. --- 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, 58 insertions(+), 52 deletions(-) diff --git a/src/riscv/Cargo.lock b/src/riscv/Cargo.lock index 664e506d495e..67a63055b74e 100644 --- a/src/riscv/Cargo.lock +++ b/src/riscv/Cargo.lock @@ -126,6 +126,12 @@ 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" @@ -223,15 +229,6 @@ 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" @@ -1164,10 +1161,11 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" dependencies = [ + "autocfg", "num-integer", "num-traits", "serde", @@ -2265,6 +2263,7 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", + "tezos_data_encoding_derive", "thiserror", "time", ] @@ -2348,19 +2347,18 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" +checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" dependencies = [ "anyhow", + "base58", "blst", - "bs58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "nom", "num-bigint", "num-traits", "p256", @@ -2368,16 +2366,15 @@ dependencies = [ "serde", "strum 0.20.0", "strum_macros 0.20.1", - "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" +checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" dependencies = [ "bit-vec", "bitvec", @@ -2387,15 +2384,16 @@ dependencies = [ "num-bigint", "num-traits", "serde", + "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" +checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" dependencies = [ "lazy_static", "once_cell", diff --git a/src/riscv/Cargo.toml b/src/riscv/Cargo.toml index d100fccf29fe..6aefa0cc6d28 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.6.0" +version = "0.5.2" 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 3d2cd461ed1c..6cf2b7e499f7 100644 --- a/src/riscv/lib/src/pvm/dummy_pvm.rs +++ b/src/riscv/lib/src/pvm/dummy_pvm.rs @@ -1,5 +1,4 @@ // SPDX-FileCopyrightText: 2024 Nomadic Labs -// SPDX-FileCopyrightText: 2024 Trilitech // // SPDX-License-Identifier: MIT @@ -154,6 +153,7 @@ 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 2e4855cefd06..aeec9f9ebcdd 100644 --- a/src/riscv/lib/src/pvm/sbi.rs +++ b/src/riscv/lib/src/pvm/sbi.rs @@ -279,7 +279,8 @@ 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()); + let hash = + tezos_crypto_rs::blake2b::digest_256(msg_bytes.as_slice()).map_err(|_| SbiError::Failed)?; 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 d0575e32df9e..1944872b2d31 100644 --- a/src/riscv/lib/src/storage.rs +++ b/src/riscv/lib/src/storage.rs @@ -1,5 +1,4 @@ // SPDX-FileCopyrightText: 2024 Nomadic Labs -// SPDX-FileCopyrightText: 2024 Trilitech // // SPDX-License-Identifier: MIT @@ -83,7 +82,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 41f9dafbdc58..b1ff9426c3ea 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().as_ref().try_into().unwrap(), + rollup_address.into_hash().0.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 6874a8d674bd..5ebfb9cefecf 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().as_ref().try_into().unwrap(), + rollup_address.into_hash().0.try_into().unwrap(), opts.common.inbox.origination_level, )?; diff --git a/src/rust_deps/Cargo.lock b/src/rust_deps/Cargo.lock index 53dadb87a853..43e4f96b3c83 100644 --- a/src/rust_deps/Cargo.lock +++ b/src/rust_deps/Cargo.lock @@ -181,6 +181,12 @@ 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" @@ -362,15 +368,6 @@ 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" @@ -1248,7 +1245,7 @@ dependencies = [ "block-modes", "cipher", "libm", - "num-bigint", + "num-bigint 0.4.4", "num-integer", "num-traits", ] @@ -2060,6 +2057,18 @@ 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" @@ -2069,7 +2078,6 @@ dependencies = [ "autocfg", "num-integer", "num-traits", - "serde", ] [[package]] @@ -3405,7 +3413,7 @@ version = "0.2.2" dependencies = [ "hex", "nom 7.1.3", - "num-bigint", + "num-bigint 0.3.3", "num-traits", "paste", "regex", @@ -3413,6 +3421,7 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", + "tezos_data_encoding_derive", "thiserror", "time", ] @@ -3456,53 +3465,52 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" +checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" dependencies = [ "anyhow", - "bs58 0.5.1", + "base58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "nom 7.1.3", - "num-bigint", + "num-bigint 0.3.3", "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.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" +checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" dependencies = [ "bit-vec", "bitvec", "hex", "lazy_static", "nom 7.1.3", - "num-bigint", + "num-bigint 0.3.3", "num-traits", "serde", + "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" +checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" dependencies = [ "lazy_static", "once_cell", @@ -4381,7 +4389,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1322a31b757f0087f110cc4a85dc5c6ccf83d0533bac04c4d3d1ce9112cc602" dependencies = [ "bech32", - "bs58 0.4.0", + "bs58", "f4jumble", "zcash_encoding", ] @@ -4431,7 +4439,7 @@ dependencies = [ "blake2b_simd 1.0.2", "blake2s_simd", "bls12_381", - "bs58 0.4.0", + "bs58", "byteorder", "chacha20poly1305", "equihash", -- GitLab From f73c283bf101f190bd523e7e9e1924359c4fccb3 Mon Sep 17 00:00:00 2001 From: Michael Zaikin Date: Thu, 18 Jul 2024 11:06:59 +0100 Subject: [PATCH 4/5] Revert "Kernel/Examples: bump crypto/encoding to 0.6.0" This reverts commit e21dc730a167eca3ec6bcb442adc3877d5a421fe. --- 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, 166 insertions(+), 176 deletions(-) diff --git a/src/kernel_dal_echo/Cargo.lock b/src/kernel_dal_echo/Cargo.lock index 3301f126832c..b19f6652dc60 100644 --- a/src/kernel_dal_echo/Cargo.lock +++ b/src/kernel_dal_echo/Cargo.lock @@ -35,6 +35,12 @@ 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" @@ -108,15 +114,6 @@ 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" @@ -487,6 +484,9 @@ 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.4.4" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" dependencies = [ "autocfg", "num-integer", @@ -1085,6 +1085,12 @@ 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" @@ -1121,6 +1127,17 @@ 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" @@ -1268,6 +1285,7 @@ version = "0.2.2" dependencies = [ "hermit", "hex", + "serde_json", "tezos-smart-rollup-core", "tezos-smart-rollup-debug", "tezos-smart-rollup-encoding", @@ -1276,6 +1294,7 @@ dependencies = [ "tezos-smart-rollup-macros", "tezos-smart-rollup-mock", "tezos-smart-rollup-storage", + "tezos-smart-rollup-utils", "tezos_crypto_rs", "tezos_data_encoding", ] @@ -1313,6 +1332,7 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", + "tezos_data_encoding_derive", "thiserror", "time", ] @@ -1379,21 +1399,32 @@ 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.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" +checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" dependencies = [ "anyhow", + "base58", "blst", - "bs58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "nom", "num-bigint", "num-traits", "p256", @@ -1401,16 +1432,15 @@ dependencies = [ "serde", "strum", "strum_macros", - "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" +checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" dependencies = [ "bit-vec", "bitvec", @@ -1420,15 +1450,16 @@ dependencies = [ "num-bigint", "num-traits", "serde", + "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" +checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" dependencies = [ "lazy_static", "once_cell", @@ -1504,21 +1535,6 @@ 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" @@ -1869,18 +1885,3 @@ 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 2ba18bdef1df..d40e34f07263 100644 --- a/src/kernel_dal_echo/Cargo.toml +++ b/src/kernel_dal_echo/Cargo.toml @@ -5,29 +5,16 @@ [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", -] } - -[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" } +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"] } diff --git a/src/kernel_tx_demo/Cargo.lock b/src/kernel_tx_demo/Cargo.lock index bc8b9cca3fe9..50b89a43094c 100644 --- a/src/kernel_tx_demo/Cargo.lock +++ b/src/kernel_tx_demo/Cargo.lock @@ -120,6 +120,12 @@ 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" @@ -242,15 +248,6 @@ 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" @@ -1470,14 +1467,14 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" dependencies = [ "autocfg 1.1.0", "num-integer", "num-traits", - "rand 0.8.5", + "rand 0.7.3", "serde", ] @@ -2494,6 +2491,7 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", + "tezos_data_encoding_derive", "thiserror", "time 0.3.23", ] @@ -2563,19 +2561,18 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" +checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" dependencies = [ "anyhow", + "base58", "blst", - "bs58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "nom", "num-bigint", "num-traits", "p256", @@ -2584,16 +2581,15 @@ dependencies = [ "serde", "strum", "strum_macros", - "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" +checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" dependencies = [ "bit-vec", "bitvec", @@ -2603,15 +2599,16 @@ dependencies = [ "num-bigint", "num-traits", "serde", + "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" +checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" dependencies = [ "lazy_static", "once_cell", diff --git a/src/kernel_tx_demo/Cargo.toml b/src/kernel_tx_demo/Cargo.toml index 125c97fc1895..9527ba8a6631 100644 --- a/src/kernel_tx_demo/Cargo.toml +++ b/src/kernel_tx_demo/Cargo.toml @@ -5,7 +5,10 @@ [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 021f07b84657..bdb556469939 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.4" +num-bigint = "0.3" num-traits = "0.2.8" -tezos_data_encoding = "0.6" -tezos_crypto_rs = { version = "0.6", default-features = false } +tezos_data_encoding = "0.5.2" +tezos_crypto_rs = { version = "0.5.2", 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 a97e249947ca..95bfeb40a3cb 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 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) -> ContractTz1Hash { + pub fn address(&self) -> Result { use crypto::PublicKeyWithHash; match self { Signer::PublicKey(pk) => pk.pk_hash(), - Signer::Tz1(address) => address.clone(), + Signer::Tz1(address) => Ok(address.clone()), } } } @@ -90,7 +90,6 @@ 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; @@ -137,7 +136,7 @@ mod test { let expected = V0Certificate { root_hash: PreimageHash::from(&root_hash), - aggregated_signature: BlsSignature::try_from_bytes(&aggregated_signature).unwrap(), + aggregated_signature: BlsSignature(aggregated_signature.to_vec()), 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 531797ae49f7..82b12a826829 100644 --- a/src/kernel_tx_demo/kernel/src/inbox/external/testing.rs +++ b/src/kernel_tx_demo/kernel/src/inbox/external/testing.rs @@ -1,9 +1,8 @@ -// SPDX-FileCopyrightText: 2022-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 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; @@ -18,10 +17,10 @@ impl Signer { pub fn arb() -> BoxedStrategy { (any::(), any::<[u8; HashType::SeedEd25519.size()]>()) .prop_map(|(is_address, seed)| { - let seed = SeedEd25519::try_from_bytes(&seed).unwrap(); + let seed = SeedEd25519(seed.to_vec()); let (pk, _sk) = seed.keypair().unwrap(); if is_address { - Signer::Tz1(pk.pk_hash()) + Signer::Tz1(pk.pk_hash().unwrap()) } else { Signer::PublicKey(pk) } @@ -33,10 +32,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::try_from_bytes(&seed).unwrap(); + let seed = SeedEd25519(seed.to_vec()); let (pk, sk) = seed.keypair().unwrap(); let signer = if is_address { - Signer::Tz1(pk.pk_hash()) + Signer::Tz1(pk.pk_hash().unwrap()) } else { Signer::PublicKey(pk) }; @@ -52,7 +51,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::try_from_bytes(&seed).unwrap(); + let seed = tezos_crypto_rs::hash::SeedEd25519(seed.to_vec()); 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 9a655d139890..8978e6a8bfd2 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 TriliTech // // SPDX-License-Identifier: MIT @@ -12,6 +12,7 @@ use self::verifiable::TransactionError; use super::Signer; +use crypto::hash::TryFromPKError; use crypto::hash::{ContractKt1Hash, ContractTz1Hash}; use crypto::CryptoError; use nom::combinator::map; @@ -90,7 +91,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) } @@ -109,7 +110,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) } @@ -199,6 +200,9 @@ 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 760ec79b8647..fd42eac0eb4a 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 TriliTech // // SPDX-License-Identifier: MIT @@ -6,6 +6,7 @@ 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}; @@ -35,8 +36,11 @@ impl BinWriter for Batch { .map(|(op, sk)| { let mut bytes = Vec::new(); op.bin_write(&mut bytes)?; - let sig = sk.sign(bytes.as_slice())?; - bytes.extend_from_slice(sig.as_ref()); + // 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); 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 a0d03ac858ef..54eeca47f02f 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,7 +4,6 @@ //! 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}; @@ -34,12 +33,8 @@ impl OperationContent { .prop_map(|(hash, ticket)| { let amount = ticket.amount_as().unwrap(); let ticket_hash = ticket.hash().unwrap(); - OperationContent::transfer( - ContractTz1Hash::try_from_bytes(&hash).unwrap(), - ticket_hash, - amount, - ) - .unwrap() + OperationContent::transfer(ContractTz1Hash(hash.to_vec()), ticket_hash, amount) + .unwrap() }) .boxed() } @@ -49,8 +44,7 @@ impl Operation { /// Generation strategy for operations. pub fn arb_with_signer() -> BoxedStrategy<(Operation, SecretKeyEd25519)> { ( - any::<[u8; HashType::SeedEd25519.size()]>() - .prop_map(|s| SeedEd25519::try_from_bytes(&s).unwrap()), + any::<[u8; HashType::SeedEd25519.size()]>().prop_map(|s| SeedEd25519(s.to_vec())), i64::arbitrary().prop_map(|i| if i < 0 { -(i + 1) } else { i }), // Mix of withdrawals & transfers bool::arbitrary().prop_flat_map(|transfer| { @@ -65,7 +59,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()) + Signer::Tz1(pk.pk_hash().unwrap()) } 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 4dd3191a7538..16b83a35fe70 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 TriliTech // // SPDX-License-Identifier: MIT @@ -11,14 +11,15 @@ 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::ContractTz1Hash; +use crypto::hash::Signature; +use crypto::hash::{ContractTz1Hash, TryFromPKError}; 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; @@ -39,6 +40,9 @@ 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), @@ -94,7 +98,7 @@ impl From> for TransactionError { pub struct VerifiableOperation<'a> { pub(crate) parsed: &'a [u8], pub(crate) operation: Operation, - pub(crate) signature: Ed25519Signature, + pub(crate) signature: Signature, } impl<'a> VerifiableOperation<'a> { @@ -117,7 +121,10 @@ impl<'a> VerifiableOperation<'a> { } }; - pk.verify_signature(&self.signature, self.parsed)?; + // 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)?; Ok(()) } @@ -130,7 +137,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)?; @@ -216,7 +223,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), Ed25519Signature::nom_read), + pair(consumed(Operation::nom_read), Signature::nom_read), |((parsed, operation), signature)| Self { parsed, operation, @@ -291,7 +298,7 @@ mod test { #[test] fn verifiable_operation_encode_decode( (operation, _key) in Operation::arb_with_signer(), - sig in any::<[u8; HashType::Ed25519Signature.size()]>(), + sig in any::<[u8; HashType::Signature.size()]>(), remaining_input in any::>(), ) { let mut encoded = Vec::new(); @@ -304,7 +311,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.as_ref(), "Sigs do not match"); + assert_eq!(sig.as_slice(), decoded.signature.0.as_slice(), "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 76ac692f3068..47c7cdd1103b 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 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 != destination.hash() { + if rollup_address.0 != destination.hash().0 { #[cfg(feature = "debug")] debug_msg!( host, @@ -336,7 +336,7 @@ mod test { let mut mock_runtime = MockHost::default(); let destination = - ContractTz1Hash::from_b58check("tz1XdRrrqrMfsFKA8iuw53xHzug9ipr6MuHq").unwrap(); + ContractTz1Hash::from_b58check("tz4MSfZsn6kMDczShy8PMeB628TNukn9hi2K").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(); + let receiver = gen_ed25519_keys().0.pk_hash().unwrap(); 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 8e08e55da33a..a97407efee6c 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 TriliTech // // SPDX-License-Identifier: MIT @@ -10,7 +10,6 @@ //! 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}; @@ -380,7 +379,7 @@ impl Account { ) -> Result<(), AccountStorageError> { let path = concat(&self.path, &PUBLIC_KEY_PATH)?; - host.store_write(&path, pk.as_ref(), 0) + host.store_write(&path, &pk.0, 0) .map_err(AccountStorageError::from) } @@ -414,7 +413,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::try_from_bytes(&buffer).unwrap())), + Ok(PK_SIZE) => Ok(Some(PublicKeyEd25519(buffer.to_vec()))), 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 9a413520e527..453cfacc4a94 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-2024 TriliTech +// SPDX-FileCopyrightText: 2022-2023 TriliTech // SPDX-FileCopyrightText: 2023 Marigold // // SPDX-License-Identifier: MIT @@ -10,7 +10,6 @@ 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")] @@ -82,7 +81,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::try_from_bytes(&dac_member).unwrap(); + let pk = PublicKeyBls(dac_member.to_vec()); res.push(pk); } Ok(res) diff --git a/src/riscv/dummy_kernel/Cargo.lock b/src/riscv/dummy_kernel/Cargo.lock index 1548d5ceb5b4..f418e2c82654 100644 --- a/src/riscv/dummy_kernel/Cargo.lock +++ b/src/riscv/dummy_kernel/Cargo.lock @@ -35,6 +35,12 @@ 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" @@ -95,15 +101,6 @@ 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" @@ -567,9 +564,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" dependencies = [ "autocfg", "num-integer", @@ -1085,6 +1082,7 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", + "tezos_data_encoding_derive", "thiserror", "time", ] @@ -1143,18 +1141,17 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" +checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" dependencies = [ "anyhow", - "bs58", + "base58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "nom", "num-bigint", "num-traits", "p256", @@ -1162,16 +1159,15 @@ dependencies = [ "serde", "strum", "strum_macros", - "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" +checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" dependencies = [ "bit-vec", "bitvec", @@ -1181,15 +1177,16 @@ dependencies = [ "num-bigint", "num-traits", "serde", + "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" +checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" dependencies = [ "lazy_static", "once_cell", diff --git a/src/riscv/dummy_kernel/Cargo.toml b/src/riscv/dummy_kernel/Cargo.toml index 5de1e5f4368f..f163d6741cb5 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.6.0" +version = "0.5.2" 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 3742cf01254c..3e1609350461 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()); + let hash = digest_256(msg.as_bytes()).unwrap(); debug_msg!(host, "{:02X?}\n", hash); unsafe { -- GitLab From b036c30a3089ff90eed4d53b5e4205d8010dba28 Mon Sep 17 00:00:00 2001 From: Michael Zaikin Date: Thu, 18 Jul 2024 11:07:04 +0100 Subject: [PATCH 5/5] Revert "Kernel/JSTZ: bump crypto/encoding to 0.6.0" This reverts commit 585e40c23b99281e6f59c0207f1821d57134eabf. --- src/riscv/jstz/Cargo.lock | 67 ++++++++++++++++++++++----------------- src/riscv/jstz/Cargo.toml | 10 +++--- 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/src/riscv/jstz/Cargo.lock b/src/riscv/jstz/Cargo.lock index 7dc527db049b..2f9de79c2c5f 100644 --- a/src/riscv/jstz/Cargo.lock +++ b/src/riscv/jstz/Cargo.lock @@ -120,6 +120,12 @@ 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" @@ -205,7 +211,7 @@ dependencies = [ "boa_interner", "boa_macros", "indexmap", - "num-bigint", + "num-bigint 0.4.5", "rustc-hash", ] @@ -227,7 +233,7 @@ dependencies = [ "icu_normalizer", "indexmap", "itertools", - "num-bigint", + "num-bigint 0.4.5", "num-integer", "num-traits", "num_enum", @@ -297,7 +303,7 @@ dependencies = [ "boa_profiler", "fast-float", "icu_properties", - "num-bigint", + "num-bigint 0.4.5", "num-traits", "regress", "rustc-hash", @@ -308,15 +314,6 @@ 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" @@ -1124,7 +1121,7 @@ dependencies = [ [[package]] name = "jstz_api" version = "0.1.0-alpha.0" -source = "git+https://github.com/jstz-dev/jstz.git?branch=emturner-rv-57#522c248f5034969c376ff4d5cf75953d014579f9" +source = "git+https://github.com/jstz-dev/jstz.git?rev=5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70#5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" dependencies = [ "base64 0.21.7", "boa_engine", @@ -1148,7 +1145,7 @@ dependencies = [ [[package]] name = "jstz_core" version = "0.1.0-alpha.0" -source = "git+https://github.com/jstz-dev/jstz.git?branch=emturner-rv-57#522c248f5034969c376ff4d5cf75953d014579f9" +source = "git+https://github.com/jstz-dev/jstz.git?rev=5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70#5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" dependencies = [ "bincode", "boa_engine", @@ -1166,7 +1163,7 @@ dependencies = [ [[package]] name = "jstz_crypto" version = "0.1.0-alpha.0" -source = "git+https://github.com/jstz-dev/jstz.git?branch=emturner-rv-57#522c248f5034969c376ff4d5cf75953d014579f9" +source = "git+https://github.com/jstz-dev/jstz.git?rev=5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70#5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" dependencies = [ "anyhow", "boa_gc", @@ -1180,7 +1177,7 @@ dependencies = [ [[package]] name = "jstz_kernel" version = "0.1.0-alpha.0" -source = "git+https://github.com/jstz-dev/jstz.git?branch=emturner-rv-57#522c248f5034969c376ff4d5cf75953d014579f9" +source = "git+https://github.com/jstz-dev/jstz.git?rev=5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70#5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" dependencies = [ "bincode", "boa_engine", @@ -1199,7 +1196,7 @@ dependencies = [ [[package]] name = "jstz_proto" version = "0.1.0-alpha.0" -source = "git+https://github.com/jstz-dev/jstz.git?branch=emturner-rv-57#522c248f5034969c376ff4d5cf75953d014579f9" +source = "git+https://github.com/jstz-dev/jstz.git?rev=5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70#5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" dependencies = [ "boa_engine", "boa_gc", @@ -1342,6 +1339,18 @@ 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" @@ -2099,7 +2108,7 @@ version = "0.2.2" dependencies = [ "hex", "nom", - "num-bigint", + "num-bigint 0.3.3", "num-traits", "paste", "regex", @@ -2107,6 +2116,7 @@ dependencies = [ "tezos-smart-rollup-host", "tezos_crypto_rs", "tezos_data_encoding", + "tezos_data_encoding_derive", "thiserror", "time", ] @@ -2192,53 +2202,52 @@ dependencies = [ [[package]] name = "tezos_crypto_rs" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8954f27b00228b1fc669cddfa0e604a40adc5ee443002d3d31abdea0b911fcb6" +checksum = "284fa6f4be10eff67ca5b2f9e8ec9544be81a07223f6a4c8d3a49a13aecce768" dependencies = [ "anyhow", - "bs58", + "base58", "byteorder", "cryptoxide", "ed25519-dalek", "hex", "libsecp256k1", - "nom", - "num-bigint", + "num-bigint 0.3.3", "num-traits", "p256", "rand 0.7.3", "serde", "strum", "strum_macros", - "tezos_data_encoding", "thiserror", "zeroize", ] [[package]] name = "tezos_data_encoding" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fff433d41c778d27df21b91e766e182b05d9a7c1331e1156ee081273d704a4" +checksum = "66c34be797025fcab7a9e417a4cc374925ee796af21f8d7df5e2330cdc2595af" dependencies = [ "bit-vec", "bitvec", "hex", "lazy_static", "nom", - "num-bigint", + "num-bigint 0.3.3", "num-traits", "serde", + "tezos_crypto_rs", "tezos_data_encoding_derive", "thiserror", ] [[package]] name = "tezos_data_encoding_derive" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f614c81c10c1ac47fdb792ce23e928591fca685d534260e073f83bc5d5f080e0" +checksum = "82e0c104555ce4d8c790567d725dc49f519d721e114202e38e851c1ac5769f08" dependencies = [ "lazy_static", "once_cell", diff --git a/src/riscv/jstz/Cargo.toml b/src/riscv/jstz/Cargo.toml index e9ce18182abb..802243843295 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" -branch = "emturner-rv-57" +rev = "5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" [workspace.dependencies.jstz_crypto] git = "https://github.com/jstz-dev/jstz.git" -branch = "emturner-rv-57" +rev = "5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" [workspace.dependencies.jstz_proto] git = "https://github.com/jstz-dev/jstz.git" -branch = "emturner-rv-57" +rev = "5d3fc13e004ce2c23eb13fe7f0ea08571e1b8a70" [workspace.dependencies.serde] version = "1.0.197" @@ -67,9 +67,9 @@ version = "4.4.6" features = ["derive"] [workspace.dependencies.tezos_crypto_rs] -version = "0.6.0" +version = "0.5.2" default-features = false [workspace.dependencies.tezos_data_encoding] -version = "0.6.0" +version = "0.5.2" default-features = false -- GitLab