Advance forge rollout, Ethereum rails, and NBC sources
This commit is contained in:
parent
be26313225
commit
7d84510eac
88 changed files with 11230 additions and 302 deletions
127
scripts/op-stack/anvil-reality-smoke.sh
Executable file
127
scripts/op-stack/anvil-reality-smoke.sh
Executable file
|
|
@ -0,0 +1,127 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
remote="${EVERY_CHANNEL_REALITY_SMOKE_REMOTE:-root@git.every.channel}"
|
||||
remote_jsonl="${EVERY_CHANNEL_REALITY_SMOKE_JSONL:-/var/lib/every-channel/manifests/la-cbs/video0.m4s.jsonl}"
|
||||
remote_identity_file="${EVERY_CHANNEL_REALITY_SMOKE_SSH_IDENTITY_FILE:-${HOME}/.ssh/id_ed25519}"
|
||||
anvil_port="${EVERY_CHANNEL_REALITY_SMOKE_ANVIL_PORT:-8545}"
|
||||
results_dir="${EVERY_CHANNEL_REALITY_SMOKE_RESULTS_DIR:-./test-results}"
|
||||
|
||||
anvil_pk0="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"
|
||||
anvil_pk1="0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d"
|
||||
anvil_pk2="0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a"
|
||||
|
||||
mkdir -p "${results_dir}"
|
||||
anvil_log="${results_dir}/anvil-reality-smoke.log"
|
||||
deploy_json="${results_dir}/observation-ledger-deploy.json"
|
||||
result_json="${results_dir}/anvil-reality-smoke.json"
|
||||
|
||||
cleanup() {
|
||||
if [[ -n "${anvil_pid:-}" ]]; then
|
||||
kill "${anvil_pid}" >/dev/null 2>&1 || true
|
||||
wait "${anvil_pid}" >/dev/null 2>&1 || true
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
anvil --port "${anvil_port}" >"${anvil_log}" 2>&1 &
|
||||
anvil_pid=$!
|
||||
|
||||
for _ in $(seq 1 30); do
|
||||
if curl -fsS -X POST -H 'content-type: application/json' \
|
||||
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
|
||||
"http://127.0.0.1:${anvil_port}" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
rpc_url="http://127.0.0.1:${anvil_port}"
|
||||
owner_file="$(mktemp)"
|
||||
printf '%s\n' "${anvil_pk0}" >"${owner_file}"
|
||||
|
||||
EVERY_CHANNEL_RPC_URL="${rpc_url}" \
|
||||
EVERY_CHANNEL_PRIVATE_KEY_FILE="${owner_file}" \
|
||||
EVERY_CHANNEL_OBSERVATION_DEPLOY_OUT="${deploy_json}" \
|
||||
./scripts/op-stack/deploy-observation-ledger.sh >/dev/null
|
||||
|
||||
registry="$(jq -r '.registry' <"${deploy_json}")"
|
||||
ledger="$(jq -r '.ledger' <"${deploy_json}")"
|
||||
|
||||
witness1="$(cast wallet address --private-key "${anvil_pk1}")"
|
||||
witness2="$(cast wallet address --private-key "${anvil_pk2}")"
|
||||
|
||||
cast send "${registry}" "addWitness(address)" "${witness1}" --rpc-url "${rpc_url}" --private-key "${anvil_pk0}" >/dev/null
|
||||
cast send "${registry}" "addWitness(address)" "${witness2}" --rpc-url "${rpc_url}" --private-key "${anvil_pk0}" >/dev/null
|
||||
|
||||
remote_jsonl_escaped="$(printf '%q' "${remote_jsonl}")"
|
||||
entry="$(ssh \
|
||||
-i "${remote_identity_file}" \
|
||||
-o IdentityAgent=none \
|
||||
-o IdentitiesOnly=yes \
|
||||
-o BatchMode=yes \
|
||||
-o ConnectTimeout=10 \
|
||||
"${remote}" \
|
||||
"head -n 1 -- ${remote_jsonl_escaped}")"
|
||||
if [[ -z "${entry}" ]]; then
|
||||
echo "no remote archive entry found" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
broadcast_name="$(jq -r '.broadcast_name' <<<"${entry}")"
|
||||
track_name="$(jq -r '.track_name' <<<"${entry}")"
|
||||
group_sequence="$(jq -r '.group_sequence' <<<"${entry}")"
|
||||
received_unix_ms="$(jq -r '.received_unix_ms' <<<"${entry}")"
|
||||
blake3_hex="$(jq -r '.blake3' <<<"${entry}")"
|
||||
locator_material="$(jq -c '{relay_url,broadcast_name,track_name,group_sequence,cas_path}' <<<"${entry}")"
|
||||
|
||||
stream_hash="$(cast keccak "${broadcast_name}:${track_name}")"
|
||||
epoch_hash="$(cast keccak "${broadcast_name}:${track_name}:${group_sequence}")"
|
||||
parent_hash="0x0000000000000000000000000000000000000000000000000000000000000000"
|
||||
data_root="0x${blake3_hex}"
|
||||
locator_hash="$(cast keccak "${locator_material}")"
|
||||
|
||||
observation_tuple="(${stream_hash},${epoch_hash},${parent_hash},${data_root},${locator_hash},${received_unix_ms},${group_sequence})"
|
||||
cast send "${ledger}" \
|
||||
"proposeObservation((bytes32,bytes32,bytes32,bytes32,bytes32,uint64,uint64))" \
|
||||
"${observation_tuple}" \
|
||||
--rpc-url "${rpc_url}" \
|
||||
--private-key "${anvil_pk1}" >/dev/null
|
||||
|
||||
observation_hash="$(cast call "${ledger}" \
|
||||
"hashObservationHeader((bytes32,bytes32,bytes32,bytes32,bytes32,uint64,uint64))(bytes32)" \
|
||||
"${observation_tuple}" \
|
||||
--rpc-url "${rpc_url}")"
|
||||
slot_hash="$(cast call "${ledger}" \
|
||||
"observationSlot(bytes32,bytes32)(bytes32)" \
|
||||
"${stream_hash}" "${epoch_hash}" \
|
||||
--rpc-url "${rpc_url}")"
|
||||
|
||||
cast send "${ledger}" "attestObservation(bytes32)" "${observation_hash}" \
|
||||
--rpc-url "${rpc_url}" \
|
||||
--private-key "${anvil_pk2}" >/dev/null
|
||||
|
||||
finalized="$(cast call "${ledger}" "finalizedObservationBySlot(bytes32)(bytes32)" "${slot_hash}" --rpc-url "${rpc_url}")"
|
||||
|
||||
cat >"${result_json}" <<EOF
|
||||
{
|
||||
"remote": "${remote}",
|
||||
"remote_jsonl": "${remote_jsonl}",
|
||||
"broadcast_name": "${broadcast_name}",
|
||||
"track_name": "${track_name}",
|
||||
"group_sequence": ${group_sequence},
|
||||
"stream_hash": "${stream_hash}",
|
||||
"epoch_hash": "${epoch_hash}",
|
||||
"observation_hash": "${observation_hash}",
|
||||
"finalized_hash": "${finalized}",
|
||||
"registry": "${registry}",
|
||||
"ledger": "${ledger}"
|
||||
}
|
||||
EOF
|
||||
|
||||
if [[ "${finalized}" != "${observation_hash}" ]]; then
|
||||
echo "observation did not finalize" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printf '%s\n' "${result_json}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue