From b261b3931f3bf179e991371d8ac9b1d1a248dcf7 Mon Sep 17 00:00:00 2001 From: F Bojarski Date: Tue, 2 Dec 2025 15:59:50 +0530 Subject: [PATCH] feat: asm blockdata Signed-off-by: F Bojarski --- blockdata/blockdata.asm | 63 +++++++++++++++++++++++++++++++++++++++++ constants/evm.zkasm | 9 ++++++ 2 files changed, 72 insertions(+) create mode 100644 blockdata/blockdata.asm diff --git a/blockdata/blockdata.asm b/blockdata/blockdata.asm new file mode 100644 index 00000000..f92293af --- /dev/null +++ b/blockdata/blockdata.asm @@ -0,0 +1,63 @@ +;; BLOCKDATA module + +;; The BLOCKDATA module is responsible for storing block-constant values: +;; 1. COINBASE +;; 2. TIMESTAMP +;; 3. NUMBER +;; 4. PREVRANDAO +;; 5. GASLIMIT +;; 6. CHAINID +;; 7. BASEFEE +;; 8. BLOBBASEFEE + +pub fn bin(INST=0x43 u8, BLOCK_NUMBER u32, VALUE u256, ARGUMENT_1 u256) -> (VALUE_NEXT_BLOCK u256) { + + if INST==EVM_INST_COINBASE goto coinbase + if INST==EVM_INST_TIMESTAMP goto timestamp ;;TODO + if INST==EVM_INST_NUMBER goto number + if INST==EVM_INST_PREVRANDAO goto prevrandao + if INST==EVM_INST_GASLIMIT goto gaslimit + if INST==EVM_INST_CHAINID goto chainid + if INST==EVM_INST_BASEFEE goto basefee + if INST==EVM_INST_BLOBBASEFEE goto blobbasefee + goto exit_f + + var b u1 + +exit_f: + fail +coinbase: +;; nothing to do + return +timestamp: +;; need to prove a (strict) increase of timestamp + var tmp u256 + b, tmp = VALUE_NEXT_BLOCK - VALUE - 1 + if b == 1 exit_f + return +number: +;; prove the value of BLOCK_NUMBER + if BLOCK_NUMBER != VALUE exit_f +;; block number increases by 1 + b, VALUE_NEXT_BLOCK = VALUE + 1 + if b != 0 + exit_f + return +prevrandao: +;; nothing to prove + return +gaslimit: + ;; TODO + return +chainid: +;; prove constancy + if VALUE_NEXT_BLOCK != VALUE exit_f + return +basefee: +;; TODO + return +blobbasefee: +;; TODO + return +} + \ No newline at end of file diff --git a/constants/evm.zkasm b/constants/evm.zkasm index 8eff1dd4..4ddde319 100644 --- a/constants/evm.zkasm +++ b/constants/evm.zkasm @@ -20,11 +20,20 @@ const EVM_INST_SHL = 0x1b const EVM_INST_SHR = 0x1c const EVM_INST_SAR = 0x1d const EVM_INST_CLZ = 0x1e +const EVM_INST_COINBASE = 0x41 +const EVM_INST_TIMESTAMP = 0x42 +const EVM_INST_NUMBER = 0x43 +const EVM_INST_PREVRANDAO = 0x44 +const EVM_INST_GASLIMIT = 0x45 +const EVM_INST_CHAINID = 0x46 +const EVM_INST_BASEFEE = 0x48 +const EVM_INST_BLOBBASEFEE = 0x4A const EVM_INST_CREATE = 0xF0 const EVM_INST_CALL = 0xF1 const EVM_INST_CALLCODE = 0xF2 const EVM_INST_CREATE2 = 0xF5 + ;; ============================================================================= ;; Wcp ;; =============================================================================