README.md 3.54 KiB
Newer Older
# Substrate Node Template
Dan Forbes's avatar
Dan Forbes committed
A new FRAME-based Substrate node, ready for hacking :rocket:
Dan Forbes's avatar
Dan Forbes committed
## Local Development
Dan Forbes's avatar
Dan Forbes committed
Follow these steps to prepare a local Substrate development environment :hammer_and_wrench:
Dan Forbes's avatar
Dan Forbes committed
### Simple Setup
Dan Forbes's avatar
Dan Forbes committed
Install all the required dependencies with a single command (be patient, this can take up
to 30 minutes).
Dan Forbes's avatar
Dan Forbes committed
curl https://getsubstrate.io -sSf | bash -s -- --fast
Dan Forbes's avatar
Dan Forbes committed
### Manual Setup

Find manual setup instructions at the [Substrate Developer Hub](https://substrate.dev/docs/en/knowledgebase/getting-started/#manual-installation).

### Build

Once the development environment is set up, build the node template. This command will build the
[Wasm](https://substrate.dev/docs/en/knowledgebase/advanced/executor#wasm-execution) and
[native](https://substrate.dev/docs/en/knowledgebase/advanced/executor#native-execution) code:
cargo build --release
Dan Forbes's avatar
Dan Forbes committed
### Single Node Development Chain
Dan Forbes's avatar
Dan Forbes committed
Purge any existing dev chain state:
./target/release/node-template purge-chain --dev
```

Dan Forbes's avatar
Dan Forbes committed
Start a dev chain:

```bash
./target/release/node-template --dev
Dan Forbes's avatar
Dan Forbes committed
Or, start a dev chain with detailed logging:
Dan Forbes's avatar
Dan Forbes committed
```bash
RUST_LOG=debug RUST_BACKTRACE=1 ./target/release/node-template -lruntime=debug --dev
```
Dan Forbes's avatar
Dan Forbes committed
### Multi-Node Local Testnet
Dan Forbes's avatar
Dan Forbes committed
To see the multi-node consensus algorithm in action, run a local testnet with two validator nodes,
Alice and Bob, that have been [configured](/bin/node-template/node/src/chain_spec.rs) as the
initial authorities of the `local` testnet chain and endowed with testnet units.
Dan Forbes's avatar
Dan Forbes committed
Note: this will require two terminal sessions (one for each node).
Dan Forbes's avatar
Dan Forbes committed
Start Alice's node first. The command below uses the default TCP port (30333) and specifies
`/tmp/alice` as the chain database location. Alice's node ID will be
`12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp` (legacy representation:
`QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR`); this is determined by the `node-key`.

```bash
cargo run -- \
  --base-path /tmp/alice \
  --chain=local \
  --alice \
  --node-key 0000000000000000000000000000000000000000000000000000000000000001 \
  --telemetry-url 'ws://telemetry.polkadot.io:1024 0' \
Dan Forbes's avatar
Dan Forbes committed
In another terminal, use the following command to start Bob's node on a different TCP port (30334)
and with a chain database location of `/tmp/bob`. The `--bootnodes` option will connect his node to
Alice's on TCP port 30333:

```bash
cargo run -- \
  --base-path /tmp/bob \
Dan Forbes's avatar
Dan Forbes committed
  --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp \
  --chain=local \
  --bob \
  --port 30334 \
Dan Forbes's avatar
Dan Forbes committed
  --ws-port 9945 \
  --telemetry-url 'ws://telemetry.polkadot.io:1024 0' \
Dan Forbes's avatar
Dan Forbes committed
Execute `cargo run -- --help` to learn more about the template node's CLI options.

## Generate a Custom Node Template

Generate a Substrate node template based on a particular commit by running the following commands:

```bash
# Clone from the main Substrate repo
git clone https://github.com/paritytech/substrate.git
cd substrate

# Switch to the branch or commit to base the template on
git checkout <branch/tag/sha1>

# Run the helper script to generate a node template. This script compiles Substrate, so it will take
# a while to complete. It expects a single parameter: the location for the script's output expressed
# as a relative path.
.maintain/node-template-release.sh ../node-template.tar.gz
```

Custom node templates are not supported. Please use a recently tagged version of the
[Substrate Developer Node Template](https://github.com/substrate-developer-hub/substrate-node-template)
in order to receive support.