Skip to content
This repository was archived by the owner on Jul 5, 2024. It is now read-only.

Commit 3d20797

Browse files
author
Mason Liang
committed
Add failing write protection test for TStore
1 parent be4b13d commit 3d20797

File tree

1 file changed

+44
-25
lines changed

1 file changed

+44
-25
lines changed

zkevm-circuits/src/evm_circuit/execution/error_write_protection.rs

+44-25
Original file line numberDiff line numberDiff line change
@@ -155,16 +155,25 @@ mod test {
155155
Account::mock_code_balance(code)
156156
}
157157

158+
enum FailureReason {
159+
Sstore,
160+
TStore,
161+
CallWithValue,
162+
}
163+
158164
#[test]
159165
fn test_write_protection() {
160-
// test sstore with write protection error
161-
test_internal_write_protection(false);
162-
// test call with write protection error
163-
test_internal_write_protection(true);
166+
for reason in [
167+
FailureReason::Sstore,
168+
FailureReason::CallWithValue,
169+
FailureReason::TStore,
170+
] {
171+
test_internal_write_protection(reason)
172+
}
164173
}
165174

166175
// ErrorWriteProtection error happen in internal call
167-
fn test_internal_write_protection(is_call: bool) {
176+
fn test_internal_write_protection(reason: FailureReason) {
168177
let mut caller_bytecode = bytecode! {
169178
PUSH1(0)
170179
PUSH1(0)
@@ -185,26 +194,36 @@ mod test {
185194
PUSH1(0x02)
186195
};
187196

188-
if is_call {
189-
callee_bytecode.append(&bytecode! {
190-
PUSH1(0)
191-
PUSH1(0)
192-
PUSH1(10)
193-
PUSH1(200) // non zero value
194-
PUSH20(Address::repeat_byte(0xff).to_word())
195-
PUSH2(10000) // gas
196-
//this call got error: ErrorWriteProtection
197-
CALL
198-
RETURN
199-
STOP
200-
});
201-
} else {
202-
callee_bytecode.append(&bytecode! {
203-
// this SSTORE got error: ErrorWriteProtection
204-
SSTORE
205-
STOP
206-
});
207-
}
197+
match reason {
198+
CallWithValue => {
199+
callee_bytecode.append(&bytecode! {
200+
PUSH1(0)
201+
PUSH1(0)
202+
PUSH1(10)
203+
PUSH1(200) // non zero value
204+
PUSH20(Address::repeat_byte(0xff).to_word())
205+
PUSH2(10000) // gas
206+
//this call got error: ErrorWriteProtection
207+
CALL
208+
RETURN
209+
STOP
210+
});
211+
}
212+
Sstore => {
213+
callee_bytecode.append(&bytecode! {
214+
// this SSTORE got error: ErrorWriteProtection
215+
SSTORE
216+
STOP
217+
});
218+
}
219+
TStore => {
220+
callee_bytecode.append(&bytecode! {
221+
// this TSTORE got error: ErrorWriteProtection
222+
TSTORE
223+
STOP
224+
});
225+
}
226+
};
208227

209228
test_ok(
210229
Account::mock_100_ether(caller_bytecode),

0 commit comments

Comments
 (0)