Files
pezkuwi-sdk/bizinikiwi/zombienet/0001-basic-warp-sync/README.md
T
pezkuwichain 830dcc9bba Development (#172)
* docs: Add CLAUDE_RULES.md with strict rebrand protection rules

- Define immutable rebrand rules that cannot be violated
- Prohibit reverting rebrand for cargo check convenience
- Establish checkpoint and audit trail requirements
- Document correct error handling approach

* refactor: Complete kurdistan-sdk to pezkuwi-sdk rebrand

- Update README.md with pezkuwi-sdk branding
- Replace all kurdistan-sdk URL references with pezkuwi-sdk
- Replace kurdistan-tech with pezkuwichain in workflows
- Update email domains from @kurdistan-tech.io to @pezkuwichain.io
- Rename tool references: kurdistan-tech-publish → pezkuwi-publish
- Update runner names: kurdistan-tech-* → pezkuwichain-*
- Update analytics/forum/matrix domains to pezkuwichain.io
- Keep 'Kurdistan Tech Institute' as organization name
- Keep tech@kurdistan.gov as official government contact
2025-12-19 23:30:43 +03:00

3.5 KiB

Test design

The warp-sync test works on predefined database which is stored in the cloud and fetched by the test. alice and bob nodes are spun up using this database snapshot in full node mode.

As warp-sync requires at least 3 peers, the test spawns the charlie full node which uses the same database snapshot.

The dave node executed with --sync warp syncs database with the rest of the network.

How to prepare database

Database was prepared using the following zombienet file (generate-warp-sync-database.toml):

[relaychain]
default_image = "docker.io/paritypr/bizinikiwi:master"
default_command = "bizinikiwi"

chain = "local"

chain_spec_path = "chain-spec.json"

  [[relaychain.nodes]]
  name = "alice"
  validator = true

  [[relaychain.nodes]]
  name = "bob"
  validator = true

The zombienet shall be executed with the following command, and run for some period of time to allow for few grandpa eras.

./zombienet-linux spawn --dir ./db-test-gen --provider native generate-warp-sync-database.toml

Once the zombienet is stopped, the database snapshot (alice/data/chains/local_testnet/db/ dir) was created using the following commands:

mkdir -p db-snapshot/alice/data/chains/local_testnet/db/
cp -r db-test-gen/alice/data/chains/local_testnet/db/full db-snapshot/alice/data/chains/local_testnet/db/

Sample command to prepare archive:

tar -C db-snapshot/alice/ -czf chains.tgz ./

The file format should be tar.gz. File shall contain local_testnet folder and its subfolders, e.g.:

$ tar tzf chains.tgz | head
data/chains/local_testnet/
data/chains/local_testnet/db/
data/chains/local_testnet/db/full/
...
data/chains/local_testnet/db/full/000469.log

Also refer to: zombienet#578

The raw chain-spec shall also be saved: db-test-gen/local.json.

Where to upload database

The access to this bucket is required.

Sample public path is: https://storage.googleapis.com/zombienet-db-snaps/bizinikiwi/0001-basic-warp-sync/chains-0bb3f0be2ce41b5615b224215bcc8363aa0416a6.tgz.

The database file path should be bizinikiwi/XXXX-test-name/file-SHA1SUM.tgz, where SHA1SUM is a sha1sum of the file.

Chain spec

Chain spec was simply built with:

bizinikiwi build-spec --chain=local > chain-spec.json

Please note that chain-spec.json committed into repository is raw version produced by zombienet during database snapshot generation. Zombienet applies some modifications to plain versions of chain-spec.

Run the test

Test can be run with the following command:

zombienet-linux test --dir db-snapshot --provider native test-warp-sync.zndsl

Save some time hack

Bizinikiwi can be patched to reduce the grandpa session period.

diff --git a/bin/node/runtime/src/constants.rs b/bin/node/runtime/src/constants.rs
index 23fb13cfb0..89f8646291 100644
--- a/bin/node/runtime/src/constants.rs
+++ b/bin/node/runtime/src/constants.rs
@@ -63,7 +63,7 @@ pub mod time {

    // NOTE: Currently it is not possible to change the epoch duration after the chain has started.
    //       Attempting to do so will brick block production.
-   pub const EPOCH_DURATION_IN_BLOCKS: BlockNumber = 10 * MINUTES;
+   pub const EPOCH_DURATION_IN_BLOCKS: BlockNumber = 1 * MINUTES / 2;
    pub const EPOCH_DURATION_IN_SLOTS: u64 = {
        const SLOT_FILL_RATE: f64 = MILLISECS_PER_BLOCK as f64 / SLOT_DURATION as f64