Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ci): Add cannon smoke test #328

Merged
merged 28 commits into from
Aug 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
091a107
Add cannon smoke test
samcm Jun 7, 2024
07b48c8
Add cannon smoke test
samcm Jun 7, 2024
cbd501b
Add cannon smoke test
samcm Jun 7, 2024
d8a8b78
Add cannon smoke test
samcm Jun 7, 2024
09fd3c5
fix: Update network name in docker run command
samcm Jun 7, 2024
410aedc
Add cannon smoke test
samcm Jun 7, 2024
43512c8
Add cannon smoke test
samcm Jun 7, 2024
4c12054
Add cannon smoke test
samcm Jun 7, 2024
7c6e48d
Add cannon smoke test
samcm Jun 7, 2024
9c9ca47
Merge branch 'master' into feat/cannon-smoke-test
samcm Aug 2, 2024
5a5a618
feat: Add Xatu Cannon config with specified nodes
samcm Aug 2, 2024
6ef75e2
docs: Update network_params key name in YAML file
samcm Aug 2, 2024
5a68dc2
style: Remove unnecessary code for Xatu Cannon config
samcm Aug 2, 2024
4971965
feat: Add Cannon database seeding configuration
samcm Aug 2, 2024
af429f1
feat: Add script to generate seed commands from YAML file
samcm Aug 2, 2024
48d574c
feat: Seed Postgres with cannon data
samcm Aug 2, 2024
76fc8f4
fix: Update script to accept seeding.yaml location argument
samcm Aug 2, 2024
e1a4bab
feat: Add command to show database state
samcm Aug 2, 2024
6a586ce
chore: Update cannon-smoke-test.yaml config details
samcm Aug 2, 2024
36cafc2
Merge branch 'master' into feat/cannon-smoke-test
samcm Aug 8, 2024
6ed0006
test: Add assertions for different network types
samcm Aug 9, 2024
34fbee8
test: Update cannon-smoke-test.yaml beaconNodeAddress
samcm Aug 9, 2024
70f8350
feat: Install clickhouse client in cannon-smoke-test workflow
samcm Aug 9, 2024
e2e9323
feat: Add beacon node headers to smoke test config
samcm Aug 9, 2024
c3be585
feat: Add tmate setup step to smoke test workflow
samcm Aug 9, 2024
7576fc9
feat: Add 'detached' option for tmate action
samcm Aug 9, 2024
f099576
feat: Increase timeout for verifying Clickhouse data to 15 minutes
samcm Aug 9, 2024
594916b
chore: comment out tmate setup in smoke test workflow
samcm Aug 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions .github/cannon/assert_clickhouse.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#!/bin/bash

# Check if seeding.yaml location is provided as a parameter
if [ $# -eq 0 ]; then
echo "Error: Please provide the location of seeding.yaml as an argument."
exit 1
fi

SEEDING_YAML="$1"

# Set variables for ClickHouse connection
CLICKHOUSE_HOST=${CLICKHOUSE_HOST:-"localhost"}
CLICKHOUSE_PORT=${CLICKHOUSE_PORT:-"9000"}
CLICKHOUSE_USER=${CLICKHOUSE_USER:-"default"}
CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD:-""}
CLICKHOUSE_DB=${CLICKHOUSE_DB:-"default"}

# Function to execute ClickHouse query
execute_query() {
# Check if clickhouse-client is available
if command -v clickhouse-client &> /dev/null; then
clickhouse-client -h "$CLICKHOUSE_HOST" --port "$CLICKHOUSE_PORT" -u "$CLICKHOUSE_USER" --password "$CLICKHOUSE_PASSWORD" -d "$CLICKHOUSE_DB" -q "$1"
else
clickhouse client -h "$CLICKHOUSE_HOST" --port "$CLICKHOUSE_PORT" -u "$CLICKHOUSE_USER" --password "$CLICKHOUSE_PASSWORD" -d "$CLICKHOUSE_DB" -q "$1"
fi
}

