@@ -14,9 +14,7 @@ open DumbContracts.Std
1414def compareAndSwapFun : Fun :=
1515 { name := "compareAndSwap"
1616 args := ["slot" , "expected" , "value" ]
17- body :=
18- letSload "current" (v "slot" )
19- (requireEq (v "current" ) (v "expected" ) (sstoreVar "slot" (v "value" )))
17+ body := sstoreIfEq (v "slot" ) (v "expected" ) (v "value" )
2018 ret := none }
2119
2220def compareAndSwapSpecR (slot expected value : Nat) : SpecR Store :=
@@ -31,14 +29,14 @@ theorem compareAndSwap_meets_specR_ok (s : Store) (slot expected value : Nat) :
3129 | _ => False) := by
3230 intro hreq
3331 have hmatch : s slot = expected := by exact hreq
34- simp [compareAndSwapSpecR, compareAndSwapFun, requireEq, eq, require, execFun, execStmt ,
35- evalExpr, bindArgs, emptyEnv, updateEnv, updateStore, letSload, hmatch]
32+ simp [compareAndSwapSpecR, compareAndSwapFun, sstoreIfEq, requireEq, eq, require, execFun,
33+ execStmt, evalExpr, bindArgs, emptyEnv, updateEnv, updateStore, letSload, hmatch]
3634
3735theorem compareAndSwap_meets_specR_reverts (s : Store) (slot expected value : Nat) :
3836 (compareAndSwapSpecR slot expected value).reverts s ->
3937 execFun compareAndSwapFun [slot, expected, value] s [] = ExecResult.reverted := by
4038 intro hrev
41- simp [compareAndSwapSpecR, compareAndSwapFun, requireEq, eq, require, execFun, execStmt ,
42- evalExpr, bindArgs, emptyEnv, updateEnv, updateStore, letSload, hrev]
39+ simp [compareAndSwapSpecR, compareAndSwapFun, sstoreIfEq, requireEq, eq, require, execFun,
40+ execStmt, evalExpr, bindArgs, emptyEnv, updateEnv, updateStore, letSload, hrev]
4341
4442end DumbContracts.Examples
0 commit comments