From b80e25f998d4cb142e24a643d32c23d2af5a1f62 Mon Sep 17 00:00:00 2001 From: Rodi-Can Bozman Date: Fri, 17 Feb 2023 16:05:47 +0100 Subject: [PATCH 1/3] EVM/Mockup: Inbox mockup representation + message input handler --- src/kernel_evm_mockup/src/inbox.rs | 64 ++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/kernel_evm_mockup/src/inbox.rs diff --git a/src/kernel_evm_mockup/src/inbox.rs b/src/kernel_evm_mockup/src/inbox.rs new file mode 100644 index 000000000000..ab5b32412d2e --- /dev/null +++ b/src/kernel_evm_mockup/src/inbox.rs @@ -0,0 +1,64 @@ +// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2023 Nomadic Labs +// +// SPDX-License-Identifier: MIT + +#![allow(dead_code)] + +use host::input::Message; +use host::rollup_core::RawRollupCore; +use host::runtime::Runtime; + +pub struct Transaction { + pub level: i32, + pub tx: Vec, +} + +pub struct EthereumTransaction { + pub transactions: Vec, +} + +pub enum Messages { + // This enum structure is intended to be extended with Internal at + // some point. + External(EthereumTransaction), +} + +pub enum Error { + ReadInputError, +} + +impl Messages { + pub fn new(transaction: Transaction) -> Messages { + // messages is actually a tx singleton for now + let eth_tx = EthereumTransaction { + transactions: vec![transaction], + }; + Messages::External(eth_tx) + } + + pub fn of_raw_input(input: Message) -> Result { + let tx = Message::as_ref(&input).to_vec(); + let transaction = Transaction { + level: input.level, + tx, + }; + Ok(Messages::new(transaction)) + } +} + +pub struct Inbox { + pub messages: Messages, +} + +impl Inbox { + pub fn read_input( + host: &mut Host, + max_bytes: usize, + ) -> Result { + match Runtime::read_input(host, max_bytes) { + Ok(Some(input)) => Messages::of_raw_input(input), + _ => Err(Error::ReadInputError), + } + } +} -- GitLab From b534bb9a8cc190d707ff9cb3efe13068c19e9305 Mon Sep 17 00:00:00 2001 From: Rodi-Can Bozman Date: Tue, 21 Feb 2023 15:18:21 +0100 Subject: [PATCH 2/3] EVM/Mockup: Blueprint queue mockup --- src/kernel_evm_mockup/src/blueprint.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/kernel_evm_mockup/src/blueprint.rs diff --git a/src/kernel_evm_mockup/src/blueprint.rs b/src/kernel_evm_mockup/src/blueprint.rs new file mode 100644 index 000000000000..5002bb10f753 --- /dev/null +++ b/src/kernel_evm_mockup/src/blueprint.rs @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2022-2023 TriliTech +// SPDX-FileCopyrightText: 2023 Nomadic Labs +// +// SPDX-License-Identifier: MIT + +#![allow(dead_code)] + +use crate::inbox::Messages; + +pub struct Queue { + // In our case, to make it simple and straightforward it will be + // an array of pendings transactions even though it'll be only a + // singleton for our needs. + pub proposal: Vec, +} + +impl Queue { + pub fn add(mut queue: Queue, messages: Messages) { + queue.proposal.push(messages) + } +} -- GitLab From bc3961071ba7a7bc49cb47fae8ff9a53a38ba3d4 Mon Sep 17 00:00:00 2001 From: Rodi-Can Bozman Date: Wed, 22 Feb 2023 10:51:14 +0100 Subject: [PATCH 3/3] EVM/Mockup: add a dummy stage_one in lib --- src/kernel_evm_mockup/src/lib.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/kernel_evm_mockup/src/lib.rs b/src/kernel_evm_mockup/src/lib.rs index 8f7c88ef0a62..8be3cbe9649c 100644 --- a/src/kernel_evm_mockup/src/lib.rs +++ b/src/kernel_evm_mockup/src/lib.rs @@ -8,15 +8,25 @@ use host::runtime::Runtime; use kernel::kernel_entry; use crate::account::Account; +use crate::blueprint::Queue; use crate::error::Error; +use crate::inbox::Inbox; use crate::storage::store_account; use crate::wei::{from_eth, Wei}; mod account; +mod blueprint; mod error; +mod inbox; mod storage; mod wei; +pub fn stage_one(host: &mut Host, max_bytes: usize, queue: Queue) { + if let Ok(messages) = Inbox::read_input(host, max_bytes) { + Queue::add(queue, messages) + } +} + pub fn init_mock_account(host: &mut Host) -> Result<(), Error> { let hash = ("6471a723296395cf1dcc568941affd7a390f94ce").to_ascii_lowercase(); -- GitLab