From fd73721e33a4e98c8a067d6a545509a97f114335 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Sun, 27 Sep 2026 23:10:18 +0000 Subject: [PATCH] plasma: bump plasma-consensus to v1.1.0 with config schema migration - Bump plasma-consensus node version from 0.15.0 to 1.1.0 - Update non-validator.toml schema: replace [validators.N] with [network.bls_peer_ids] + [chain.static_committee.N] - Add [chain.aquila] section with mainnet activation_height=33300000 - Convert [[network.bootstrap_nodes]] to indexed [network.bootstrap_nodes.N] tables - Remove deprecated [[network.trusted_peers]] section - Regenerate compose files with new config BREAKING: Requires in-place consensus-DB migration. Downgrade to 0.15.0 is unsupported after first 1.1.0 start. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe --- .../xlayer-testnet-op-reth-archive-trace.yml | 2 +- plasma/mainnet/non-validator.toml | 107 +++++++++--------- .../reth/plasma-mainnet-reth-pruned-trace.yml | 11 +- .../reth/plasma-testnet-reth-pruned-trace.yml | 11 +- plasma/testnet/non-validator.toml | 101 +++++++++-------- 5 files changed, 120 insertions(+), 112 deletions(-) diff --git a/op/reth/xlayer-testnet-op-reth-archive-trace.yml b/op/reth/xlayer-testnet-op-reth-archive-trace.yml index 00faa015..403f04ef 100644 --- a/op/reth/xlayer-testnet-op-reth-archive-trace.yml +++ b/op/reth/xlayer-testnet-op-reth-archive-trace.yml @@ -133,7 +133,7 @@ services: shm_size: 2gb xlayer-testnet-op-reth-node: - image: ${XLAYER_NODE_IMAGE:-xlayer/op-node}:${XLAYER_TESTNET_NODE_VERSION:-v0.1.5.1} + image: ${XLAYER_NODE_IMAGE:-xlayer/op-node}:${XLAYER_TESTNET_NODE_VERSION:-v0.1.6} ports: - 18466:18466 - 18466:18466/udp diff --git a/plasma/mainnet/non-validator.toml b/plasma/mainnet/non-validator.toml index 1aaa695f..909d0351 100644 --- a/plasma/mainnet/non-validator.toml +++ b/plasma/mainnet/non-validator.toml @@ -13,52 +13,6 @@ identity_file_path = "/consensus/ec-secp256k1-non-validator.der" trusted_only = true discovery.enabled = true -[api] -enabled = true -host = "0.0.0.0" -port = 35070 - -[validators] -[validators.0] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-0.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-0.hex" - -[validators.1] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-1.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-1.hex" - -[validators.2] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-2.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-2.hex" - -[validators.3] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-3.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-3.hex" - -[validators.4] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-4.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-4.hex" - -[validators.5] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-5.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-5.hex" - -[validators.6] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-6.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-6.hex" - -[validators.7] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-7.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-7.hex" - -[validators.8] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-8.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-8.hex" - -[validators.9] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-9.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-9.hex" - [network.bootstrap_nodes.0] api_host = "plasma-mainnet-observer-cs-1.plasmalabs.tech" p2p_port = 34070 @@ -74,14 +28,57 @@ api_host = "plasma-mainnet-observer-cs-9.plasmalabs.tech" p2p_port = 34070 peer_id = "16Uiu2HAm2PVfZRoyXXLASVzVX3gyBEQd3mRAzZytjv3esD9kWumD" -[[network.trusted_peers]] -peer_id = "16Uiu2HAm4WdZmik6PVsRvcbCzc1eHuNfQHgj52CxUAjmdC7W5dXi" -address = "plasma-mainnet-observer-cs-1.plasmalabs.tech:34070" +[network.bls_peer_ids] +ad840fde21315f757ae4f7b30629d6446fced8648b46adfe6cfcda615ee7d93b2c8bd160fc189899d388133935686972 = "16Uiu2HAkvjrtriXRzhVp4i6jdNb6wPWA9wh9TKvsh1DnFJe4AF1J" +a65fda74154fc876c70feb22e5d51be5d224f57152c37d6ceadb534f0c1976992cc8470b87ade6071574b778ff420828 = "16Uiu2HAkv5EgrXXwi4gheip871xYJrY5Gc7oVTs3TWuS1BgFN5jE" +9732eabb15ac6fe92a0107c4faf5a2ba175ce0a835e36e0d5892bfea220bc43a1894ff0c75067c733bc3a9c2798b6b3b = "16Uiu2HAkuz46swzu5uRzjwf15YsJBe4yawh9qHtPhtHo5mZp9rQU" +90bf4d4e3b84f19842d7e01fb09403b074730823fc143f47307018edb03659765d91ce297f945c77e1a198eed0da5b93 = "16Uiu2HAmMjDzXsnKm7xFq2gVAUKhcTtMsETXPWo3HDwnKSVyHCBv" +a9dcac28ddbf37c7af585a77c6b49568b1d844027443bac69769d5fb69796d8fb93d798ff37c0b1a91fd263576e207d4 = "16Uiu2HAmVXe3Jpb5AVuKoggNJ1cvYKZT7yC7C7Me3JYNrD36hqvU" +9173143cf3df430b15bc52961a516e1923d023aac7e31c8e4b35a5df41133934639557bec12dcc80b21f4cb879dbf49e = "16Uiu2HAm4mHePE4gesAb9KhUsQ9vbGyxZGbKD2H8Qv9LSERfQ4fq" +b9935908a1c1b77f8c388767eeb21a8e85b2131204dfea5bed53559b881d22c3bca57237c389be16da6d1ff25aca1385 = "16Uiu2HAmN7iKTmj56PzYBueSo1niYUC7jagvfKPqooz4X9ooTKUs" +a74898f0250015bd973d569a5c70c7b3ef46121dd6035ce95d000f2fdc61fafd0145d47933ff26ee65a533adbd2e699d = "16Uiu2HAmLtcwU8CSSATpyukvZ9xgjaihjYDye4pBAnvpUsgU9uXQ" +a442d581de5524eddaf4c8c467cc32f04ddab12b88c7e924fbd67c1546abaca6f8f521dcfafa2df62baa7eda3c055b14 = "16Uiu2HAmCM3TprzKxopBXVP8en3aFH2NuMMgVfYyunvqxt9LWuMF" +a24775fea0da6e9800492fd896896e79d6cb70058d1f97d2e7405078fcf051b9c49ad60455a11e85dc553cc4a19c2c5e = "16Uiu2HAky6J4k55kyXPiFrtJnqAt6WG4rMC1V2cg7t3E7KmHug7a" -[[network.trusted_peers]] -peer_id = "16Uiu2HAmGmnMycTkjnMoxcyVAF8cUFpVoVKKCAGTpwEBJMs181yM" -address = "plasma-mainnet-observer-cs-4.plasmalabs.tech:34070" +[api] +enabled = true +host = "0.0.0.0" +port = 35070 -[[network.trusted_peers]] -peer_id = "16Uiu2HAm2PVfZRoyXXLASVzVX3gyBEQd3mRAzZytjv3esD9kWumD" -address = "plasma-mainnet-observer-cs-9.plasmalabs.tech:34070" +[chain.aquila] +activation_height = 33300000 +contract_address = "0x6c50b8ca8EeAa1c75dEe5b5EA79772AcAbc92F48" +epoch_length = 20000 +handoff_window = 10000 +speculative_prefetch = 9999 +unsafe_allow_short_handoff_window = false + +[chain.static_committee.0] +bls_public_key = "ad840fde21315f757ae4f7b30629d6446fced8648b46adfe6cfcda615ee7d93b2c8bd160fc189899d388133935686972" + +[chain.static_committee.1] +bls_public_key = "a65fda74154fc876c70feb22e5d51be5d224f57152c37d6ceadb534f0c1976992cc8470b87ade6071574b778ff420828" + +[chain.static_committee.2] +bls_public_key = "9732eabb15ac6fe92a0107c4faf5a2ba175ce0a835e36e0d5892bfea220bc43a1894ff0c75067c733bc3a9c2798b6b3b" + +[chain.static_committee.3] +bls_public_key = "90bf4d4e3b84f19842d7e01fb09403b074730823fc143f47307018edb03659765d91ce297f945c77e1a198eed0da5b93" + +[chain.static_committee.4] +bls_public_key = "a9dcac28ddbf37c7af585a77c6b49568b1d844027443bac69769d5fb69796d8fb93d798ff37c0b1a91fd263576e207d4" + +[chain.static_committee.5] +bls_public_key = "9173143cf3df430b15bc52961a516e1923d023aac7e31c8e4b35a5df41133934639557bec12dcc80b21f4cb879dbf49e" + +[chain.static_committee.6] +bls_public_key = "b9935908a1c1b77f8c388767eeb21a8e85b2131204dfea5bed53559b881d22c3bca57237c389be16da6d1ff25aca1385" + +[chain.static_committee.7] +bls_public_key = "a74898f0250015bd973d569a5c70c7b3ef46121dd6035ce95d000f2fdc61fafd0145d47933ff26ee65a533adbd2e699d" + +[chain.static_committee.8] +bls_public_key = "a442d581de5524eddaf4c8c467cc32f04ddab12b88c7e924fbd67c1546abaca6f8f521dcfafa2df62baa7eda3c055b14" + +[chain.static_committee.9] +bls_public_key = "a24775fea0da6e9800492fd896896e79d6cb70058d1f97d2e7405078fcf051b9c49ad60455a11e85dc553cc4a19c2c5e" diff --git a/plasma/reth/plasma-mainnet-reth-pruned-trace.yml b/plasma/reth/plasma-mainnet-reth-pruned-trace.yml index 2d1df63e..acece5f4 100644 --- a/plasma/reth/plasma-mainnet-reth-pruned-trace.yml +++ b/plasma/reth/plasma-mainnet-reth-pruned-trace.yml @@ -50,7 +50,7 @@ services: logging: *logging-defaults plasma-mainnet-initialize-consensus: - image: ${PLASMA_PLASMA_CONSENSUS_IMAGE:-ghcr.io/plasmalaboratories/plasma-consensus-public}:${PLASMA_MAINNET_PLASMA_CONSENSUS_VERSION:-0.15.0} + image: ${PLASMA_PLASMA_CONSENSUS_IMAGE:-ghcr.io/plasmalaboratories/plasma-consensus-public}:${PLASMA_MAINNET_PLASMA_CONSENSUS_VERSION:-1.1.0} user: 0:0 entrypoint: [/bin/bash, -c] command: @@ -58,8 +58,8 @@ services: set -euo pipefail if [ ! -f /consensus/data.mdb ]; then echo "INFO Generating consensus database for mainnet network" - plasma-cli init \ - --chain /node/genesis.json \ + plasma-cli init observer \ + --config-path /config/non-validator.toml \ --data-dir /consensus else echo "INFO Consensus database already exists at /consensus/data.mdb" @@ -80,6 +80,7 @@ services: volumes: - ${PLASMA_MAINNET_RETH_PRUNED_TRACE_CONSENSUS_DATA:-plasma-mainnet-reth-pruned-trace-consensus}:/consensus:rw - ./plasma/mainnet/genesis.json:/node/genesis.json:ro + - ./plasma/mainnet/non-validator.toml:/config/non-validator.toml:ro - .jwtsecret:/jwt/jwt.hex:ro logging: *logging-defaults @@ -190,7 +191,7 @@ services: shm_size: 2gb plasma-mainnet-node: - image: ${PLASMA_PLASMA_CONSENSUS_IMAGE:-ghcr.io/plasmalaboratories/plasma-consensus-public}:${PLASMA_MAINNET_PLASMA_CONSENSUS_VERSION:-0.15.0} + image: ${PLASMA_PLASMA_CONSENSUS_IMAGE:-ghcr.io/plasmalaboratories/plasma-consensus-public}:${PLASMA_MAINNET_PLASMA_CONSENSUS_VERSION:-1.1.0} user: 0:0 ports: - 18415:34070 @@ -212,7 +213,7 @@ services: exec plasma-cli observer \ --config-path /tmp/non-validator.toml \ --no-color \ - --timeout-stream-manager 5s \ + --timeout-stream-manager 10ms \ --nat=extip:${IP}:18415 \ --telemetry.enable-metrics \ --telemetry.enable-health \ diff --git a/plasma/reth/plasma-testnet-reth-pruned-trace.yml b/plasma/reth/plasma-testnet-reth-pruned-trace.yml index b8f8456a..9321c1b3 100644 --- a/plasma/reth/plasma-testnet-reth-pruned-trace.yml +++ b/plasma/reth/plasma-testnet-reth-pruned-trace.yml @@ -50,7 +50,7 @@ services: logging: *logging-defaults plasma-testnet-initialize-consensus: - image: ${PLASMA_PLASMA_CONSENSUS_IMAGE:-ghcr.io/plasmalaboratories/plasma-consensus-public}:${PLASMA_TESTNET_PLASMA_CONSENSUS_VERSION:-0.15.0} + image: ${PLASMA_PLASMA_CONSENSUS_IMAGE:-ghcr.io/plasmalaboratories/plasma-consensus-public}:${PLASMA_TESTNET_PLASMA_CONSENSUS_VERSION:-1.1.0} user: 0:0 entrypoint: [/bin/bash, -c] command: @@ -58,8 +58,8 @@ services: set -euo pipefail if [ ! -f /consensus/data.mdb ]; then echo "INFO Generating consensus database for testnet network" - plasma-cli init \ - --chain /node/genesis.json \ + plasma-cli init observer \ + --config-path /config/non-validator.toml \ --data-dir /consensus else echo "INFO Consensus database already exists at /consensus/data.mdb" @@ -80,6 +80,7 @@ services: volumes: - ${PLASMA_TESTNET_RETH_PRUNED_TRACE_CONSENSUS_DATA:-plasma-testnet-reth-pruned-trace-consensus}:/consensus:rw - ./plasma/testnet/genesis.json:/node/genesis.json:ro + - ./plasma/testnet/non-validator.toml:/config/non-validator.toml:ro - .jwtsecret:/jwt/jwt.hex:ro logging: *logging-defaults @@ -190,7 +191,7 @@ services: shm_size: 2gb plasma-testnet-node: - image: ${PLASMA_PLASMA_CONSENSUS_IMAGE:-ghcr.io/plasmalaboratories/plasma-consensus-public}:${PLASMA_TESTNET_PLASMA_CONSENSUS_VERSION:-0.15.0} + image: ${PLASMA_PLASMA_CONSENSUS_IMAGE:-ghcr.io/plasmalaboratories/plasma-consensus-public}:${PLASMA_TESTNET_PLASMA_CONSENSUS_VERSION:-1.1.0} user: 0:0 ports: - 19566:34070 @@ -212,7 +213,7 @@ services: exec plasma-cli observer \ --config-path /tmp/non-validator.toml \ --no-color \ - --timeout-stream-manager 5s \ + --timeout-stream-manager 10ms \ --nat=extip:${IP}:19566 \ --telemetry.enable-metrics \ --telemetry.enable-health \ diff --git a/plasma/testnet/non-validator.toml b/plasma/testnet/non-validator.toml index 418d36f5..1c4edbd7 100644 --- a/plasma/testnet/non-validator.toml +++ b/plasma/testnet/non-validator.toml @@ -13,52 +13,6 @@ identity_file_path = "/consensus/ec-secp256k1-non-validator.der" trusted_only = false discovery.enabled = true -[api] -enabled = true -host = "0.0.0.0" -port = 35070 - -[validators] -[validators.0] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-0.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-0.hex" - -[validators.1] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-1.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-1.hex" - -[validators.2] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-2.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-2.hex" - -[validators.3] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-3.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-3.hex" - -[validators.4] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-4.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-4.hex" - -[validators.5] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-5.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-5.hex" - -[validators.6] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-6.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-6.hex" - -[validators.7] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-7.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-7.hex" - -[validators.8] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-8.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-8.hex" - -[validators.9] -validator_keystore_pk_file_path = "/node/keys/bls12-381-public-key-9.hex" -identity_file_path = "/node/identities/ec-secp256k1-validator-public-compressed-9.hex" - [network.bootstrap_nodes.0] api_host = "plasma-testnet-observer-cs-1.plasmalabs.tech" p2p_port = 34070 @@ -73,3 +27,58 @@ peer_id = "16Uiu2HAm3gGfJyWKSEzi67nL9CYc1umG5DdGp7TFHZSaWvd5N2AK" api_host = "plasma-testnet-observer-cs-9.plasmalabs.tech" p2p_port = 34070 peer_id = "16Uiu2HAmLzq4LCDQ8FNSPs5ESsWAiSUfDQjXjtbrx3fG9M9qZrU6" + +[network.bls_peer_ids] +b2f8ba24adce5aae4c4355bfe662c7abef765fd7d18fc1facd88db53da919039ae1fa59e2fd334c35f8644934f0313af = "16Uiu2HAm9VojHMAAMAKF7a4cdrsNDTaYis3oFWbK3JecthZA4gMk" +a6c1f484342d0f01ec0cf53b5d467e5547aba508298ee95da7342663fd3e6dfd06ed386d4581900ce88074cb21a26bd4 = "16Uiu2HAm4SQW76nEKeGZwQ8azRtYfNNC1mZb4khsJR3rvhaqPv3h" +94d99d2d5751d48a0b7f653ed81bcef9c097c8eb808f0bd05867a757462924d22ffd8168e6b3f45ea52ce52cf7d3487a = "16Uiu2HAmGNEFW4EFP2pDkN6yoa5JzB7iqvad4NqXRnuepqNyUs3x" +87a3288cece2f105f0c61a88430355a2ffcbf86a41c6f5a112b61e7dfd103ddd00845127ec7eaed8608f3c052f80a12e = "16Uiu2HAmUx7Vm3voDz4Wt5KiQCDRqRMwNuip5vArpviXn3psZQhk" +93f351dc7f43e39ed8b4c3bcc96ad52ba643c85965e2bdeede33a8c1ff0904433848bc5d4a84246ee60e459814079203 = "16Uiu2HAmLkucJtxQ6oa4TTmjn45dVQbm8iPx2HAKJE4NMGiE2XAQ" +87ff47c8986af8589af85367c5660ed0b3f5b0f3368f4c873fe7944e80ca793d8f5d62235685fc5755272eefda0f0aed = "16Uiu2HAmAPSLPskKdM22Y9maw7T8uwK9uH9GzDy8FNGP5oj9vmMm" +a47bcbbec4bc7af7d8d83ef289f9607671e76dd5820a2066cb3f5e9bdcae1fba6aac1ba4732d2f118b1e2d1a573f4dfd = "16Uiu2HAkzsMspP7FosFWUN554jiB9bVqTVkRNGUZs4ersaLpNuRU" +a3fbd91ed97dc4996d00c0dd14d21ae68ca21be53e1701001a168fea4a5f4499f1e48211aee54aca005c743bfd795f29 = "16Uiu2HAm7FvFMyWK7Hpzu3ZXX8fku8rJd5YY4rCzWtck6bgm7Wj3" +80003b3ef56d2e983332c5ae656f67b85a88996ea6d413bef67e294edcb37a991888fe6a4d6d63e25a8750fc694b76a0 = "16Uiu2HAmESAECJ1Y4W7GK2EmpxSUfWoCbs5CidE1pu4vEEGb2qBM" +af35d8fdde248ecb6aed849f7336052edab1da635bd46303ebc14ce5f7befa47be0691d609c7636c1427dd7cc4bc353c = "16Uiu2HAkzVxFvwUvmYgr1NUBX5WhSpFJSbDrVYSwTd5pSgkFfTtL" + +[api] +enabled = true +host = "0.0.0.0" +port = 35070 + +[chain.aquila] +activation_height = 33640000 +contract_address = "0x6c50b8ca8EeAa1c75dEe5b5EA79772AcAbc92F48" +epoch_length = 20000 +handoff_window = 10000 +speculative_prefetch = 9999 +unsafe_allow_short_handoff_window = false + +[chain.static_committee.0] +bls_public_key = "b2f8ba24adce5aae4c4355bfe662c7abef765fd7d18fc1facd88db53da919039ae1fa59e2fd334c35f8644934f0313af" + +[chain.static_committee.1] +bls_public_key = "a6c1f484342d0f01ec0cf53b5d467e5547aba508298ee95da7342663fd3e6dfd06ed386d4581900ce88074cb21a26bd4" + +[chain.static_committee.2] +bls_public_key = "94d99d2d5751d48a0b7f653ed81bcef9c097c8eb808f0bd05867a757462924d22ffd8168e6b3f45ea52ce52cf7d3487a" + +[chain.static_committee.3] +bls_public_key = "87a3288cece2f105f0c61a88430355a2ffcbf86a41c6f5a112b61e7dfd103ddd00845127ec7eaed8608f3c052f80a12e" + +[chain.static_committee.4] +bls_public_key = "93f351dc7f43e39ed8b4c3bcc96ad52ba643c85965e2bdeede33a8c1ff0904433848bc5d4a84246ee60e459814079203" + +[chain.static_committee.5] +bls_public_key = "87ff47c8986af8589af85367c5660ed0b3f5b0f3368f4c873fe7944e80ca793d8f5d62235685fc5755272eefda0f0aed" + +[chain.static_committee.6] +bls_public_key = "a47bcbbec4bc7af7d8d83ef289f9607671e76dd5820a2066cb3f5e9bdcae1fba6aac1ba4732d2f118b1e2d1a573f4dfd" + +[chain.static_committee.7] +bls_public_key = "a3fbd91ed97dc4996d00c0dd14d21ae68ca21be53e1701001a168fea4a5f4499f1e48211aee54aca005c743bfd795f29" + +[chain.static_committee.8] +bls_public_key = "80003b3ef56d2e983332c5ae656f67b85a88996ea6d413bef67e294edcb37a991888fe6a4d6d63e25a8750fc694b76a0" + +[chain.static_committee.9] +bls_public_key = "af35d8fdde248ecb6aed849f7336052edab1da635bd46303ebc14ce5f7befa47be0691d609c7636c1427dd7cc4bc353c" -- 2.54.0