# WIP: The Relay Chain Guide
Guide on manually setting up Rococo Relay chain for development purposes.
### Prerequisites
You should be comfortable with the following tutorial:
- https://docs.substrate.io/tutorials/build-a-blockchain/add-trusted-nodes
## Setup
Clone, checkout, build Polkadot:
```
git clone https://github.com/paritytech/polkadot
cd polkadot
git checkout release-v0.9.37
cargo b -r
```
## Generate Keys
Use Substrate's key command to generate a random secret phrase and Sr25519 keys (for BABE):
> You will need to clone and compile [Substrate](https://github.com/paritytech/substrate) for this:
```
./target/release/substrate key generate --scheme Sr25519 --password-interactive
```
Type a password.
Output will be similar to:
```
Secret phrase: pig giraffe ceiling enter weird liar orange decline behind total despair fly
Secret seed: 0x0087016ebbdcf03d1b7b2ad9a958e14a43f2351cd42f2f0a973771b90fb0112f
Public key (hex): 0x1a4cc824f6585859851f818e71ac63cf6fdc81018189809814677b2a4699cf45
Account ID: 0x1a4cc824f6585859851f818e71ac63cf6fdc81018189809814677b2a4699cf45
Public key (SS58): 5CfBuoHDvZ4fd8jkLQicNL8tgjnK8pVG9AiuJrsNrRAx6CNW
SS58 Address: 5CfBuoHDvZ4fd8jkLQicNL8tgjnK8pVG9AiuJrsNrRAx6C
```
Use the secret phrase to derive Ed25519 keys (for GRANDPA):
```
./target/release/substrate key inspect --password-interactive --scheme Ed25519 "pig giraffe ceiling enter weird liar orange decline behind total despair fly"
```
Type the password used to generate the keys.
Output will be similar to:
```
Secret phrase `pig giraffe ceiling enter weird liar orange decline behind total despair fly` is account:
Secret seed: 0x0087016ebbdcf03d1b7b2ad9a958e14a43f2351cd42f2f0a973771b90fb0112f
Public key (hex): 0x2577ba03f47cdbea161851d737e41200e471cd7a31a5c88242a527837efc1e7b
Public key (SS58): 5CuqCGfwqhjGzSqz5mnq36tMe651mU9Ji8xQ4JRuUTvPcjVN
Account ID: 0x2577ba03f47cdbea161851d737e41200e471cd7a31a5c88242a527837efc1e7b
SS58 Address: 5CuqCGfwqhjGzSqz5mnq36tMe651mU9Ji8xQ4JRuUTvPcjV
```
Generate a second set of keys.
## Generate the chain specs
If we generate the below chain spec we will get a bunch of dev keys.
```
./target/release/polkadot build-spec --disable-default-bootnode --chain rococo-local > rococoLocalCustomSpec.json
```
We could ignore and insert our own custom keys.
OR
- https://substrate.stackexchange.com/questions/8180/how-to-create-a-polkadot-chain-spec-for-development-purposes
We can edit the `chain_spec.rs` file, specifically this:
```rust
#[cfg(feature = "rococo-native")]
fn rococo_local_testnet_genesis(wasm_binary: &[u8]) -> rococo_runtime::GenesisConfig {
rococo_testnet_genesis(
wasm_binary,
vec![get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob")],
get_account_id_from_seed::<sr25519::Public>("Alice"),
None,
)
}
```
- https://github.com/paritytech/polkadot/blob/a6cfdb16e9a69259ee824fa0aa60c36e4c63f3fa/node/service/src/chain_spec.rs#L1886-L1894
We can change to this:
```rust
#[cfg(feature = "rococo-native")]
fn rococo_local_testnet_genesis(wasm_binary: &[u8]) -> rococo_runtime::GenesisConfig {
rococo_testnet_genesis(
wasm_binary,
vec![],
get_account_id_from_seed::<sr25519::Public>("Alice"),
None,
)
}
```
Also, change this:
```rust
let endowed_accounts: Vec<AccountId> = endowed_accounts.unwrap_or_else(testnet_accounts);
```
To this:
```
let endowed_accounts: Vec<AccountId> = vec![];
```
- https://github.com/paritytech/polkadot/blob/a6cfdb16e9a69259ee824fa0aa60c36e4c63f3fa/node/service/src/chain_spec.rs#L1557
We can now create our rococo-local "empty" accounts chain spec:
```
./target/release/polkadot build-spec --disable-default-bootnode --chain rococo-local > rococoLocalCustomSpec.json
```
## Insert our keys
## Start the Relay chain
```
./target/release/polkadot \
--alice \
--validator \
--base-path /tmp/relay/alice \
--chain /tmp/raw-local-chainspec.json \
--port 30333 \
--ws-port 9944
```