From a17c6231a712046a2e2933cfe784ecc1e4a2c3d1 Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Fri, 7 Apr 2023 18:26:55 -0400 Subject: [PATCH 1/7] Impl timestamp opcode for interpreter --- evm/src/cpu/kernel/interpreter.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/evm/src/cpu/kernel/interpreter.rs b/evm/src/cpu/kernel/interpreter.rs index 3242df6b..b9938552 100644 --- a/evm/src/cpu/kernel/interpreter.rs +++ b/evm/src/cpu/kernel/interpreter.rs @@ -349,7 +349,7 @@ impl<'a> Interpreter<'a> { 0x3f => todo!(), // "EXTCODEHASH", 0x40 => todo!(), // "BLOCKHASH", 0x41 => todo!(), // "COINBASE", - 0x42 => todo!(), // "TIMESTAMP", + 0x42 => self.run_timestamp(), // "TIMESTAMP", 0x43 => todo!(), // "NUMBER", 0x44 => todo!(), // "DIFFICULTY", 0x45 => todo!(), // "GASLIMIT", @@ -659,6 +659,10 @@ impl<'a> Interpreter<'a> { } } + fn run_timestamp(&mut self) { + self.push(self.get_global_metadata_field(GlobalMetadata::BlockTimestamp)) + } + fn run_prover_input(&mut self) -> anyhow::Result<()> { let prover_input_fn = self .prover_inputs_map From 60fed608ef7545594da97872933292b63f8fde59 Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Fri, 7 Apr 2023 18:27:34 -0400 Subject: [PATCH 2/7] Impl number opcode for interpreter --- evm/src/cpu/kernel/interpreter.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/evm/src/cpu/kernel/interpreter.rs b/evm/src/cpu/kernel/interpreter.rs index b9938552..d1ab20fb 100644 --- a/evm/src/cpu/kernel/interpreter.rs +++ b/evm/src/cpu/kernel/interpreter.rs @@ -350,7 +350,7 @@ impl<'a> Interpreter<'a> { 0x40 => todo!(), // "BLOCKHASH", 0x41 => todo!(), // "COINBASE", 0x42 => self.run_timestamp(), // "TIMESTAMP", - 0x43 => todo!(), // "NUMBER", + 0x43 => self.run_number(), // "NUMBER", 0x44 => todo!(), // "DIFFICULTY", 0x45 => todo!(), // "GASLIMIT", 0x46 => todo!(), // "CHAINID", @@ -663,6 +663,10 @@ impl<'a> Interpreter<'a> { self.push(self.get_global_metadata_field(GlobalMetadata::BlockTimestamp)) } + fn run_number(&mut self) { + self.push(self.get_global_metadata_field(GlobalMetadata::BlockNumber)) + } + fn run_prover_input(&mut self) -> anyhow::Result<()> { let prover_input_fn = self .prover_inputs_map From 86bd055b5f934d2feae9e98bbaa07702239cbdac Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Fri, 7 Apr 2023 18:28:59 -0400 Subject: [PATCH 3/7] Impl difficulty opcode for interpreter --- evm/src/cpu/kernel/interpreter.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/evm/src/cpu/kernel/interpreter.rs b/evm/src/cpu/kernel/interpreter.rs index d1ab20fb..7fc0b0d6 100644 --- a/evm/src/cpu/kernel/interpreter.rs +++ b/evm/src/cpu/kernel/interpreter.rs @@ -351,7 +351,7 @@ impl<'a> Interpreter<'a> { 0x41 => todo!(), // "COINBASE", 0x42 => self.run_timestamp(), // "TIMESTAMP", 0x43 => self.run_number(), // "NUMBER", - 0x44 => todo!(), // "DIFFICULTY", + 0x44 => self.run_difficulty(), // "DIFFICULTY", 0x45 => todo!(), // "GASLIMIT", 0x46 => todo!(), // "CHAINID", 0x48 => todo!(), // "BASEFEE", @@ -667,6 +667,10 @@ impl<'a> Interpreter<'a> { self.push(self.get_global_metadata_field(GlobalMetadata::BlockNumber)) } + fn run_difficulty(&mut self) { + self.push(self.get_global_metadata_field(GlobalMetadata::BlockDifficulty)) + } + fn run_prover_input(&mut self) -> anyhow::Result<()> { let prover_input_fn = self .prover_inputs_map From e3572f1d1086f828d00d0bb2675eebe10a5234eb Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Fri, 7 Apr 2023 18:29:45 -0400 Subject: [PATCH 4/7] Impl basefee opcode for interpreter --- evm/src/cpu/kernel/interpreter.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/evm/src/cpu/kernel/interpreter.rs b/evm/src/cpu/kernel/interpreter.rs index 7fc0b0d6..4acb5d54 100644 --- a/evm/src/cpu/kernel/interpreter.rs +++ b/evm/src/cpu/kernel/interpreter.rs @@ -354,7 +354,7 @@ impl<'a> Interpreter<'a> { 0x44 => self.run_difficulty(), // "DIFFICULTY", 0x45 => todo!(), // "GASLIMIT", 0x46 => todo!(), // "CHAINID", - 0x48 => todo!(), // "BASEFEE", + 0x48 => self.run_basefee(), // "BASEFEE", 0x49 => self.run_prover_input()?, // "PROVER_INPUT", 0x50 => self.run_pop(), // "POP", 0x51 => self.run_mload(), // "MLOAD", @@ -671,6 +671,10 @@ impl<'a> Interpreter<'a> { self.push(self.get_global_metadata_field(GlobalMetadata::BlockDifficulty)) } + fn run_basefee(&mut self) { + self.push(self.get_global_metadata_field(GlobalMetadata::BlockBaseFee)) + } + fn run_prover_input(&mut self) -> anyhow::Result<()> { let prover_input_fn = self .prover_inputs_map From ae8ee27eb87f2ecbcae89befc9b7df0416eac7d7 Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Fri, 7 Apr 2023 18:30:48 -0400 Subject: [PATCH 5/7] Impl coinbase opcode for interpreter --- evm/src/cpu/kernel/interpreter.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/evm/src/cpu/kernel/interpreter.rs b/evm/src/cpu/kernel/interpreter.rs index 4acb5d54..c4430d9a 100644 --- a/evm/src/cpu/kernel/interpreter.rs +++ b/evm/src/cpu/kernel/interpreter.rs @@ -348,7 +348,7 @@ impl<'a> Interpreter<'a> { 0x3e => todo!(), // "RETURNDATACOPY", 0x3f => todo!(), // "EXTCODEHASH", 0x40 => todo!(), // "BLOCKHASH", - 0x41 => todo!(), // "COINBASE", + 0x41 => self.run_coinbase(), // "COINBASE", 0x42 => self.run_timestamp(), // "TIMESTAMP", 0x43 => self.run_number(), // "NUMBER", 0x44 => self.run_difficulty(), // "DIFFICULTY", @@ -659,6 +659,10 @@ impl<'a> Interpreter<'a> { } } + fn run_coinbase(&mut self) { + self.push(self.get_global_metadata_field(GlobalMetadata::BlockBeneficiary)) + } + fn run_timestamp(&mut self) { self.push(self.get_global_metadata_field(GlobalMetadata::BlockTimestamp)) } From 9e6f284b2663121085c536b7ed70c96bdb4981b8 Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Fri, 7 Apr 2023 18:32:42 -0400 Subject: [PATCH 6/7] Impl chain_id opcode for interpreter --- evm/src/cpu/kernel/interpreter.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/evm/src/cpu/kernel/interpreter.rs b/evm/src/cpu/kernel/interpreter.rs index c4430d9a..f99c0363 100644 --- a/evm/src/cpu/kernel/interpreter.rs +++ b/evm/src/cpu/kernel/interpreter.rs @@ -353,7 +353,7 @@ impl<'a> Interpreter<'a> { 0x43 => self.run_number(), // "NUMBER", 0x44 => self.run_difficulty(), // "DIFFICULTY", 0x45 => todo!(), // "GASLIMIT", - 0x46 => todo!(), // "CHAINID", + 0x46 => self.run_chainid(), // "CHAINID", 0x48 => self.run_basefee(), // "BASEFEE", 0x49 => self.run_prover_input()?, // "PROVER_INPUT", 0x50 => self.run_pop(), // "POP", @@ -679,6 +679,10 @@ impl<'a> Interpreter<'a> { self.push(self.get_global_metadata_field(GlobalMetadata::BlockBaseFee)) } + fn run_chainid(&mut self) { + self.push(self.get_global_metadata_field(GlobalMetadata::BlockChainId)) + } + fn run_prover_input(&mut self) -> anyhow::Result<()> { let prover_input_fn = self .prover_inputs_map From 2fae2fbcc0afa123c10cd74f40d6ccfcfa6e0b43 Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Fri, 7 Apr 2023 18:33:50 -0400 Subject: [PATCH 7/7] Impl gaslimit opcode for interpreter --- evm/src/cpu/kernel/interpreter.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/evm/src/cpu/kernel/interpreter.rs b/evm/src/cpu/kernel/interpreter.rs index f99c0363..3f699260 100644 --- a/evm/src/cpu/kernel/interpreter.rs +++ b/evm/src/cpu/kernel/interpreter.rs @@ -352,7 +352,7 @@ impl<'a> Interpreter<'a> { 0x42 => self.run_timestamp(), // "TIMESTAMP", 0x43 => self.run_number(), // "NUMBER", 0x44 => self.run_difficulty(), // "DIFFICULTY", - 0x45 => todo!(), // "GASLIMIT", + 0x45 => self.run_gaslimit(), // "GASLIMIT", 0x46 => self.run_chainid(), // "CHAINID", 0x48 => self.run_basefee(), // "BASEFEE", 0x49 => self.run_prover_input()?, // "PROVER_INPUT", @@ -675,6 +675,10 @@ impl<'a> Interpreter<'a> { self.push(self.get_global_metadata_field(GlobalMetadata::BlockDifficulty)) } + fn run_gaslimit(&mut self) { + self.push(self.get_global_metadata_field(GlobalMetadata::BlockGasLimit)) + } + fn run_basefee(&mut self) { self.push(self.get_global_metadata_field(GlobalMetadata::BlockBaseFee)) }