From ce203cb4cf57055cc922d2786ef1cd8a25691ba3 Mon Sep 17 00:00:00 2001 From: Marcelo Fornet Date: Fri, 22 Apr 2022 12:58:50 +0200 Subject: [PATCH] Feat(engine-types): optional serde integration (#468) --- Cargo.lock | 2 ++ engine-transactions/Cargo.toml | 2 ++ engine-transactions/src/eip_2930.rs | 3 +++ engine-types/Cargo.toml | 2 ++ engine-types/src/types/address.rs | 3 +++ engine-types/src/types/wei.rs | 3 +++ engine/Cargo.toml | 2 ++ engine/src/parameters.rs | 3 +++ 8 files changed, 20 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 6bd14e47a..f7f103c63 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -239,6 +239,7 @@ dependencies = [ "evm", "hex", "rlp", + "serde", ] [[package]] @@ -3401,6 +3402,7 @@ dependencies = [ "fixed-hash", "impl-codec", "impl-rlp", + "impl-serde", "scale-info", "uint", ] diff --git a/engine-transactions/Cargo.toml b/engine-transactions/Cargo.toml index e8f7bc6a8..a52ce7129 100644 --- a/engine-transactions/Cargo.toml +++ b/engine-transactions/Cargo.toml @@ -19,6 +19,8 @@ aurora-engine-precompiles = { path = "../engine-precompiles", default-features = evm = { git = "https://github.com/aurora-is-near/sputnikvm.git", rev = "37448b6cacd98b06282cff5a559684505c29bd2b", default-features = false } rlp = { version = "0.5.0", default-features = false } hex = { version = "0.4", default-features = false, features = ["alloc"] } +serde = { version = "1", features = ["derive"], optional = true } [features] std = ["aurora-engine-types/std", "aurora-engine-precompiles/std", "evm/std", "rlp/std", "hex/std"] +impl-serde = ["aurora-engine-types/impl-serde", "serde"] diff --git a/engine-transactions/src/eip_2930.rs b/engine-transactions/src/eip_2930.rs index 48a83f6a3..dea7e7b97 100644 --- a/engine-transactions/src/eip_2930.rs +++ b/engine-transactions/src/eip_2930.rs @@ -3,11 +3,14 @@ use aurora_engine_sdk as sdk; use aurora_engine_types::types::{Address, Wei}; use aurora_engine_types::{Vec, H160, H256, U256}; use rlp::{Decodable, DecoderError, Encodable, Rlp, RlpStream}; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; /// Type indicator (per EIP-2718) for access list transactions pub const TYPE_BYTE: u8 = 0x01; #[derive(Debug, Eq, PartialEq, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct AccessTuple { pub address: H160, pub storage_keys: Vec, diff --git a/engine-types/Cargo.toml b/engine-types/Cargo.toml index 275ec026d..d1f971cfb 100644 --- a/engine-types/Cargo.toml +++ b/engine-types/Cargo.toml @@ -18,6 +18,7 @@ ethabi = { git = "https://github.com/darwinia-network/ethabi", branch = "xavier- hex = { version = "0.4", default-features = false, features = ["alloc"] } primitive-types = { version = "0.10.0", default-features = false, features = ["rlp"] } sha3 = { version = "0.9.1", default-features = false } +serde = { version = "1", features = ["derive"], optional = true } [dev-dependencies] bstr = "0.2" @@ -28,3 +29,4 @@ rand = "0.7.3" [features] default = ["std"] std = ["primitive-types/std"] +impl-serde = ["primitive-types/impl-serde", "serde"] diff --git a/engine-types/src/types/address.rs b/engine-types/src/types/address.rs index 78d0b6673..f006c3cd6 100755 --- a/engine-types/src/types/address.rs +++ b/engine-types/src/types/address.rs @@ -1,9 +1,12 @@ use crate::{format, String, H160}; use borsh::maybestd::io; use borsh::{BorshDeserialize, BorshSerialize}; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; /// Base Eth Address type #[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Address(H160); impl Address { diff --git a/engine-types/src/types/wei.rs b/engine-types/src/types/wei.rs index b70b00e5e..764229983 100644 --- a/engine-types/src/types/wei.rs +++ b/engine-types/src/types/wei.rs @@ -3,6 +3,8 @@ use crate::types::balance::error; use crate::types::Fee; use crate::{Add, Display, Sub, SubAssign, U256}; use borsh::{BorshDeserialize, BorshSerialize}; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; pub const ZERO_NEP141_WEI: NEP141Wei = NEP141Wei::new(0); pub const ZERO_WEI: Wei = Wei::new_u64(0); @@ -66,6 +68,7 @@ impl SubAssign for NEP141Wei { /// Newtype to distinguish balances (denominated in Wei) from other U256 types. #[derive(Default, Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Wei(U256); impl Wei { diff --git a/engine/Cargo.toml b/engine/Cargo.toml index e5c173e3e..cb0ae0ec5 100644 --- a/engine/Cargo.toml +++ b/engine/Cargo.toml @@ -38,6 +38,7 @@ ethabi = { git = "https://github.com/darwinia-network/ethabi", branch = "xavier- hex = { version = "0.4", default-features = false, features = ["alloc"] } byte-slice-cast = { version = "1.0", default-features = false } rjson = { git = "https://github.com/aurora-is-near/rjson", rev = "cc3da949", default-features = false, features = ["integer"] } +serde = { version = "1", features = ["derive"], optional = true } [dev-dependencies] serde = { version = "1", features = ["derive"] } @@ -58,3 +59,4 @@ mainnet = ["contract", "log"] testnet = ["contract", "log"] mainnet-test = ["meta-call"] testnet-test = ["meta-call"] +impl-serde = ["aurora-engine-types/impl-serde", "serde", "aurora-engine-transactions/impl-serde"] diff --git a/engine/src/parameters.rs b/engine/src/parameters.rs index 56b789af7..ecc6d6738 100644 --- a/engine/src/parameters.rs +++ b/engine/src/parameters.rs @@ -9,6 +9,8 @@ use crate::prelude::{ use crate::proof::Proof; use aurora_engine_types::types::{Fee, NEP141Wei, Yocto}; use evm::backend::Log; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; /// Borsh-encoded parameters for the `new` function. #[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize)] @@ -41,6 +43,7 @@ pub struct MetaCallArgs { /// Borsh-encoded log for use in a `SubmitResult`. #[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct ResultLog { pub address: Address, pub topics: Vec,