github.com/ethereum-optimism/optimism@v1.7.2/packages/contracts-bedrock/test/kontrol/scripts/run-kontrol.sh (about) 1 #!/bin/bash 2 set -euo pipefail 3 4 export FOUNDRY_PROFILE=kprove 5 6 SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" 7 # shellcheck source=/dev/null 8 source "$SCRIPT_HOME/common.sh" 9 export RUN_KONTROL=true 10 parse_args "$@" 11 12 ############# 13 # Functions # 14 ############# 15 kontrol_build() { 16 notif "Kontrol Build" 17 # shellcheck disable=SC2086 18 run kontrol build \ 19 --verbose \ 20 --require $lemmas \ 21 --module-import $module \ 22 $rekompile 23 } 24 25 kontrol_prove() { 26 notif "Kontrol Prove" 27 # shellcheck disable=SC2086 28 run kontrol prove \ 29 --max-depth $max_depth \ 30 --max-iterations $max_iterations \ 31 --smt-timeout $smt_timeout \ 32 --workers $workers \ 33 $reinit \ 34 $bug_report \ 35 $break_on_calls \ 36 $break_every_step \ 37 $auto_abstract \ 38 $tests \ 39 $use_booster \ 40 --init-node-from $state_diff \ 41 --xml-test-report 42 } 43 44 dump_log_results(){ 45 trap clean_docker ERR 46 RESULTS_FILE="results-$(date +'%Y-%m-%d-%H-%M-%S').tar.gz" 47 LOG_PATH="test/kontrol/logs" 48 RESULTS_LOG="$LOG_PATH/$RESULTS_FILE" 49 50 if [ ! -d $LOG_PATH ]; then 51 mkdir $LOG_PATH 52 fi 53 54 notif "Generating Results Log: $LOG_PATH" 55 56 run tar -czvf results.tar.gz kout-proofs/ > /dev/null 2>&1 57 if [ "$LOCAL" = true ]; then 58 mv results.tar.gz "$RESULTS_LOG" 59 else 60 docker cp "$CONTAINER_NAME:/home/user/workspace/results.tar.gz" "$RESULTS_LOG" 61 fi 62 if [ -f "$RESULTS_LOG" ]; then 63 cp "$RESULTS_LOG" "$LOG_PATH/kontrol-results_latest.tar.gz" 64 else 65 notif "Results Log: $RESULTS_LOG not found, skipping.." 66 fi 67 # Report where the file was generated and placed 68 notif "Results Log: $(dirname "$RESULTS_LOG") generated" 69 70 if [ "$LOCAL" = false ]; then 71 notif "Results Log: $RESULTS_LOG generated" 72 RUN_LOG="run-kontrol-$(date +'%Y-%m-%d-%H-%M-%S').log" 73 docker logs "$CONTAINER_NAME" > "$LOG_PATH/$RUN_LOG" 74 fi 75 } 76 77 # Define the function to run on failure 78 on_failure() { 79 dump_log_results 80 81 if [ "$LOCAL" = false ]; then 82 clean_docker 83 fi 84 85 notif "Cleanup complete." 86 exit 1 87 } 88 89 # Set up the trap to run the function on failure 90 trap on_failure ERR INT 91 92 ######################### 93 # kontrol build options # 94 ######################### 95 # NOTE: This script has a recurring pattern of setting and unsetting variables, 96 # such as `rekompile`. Such a pattern is intended for easy use while locally 97 # developing and executing the proofs via this script. Comment/uncomment the 98 # empty assignment to activate/deactivate the corresponding flag 99 lemmas=test/kontrol/pausability-lemmas.md 100 base_module=PAUSABILITY-LEMMAS 101 module=OptimismPortalKontrol:$base_module 102 rekompile=--rekompile 103 rekompile= 104 regen=--regen 105 # shellcheck disable=SC2034 106 regen= 107 108 ################################# 109 # Tests to symbolically execute # 110 ################################# 111 112 # Temporarily unexecuted tests 113 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused0" \ 114 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused1" \ 115 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused2" \ 116 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused3" \ 117 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused4" \ 118 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused5" \ 119 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused6" \ 120 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused7" \ 121 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused8" \ 122 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused9" \ 123 # "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused10" \ 124 125 test_list=() 126 if [ "$SCRIPT_TESTS" == true ]; then 127 test_list=( "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused0" \ 128 "OptimismPortalKontrol.prove_proveWithdrawalTransaction_paused1" \ 129 "OptimismPortalKontrol.prove_finalizeWithdrawalTransaction_paused" \ 130 "L1StandardBridgeKontrol.prove_finalizeBridgeERC20_paused" \ 131 "L1StandardBridgeKontrol.prove_finalizeBridgeETH_paused" \ 132 "L1ERC721BridgeKontrol.prove_finalizeBridgeERC721_paused" \ 133 "L1CrossDomainMessengerKontrol.prove_relayMessage_paused" 134 ) 135 elif [ "$CUSTOM_TESTS" != 0 ]; then 136 test_list=( "${@:${CUSTOM_TESTS}}" ) 137 fi 138 tests="" 139 for test_name in "${test_list[@]}"; do 140 tests+="--match-test $test_name " 141 done 142 143 ######################### 144 # kontrol prove options # 145 ######################### 146 max_depth=10000 147 max_iterations=10000 148 smt_timeout=100000 149 max_workers=7 # Set to 7 since the CI machine has 8 CPUs 150 # workers is the minimum between max_workers and the length of test_list 151 # unless no test arguments are provided, in which case we default to max_workers 152 if [ "$CUSTOM_TESTS" == 0 ] && [ "$SCRIPT_TESTS" == false ]; then 153 workers=${max_workers} 154 else 155 workers=$((${#test_list[@]}>max_workers ? max_workers : ${#test_list[@]})) 156 fi 157 reinit=--reinit 158 reinit= 159 break_on_calls=--no-break-on-calls 160 # break_on_calls= 161 break_every_step=--break-every-step 162 break_every_step= 163 auto_abstract=--auto-abstract-gas 164 auto_abstract= 165 bug_report=--bug-report 166 bug_report= 167 use_booster=--use-booster 168 # use_booster= 169 state_diff="./snapshots/state-diff/Kontrol-Deploy.json" 170 171 ############# 172 # RUN TESTS # 173 ############# 174 conditionally_start_docker 175 176 kontrol_build 177 kontrol_prove 178 179 dump_log_results 180 181 if [ "$LOCAL" == false ]; then 182 notif "Stopping docker container" 183 clean_docker 184 fi 185 186 notif "DONE"