# deployment with 4 nodes
**1. I deployed 2 nodes according to https://hackmd.io/9CWC23PjSMeP9mkFB62tfA?both and add another 2 nodes according to https://hackmd.io/9CWC23PjSMeP9mkFB62tfA?view#Add-the-Second-node**
Of course, `2.1. Modify deployment/config/substrate-account-config.json:` should set 4 authorities_seeds.
```
{
"secret_key_uri": [
"//Smith",
"//Frank",
"//Cindy//stash",
"//Richard"
],
"authorities_seeds": [
"Eve//stash",
"Frank//stash",
"James//stash",
"Robert//stash"
],
"pre_funded_seeds": [
"Smith",
"Frank",
"Cindy//stash",
"Richard"
],
"sudo_account_seed": "sudo"
}
```
`Eve//stash` is authorities_seed for bootnode.
`Frank//stash` is authorities_seed for the second node.
`James//stash` is authorities_seed for the third node.
`Robert//stash` is authorities_seed for the fourth node.
**2. On bootnode host, regenerate new chain specification file** because there are 4 authorities_seeds now. Send `customSpec.json` to the other three hosts.
**3. Recode the node identity of the bootnode**
Here is the Dockerfile of bootnode:
```
FROM docker.io/paritytech/ci-linux:production as builder
WORKDIR /delphinuslab
COPY . /delphinuslab
ENV CARGO_HOME /delphinuslab/.cargo-home
RUN --mount=type=cache,target=/delphinuslab/.cargo-home \
--mount=type=cache,target=/delphinuslab/packages/substrate-node/target \
cargo build --manifest-path=/delphinuslab/packages/substrate-node/Cargo.toml --locked --release && install -Dt ./bin/ /delphinuslab/packages/substrate-node/target/release/node-swap
# This is the 2nd stage: a very small image where we copy the delphinuslab node binary."
FROM docker.io/library/ubuntu:20.04
LABEL description="Zhenxunge node"
COPY --from=builder /delphinuslab/bin/ /usr/local/bin/
COPY --from=builder /delphinuslab/packages/substrate-node/customSpec.json .
COPY --from=builder /delphinuslab/packages/substrate-node/pallets/ .
RUN useradd -m -u 1000 -U -s /bin/sh -d /delphinuslab delphinuslab && \
mkdir -p /data /delphinuslab/.local/share && \
chown -R delphinuslab:delphinuslab /data /delphinuslab && \
ln -s /data /delphinuslab/.local/share/node-swap && \
# Sanity checks
/usr/local/bin/node-swap --version
USER delphinuslab
# Insert session key
RUN /usr/local/bin/node-swap key insert --chain customSpec.json --scheme Ed25519 --suri //Eve//stash --key-type gran && \
/usr/local/bin/node-swap key insert --chain customSpec.json --scheme Sr25519 --suri //Eve//stash --key-type aura
EXPOSE 30333 9933 9944 9615
VOLUME ["/data"]
ENTRYPOINT ["/usr/local/bin/node-swap"]
CMD ["--chain", "customSpec.json", "--validator", "--unsafe-ws-external"]
```
Here is the node identity:

`12D3KooWT1CFtUCaRZ6foFaXfenpt2knhYrMfuhu6xeiiKdzPX6M`
We will use it on other nodes' Dockerfile.
**4. Get the ip address of docker 0**:
Output of `ip addr show`:

`172.16.200.1`
**5. Start the second node**
Dockerfile of the second node
```
FROM docker.io/paritytech/ci-linux:production as builder
WORKDIR /delphinuslab
COPY . /delphinuslab
ENV CARGO_HOME /delphinuslab/.cargo-home
RUN --mount=type=cache,target=/delphinuslab/.cargo-home \
--mount=type=cache,target=/delphinuslab/packages/substrate-node/target \
cargo build --manifest-path=/delphinuslab/packages/substrate-node/Cargo.toml --locked --release && install -Dt ./bin/ /delphinuslab/packages/substrate-node/target/release/node-swap
# This is the 2nd stage: a very small image where we copy the delphinuslab node binary."
FROM docker.io/library/ubuntu:20.04
LABEL description="Zhenxunge node"
COPY --from=builder /delphinuslab/bin/ /usr/local/bin/
COPY --from=builder /delphinuslab/packages/substrate-node/customSpec.json .
RUN useradd -m -u 1000 -U -s /bin/sh -d /delphinuslab delphinuslab && \
mkdir -p /data /delphinuslab/.local/share && \
chown -R delphinuslab:delphinuslab /data /delphinuslab && \
ln -s /data /delphinuslab/.local/share/node-swap && \
# Sanity checks
/usr/local/bin/node-swap --version
USER delphinuslab
# Insert session key
RUN /usr/local/bin/node-swap key insert --chain customSpec.json --scheme Ed25519 --suri //Frank//stash --key-type gran && \
/usr/local/bin/node-swap key insert --chain customSpec.json --scheme Sr25519 --suri //Frank//stash --key-type aura
EXPOSE 30333 9933 9944 9615
VOLUME ["/data"]
ENTRYPOINT ["/usr/local/bin/node-swap"]
CMD ["--chain", "customSpec.json", "--validator", "--unsafe-ws-external", "--bootnodes", "/ip4/172.16.200.1/tcp/30333/p2p/12D3KooWT1CFtUCaRZ6foFaXfenpt2knhYrMfuhu6xeiiKdzPX6M"]
```
The second node connect to the bootnode now(1 peers):

