Skip to content

Commit

Permalink
Merge pull request #69 from hermeznetwork/feature/map-instructions
Browse files Browse the repository at this point in the history
Feature/map instructions
  • Loading branch information
krlosMata authored May 20, 2022
2 parents 5921c30 + 8a853b1 commit 08c322e
Show file tree
Hide file tree
Showing 8 changed files with 5,065 additions and 2,617 deletions.
7,229 changes: 4,709 additions & 2,520 deletions build/rom.json

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions main/constants.zkasm
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
; ZK_EVM
CONSTL %ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2 = 0xAE4bB80bE56B819606589DE61d5ec3b522EEB032n
CONSTL %ADDRESS_SYSTEM = 0x0000000000000000000000000000000000000000n

CONST %BATCH_DIFFICULTY = 0
CONST %BATCH_GAS_LIMIT = 30000000
CONST %GLOBAL_EXIT_ROOT_STORAGE_POS = 0
CONST %LOCAL_EXIT_ROOT_STORAGE_POS = 1
CONST %STATE_ROOT_STORAGE_POS = 0
CONST %DEFAULT_SEQ_CHAINID = 1000

; SMT CONSTANT KEYS
CONST %SMT_KEY_BALANCE = 0
CONST %SMT_KEY_NONCE = 1
CONST %SMT_KEY_SC_CODE = 2
CONST %SMT_KEY_SC_STORAGE = 3

; GAS
CONST %SLOAD_GAS = 100
CONST %SSTORE_SET_GAS = 20000
CONST %SSTORE_RESET_GAS = 2900
CONST %SSTORE_CLEARS_SCHEDULE = 15000
34 changes: 10 additions & 24 deletions main/main.zkasm
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
INCLUDE "constants.zkasm"
INCLUDE "vars.zkasm"

start:
Expand All @@ -24,26 +25,12 @@ start:

${getChainId()} :MSTORE(chainId)

1000 :MSTORE(defaultChainId) ; Hardcoded default chain id
0 :MSTORE(systemAddr) ; Hardcoded default system address
; // TODO: 0x0000000000000...000n --> different file
;100 :MSTORE(SLOAD_GAS)
;20000 :MSTORE(SSTORE_SET_GAS)
;2900 :MSTORE(SSTORE_RESET_GAS)
;15000 :MSTORE(SSTORE_CLEARS_SCHEDULE)
; // TODO: set gas vars in a different file a a parameters
${getNumBatch()} :MSTORE(numBatch)

${getTimestamp()} :MSTORE(timestamp)

${getTxsLen()} :MSTORE(batchL2DataLength)

; batch variables TODO: ne file constants.zkasm
0 :MSTORE(batchDifficulty)
30000000 :MSTORE(batchGasLimit)



;;;;;;;;;
;; Set batch hash
;;;;;;;;;
Expand All @@ -57,12 +44,12 @@ start:
32 => D ; //TODO: opt. no need set D to 32
$ => A :MLOAD(numBatch)
A - 1 :HASHK(E)
0 :HASHK(E) ; Storage position of the batch hash
%STATE_ROOT_STORAGE_POS :HASHK(E) ; Storage position of the batch hash
HASHPOS :HASHKLEN(E)
$ => C :HASHKDIGEST(E)

$ => A :MLOAD(systemAddr)
3 => B
%ADDRESS_SYSTEM => A
%SMT_KEY_SC_STORAGE => B
$ => D :MLOAD(oldStateRoot)
$ => SR :SSTORE ; Store 'oldStateRoot' in storage position 'keccak256(numBatch - 1, 0)'

Expand All @@ -77,13 +64,12 @@ start:
32 => D
$ => A :MLOAD(numBatch)
A :HASHK(E)
0 :HASHK(E) ; Storage position of the global exit root map
%GLOBAL_EXIT_ROOT_STORAGE_POS :HASHK(E) ; Storage position of the global exit root map
HASHPOS :HASHKLEN(E)
$ => C :HASHKDIGEST(E) ; Storage position of the current global exit root

${getGlobalExitRootManagerAddr()} => A ;// TODO: constant
; TODO: Constants in ZKASM compiler. such as: LEAF_TYPE_STO
3 => B
%ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2 => A
%SMT_KEY_SC_STORAGE => B
$ => D :MLOAD(globalExitRoot)
$ => SR :SSTORE

