Files
pezkuwi-subxt/bridges/snowbridge
Clara van Staden 3410dfb392 Snowbridge Beacon header age check (#3727)
## Bug Explanation
Adds a check that prevents finalized headers with a gap larger than the
sync committee period being imported, which could cause execution
headers in the gap being unprovable. The current version of the Ethereum
client checks that there is a header at least every sync committee, but
it doesn't check that the headers are within a sync period of each
other. For example:

Header 100 (sync committee period 1)
Header 9000 (sync committee period 2)
(8900 blocks apart)

These headers are in adjacent sync committees, but more than the sync
committee period (8192 blocks) apart.

The reason we need a header every 8192 slots at least, is the header is
used to prove messages within the last 8192 blocks. If we import header
9000, and we receive a message to be verified at header 200, the
`block_roots` field of header 9000 won't contain the header in order to
do the ancestry check.

## Environment
While running in Rococo, this edge case was discovered after the relayer
was offline for a few days. It is unlikely, but not impossible, to
happen again and so it should be backported to polkadot-sdk 1.7.0 (so
that
[polkadot-fellows/runtimes](https://github.com/polkadot-fellows/runtimes)
can be updated with the fix).

Our Ethereum client has been operational on Rococo for the past few
months, and this been the only major issue discovered so far.

### Unrelated Change
An unrelated nit: Removes a left over file that should have been deleted
when the `parachain` directory was removed.

---------

Co-authored-by: claravanstaden <Cats 4 life!>
2024-03-22 09:25:28 +00:00
..

Snowbridge ·

codecov GitHub

Snowbridge is a trustless bridge between Polkadot and Ethereum. For documentation, visit https://docs.snowbridge.network.

Components

The Snowbridge project lives in two repositories:

Parachain

Polkadot parachain and our pallets. See README.md.

Contracts

Ethereum contracts and unit tests. See Snowfork/snowbridge/contracts/README.md

Relayer

Off-chain relayer services for relaying messages between Polkadot and Ethereum. See Snowfork/snowbridge/relayer/README.md

Local Testnet

Scripts to provision a local testnet, running the above services to bridge between local deployments of Polkadot and Ethereum. See Snowfork/snowbridge/web/packages/test/README.md.

Smoke Tests

Integration tests for our local testnet. See Snowfork/snowbridge/smoketest/README.md.

Development

We use the Nix package manager to provide a reproducible and maintainable developer environment.

After installing nix Nix, enable flakes:

mkdir -p ~/.config/nix
echo 'experimental-features = nix-command flakes' >> ~/.config/nix/nix.conf

Then activate a developer shell in the root of our repo, where flake.nix is located:

nix develop

Also make sure to run this initialization script once:

scripts/init.sh

Support for code editors

To ensure your code editor (such as VS Code) can execute tools in the nix shell, startup your editor within the interactive shell.

Example for VS Code:

nix develop
code .

Custom shells

The developer shell is bash by default. To preserve your existing shell:

nix develop --command $SHELL

Automatic developer shells

To automatically enter the developer shell whenever you open the project, install direnv and use the template .envrc:

cp .envrc.example .envrc
direnv allow

Upgrading the Rust toolchain

Sometimes we would like to upgrade rust toolchain. First update rust-toolchain.toml as required and then update flake.lock running

nix flake lock --update-input rust-overlay

Troubleshooting

Check the contents of all .envrc files.

Remove untracked files:

git clean -idx

Ensure that the current Rust toolchain is the one selected in scripts/init.sh.

Ensure submodules are up-to-date:

git submodule update

Check untracked files & directories:

git clean -ndx | awk '{print $3}'

After removing node_modules directories (eg. with git clean above), clear the pnpm cache:

pnpm store prune

Check Nix config in ~/.config/nix/nix.conf.

Run a pure developer shell (note that this removes access to your local tools):

nix develop -i --pure-eval

Security

The security policy and procedures can be found in SECURITY.md.