|
9 | 9 | (defconstraint first-row (:domain {0}) |
10 | 10 | (vanishes! STAMP)) |
11 | 11 |
|
| 12 | +(defconstraint stamp-increment () |
| 13 | + (or! (will-remain-constant! STAMP) (will-inc! STAMP 1))) |
| 14 | + |
12 | 15 | ;; 3 |
13 | 16 | (defconstraint null-stamp-null-columns () |
14 | 17 | (if-zero STAMP |
15 | 18 | (begin (vanishes! RAW_ADDRESS_HI) |
16 | 19 | (vanishes! RAW_ADDRESS_LO) |
17 | 20 | (vanishes! TRM_ADDRESS_HI) |
18 | 21 | (vanishes! IS_PRECOMPILE) |
| 22 | + (vanishes! (next CT)) |
19 | 23 | (debug (vanishes! CT)) |
20 | 24 | (debug (vanishes! BYTE_HI)) |
21 | 25 | (debug (vanishes! BYTE_LO))))) |
22 | 26 |
|
23 | | -(defconstraint heartbeat () |
24 | | - (begin ;; 2 |
25 | | - (or! (will-remain-constant! STAMP) (will-inc! STAMP 1)) |
26 | | - ;; 4 |
27 | | - (if-not-zero (- (next STAMP) STAMP) |
28 | | - (vanishes! (next CT))) |
29 | | - ;; 5 |
30 | | - (if-not-zero STAMP |
31 | | - (if-eq-else CT LLARGEMO (will-inc! STAMP 1) (will-inc! CT 1))))) |
32 | | - |
33 | | -;; 6 |
| 27 | +(defconstraint setting-first () |
| 28 | + (eq! FIRST |
| 29 | + (- STAMP (prev STAMP)))) |
| 30 | + |
| 31 | +(defconstraint heartbeat (:guard STAMP) |
| 32 | + (begin |
| 33 | + (if-not-zero (- TRM_CT_MAX CT) |
| 34 | + (begin |
| 35 | + (will-remain-constant! STAMP) |
| 36 | + (will-inc! CT 1))) |
| 37 | + (if-zero (- TRM_CT_MAX CT) |
| 38 | + (begin |
| 39 | + (will-inc! STAMP 1) |
| 40 | + (vanishes! (next CT)))))) |
| 41 | + |
34 | 42 | (defconstraint last-row (:domain {-1}) |
35 | 43 | (if-not-zero STAMP |
36 | | - (eq! CT LLARGEMO))) |
| 44 | + (eq! CT TRM_CT_MAX))) |
37 | 45 |
|
38 | 46 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
39 | 47 | ;; ;; |
|
46 | 54 | (stamp-constancy STAMP IS_PRECOMPILE) |
47 | 55 | (stamp-constancy STAMP TRM_ADDRESS_HI))) |
48 | 56 |
|
49 | | -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
50 | | -;; ;; |
51 | | -;; 2.3 PBIT constraints ;; |
52 | | -;; ;; |
53 | | -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
54 | | -(defconstraint pbit-constraint () |
55 | | - (begin (if-not-zero CT |
56 | | - (or! (remained-constant! PBIT) (did-inc! PBIT 1))) |
57 | | - (if-eq CT LLARGEMO |
58 | | - (eq! 1 |
59 | | - (+ (shift PBIT (- 0 4)) |
60 | | - (shift PBIT (- 0 3))))))) |
61 | | - |
62 | | -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
63 | | -;; ;; |
64 | | -;; 2.4 Byte Decomposition ;; |
65 | | -;; ;; |
66 | | -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
67 | | -(defconstraint byte-decompositions () |
68 | | - (begin (byte-decomposition CT ACC_HI BYTE_HI) |
69 | | - (byte-decomposition CT ACC_LO BYTE_LO) |
70 | | - (byte-decomposition CT ACC_T (* BYTE_HI PBIT)))) |
71 | 57 |
|
72 | 58 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
73 | 59 | ;; ;; |
74 | | -;; 1.5 target constraints ;; |
| 60 | +;; 2.4 setting WCP calls ;; |
| 61 | +;; ;; |
| 62 | +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 63 | +(defun (wcpcall-leq offset arg1hi arg1lo arg2hi arg2lo) |
| 64 | +(begin (eq! (shift INST offset) WCP_INST_LEQ) |
| 65 | + (eq! (shift ARG_1_HI offset) arg1hi) |
| 66 | + (eq! (shift ARG_1_LO offset) arg1lo) |
| 67 | + (eq! (shift ARG_2_HI offset) arg2hi) |
| 68 | + (eq! (shift ARG_2_LO offset) arg2lo))) |
| 69 | + |
| 70 | +(defun (result-is-true offset) |
| 71 | + (eq! (shift RES offset) 1)) |
| 72 | + |
| 73 | +(defconstraint address-is-twenty-bytes (:guard FIRST) |
| 74 | + (begin |
| 75 | + (wcpcall-leq ROW_OFFSET_ADDRESS 0 TRM_ADDRESS_HI RAW_ADDRESS_LO TWOFIFTYSIX_TO_THE_FOUR 0) |
| 76 | + (result-is-true ROW_OFFSET_ADDRESS))) |
| 77 | + |
| 78 | +(defconstraint leading-bytes-is-twelve-bytes (:guard FIRST) |
| 79 | + (begin |
| 80 | + (eq! (shift INST ROW_OFFSET_ADDRESS_TRM) WCP_INST_LEQ) |
| 81 | + (vanishes! (shift ARG_1_HI ROW_OFFSET_ADDRESS_TRM)) |
| 82 | + (vanishes! (shift ARG_2_HI ROW_OFFSET_ADDRESS_TRM)) |
| 83 | + (eq! (shift ARG_2_LO ROW_OFFSET_ADDRESS_TRM) TWOFIFTYSIX_TO_THE_TWELVE_MO) |
| 84 | + (result-is-true ROW_OFFSET_ADDRESS_TRM))) |
| 85 | + |
| 86 | +(defconstraint address-is-not-zero (:guard FIRST) |
| 87 | + (begin |
| 88 | + (eq! (shift INST ROW_OFFSET_NON_ZERO_ADDR) EVM_INST_ISZERO) |
| 89 | + (eq! (shift ARG_1_HI ROW_OFFSET_NON_ZERO_ADDR) TRM_ADDRESS_HI) |
| 90 | + (eq! (shift ARG_2_HI ROW_OFFSET_NON_ZERO_ADDR) RAW_ADDRESS_LO) |
| 91 | + )) |
| 92 | + |
| 93 | +(defconstraint address-is-prc-range (:guard FIRST) |
| 94 | +(wcpcall-leq ROW_OFFSET_PRC_ADDR TRM_ADDRESS_HI RAW_ADDRESS_LO 0 NUMBER_OF_PRECOMPILES)) |
| 95 | + |
| 96 | +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 97 | +;; ;; |
| 98 | +;; 2.5 target constraints ;; |
75 | 99 | ;; ;; |
76 | 100 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
77 | | -(defconstraint target-constraint () |
78 | | - (if-eq CT LLARGEMO |
79 | | - (begin (eq! RAW_ADDRESS_HI ACC_HI) |
80 | | - (eq! RAW_ADDRESS_LO ACC_LO) |
81 | | - (eq! TRM_ADDRESS_HI ACC_T)))) |
82 | | - |
83 | | -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
84 | | -;; ;; |
85 | | -;; 2.4 Identifying precompiles ;; |
86 | | -;; ;; |
87 | | -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
88 | | -(defconstraint is-prec-constraint () |
89 | | - (if-eq CT LLARGEMO |
90 | | - (if-zero (+ TRM_ADDRESS_HI (- RAW_ADDRESS_LO BYTE_LO)) |
91 | | - (if-zero BYTE_LO |
92 | | - (vanishes! IS_PRECOMPILE) |
93 | | - (eq! (+ (* (- 9 BYTE_LO) |
94 | | - (- (* 2 IS_PRECOMPILE) 1)) |
95 | | - (- IS_PRECOMPILE 1)) |
96 | | - (reduce + |
97 | | - (for k |
98 | | - [0 : 7] |
99 | | - (* (^ 2 k) |
100 | | - (shift ONE (- 0 k))))))) |
101 | | - (vanishes! IS_PRECOMPILE)))) |
| 101 | +(defconstraint setting-precompile (:guard FIRST) |
| 102 | + (eq! IS_PRECOMPILE |
| 103 | + (* (shift RES ROW_OFFSET_PRC_ADDR) |
| 104 | + (- 1 (shift RES ROW_OFFSET_NON_ZERA_ADDR))))) |
| 105 | + |
| 106 | +(defun (leading-byte) |
| 107 | + (shift ARG_1_LO ROW_OFFSET_ADDRESS_TRM)) |
| 108 | + |
| 109 | +(defconstraint proving-trm (:guard FIRST) |
| 110 | +(eq! RAW_ADDRESS_HI |
| 111 | + (+ (* TWOFIFTYSIX_TO_THE_FOUR (leading-byte)) |
| 112 | + TRM_ADDRESS_HI))) |
| 113 | + |
102 | 114 |
|
103 | 115 |
|
0 commit comments