mirror of
https://github.com/tig-foundation/tig-monorepo.git
synced 2026-02-22 02:47:50 +08:00
83 lines
2.7 KiB
Bash
83 lines
2.7 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
REPO_DIR=$(dirname $(dirname "$(realpath "$0")"))
|
|
TIG_WORKER_PATH="$REPO_DIR/target/release/tig-worker"
|
|
|
|
if [ ! -f $TIG_WORKER_PATH ]; then
|
|
echo "Error: tig-worker binary not found at ./target/release/tig-worker"
|
|
echo "Run: cd $REPO_DIR && cargo build -p tig-worker --release"
|
|
exit 1
|
|
fi
|
|
|
|
read -p "Enter benchmark_id: " benchmark_id
|
|
|
|
echo "Fetching benchmark data"
|
|
response=$(curl -s "https://mainnet-api.tig.foundation/get-benchmark-data?benchmark_id=$benchmark_id")
|
|
|
|
# parse data from resp
|
|
proof=$(echo "$response" | python3 -c "
|
|
import sys, json
|
|
data = json.load(sys.stdin)
|
|
for item in data['proof']['solutions_data']:
|
|
item['nonce'] = str(item['nonce'])
|
|
print(json.dumps(data))
|
|
" | jq '.proof')
|
|
if [ "$proof" == "null" ]; then
|
|
echo "No proofs found"
|
|
exit 0
|
|
fi
|
|
solutions_count=$(echo "$proof" | jq -r '.solutions_data | length')
|
|
settings=$(echo "$response" | jq -r '.benchmark.settings')
|
|
algorithm_id=$(echo "$settings" | jq -r '.algorithm_id')
|
|
echo "Found $solutions_count solutions to verify"
|
|
|
|
# Fetch block id
|
|
echo "Fetching block data"
|
|
block_response=$(curl -s "https://mainnet-api.tig.foundation/get-block")
|
|
block_id=$(echo "$block_response" | jq -r '.block.id')
|
|
|
|
# Fetch algorithms for the block
|
|
echo "Fetching algorithms data"
|
|
algorithms_response=$(curl -s "https://mainnet-api.tig.foundation/get-algorithms?block_id=$block_id")
|
|
wasms=$(echo "$algorithms_response" | jq -c '.wasms[]')
|
|
|
|
wasm=$(echo "$wasms" | jq -c "select(.algorithm_id == \"$algorithm_id\")")
|
|
|
|
if [ -z "$wasm" ]; then
|
|
echo "No matching WASM found for $algorithm_id"
|
|
exit 0
|
|
fi
|
|
|
|
compile_success=$(echo "$wasm" | jq -r '.details.compile_success')
|
|
if [ "$compile_success" == "false" ]; then
|
|
echo "WASM was not successful compiled"
|
|
exit 0
|
|
fi
|
|
|
|
download_url=$(echo "$wasm" | jq -r '.details.download_url')
|
|
echo "Downloading WASM from $download_url"
|
|
curl -s -o "$algorithm_id.wasm" "$download_url"
|
|
|
|
# verify solutions
|
|
for i in $(seq 0 $(($solutions_count - 1))); do
|
|
solution_data=$(echo "$proof" | jq -c -S ".solutions_data[$i]")
|
|
echo Verifying $solution_data
|
|
nonce=$(echo "$solution_data" | jq -r '.nonce')
|
|
solution=$(echo "$solution_data" | jq -r '.solution')
|
|
echo Verifying solution is valid
|
|
./target/release/tig-worker verify_solution "$settings" $nonce "$solution"
|
|
echo Verifying runtime_signature and fuel_consumed
|
|
compute_output=$(./target/release/tig-worker compute_solution "$settings" $nonce ./$algorithm_id.wasm | python3 -c "
|
|
import sys, json
|
|
data = json.load(sys.stdin)
|
|
data['nonce'] = str(data['nonce'])
|
|
print(json.dumps(data))
|
|
" | jq -c -S)
|
|
if [[ "$compute_output" == "$solution_data" ]]; then
|
|
echo "Ok"
|
|
else
|
|
echo "Mismatch. Actual: $compute_output"
|
|
fi
|
|
done
|
|
rm $algorithm_id.wasm |