Skip to content

Commit 6ef66b8

Browse files
letypequividelespoubellesOlivierBBBDavePearceamkCha
authored
feat: shanghai hard fork (#647)
Signed-off-by: F Bojarski <[email protected]> Signed-off-by: François Bojarski <[email protected]> Co-authored-by: Olivier Bégassat <[email protected]> Co-authored-by: David Pearce <[email protected]> Co-authored-by: DavePearce <[email protected]> Co-authored-by: amkCha <[email protected]>
1 parent cbc6bcb commit 6ef66b8

File tree

503 files changed

+16632
-26
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

503 files changed

+16632
-26
lines changed

.github/workflows/check.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515

1616
- name: Install Go Corset
1717
shell: bash
18-
run: go install github.com/consensys/go-corset/cmd/[email protected].1
18+
run: go install github.com/consensys/go-corset/cmd/[email protected].7
1919

2020
- name: Build Constraints
2121
run: make -B zkevm.bin

Makefile

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,19 @@ EXP := exp
2929

3030
GAS := gas
3131

32-
HUB := hub
32+
HUB_LON := $(wildcard hub/london/*.lisp) \
33+
$(wildcard hub/london/**/*.lisp) \
34+
$(wildcard hub/london/**/**/*.lisp) \
35+
$(wildcard hub/london/**/**/**/*.lisp) \
36+
$(wildcard hub/london/**/**/**/**/*.lisp) \
37+
$(wildcard hub/london/**/**/**/**/**/*.lisp)
38+
39+
HUB_SHAN := $(wildcard hub/shanghai/*.lisp) \
40+
$(wildcard hub/shanghai/**/*.lisp) \
41+
$(wildcard hub/shanghai/**/**/*.lisp) \
42+
$(wildcard hub/shanghai/**/**/**/*.lisp) \
43+
$(wildcard hub/shanghai/**/**/**/**/*.lisp) \
44+
$(wildcard hub/shanghai/**/**/**/**/**/*.lisp)
3345

3446
LIBRARY := library
3547

@@ -43,7 +55,13 @@ MMIO := mmio
4355

4456
MXP := mxp
4557

46-
OOB := oob
58+
OOB_LON := $(wildcard oob/london/*.lisp) \
59+
$(wildcard oob/london/**/*.lisp) \
60+
$(wildcard oob/london/**/**/*.lisp)
61+
62+
OOB_SHAN := $(wildcard oob/shanghai/*.lisp) \
63+
$(wildcard oob/shanghai/**/*.lisp) \
64+
$(wildcard oob/shanghai/**/**/*.lisp)
4765

4866
RLP_ADDR := rlpaddr
4967

@@ -65,12 +83,15 @@ TABLES := reftables
6583

6684
TRM := trm
6785

68-
TXN_DATA := txndata
86+
TXN_DATA_LON := $(wildcard txndata/london/*.lisp) \
87+
$(wildcard txndata/london/**/*.lisp)
88+
89+
TXN_DATA_SHAN := $(wildcard txndata/shanghai/*.lisp) \
90+
$(wildcard txndata/shanghai/**/*.lisp)
6991

7092
WCP := wcp
7193

72-
# Corset is order sensitive - to compile, we load the constants first
73-
ZKEVM_MODULES := ${CONSTANTS} \
94+
ZKEVM_MODULES_COMMON := ${CONSTANTS} \
7495
${ALU} \
7596
${BIN} \
7697
${BLAKE2f_MODEXP_DATA} \
@@ -80,14 +101,12 @@ ZKEVM_MODULES := ${CONSTANTS} \
80101
${EUC} \
81102
${EXP} \
82103
${GAS} \
83-
${HUB} \
84104
${LIBRARY} \
85105
${LOG_DATA} \
86106
${LOG_INFO} \
87107
${MMIO} \
88108
${MMU} \
89109
${MXP} \
90-
${OOB} \
91110
${RLP_ADDR} \
92111
${RLP_TXN} \
93112
${RLP_TXRCPT} \
@@ -98,8 +117,12 @@ ZKEVM_MODULES := ${CONSTANTS} \
98117
${STP} \
99118
${TABLES} \
100119
${TRM} \
101-
${TXN_DATA} \
102120
${WCP}
103121

122+
ZKEVM_MODULES_LON := ${ZKEVM_MODULES_COMMON} \
123+
${HUB_LON} \
124+
${OOB_LON} \
125+
${TXN_DATA_LON}
126+
104127
zkevm.bin: ${ZKEVM_MODULES}
105-
${GO_CORSET_COMPILE} -o $@ ${ZKEVM_MODULES}
128+
${GO_CORSET_COMPILE} -o $@ ${ZKEVM_MODULES_LON}

constants/constants.lisp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
(defconst
2+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;
4+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EVM Forks ;;
5+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;
6+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7+
EVM_LONDON 14
8+
EVM_PARIS (+ 1 EVM_LONDON)
9+
EVM_SHANGHAI (+ 2 EVM_LONDON)
10+
EVM_CANCUN (+ 3 EVM_LONDON)
11+
EVM_PRAGUE (+ 4 EVM_LONDON)
12+
;; Default fork
13+
(EVM_FORK :i8 :extern) EVM_LONDON
214
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
315
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;
416
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EVM INSTRUCTIONS ;;

debug.bin

102 KB
Binary file not shown.
File renamed without changes.
File renamed without changes.

hub/columns/miscellaneous.lisp renamed to hub/london/columns/miscellaneous.lisp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353

5454
;; OOB columns
5555
(OOB_INST :i16 )
56-
(OOB_DATA :array[1:10] :i128 ) ;; TODO: only 9 for LONDON
56+
(OOB_DATA :array[1:9] :i128 )
5757

5858
;; STP columns
5959
( STP_INSTRUCTION :byte )
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

hub/shanghai/columns/account.lisp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
(module hub)
2+
3+
(defperspective account
4+
5+
;; selector
6+
PEEK_AT_ACCOUNT
7+
8+
;; account-row columns
9+
((ADDRESS_HI :i32)
10+
(ADDRESS_LO :i128)
11+
(NONCE :i64 :display :dec)
12+
(NONCE_NEW :i64 :display :dec)
13+
(BALANCE :i128 :display :dec)
14+
(BALANCE_NEW :i128 :display :dec)
15+
(CODE_SIZE :i32 :display :dec)
16+
(CODE_SIZE_NEW :i32 :display :dec)
17+
(CODE_HASH_HI :i128)
18+
(CODE_HASH_LO :i128)
19+
(CODE_HASH_HI_NEW :i128)
20+
(CODE_HASH_LO_NEW :i128)
21+
(HAS_CODE :binary) ;; rmk1: explicitly set on every account row, de facto binary
22+
(HAS_CODE_NEW :binary) ;; rmk1
23+
(CODE_FRAGMENT_INDEX :i32 :display :dec)
24+
(ROMLEX_FLAG :binary@prove)
25+
(EXISTS :binary) ;; rmk1
26+
(EXISTS_NEW :binary) ;; rmk1
27+
(WARMTH :binary@prove) ;; rmk2: should be binary even without the explicit constraint; we keep it as a safety;
28+
(WARMTH_NEW :binary@prove) ;; rmk2
29+
(MARKED_FOR_SELFDESTRUCT :binary@prove) ;; rmk2
30+
(MARKED_FOR_SELFDESTRUCT_NEW :binary@prove) ;; rmk2
31+
(DEPLOYMENT_NUMBER :i32 :display :dec)
32+
(DEPLOYMENT_NUMBER_NEW :i32 :display :dec)
33+
(DEPLOYMENT_STATUS :binary@prove) ;; rmk2
34+
(DEPLOYMENT_STATUS_NEW :binary@prove) ;; rmk2
35+
36+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
37+
;; ;;
38+
;; TRM module lookup columns ;;
39+
;; ;;
40+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
41+
42+
(TRM_FLAG :binary@prove)
43+
(IS_PRECOMPILE :binary@prove) ;; rmk: this flag is set from the TRM module the very first time an address is encountered in a conflation, and is conflation-constant; the @prove is redundant; we keep it for safety;
44+
(TRM_RAW_ADDRESS_HI :i128)
45+
46+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
47+
;; ;;
48+
;; RLPADDR module lookup columns ;;
49+
;; ;;
50+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51+
52+
(RLPADDR_FLAG :binary@prove)
53+
(RLPADDR_RECIPE :i8)
54+
(RLPADDR_DEP_ADDR_HI :i32)
55+
(RLPADDR_DEP_ADDR_LO :i128)
56+
(RLPADDR_SALT_HI :i128)
57+
(RLPADDR_SALT_LO :i128)
58+
(RLPADDR_KEC_HI :i128)
59+
(RLPADDR_KEC_LO :i128)
60+
))
61+
62+

hub/shanghai/columns/context.lisp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
(module hub)
2+
3+
(defperspective context
4+
5+
;; selector
6+
PEEK_AT_CONTEXT
7+
8+
;; context-row columns
9+
(
10+
;; (immutable) context data
11+
( CONTEXT_NUMBER :i32 ) ;; rmk: deduced from the HUB_STAMP; could likely be reduced to :i24 (i.e. ~ 16M); though: limitless prover ...
12+
( CALL_STACK_DEPTH :i11 ) ;; in the range [0 .. 1024] (inclusive)
13+
( IS_ROOT :binary@prove ) ;; rmk: set at the creation of the context explicitly to 0 or 1; imposed to be context-constant; the @prove is therefore redundant; we keep it for now as a safet;
14+
( IS_STATIC :binary@prove ) ;; rmk: same remark
15+
16+
;; (immutable) account
17+
( ACCOUNT_ADDRESS_HI :i32 )
18+
( ACCOUNT_ADDRESS_LO :i128 )
19+
( ACCOUNT_DEPLOYMENT_NUMBER :i32 )
20+
21+
;; (immutable) account whose bytecode is being executed
22+
( BYTE_CODE_ADDRESS_HI :i32 )
23+
( BYTE_CODE_ADDRESS_LO :i128 )
24+
( BYTE_CODE_DEPLOYMENT_NUMBER :i32 )
25+
( BYTE_CODE_DEPLOYMENT_STATUS :i32 )
26+
( BYTE_CODE_CODE_FRAGMENT_INDEX :i32 )
27+
28+
;; (immutable) caller account
29+
( CALL_DATA_CONTEXT_NUMBER :i32 )
30+
( CALLER_ADDRESS_HI :i32 )
31+
( CALLER_ADDRESS_LO :i128 )
32+
( CALL_VALUE :i128 )
33+
34+
;; (immutable) parameters set at CALL
35+
( CALL_DATA_OFFSET :i32 )
36+
( CALL_DATA_SIZE :i32 )
37+
( RETURN_AT_OFFSET :i32 )
38+
( RETURN_AT_CAPACITY :i32 )
39+
40+
;; (mutable) parameters set when execution resumes after a CALL / CREATE
41+
( UPDATE :binary@prove )
42+
( RETURN_DATA_OFFSET :i32 )
43+
( RETURN_DATA_SIZE :i32 )
44+
( RETURN_DATA_CONTEXT_NUMBER :i32 )
45+
))
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
(module hub)
2+
3+
(defperspective misc
4+
;; selector
5+
PEEK_AT_MISCELLANEOUS
6+
7+
;; miscellaneous-row columns
8+
(
9+
( EXP_FLAG :binary@prove )
10+
( MMU_FLAG :binary@prove )
11+
( MXP_FLAG :binary@prove )
12+
( OOB_FLAG :binary@prove )
13+
( STP_FLAG :binary@prove )
14+
15+
;; EXP columns (DONE)
16+
( EXP_INST :i16 )
17+
( EXP_DATA :array [5] :i128 )
18+
19+
;; MMU columns (DONE)
20+
( MMU_INST :i16 :display :hex)
21+
( MMU_SRC_ID :i32 )
22+
( MMU_TGT_ID :i32 )
23+
( MMU_AUX_ID :i32 )
24+
( MMU_SRC_OFFSET_LO :i128 )
25+
( MMU_SRC_OFFSET_HI :i128 )
26+
( MMU_TGT_OFFSET_LO :i128 )
27+
( MMU_SIZE :i32 )
28+
( MMU_REF_OFFSET :i32 )
29+
( MMU_REF_SIZE :i32 )
30+
( MMU_SUCCESS_BIT :binary@prove )
31+
( MMU_LIMB_1 :i128 )
32+
( MMU_LIMB_2 :i128 )
33+
( MMU_PHASE :i32 )
34+
( MMU_EXO_SUM :i32 )
35+
36+
;; MXP colummns
37+
( MXP_INST :byte )
38+
( MXP_MXPX :binary )
39+
( MXP_DEPLOYS :binary )
40+
( MXP_OFFSET_1_HI :i128 )
41+
( MXP_OFFSET_1_LO :i128 )
42+
( MXP_OFFSET_2_HI :i128 )
43+
( MXP_OFFSET_2_LO :i128 )
44+
( MXP_SIZE_1_HI :i128 )
45+
( MXP_SIZE_1_LO :i128 )
46+
( MXP_SIZE_2_HI :i128 )
47+
( MXP_SIZE_2_LO :i128 )
48+
( MXP_WORDS :i128 )
49+
( MXP_GAS_MXP :i128 )
50+
( MXP_MTNTOP :binary@prove )
51+
( MXP_SIZE_1_NONZERO_NO_MXPX :binary@prove )
52+
( MXP_SIZE_2_NONZERO_NO_MXPX :binary@prove )
53+
54+
;; OOB columns
55+
(OOB_INST :i16 )
56+
(OOB_DATA :array[1:10] :i128 )
57+
58+
;; STP columns
59+
( STP_INSTRUCTION :byte )
60+
( STP_GAS_HI :i128 )
61+
( STP_GAS_LO :i128 )
62+
( STP_VALUE_HI :i128 )
63+
( STP_VALUE_LO :i128 )
64+
( STP_EXISTS :binary)
65+
( STP_WARMTH :binary)
66+
( STP_OOGX :binary)
67+
( STP_GAS_MXP :i64 )
68+
( STP_GAS_UPFRONT_GAS_COST :i64 )
69+
( STP_GAS_PAID_OUT_OF_POCKET :i64 )
70+
( STP_GAS_STIPEND :i12 )
71+
72+
;; ``truly'' miscellaneous columns
73+
( CCSR_FLAG :binary) ;; Child Context Self Reverts Flag;
74+
( CCRS_STAMP :i32 ) ;; Child Context Revert Stamp
75+
))

hub/shanghai/columns/scenario.lisp

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
(module hub)
2+
3+
(defperspective scenario
4+
5+
;; selector
6+
PEEK_AT_SCENARIO
7+
8+
;; scenario columns
9+
(;; CALL related scenario columns
10+
(CALL_EXCEPTION :binary@prove)
11+
(CALL_ABORT_WILL_REVERT :binary@prove)
12+
(CALL_ABORT_WONT_REVERT :binary@prove)
13+
;; call to precompiles related
14+
(CALL_PRC_FAILURE :binary@prove)
15+
(CALL_PRC_SUCCESS_CALLER_WILL_REVERT :binary@prove)
16+
(CALL_PRC_SUCCESS_CALLER_WONT_REVERT :binary@prove)
17+
;; call to smart contract related
18+
(CALL_SMC_FAILURE_CALLER_WILL_REVERT :binary@prove)
19+
(CALL_SMC_FAILURE_CALLER_WONT_REVERT :binary@prove)
20+
(CALL_SMC_SUCCESS_CALLER_WILL_REVERT :binary@prove)
21+
(CALL_SMC_SUCCESS_CALLER_WONT_REVERT :binary@prove)
22+
;; call to externally owned accounts related
23+
(CALL_EOA_SUCCESS_CALLER_WILL_REVERT :binary@prove)
24+
(CALL_EOA_SUCCESS_CALLER_WONT_REVERT :binary@prove)
25+
26+
;; Create related
27+
(CREATE_EXCEPTION :binary@prove)
28+
(CREATE_ABORT :binary@prove)
29+
(CREATE_FAILURE_CONDITION_WILL_REVERT :binary@prove)
30+
(CREATE_FAILURE_CONDITION_WONT_REVERT :binary@prove)
31+
(CREATE_EMPTY_INIT_CODE_WILL_REVERT :binary@prove)
32+
(CREATE_EMPTY_INIT_CODE_WONT_REVERT :binary@prove)
33+
(CREATE_NONEMPTY_INIT_CODE_FAILURE_WILL_REVERT :binary@prove)
34+
(CREATE_NONEMPTY_INIT_CODE_FAILURE_WONT_REVERT :binary@prove)
35+
(CREATE_NONEMPTY_INIT_CODE_SUCCESS_WILL_REVERT :binary@prove)
36+
(CREATE_NONEMPTY_INIT_CODE_SUCCESS_WONT_REVERT :binary@prove)
37+
38+
;; Return related
39+
(RETURN_EXCEPTION :binary@prove)
40+
(RETURN_FROM_MESSAGE_CALL_WILL_TOUCH_RAM :binary@prove)
41+
(RETURN_FROM_MESSAGE_CALL_WONT_TOUCH_RAM :binary@prove)
42+
(RETURN_FROM_DEPLOYMENT_EMPTY_CODE_WILL_REVERT :binary@prove)
43+
(RETURN_FROM_DEPLOYMENT_EMPTY_CODE_WONT_REVERT :binary@prove)
44+
(RETURN_FROM_DEPLOYMENT_NONEMPTY_CODE_WILL_REVERT :binary@prove)
45+
(RETURN_FROM_DEPLOYMENT_NONEMPTY_CODE_WONT_REVERT :binary@prove)
46+
47+
;; precompile related
48+
;; precompile flags
49+
(PRC_ECRECOVER :binary@prove)
50+
(PRC_SHA2-256 :binary@prove)
51+
(PRC_RIPEMD-160 :binary@prove)
52+
(PRC_IDENTITY :binary@prove)
53+
(PRC_MODEXP :binary@prove)
54+
(PRC_ECADD :binary@prove)
55+
(PRC_ECMUL :binary@prove)
56+
(PRC_ECPAIRING :binary@prove)
57+
(PRC_BLAKE2f :binary@prove)
58+
;; execution paths
59+
(PRC_SUCCESS_CALLER_WILL_REVERT :binary@prove)
60+
(PRC_SUCCESS_CALLER_WONT_REVERT :binary@prove)
61+
(PRC_FAILURE_KNOWN_TO_HUB :binary@prove)
62+
(PRC_FAILURE_KNOWN_TO_RAM :binary@prove)
63+
;; gas parameters (RETURN_GAS is a prediction)
64+
(PRC_CALLER_GAS :i64)
65+
(PRC_CALLEE_GAS :i64)
66+
(PRC_RETURN_GAS :i64)
67+
;; duplicate values for precompile calls
68+
(PRC_CDO :i32)
69+
(PRC_CDS :i32)
70+
(PRC_RAO :i32)
71+
(PRC_RAC :i32)
72+
73+
;; SELFDESTRUCT related
74+
(SELFDESTRUCT_EXCEPTION :binary@prove)
75+
(SELFDESTRUCT_WILL_REVERT :binary@prove)
76+
(SELFDESTRUCT_WONT_REVERT_ALREADY_MARKED :binary@prove)
77+
(SELFDESTRUCT_WONT_REVERT_NOT_YET_MARKED :binary@prove)))

0 commit comments

Comments
 (0)