**6. Start the third node**
Dockerfile:
```
FROM docker.io/paritytech/ci-linux:production as builder
WORKDIR /delphinuslab
COPY . /delphinuslab
ENV CARGO_HOME /delphinuslab/.cargo-home
RUN --mount=type=cache,target=/delphinuslab/.cargo-home \
--mount=type=cache,target=/delphinuslab/packages/substrate-node/target \
cargo build --manifest-path=/delphinuslab/packages/substrate-node/Cargo.toml --locked --release && install -Dt ./bin/ /delphinuslab/packages/substrate-node/target/release/node-swap
# This is the 2nd stage: a very small image where we copy the delphinuslab node binary."
FROM docker.io/library/ubuntu:20.04
LABEL description="Zhenxunge node"
COPY --from=builder /delphinuslab/bin/ /usr/local/bin/
COPY --from=builder /delphinuslab/packages/substrate-node/customSpec.json .
RUN useradd -m -u 1000 -U -s /bin/sh -d /delphinuslab delphinuslab && \
mkdir -p /data /delphinuslab/.local/share && \
chown -R delphinuslab:delphinuslab /data /delphinuslab && \
ln -s /data /delphinuslab/.local/share/node-swap && \
# Sanity checks
/usr/local/bin/node-swap --version
USER delphinuslab
# Insert session key
RUN /usr/local/bin/node-swap key insert --chain customSpec.json --scheme Ed25519 --suri //James//stash --key-type gran && \
/usr/local/bin/node-swap key insert --chain customSpec.json --scheme Sr25519 --suri //James//stash --key-type aura
EXPOSE 30333 9933 9944 9615
VOLUME ["/data"]
ENTRYPOINT ["/usr/local/bin/node-swap"]
CMD ["--chain", "customSpec.json", "--validator", "--unsafe-ws-external", "--bootnodes", "/ip4/172.16.200.1/tcp/30333/p2p/12D3KooWT1CFtUCaRZ6foFaXfenpt2knhYrMfuhu6xeiiKdzPX6M"]
```
The third node connect to the bootnode now(1 peers):

the boodnode show it has 2 peers now:

**7. Start the fourth node**
Dockerfile:
```
FROM docker.io/paritytech/ci-linux:production as builder
WORKDIR /delphinuslab
COPY . /delphinuslab
ENV CARGO_HOME /delphinuslab/.cargo-home
RUN --mount=type=cache,target=/delphinuslab/.cargo-home \
--mount=type=cache,target=/delphinuslab/packages/substrate-node/target \
cargo build --manifest-path=/delphinuslab/packages/substrate-node/Cargo.toml --locked --release && install -Dt ./bin/ /delphinuslab/packages/substrate-node/target/release/node-swap
# This is the 2nd stage: a very small image where we copy the delphinuslab node binary."
FROM docker.io/library/ubuntu:20.04
LABEL description="Zhenxunge node"
COPY --from=builder /delphinuslab/bin/ /usr/local/bin/
COPY --from=builder /delphinuslab/packages/substrate-node/customSpec.json .
RUN useradd -m -u 1000 -U -s /bin/sh -d /delphinuslab delphinuslab && \
mkdir -p /data /delphinuslab/.local/share && \
chown -R delphinuslab:delphinuslab /data /delphinuslab && \
ln -s /data /delphinuslab/.local/share/node-swap && \
# Sanity checks
/usr/local/bin/node-swap --version
USER delphinuslab
# Insert session key
RUN /usr/local/bin/node-swap key insert --chain customSpec.json --scheme Ed25519 --suri //Robert//stash --key-type gran && \
/usr/local/bin/node-swap key insert --chain customSpec.json --scheme Sr25519 --suri //Robert//stash --key-type aura
EXPOSE 30333 9933 9944 9615
VOLUME ["/data"]
ENTRYPOINT ["/usr/local/bin/node-swap"]
CMD ["--chain", "customSpec.json", "--validator", "--unsafe-ws-external", "--bootnodes", "/ip4/172.16.200.1/tcp/30333/p2p/12D3KooWT1CFtUCaRZ6foFaXfenpt2knhYrMfuhu6xeiiKdzPX6M"]
```
The fourth node connect to the bootnode now(1 peers):

the boodnode show it has 3 peers now:

**8. Execute swap on ui**
Output of l2 monitor:
