Running Sharding Teku test net

Gihub: https://github.com/Nashatyrev/artemis/tree/rayonism/shard

Running test net of 3 nodes ([1] <-> [2] <-> [3])

Node private keys

need to be in separate files p2p-privateKey-1.hex, p2p-privateKey-2.hex, p2p-privateKey-3.hex:

080212206FD7AF84823661AE4F0FDB05D83BD5569B4270FE94C8AD79CCB7E3F843DEFCB1
080212206FD7AF84823661AE4F0FDB05D83BD5569B4270FE94C8AD79CCB7E3F843DEFCB2
080212206FD7AF84823661AE4F0FDB05D83BD5569B4270FE94C8AD79CCB7E3F843DEFCB3

Generate interop genesis:

teku genesis mock --output-file ./local-genesis.ssz --network=minimal --validator-count=256 --shard-builder-count=256

Start nodes

Node #1 teku CLI arguments:

-l INFO 
--Xinterop-enabled=true 
--Xinterop-number-of-validators=256 
--Xinterop-owned-validator-start-index=0 
--Xinterop-owned-validator-count=90 
--network=minimal 
--rest-api-enabled 
--rest-api-docs-enabled 
--rest-api-port=5051 
--initial-state ./local-genesis.ssz 
--p2p-port=9001 
--p2p-private-key-file=./p2p-privateKey-1.hex 
--data-path=./data.rayonism.1

Node #2 teku CLI arguments:

-l INFO
--Xinterop-enabled=true
--Xinterop-number-of-validators=256
--Xinterop-owned-validator-start-index=90
--Xinterop-owned-validator-count=80
--network=minimal
--initial-state ./local-genesis.ssz
--p2p-port=9002
--p2p-private-key-file=./p2p-privateKey-2.hex
--p2p-static-peers=/ip4/127.0.0.1/tcp/9001/p2p/16Uiu2HAmH6m8pE7pXsfzXHg3Z5kLzgwJ5PWSYELaKXc75Bs2utZM
--data-path=./data.rayonism.2

Node #3 teku CLI arguments:

-l INFO
--Xinterop-enabled=true
--Xinterop-number-of-validators=256
--Xinterop-owned-validator-start-index=170
--Xinterop-owned-validator-count=86
--network=minimal
--initial-state ./local-genesis.ssz
--p2p-port=9003
--p2p-private-key-file=./p2p-privateKey-3.hex
--p2p-static-peers=/ip4/127.0.0.1/tcp/9002/p2p/16Uiu2HAm7JLKuHchu8TtUwmWvoDzJGH2dsFRA61cvHkw3v98727L
--data-path=./data.rayonism.3

Submit Blob from the Node #1

schedule_shard_blob REST API (testing/debuging API) endpoint is capable of finding the nearest available slot then compose and publish blob data transaction to the shard_blob_tx topic (at the time blob.slot - 2/3).
Then it awaits for blob tx confirmation (header signed by the beacon shard proposer as shard_blob_header topic) and publishes ShardBlob to the corresponding topic channel (at the time blob.slot)

To submit a shard use either Swagger UI at http://localhost:5051/swagger-ui and submit test request:

{
  "builder_index": 0,
  "shard": 0,
  "commitment": {
      "point": "a1c76af1545d7901214bb6be06be5d9e458f8e989c19373a920f0018327c83982f6a2ac138260b8def732cb366411ddc",
      "length": 0
  },  
  "degree_proof": "a1c76af1545d7901214bb6be06be5d9e458f8e989c19373a920f0018327c83982f6a2ac138260b8def732cb366411ddc",
  "data": []
}

Or the same with curl:

curl -X POST "http://localhost:5051/teku/v1/shard/schedule_shard_blob" -H "accept: */*" -H "Content-Type: application/json" -d "{\"builder_index\":0,\"shard\":0,\"commitment\":{\"point\":\"a1c76af1545d7901214bb6be06be5d9e458f8e989c19373a920f0018327c83982f6a2ac138260b8def732cb366411ddc\",\"length\":0},\"degree_proof\":\"a1c76af1545d7901214bb6be06be5d9e458f8e989c19373a920f0018327c83982f6a2ac138260b8def732cb366411ddc\",\"data\":[]}"

The Node #1 log should immediately contain scheduled Shard blob info (in Teku file logs):

INFO  | ShardBlobTracker | ShardBlobHeader Tx scheduled: ShardBlobHeader{...}

When blob tx, blob header, blob is published and confirmed all nodes expected to contain the following entries (in Teku file logs):

INFO  | ShardBlobTracker | ShardBlobHeader Tx added: ShardBlobHeader{...}
INFO  | ShardBlobTracker | ShardBlobHeader added: ShardBlobHeader{...}
INFO  | ShardBlobTracker | ShardBlob added: ShardBlob{...}
INFO  | ShardBlobTracker | PendingShardHeader appeared in state: SignedBeaconBlockHeader{...}
INFO  | ShardBlobTracker | PendingShardHeader confirmed: SignedBeaconBlockHeader{...}
Select a repo