Expand Down Expand Up @@ -131,9 +117,9 @@ processTxsEnd:
;;;;;;;;;
;; Assert local exit root
;;;;;;;;;
${getGlobalExitRootManagerAddr()} => A
3 => B
1 => C ; Storage position of the local exit root
%ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2 => A
%SMT_KEY_SC_STORAGE => B
%LOCAL_EXIT_ROOT_STORAGE_POS => C ; Storage position of the local exit root
$ => A :SLOAD
$ :MLOAD(newLocalExitRoot), ASSERT

Expand Down
258 changes: 258 additions & 0 deletions main/map-opcodes.zkasm
Original file line number Diff line number Diff line change
@@ -0,0 +1,258 @@

mapping_opcodes:
:JMP(opSTOP) ; 0x00
:JMP(opADD) ; 0x01
:JMP(opMUL) ; 0x02
:JMP(opSUB) ; 0x03
:JMP(opDIV) ; 0x04
:JMP(opSDIV) ; 0x05
:JMP(opMOD) ; 0x06
:JMP(opSMOD) ; 0x07
:JMP(opADDMOD) ; 0x08
:JMP(opMULMOD) ; 0x09
:JMP(opEXP) ; 0x0a
:JMP(opSIGNEXTEND) ; 0x0b
:JMP(opINVALID) ; 0x0c
:JMP(opINVALID) ; 0x0d
:JMP(opINVALID) ; 0x0e
:JMP(opINVALID) ; 0x0f
:JMP(opLT) ; 0x10
:JMP(opGT) ; 0x11
:JMP(opSLT) ; 0x12
:JMP(opSGT) ; 0x13
:JMP(opEQ) ; 0x14
:JMP(opISZERO) ; 0x15
:JMP(opAND) ; 0x16
:JMP(opOR) ; 0x17
:JMP(opXOR) ; 0x18
:JMP(opNOT) ; 0x19
:JMP(opBYTE) ; 0x1a
:JMP(opSHL) ; 0x1b
:JMP(opSHR) ; 0x1c
:JMP(opSAR) ; 0x1d
:JMP(opINVALID) ; 0x1e
:JMP(opINVALID) ; 0x1f
:JMP(opSHA3) ; 0x20
:JMP(opINVALID) ; 0x21
:JMP(opINVALID) ; 0x22
:JMP(opINVALID) ; 0x23
:JMP(opINVALID) ; 0x24
:JMP(opINVALID) ; 0x25
:JMP(opINVALID) ; 0x26
:JMP(opINVALID) ; 0x27
:JMP(opINVALID) ; 0x28
:JMP(opINVALID) ; 0x29
:JMP(opINVALID) ; 0x2a
:JMP(opINVALID) ; 0x2b
:JMP(opINVALID) ; 0x2c
:JMP(opINVALID) ; 0x2d
:JMP(opINVALID) ; 0x2e
:JMP(opINVALID) ; 0x2f
:JMP(opADDRESS) ; 0x30
:JMP(opBALANCE) ; 0x31
:JMP(opORIGIN) ; 0x32
:JMP(opCALLER) ; 0x33
:JMP(opCALLVALUE) ; 0x34
:JMP(opCALLDATALOAD) ; 0x35
:JMP(opCALLDATASIZE) ; 0x36
:JMP(opCALLDATACOPY) ; 0x37
:JMP(opCODESIZE) ; 0x38
:JMP(opCODECOPY) ; 0x39
:JMP(opGASPRICE) ; 0x3a
:JMP(opEXTCODESIZE) ; 0x3b
:JMP(opEXTCODECOPY) ; 0x3c
:JMP(opRETURNDATASIZE) ; 0x3d
:JMP(opRETURNDATACOPY) ; 0x3e
:JMP(opEXTCODEHASH) ; 0x3f
:JMP(opBLOCKHASH) ; 0x40
:JMP(opCOINBASE) ; 0x41
:JMP(opTIMESTAMP) ; 0x42
:JMP(opNUMBER) ; 0x43
:JMP(opDIFFICULTY) ; 0x44
:JMP(opGASLIMIT) ; 0x45
:JMP(opCHAINID) ; 0x46
:JMP(opSELFBALANCE) ; 0x47
:JMP(opINVALID) ; 0x48
:JMP(opINVALID) ; 0x49
:JMP(opINVALID) ; 0x4A
:JMP(opINVALID) ; 0x4B
:JMP(opINVALID) ; 0x4C
:JMP(opINVALID) ; 0x4D
:JMP(opINVALID) ; 0x4E
:JMP(opINVALID) ; 0x4F
:JMP(opPOP) ; 0x50
:JMP(opMLOAD) ; 0x51
:JMP(opMSTORE) ; 0x52
:JMP(opMSTORE8) ; 0x53
:JMP(opSLOAD) ; 0x54
:JMP(opSSTORE) ; 0x55
:JMP(opJUMP) ; 0x56
:JMP(opJUMPI) ; 0x57
:JMP(opPC) ; 0x58
:JMP(opMSIZE) ; 0x59
:JMP(opGAS) ; 0x5a
:JMP(opJUMPDEST) ; 0x5b
:JMP(opINVALID) ; 0x5C
:JMP(opINVALID) ; 0x5D
:JMP(opINVALID) ; 0x5E
:JMP(opINVALID) ; 0x5F
:JMP(opPUSH1) ; 0x60
:JMP(opPUSH2) ; 0x61
:JMP(opPUSH3) ; 0x62
:JMP(opPUSH4) ; 0x63
:JMP(opPUSH5) ; 0x64
:JMP(opPUSH6) ; 0x65
:JMP(opPUSH7) ; 0x66
:JMP(opPUSH8) ; 0x67
:JMP(opPUSH9) ; 0x68
:JMP(opPUSH10) ; 0x69
:JMP(opPUSH11) ; 0x6a
:JMP(opPUSH12) ; 0x6b
:JMP(opPUSH13) ; 0x6c
:JMP(opPUSH14) ; 0x6d
:JMP(opPUSH15) ; 0x6e
:JMP(opPUSH16) ; 0x6f
:JMP(opPUSH17) ; 0x70
:JMP(opPUSH18) ; 0x71
:JMP(opPUSH19) ; 0x72
:JMP(opPUSH20) ; 0x73
:JMP(opPUSH21) ; 0x74
:JMP(opPUSH22) ; 0x75
:JMP(opPUSH23) ; 0x76
:JMP(opPUSH24) ; 0x77
:JMP(opPUSH25) ; 0x78
:JMP(opPUSH26) ; 0x79
:JMP(opPUSH27) ; 0x7a
:JMP(opPUSH28) ; 0x7b
:JMP(opPUSH29) ; 0x7c
:JMP(opPUSH30) ; 0x7d
:JMP(opPUSH31) ; 0x7e
:JMP(opPUSH32) ; 0x7f
:JMP(opDUP1) ; 0x80
:JMP(opDUP2) ; 0x81
:JMP(opDUP3) ; 0x82
:JMP(opDUP4) ; 0x83
:JMP(opDUP5) ; 0x84
:JMP(opDUP6) ; 0x85
:JMP(opDUP7) ; 0x86
:JMP(opDUP8) ; 0x87
:JMP(opDUP9) ; 0x88
:JMP(opDUP10) ; 0x89
:JMP(opDUP11) ; 0x8a
:JMP(opDUP12) ; 0x8b
:JMP(opDUP13) ; 0x8c
:JMP(opDUP14) ; 0x8d
:JMP(opDUP15) ; 0x8e
:JMP(opDUP16) ; 0x8f
:JMP(opSWAP1) ; 0x90
:JMP(opSWAP2) ; 0x91
:JMP(opSWAP3) ; 0x92
:JMP(opSWAP4) ; 0x93
:JMP(opSWAP5) ; 0x94
:JMP(opSWAP6) ; 0x95
:JMP(opSWAP7) ; 0x96
:JMP(opSWAP8) ; 0x97
:JMP(opSWAP9) ; 0x98
:JMP(opSWAP10) ; 0x99
:JMP(opSWAP11) ; 0x9a
:JMP(opSWAP12) ; 0x9b
:JMP(opSWAP13) ; 0x9c
:JMP(opSWAP14) ; 0x9d
:JMP(opSWAP15) ; 0x9e
:JMP(opSWAP16) ; 0x9f
:JMP(opLOG0) ; 0xa0
:JMP(opLOG1) ; 0xa1
:JMP(opLOG2) ; 0xa2
:JMP(opLOG3) ; 0xa3
:JMP(opLOG4) ; 0xa4
:JMP(opINVALID) ; 0xA5
:JMP(opINVALID) ; 0xA6
:JMP(opINVALID) ; 0xA7
:JMP(opINVALID) ; 0xA8
:JMP(opINVALID) ; 0xA9
:JMP(opINVALID) ; 0xAA
:JMP(opINVALID) ; 0xAB
:JMP(opINVALID) ; 0xAC
:JMP(opINVALID) ; 0xAD
:JMP(opINVALID) ; 0xAE
:JMP(opINVALID) ; 0xAF
:JMP(opINVALID) ; 0xB0
:JMP(opINVALID) ; 0xB1
:JMP(opINVALID) ; 0xB2
:JMP(opINVALID) ; 0xB3
:JMP(opINVALID) ; 0xB4
:JMP(opINVALID) ; 0xB5
:JMP(opINVALID) ; 0xB6
:JMP(opINVALID) ; 0xB7
:JMP(opINVALID) ; 0xB8
:JMP(opINVALID) ; 0xB9
:JMP(opINVALID) ; 0xBA
:JMP(opINVALID) ; 0xBB
:JMP(opINVALID) ; 0xBC
:JMP(opINVALID) ; 0xBD
:JMP(opINVALID) ; 0xBE
:JMP(opINVALID) ; 0xBF
:JMP(opINVALID) ; 0xC0
:JMP(opINVALID) ; 0xC1
:JMP(opINVALID) ; 0xC2
:JMP(opINVALID) ; 0xC3
:JMP(opINVALID) ; 0xC4
:JMP(opINVALID) ; 0xC5
:JMP(opINVALID) ; 0xC6
:JMP(opINVALID) ; 0xC7
:JMP(opINVALID) ; 0xC8
:JMP(opINVALID) ; 0xC9
:JMP(opINVALID) ; 0xCA
:JMP(opINVALID) ; 0xCB
:JMP(opINVALID) ; 0xCC
:JMP(opINVALID) ; 0xCD
:JMP(opINVALID) ; 0xCE
:JMP(opINVALID) ; 0xCF
:JMP(opINVALID) ; 0xD0
:JMP(opINVALID) ; 0xD1
:JMP(opINVALID) ; 0xD2
:JMP(opINVALID) ; 0xD3
:JMP(opINVALID) ; 0xD4
:JMP(opINVALID) ; 0xD5
:JMP(opINVALID) ; 0xD6
:JMP(opINVALID) ; 0xD7
:JMP(opINVALID) ; 0xD8
:JMP(opINVALID) ; 0xD9
:JMP(opINVALID) ; 0xDA
:JMP(opINVALID) ; 0xDB
:JMP(opINVALID) ; 0xDC
:JMP(opINVALID) ; 0xDD
:JMP(opINVALID) ; 0xDE
:JMP(opINVALID) ; 0xDF
:JMP(opINVALID) ; 0xE0
:JMP(opINVALID) ; 0xE1
:JMP(opINVALID) ; 0xE2
:JMP(opINVALID) ; 0xE3
:JMP(opINVALID) ; 0xE4
:JMP(opINVALID) ; 0xE5
:JMP(opINVALID) ; 0xE6
:JMP(opINVALID) ; 0xE7
:JMP(opINVALID) ; 0xE8
:JMP(opINVALID) ; 0xE9
:JMP(opINVALID) ; 0xEA
:JMP(opINVALID) ; 0xEB
:JMP(opINVALID) ; 0xEC
:JMP(opINVALID) ; 0xED
:JMP(opINVALID) ; 0xEE
:JMP(opINVALID) ; 0xEF
:JMP(opCREATE) ; 0xf0
:JMP(opCALL) ; 0xf1
:JMP(opCALLCODE) ; 0xf2
:JMP(opRETURN) ; 0xf3
:JMP(opDELEGATECALL) ; 0xf4
:JMP(opCREATE2) ; 0xf5
:JMP(opINVALID) ; 0xf6
:JMP(opINVALID) ; 0xf7
:JMP(opINVALID) ; 0xf8
:JMP(opINVALID) ; 0xf9
:JMP(opSTATICCALL) ; 0xfa
:JMP(opINVALID) ; 0xfb
:JMP(opINVALID) ; 0xfc
:JMP(opREVERT) ; 0xfd
:JMP(opINVALID) ; 0xfe
:JMP(opSELFDESTRUCT) ; 0xff
Loading

0 comments on commit 08c322e

Please sign in to comment.