# Check if the seeding.yaml file exists
if [ ! -f "$SEEDING_YAML" ]; then
echo "Error: seeding.yaml file not found at $SEEDING_YAML"
exit 1
fi

# Parse the YAML file and execute queries
yq e '.networks[].types[] | [.name, .assert.query, .assert.expected] | @tsv' "$SEEDING_YAML" | while IFS=$'\t' read -r name query expected; do
if [ -z "$query" ] || [ "$query" == "null" ]; then
echo "Query is empty. Skipping..."
continue
fi

while true; do
echo "Asserting type: $name"
echo "Executing query: $query"
result=$(execute_query "$query")

if [ -n "$result" ]; then
echo "Result: $result"

# Evaluate the expected condition
if [ -n "$expected" ] && [ "$expected" != "null" ]; then
if [ "$result" -eq "$expected" ]; then
echo "Assertion passed for $name"
break
else
echo "Assertion failed for $name. Expected: $expected, Got: $result"
sleep 2
continue
fi
else
echo "No assertion condition provided for $name. Continuing..."
break
fi
else
echo "No data found for $name. Retrying in 5 seconds..."
sleep 5
fi
done
done

echo "All assertions completed."
26 changes: 26 additions & 0 deletions .github/cannon/create-seed-commands.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash

# Check if the location argument is provided
if [ $# -eq 0 ]; then
echo "Error: Please provide the location of seeding.yaml as an argument."
exit 1
fi

# Read the seeding.yaml file from the provided location
yaml_content=$(cat "$1")

while IFS= read -r line; do
if [[ $line =~ ^[[:space:]]*-[[:space:]]*id:[[:space:]]*([0-9]+) ]]; then
network_id="${BASH_REMATCH[1]}"
elif [[ $line =~ ^[[:space:]]*-[[:space:]]*name:[[:space:]]*(.+) ]]; then
type="${BASH_REMATCH[1]}"
elif [[ $line =~ ^[[:space:]]*finalizedEpoch:[[:space:]]*([0-9]+) ]]; then
epoch="${BASH_REMATCH[1]}"
value="{\"backfillingCheckpointMarker\":{\"finalizedEpoch\":\"$epoch\"}}"
echo "INSERT INTO cannon_location (network_id, type, value)"
echo "VALUES ('$network_id', '$type', '$value')"
echo "ON CONFLICT (network_id, type) DO UPDATE"
echo "SET value = EXCLUDED.value, update_time = now();"
echo
fi
done <<< "$yaml_content"
251 changes: 251 additions & 0 deletions .github/cannon/seeding.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
# Cannon database seeding configuration for skipping types per network to epochs with known data.
# Useful for CI for events that are very rare, e.g. Proposer Slashing.
#
# Note: Due to the way cannon progresses, we need to offset these epochs by 1.
# FinalizedEpoch will be processed until it is up to head ascendingly.
# Therefore, if we have data in epoch 100 for a specific type we
# should set the finalizedEpoch to 99.
networks:
- id: 17000 # Holesky
types:
- name: BEACON_API_ETH_V2_BEACON_BLOCK_DEPOSIT
finalizedEpoch: 69410
assert:
query: "SELECT COUNT(*)
FROM canonical_beacon_block_deposit FINAL
WHERE epoch = 69411 AND
block_root = '0x50ae6c14a7868ce28455d1cdc170e6d993aae86396036f64f42607c5b259e0b2' AND
block_version = 'deneb' AND
deposit_data_pubkey = '0x96a54404be0164059556ea2447a8fefca5f04482b6e97b7fb1c0cc924171dcffb986c73e8991e47cd9693eee3c4e7cc4' AND
deposit_data_withdrawal_credentials = '0x01000000000000000000000027aabee07e0dbc8b0de20f42b1a1980871314ef5' AND
deposit_data_amount = 32000000000 AND
deposit_data_signature = '0xa9ac89d73f43b2f6eae61fc3217ba6ce1c9a3a9cfdcc11b498c8dcf3093aad108fbf50a259ef74b379e735cef7fb892402a7b07300177231c2f35de8ae9d5d3bb0f4158b2fc14528a91f4bcd542091a2188a9652c94e05a0a6e4fc991beda24d';
"
expected: "1"
- name: BEACON_API_ETH_V2_BEACON_BLOCK_BLS_TO_EXECUTION_CHANGE
finalizedEpoch: 69022
assert:
query: "SELECT COUNT(*) FROM canonical_beacon_block_bls_to_execution_change FINAL
WHERE
epoch = 69023
AND slot = 2208761
AND block_root = '0x88b969e23aaeb906eec59fad6f33be071f0e73870bbfa6f781632337c221ba84'
AND block_version = 'deneb'
AND exchanging_message_validator_index = 1754707
AND exchanging_message_from_bls_pubkey = '0x8bc000fedf7df347e68fcf72ae74f0516cd6051fdb426853744cfee3ff4d171f63c574483acfd4c756c29ee4bcec8ea9'
AND exchanging_message_to_execution_address = '0x1c0A59Ecd75e0B2D5dc9788F028e7643AF1dc547'
AND exchanging_signature = '0x90c746541b567f7228623ba8991949098fef1f23b23d773c4c021b13989fad811f5fba2bad5ccd4f46e73d16b20066a6057603f0c7433c8075e17efb20380a0400e0dce6671ba6237a2807aeb218e77394c32053ea4c8475ad973f7214b34bdb'
"
expected: "1"
- name: BEACON_API_ETH_V2_BEACON_BLOCK_ATTESTER_SLASHING
finalizedEpoch: 67271
assert:
query: "SELECT COUNT(*) as cnt
FROM canonical_beacon_block_attester_slashing FINAL
WHERE
epoch = 67272
AND block_root = '0xdba4fcca638f678a0576117f9709e77e889d816cca14e06a207c1945f0ed3447'
AND block_version = 'deneb'
AND has(attestation_1_attesting_indices, 1726414)
AND attestation_1_signature = '0xaadb1a17a200d4a8703ee2316969df1fa62959ebca53262d37134d245002b0be07927feb998aca280b5c250195af768c02ff9e1048d7e858cce39c264bcc0549fbcb1214f69e16b4c57ac54682635930793973f162b4f786442767a1c326d06e'
AND attestation_1_data_beacon_block_root = '0xcd45e27eb9855fb4195a82baa97f9fdce3b442d74c2ca9c5b8410347207c33e0'
AND attestation_1_data_slot = 2152725
AND attestation_1_data_index = 46
AND attestation_1_data_source_epoch = 67271
AND attestation_1_data_source_root = '0x0dd676fb6fbed7362e55c0400367fb4d46cf8ae266b8270dada8d8f3b57054b8'
AND attestation_1_data_target_epoch = 67272
AND attestation_1_data_target_root = '0x9737bb5720eaa73775300e4403cbeecffca9c202afacf6e92dfee6298c1180e0'
AND has(attestation_2_attesting_indices, 1726414)
AND attestation_2_signature = '0xae331ac2daac8f17fdcc57f29f5abc75b459456e3fe518d89c74ce126551a93914c7782e6e2df48b6baa57f01116104614d3fac6ec4bbf6a34fc8652aa433cd0f4ed0f7d598ae113668a6a71d240e4d56b843a5fbf9b192a6303fb9ef83e94e4'
AND attestation_2_data_beacon_block_root = '0x030b490805227553adabf9e7210422c705c0e30381aa647fb61efb3e23c407f4'
AND attestation_2_data_slot = 2152725
AND attestation_2_data_index = 46
AND attestation_2_data_source_epoch = 67271
AND attestation_2_data_source_root = '0x0dd676fb6fbed7362e55c0400367fb4d46cf8ae266b8270dada8d8f3b57054b8'
AND attestation_2_data_target_epoch = 67272
AND attestation_2_data_target_root = '0x9737bb5720eaa73775300e4403cbeecffca9c202afacf6e92dfee6298c1180e0'
"
expected: "1"
- name: BEACON_API_ETH_V2_BEACON_BLOCK_PROPOSER_SLASHING
finalizedEpoch: 57600
assert:
query: "SELECT COUNT(*) as cnt
FROM canonical_beacon_block_proposer_slashing FINAL
WHERE
epoch = 57601
AND block_root = '0x3c42bf130d6c86c8e57829355b550a58ee0b0de1397e1a81a7ab8e17a7c829ab'
AND block_version = 'deneb'
AND signed_header_1_message_slot = 1843233
AND signed_header_1_message_proposer_index = '356870'
AND signed_header_1_message_body_root = '0xc9544d722e81285b989c0de9d8eaab28001518ece10c0256ad62bc5478e52723'
AND signed_header_1_message_parent_root = '0xbd83d108fe8bf4f9d08bbf89b8ca3bbd103673b5efd7bfeae6155eae283903d8'
AND signed_header_1_message_state_root = '0xccc6dd1f9de4d215deca9f3f6c0c2a8b37756e26f9c935970119d8003fff8f4a'
AND signed_header_1_signature = '0x88cb94b1e76d1fc68d1941446d5c78d6e4516636499cb96be14ee0b5d740f38a32991ebbe52dd09404ede2fd18c828ea13ecc7f49f7bacc3845af1e10dfc7cc7403dfa479b90ef4356e4ff1c6e3f3fc8abee8b1cb098cbd64f64390cbaf2070a'
AND signed_header_2_message_slot = 1843233
AND signed_header_2_message_proposer_index = 356870
AND signed_header_2_message_body_root = '0x9f3d4ca2aefc1b3f161574a6705e13b928d64505e45ca16e87037f39b7dd9495'
AND signed_header_2_message_parent_root = '0xf8b753905c00f11b81a5ed0932b747f2fa991bc62e425d6e54cbc10ff6deda80'
AND signed_header_2_message_state_root = '0x17e721ab0fe80976d8d01365f83039d3eb8b840e8cd8cce2fe9e4d9ad9bd4bd9'
AND signed_header_2_signature = '0xa8d677fbe5eaf0a46d08e1f6bd23d071606321b82e1b9bb84c40792439c6b7630cf80f2a3d702ebf7a36c9338f702cb2147b47651b7871fbfb3cff3a301e0b99f6f23527aa8927d11231156e9addb4d15a01329f5a47ccf6219d067e5aef22e5'
"
expected: "1"
- name: BEACON_API_ETH_V2_BEACON_BLOCK_VOLUNTARY_EXIT
finalizedEpoch: 70807
assert:
query: "SELECT COUNT(*)
FROM canonical_beacon_block_voluntary_exit FINAL
WHERE
epoch = 70808
AND block_root = '0x682d244580d3838dd6757cbd5bec3f16fc235869589617dd0cacacb92b167f15'
AND block_version = 'deneb'
AND voluntary_exit_signature = '0xa72f5852964e265714eb8c9ff56542e4dd5c8c82f43f8ad5a33da5489dd7a620e15d831f0b4b728ace4af56adb0ff9050033a85a4cc386acac89be0651503a7043d544803c4d77559a1917645957f65308a7352ff1daaeaf6556f01bf149d4ba'
AND voluntary_exit_message_validator_index = 1771272
AND voluntary_exit_message_epoch = 70808
"
expected: "1"
- name: BEACON_API_ETH_V2_BEACON_BLOCK
finalizedEpoch: 71009
assert:
query: "SELECT COUNT(*) FROM canonical_beacon_block FINAL
WHERE
slot = 2272320
AND slot_start_date_time = '2024-08-09 02:24:00'
AND epoch = 71010
AND epoch_start_date_time = '2024-08-09 02:24:00'
AND block_root = '0xff8e97fdf4033e499681ff0eb056cf5f2877a8f9b16f14e2db3956b75190b9e7'
AND block_version = 'deneb'
AND block_total_bytes = 204103
AND block_total_bytes_compressed = 95454
AND parent_root = '0x54264e13e97a137bed2cc1a52cf76a94bb5e385507d34ff3902d18672f4ef79e'
AND state_root = '0x3598ed522160cb6dd0aab216f03b26d61b32d87854c3d38754897017a66004f5'
AND proposer_index = 416934
AND eth1_data_block_hash = '0xa80ebe78370b22214b15898701c10c9c49fc77809ac72548aba918e389a95f28'
AND eth1_data_deposit_root = '0x50bfebb571f79b3d094192b0187145cb2773a2d0a16968fad7a9ea054ce2fdb4'
AND execution_payload_block_hash = '0x1ba818c4f3509131eb0c513410b7de01632b8ca54042f8a48b5cda1e6ae7151b'
AND execution_payload_block_number = 2095983
AND execution_payload_fee_recipient = '0x9baA3244565d51D9C7897c0EB6679eD4890e536E'
AND execution_payload_state_root = '0x86e8dcd6e429b1ead94b17eabbb5de3c42c19217ab57a16f7f6a857d078e2eff'
AND execution_payload_parent_hash = '0x8d8d8266b756c27205a15a38b914b971f12ec6c1759f5a5643697cf394068ad1'
AND execution_payload_transactions_count = 67
AND execution_payload_transactions_total_bytes = 49669
AND execution_payload_transactions_total_bytes_compressed = 27703"
expected: "1"
- name: BEACON_API_ETH_V1_PROPOSER_DUTY
finalizedEpoch: 71002
assert:
query: "SELECT COUNT(*) FROM canonical_beacon_proposer_duty FINAL
WHERE
slot = 2272098
AND slot_start_date_time = '2024-08-09 01:39:36'
AND epoch = 71003
AND epoch_start_date_time = '2024-08-09 01:39:12'
AND proposer_validator_index = 1337851
AND proposer_pubkey = '0xb69cc87f9610eeaff816b2c0182e3320fd04c8be572a3adba2b40d7f11a6d84dadeb24cf2829d10eda0d611b46da0907'"
expected: "1"
- name: BEACON_API_ETH_V1_BEACON_BLOB_SIDECAR
finalizedEpoch: 71010
assert:
query: "SELECT COUNT(*) FROM canonical_beacon_blob_sidecar FINAL
WHERE
slot = 2272356
AND slot_start_date_time = '2024-08-09 02:31:12'
AND epoch = 71011
AND epoch_start_date_time = '2024-08-09 02:30:24'
AND block_root = '0x1e02ff0da1811c5609acafd4597543878cb6216fe519587da1ab0aeb3296ac75'
AND block_parent_root = '0x0e81a2325869e04919bffc5bbf745ecafd22c7005ac717ee5122f1a3f51ea24a'
AND versioned_hash = '0x0100d3b0b63aefd96e6b2c7aa84c1a0cdd6fe8366128cebf032fc64846c6608c'
AND kzg_commitment = '0xb1b3ca5607286f6b221fa38321a80980cfe10946e9e33e07b74e13a93e385ddb99ca727a1f617e6f0c088f68f1da63b5'
AND kzg_proof = '0x8bdca97a0c6c7baf0a94d25bfa70024319f2ebb36442865333f6d41d8d5f141283f337da24dc7f3b72151098ddf60571'
AND proposer_index = 1744957
AND blob_index = 2
AND blob_size = 131072
AND blob_empty_size = 56206"
expected: "1"
- name: BEACON_API_ETH_V1_BEACON_VALIDATORS
finalizedEpoch: 71005
assert:
query: "SELECT COUNT(*) FROM canonical_beacon_validators FINAL
WHERE
epoch = 71006
AND epoch_start_date_time = '2024-08-09 01:58:24'
AND `index` = 0
AND balance = '32005471610'
AND status = 'active_ongoing'
AND effective_balance = '32000000000'
AND slashed = false"
expected: "1"
- name: BEACON_API_ETH_V1_BEACON_VALIDATORS
finalizedEpoch: 71005
assert:
query: "SELECT COUNT(*) FROM canonical_beacon_validators_pubkeys FINAL
WHERE
`index` = 0
AND pubkey = '0x8c87f7a01e54215ac177fb706d78e9edf762f15f34ba81103094da450f1683ced257d4270fc030a9a803aaa060edf16a'"
expected: "1"
- name: BEACON_API_ETH_V1_BEACON_VALIDATORS
finalizedEpoch: 71005
assert:
query: "SELECT COUNT(*) FROM canonical_beacon_validators_withdrawal_credentials FINAL
WHERE
`index` = 0
AND withdrawal_credentials = '0x0100000000000000000000000e5dda855eb1de2a212cd1f62b2a3ee49d20c444'"
expected: "1"
- name: BEACON_API_ETH_V2_BEACON_BLOCK_EXECUTION_TRANSACTION
finalizedEpoch: 71010
assert:
query: "SELECT COUNT(*) FROM canonical_beacon_block_execution_transaction FINAL
WHERE
slot = 2272352
AND slot_start_date_time = '2024-08-09 02:30:24'
AND epoch = 71011
AND epoch_start_date_time = '2024-08-09 02:30:24'
AND block_root = '0x92818da049f530f531878aead240dd43ca95b87fde0ee3bc65ae1f334a172457'
AND block_version = 'deneb'
AND position = 0
AND hash = '0x50ba44917e11e686f74aa02874694e4c11216e789a8e98914e397d3cdd874a63'
AND `from` = '0xc227C08d62cBedF89B1B605Ef03868838E9ABf1e'
AND `to` = '0x39C2A9c40c6bd507563648b5175F9aF712808A69'
AND nonce = '1'
AND gas_price = '10000000000'
AND gas = '21000'
AND gas_tip_cap = '10000000000'
AND gas_fee_cap = '10000000000'
AND value = '3059301224999739320'
AND type = 0
AND size = 112
AND call_data_size = 0
AND blob_gas IS NULL
AND blob_gas_fee_cap IS NULL
AND blob_hashes = []
AND blob_sidecars_size = 0
AND blob_sidecars_empty_size = 0"
expected: "1"
- name: BEACON_API_ETH_V2_BEACON_BLOCK_WITHDRAWAL
finalizedEpoch: 71010
assert:
query: "SELECT COUNT(*) FROM canonical_beacon_block_withdrawal FINAL
WHERE
slot = 2272352
AND slot_start_date_time = '2024-08-09 02:30:24'
AND epoch = 71011
AND epoch_start_date_time = '2024-08-09 02:30:24'
AND block_root = '0x92818da049f530f531878aead240dd43ca95b87fde0ee3bc65ae1f334a172457'
AND block_version = 'deneb'
AND withdrawal_index = 33356747
AND withdrawal_validator_index = 1501755
AND withdrawal_address = '0x428614Fb30e3007e5d628D09e8BDB0CE9720FAdB'
AND withdrawal_amount = '7498159'"
expected: "1"
- name: BEACON_API_ETH_V1_BEACON_COMMITTEE
finalizedEpoch: 71016
assert:
query: "SELECT COUNT(*) FROM canonical_beacon_committee FINAL
WHERE
slot = 2272557
AND slot_start_date_time = '2024-08-09 03:11:24'
AND committee_index = '21'
AND epoch = 71017
AND epoch_start_date_time = '2024-08-09 03:08:48'
AND has(validators, 1119923)
"
expected: "1"
Loading
Loading