---
# System prepended metadata

title: Running Sharding Teku test net

---

# 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: 
```shell=
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: 
```json
{
  "builder_index": 0,
  "shard": 0,
  "commitment": {
      "point": "a1c76af1545d7901214bb6be06be5d9e458f8e989c19373a920f0018327c83982f6a2ac138260b8def732cb366411ddc",
      "length": 0
  },  
  "degree_proof": "a1c76af1545d7901214bb6be06be5d9e458f8e989c19373a920f0018327c83982f6a2ac138260b8def732cb366411ddc",
  "data": []
}
```

Or the same with `curl`: 
```shell=
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{...}
```