Commit 7fd1ecd1 authored by Nicolas "Norswap" Laurent's avatar Nicolas "Norswap" Laurent Committed by norswap

improve output of challenge scripts

parent 7dbbfde3
...@@ -35,6 +35,14 @@ ...@@ -35,6 +35,14 @@
# Exit if any command fails. # Exit if any command fails.
set -e set -e
shout() {
echo ""
echo "----------------------------------------"
echo "$1"
echo "----------------------------------------"
echo ""
}
# Print an error if we exit before all commands have run. # Print an error if we exit before all commands have run.
exit_trap() { exit_trap() {
[[ $? == 0 ]] && return [[ $? == 0 ]] && return
...@@ -46,7 +54,7 @@ trap "exit_trap" EXIT ...@@ -46,7 +54,7 @@ trap "exit_trap" EXIT
# block whose transition will be challenged # block whose transition will be challenged
# this variable is read by challenge.js, respond.js and assert.js # this variable is read by challenge.js, respond.js and assert.js
BLOCK=13284491 export BLOCK=13284491
# chain ID, read by challenge.js, respond.js and assert.js # chain ID, read by challenge.js, respond.js and assert.js
export ID=0 export ID=0
...@@ -54,45 +62,51 @@ export ID=0 ...@@ -54,45 +62,51 @@ export ID=0
# clear data from previous runs # clear data from previous runs
mkdir -p /tmp/cannon /tmp/cannon_fault && rm -rf /tmp/cannon/* /tmp/cannon_fault/* mkdir -p /tmp/cannon /tmp/cannon_fault && rm -rf /tmp/cannon/* /tmp/cannon_fault/*
# generate initial memory state checkpoint (in /tmp/cannon/golden.json) # stored in /tmp/cannon/golden.json
shout "GENERATING INITIAL MEMORY STATE CHECKPOINT"
mipsevm/mipsevm mipsevm/mipsevm
# deploy contracts shout "DEPLOYING CONTRACTS"
npx hardhat run scripts/deploy.js --network hosthat npx hardhat run scripts/deploy.js --network hosthat
# challenger will use same initial memory checkpoint and deployed contracts # challenger will use same initial memory checkpoint and deployed contracts
cp /tmp/cannon/{golden,deployed}.json /tmp/cannon_fault/ cp /tmp/cannon/{golden,deployed}.json /tmp/cannon_fault/
# fetch preimages for real block shout "FETCHING PREIMAGES FOR REAL BLOCK"
minigeth/go-ethereum $BLOCK minigeth/go-ethereum $BLOCK
# compute real MIPS checkpoint shout "COMPUTING REAL MIPS FINAL MEMORY CHECKPOINT"
mipsevm/mipsevm $BLOCK mipsevm/mipsevm $BLOCK
# fetch preimages for fake block (real block modified with a fault) # these are the preimages for the real block (but go into a different basedir)
# these are the same preimages as for the real block, but we're using a different basedir shout "FETCHING PREIMAGES FOR FAULTY BLOCK"
BASEDIR=/tmp/cannon_fault minigeth/go-ethereum $BLOCK BASEDIR=/tmp/cannon_fault minigeth/go-ethereum $BLOCK
# compute fake MIPS checkpoint (includes a fault) # since the computation includes a fault, the output file will be different than
# the output file will be different than for the real block # for the real block
shout "COMPUTE FAKE MIPS CHECKPOINT"
OUTPUTFAULT=1 BASEDIR=/tmp/cannon_fault mipsevm/mipsevm $BLOCK OUTPUTFAULT=1 BASEDIR=/tmp/cannon_fault mipsevm/mipsevm $BLOCK
# alternatively, to inject a fault in registers instead of memory # alternatively, to inject a fault in registers instead of memory
# REGFAULT=13240000 BASEDIR=/tmp/cannon_fault mipsevm/mipsevm $BLOCK # REGFAULT=13240000 BASEDIR=/tmp/cannon_fault mipsevm/mipsevm $BLOCK
# start challenge shout "STARTING CHALLENGE"
BASEDIR=/tmp/cannon_fault npx hardhat run scripts/challenge.js --network hosthat BASEDIR=/tmp/cannon_fault npx hardhat run scripts/challenge.js --network hosthat
# binary search shout "BINARY SEARCH"
for i in {1..25};do # for i in {1..25}; do
for i in {1..23}; do
echo ""
echo "--- STEP $i / 25 --"
echo ""
OUTPUTFAULT=1 BASEDIR=/tmp/cannon_fault CHALLENGER=1 npx hardhat run scripts/respond.js --network hosthat OUTPUTFAULT=1 BASEDIR=/tmp/cannon_fault CHALLENGER=1 npx hardhat run scripts/respond.js --network hosthat
npx hardhat run scripts/respond.js --network hosthat npx hardhat run scripts/respond.js --network hosthat
done done
# assert as challenger (fails) shout "ASSERTING AS CHALLENGER (should fail)"
set +e # this should fail! set +e # this should fail!
BASEDIR=/tmp/cannon_fault CHALLENGER=1 npx hardhat run scripts/assert.js --network hosthat BASEDIR=/tmp/cannon_fault CHALLENGER=1 npx hardhat run scripts/assert.js --network hosthat
set -e set -e
# assert as defender (passes) shout "ASSERTING AS DEFENDER (should pass)"
npx hardhat run scripts/assert.js --network hosthat npx hardhat run scripts/assert.js --network hosthat
...@@ -27,12 +27,18 @@ ...@@ -27,12 +27,18 @@
# Exit if any command fails. # Exit if any command fails.
set -e set -e
shout() {
echo ""
echo "------------------------------------------------------------"
echo "$1"
echo "------------------------------------------------------------"
echo ""
}
# Print an error if we exit before all commands have run. # Print an error if we exit before all commands have run.
exit_trap() { exit_trap() {
[[ $? == 0 ]] && return [[ $? == 0 ]] && return
echo "----------------------------------------" shout "EARLY EXIT: SCRIPT FAILED"
echo "EARLY EXIT: SCRIPT FAILED"
echo "----------------------------------------"
} }
trap "exit_trap" EXIT trap "exit_trap" EXIT
...@@ -49,43 +55,47 @@ WRONG_BLOCK=13284491 ...@@ -49,43 +55,47 @@ WRONG_BLOCK=13284491
# clear data from previous runs # clear data from previous runs
mkdir -p /tmp/cannon /tmp/cannon_fault && rm -rf /tmp/cannon/* /tmp/cannon_fault/* mkdir -p /tmp/cannon /tmp/cannon_fault && rm -rf /tmp/cannon/* /tmp/cannon_fault/*
# generate initial memory state checkpoint (in /tmp/cannon/golden.json) # stored in /tmp/cannon/golden.json
shout "GENERATING INITIAL MEMORY STATE CHECKPOINT"
mipsevm/mipsevm mipsevm/mipsevm
# deploy contracts shout "DEPLOYING CONTRACTS"
npx hardhat run scripts/deploy.js --network hosthat npx hardhat run scripts/deploy.js --network hosthat
# challenger will use same initial memory checkpoint and deployed contracts # challenger will use same initial memory checkpoint and deployed contracts
cp /tmp/cannon/{golden,deployed}.json /tmp/cannon_fault/ cp /tmp/cannon/{golden,deployed}.json /tmp/cannon_fault/
# fetch preimages for real block shout "FETCHING PREIMAGES FOR REAL BLOCK"
minigeth/go-ethereum $BLOCK minigeth/go-ethereum $BLOCK
# compute real MIPS final memory checkpoint shout "COMPUTING REAL MIPS FINAL MEMORY CHECKPOINT"
mipsevm/mipsevm $BLOCK mipsevm/mipsevm $BLOCK
# fetch preimages for wrong block shout "FETCHING PREIMAGES FOR WRONG BLOCK"
BASEDIR=/tmp/cannon_fault minigeth/go-ethereum $WRONG_BLOCK BASEDIR=/tmp/cannon_fault minigeth/go-ethereum $WRONG_BLOCK
# compute fake MIPS final memory checkpoint shout "COMPUTING FAKE MIPS FINAL MEMORY CHECKPOINT"
BASEDIR=/tmp/cannon_fault mipsevm/mipsevm $WRONG_BLOCK BASEDIR=/tmp/cannon_fault mipsevm/mipsevm $WRONG_BLOCK
# pretend the wrong block's input, checkpoints and preimages are the right block's # pretend the wrong block's input, checkpoints and preimages are the right block's
ln -s /tmp/cannon_fault/0_$WRONG_BLOCK /tmp/cannon_fault/0_$BLOCK ln -s /tmp/cannon_fault/0_$WRONG_BLOCK /tmp/cannon_fault/0_$BLOCK
# start challenge shout "STARTING CHALLENGE"
BASEDIR=/tmp/cannon_fault npx hardhat run scripts/challenge.js --network hosthat BASEDIR=/tmp/cannon_fault npx hardhat run scripts/challenge.js --network hosthat
# binary search shout "BINARY SEARCH"
for i in {1..23}; do for i in {1..23}; do
echo ""
echo "--- STEP $i / 23 ---"
echo ""
BASEDIR=/tmp/cannon_fault CHALLENGER=1 npx hardhat run scripts/respond.js --network hosthat BASEDIR=/tmp/cannon_fault CHALLENGER=1 npx hardhat run scripts/respond.js --network hosthat
npx hardhat run scripts/respond.js --network hosthat npx hardhat run scripts/respond.js --network hosthat
done done
# assert as challenger (fails) shout "ASSERTING AS CHALLENGER (should fail)"
set +e # this should fail! set +e # this should fail!
BASEDIR=/tmp/cannon_fault CHALLENGER=1 npx hardhat run scripts/assert.js --network hosthat BASEDIR=/tmp/cannon_fault CHALLENGER=1 npx hardhat run scripts/assert.js --network hosthat
set -e set -e
# assert as defender (passes) shout "ASSERTING AS DEFENDER (should pass)"
npx hardhat run scripts/assert.js --network hosthat npx hardhat run scripts/assert.js --network hosthat
File mode changed from 100644 to 100755
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment