Add demo steps for running nitro nodes with payment and defund (#5)

Part of [Create bridge channel in go-nitro](https://www.notion.so/Create-bridge-channel-in-go-nitro-22ce80a0d8ae4edb80020a8f250ea270)

Co-authored-by: Neeraj <neeraj.rtly@gmail.com>
Co-authored-by: IshaVenikar <ishavenikar7@gmail.com>
Reviewed-on: #5
This commit was merged in pull request #5.
This commit is contained in:
2024-08-26 14:00:02 +00:00
co-authored by Neeraj IshaVenikar
parent 3c3fc333f4
commit 0a9ed58aed
11 changed files with 662 additions and 47 deletions
@@ -1,13 +1,36 @@
name: nitro-bridge
services:
l2-nitro-contracts:
image: cerc/nitro-client:local
restart: on-failure
environment:
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
GETH_URL: ${GETH_URL}
OPTIMISM_DEPLOYER_PK: ${OPTIMISM_DEPLOYER_PK}
OPTIMISM_CHAIN_ID: ${OPTIMISM_CHAIN_ID:-42069}
GETH_CHAIN_ID: ${GETH_CHAIN_ID:-1212}
GETH_DEPLOYER_PK: ${OPTIMISM_DEPLOYER_PK}
OPTIMISM_URL: ${OPTIMISM_URL}
TOKEN_NAME: ${TOKEN_NAME}
TOKEN_SYMBOL: ${TOKEN_SYMBOL}
INITIAL_TOKEN_SUPPLY: ${INITIAL_TOKEN_SUPPLY}
DISABLE_DETERMINISTIC_DEPLOYMENT: ${DISABLE_DETERMINISTIC_DEPLOYMENT:-true}
L1_ASSET_ADDRESS: ${L1_ASSET_ADDRESS}
volumes:
- nitro_deployment:/app/deployment
- ../config/nitro-contracts/deploy-l2-contracts.sh:/app/deploy-l2-contracts.sh
command: ["bash", "-c", "/app/deploy-l2-contracts.sh"]
extra_hosts:
- "host.docker.internal:host-gateway"
nitro-bridge:
image: cerc/go-nitro:local
hostname: nitro-bridge
restart: unless-stopped
depends_on:
nitro-contracts:
condition: service_started
l2-nitro-contracts:
condition: service_started
environment:
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
GETH_CHAIN_ID: ${GETH_CHAIN_ID:-1212}
@@ -23,6 +46,9 @@ services:
NITRO_L1_EXT_MULTIADDR: ${NITRO_L1_EXT_MULTIADDR}
NITRO_L2_EXT_MULTIADDR: ${NITRO_L2_EXT_MULTIADDR}
NITRO_PUBLIC_RPC_HOST: nitro-bridge
NA_ADDRESS: ${NA_ADDRESS}
CA_ADDRESS: ${CA_ADDRESS}
VPA_ADDRESS: ${VPA_ADDRESS}
entrypoint: ["bash", "-c", "/app/run-bridge.sh"]
volumes:
- nitro_bridge_data:/app/data
@@ -8,9 +8,7 @@ services:
environment:
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
GETH_URL: ${GETH_URL}
OPTIMISM_URL: ${OPTIMISM_URL}
GETH_CHAIN_ID: ${GETH_CHAIN_ID:-1212}
OPTIMISM_CHAIN_ID: ${OPTIMISM_CHAIN_ID:-42069}
GETH_DEPLOYER_PK: ${GETH_DEPLOYER_PK}
OPTIMISM_DEPLOYER_PK: ${GETH_DEPLOYER_PK}
TOKEN_NAME: ${TOKEN_NAME}
@@ -19,8 +17,8 @@ services:
DISABLE_DETERMINISTIC_DEPLOYMENT: ${DISABLE_DETERMINISTIC_DEPLOYMENT:-true}
volumes:
- nitro_deployment:/app/deployment
- ../config/nitro-contracts/deploy.sh:/app/deploy.sh
command: ["bash", "-c", "/app/deploy.sh"]
- ../config/nitro-contracts/deploy-l1-contracts.sh:/app/deploy-l1-contracts.sh
command: ["bash", "-c", "/app/deploy-l1-contracts.sh"]
extra_hosts:
- "host.docker.internal:host-gateway"
@@ -20,6 +20,9 @@ echo "NITRO_RPC_PORT: ${NITRO_RPC_PORT}"
echo "NITRO_PUBLIC_P2P_HOST: ${NITRO_PUBLIC_P2P_HOST}"
echo "NITRO_L1_EXT_MULTIADDR: ${NITRO_L1_EXT_MULTIADDR}"
echo "NITRO_L2_EXT_MULTIADDR: ${NITRO_L2_EXT_MULTIADDR}"
echo "NA_ADDRESS: ${NA_ADDRESS}"
echo "CA_ADDRESS: ${CA_ADDRESS}"
echo "VPA_ADDRESS: ${VPA_ADDRESS}"
echo "Waiting for $bridge_assets_map_file to be ready"
@@ -45,12 +48,12 @@ bridgepublicip = "$NITRO_PUBLIC_P2P_HOST"
nodel1ExtMultiAddr = "$NITRO_L1_EXT_MULTIADDR"
nodel2ExtMultiAddr = "$NITRO_L2_EXT_MULTIADDR"
assetmapfilepath = "$bridge_assets_map_file"
naaddress = "${NA_ADDRESS}"
vpaaddress = "${VPA_ADDRESS}"
caaddress = "${CA_ADDRESS}"
EOF
# Export contract addresses
export NA_ADDRESS=$(jq -r ".\"$GETH_CHAIN_ID\"[0].contracts.NitroAdjudicator.address" ${nitro_addresses_file})
export CA_ADDRESS=$(jq -r ".\"$GETH_CHAIN_ID\"[0].contracts.ConsensusApp.address" ${nitro_addresses_file})
export VPA_ADDRESS=$(jq -r ".\"$GETH_CHAIN_ID\"[0].contracts.VirtualPaymentApp.address" ${nitro_addresses_file})
# Export bridge address
export BRIDGE_ADDRESS=$(jq -r ".\"$OPTIMISM_CHAIN_ID\"[0].contracts.Bridge.address" ${nitro_addresses_file})
# Start bridge
@@ -0,0 +1,35 @@
#!/bin/bash
set -e
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
set -x
fi
addresses_deployment_file="packages/nitro-protocol/addresses.json"
nitro_addresses_file="/app/deployment/nitro-addresses.json"
echo "Using the following environment variables:"
echo "GETH_URL: ${GETH_URL}"
echo "GETH_CHAIN_ID: ${GETH_CHAIN_ID}"
echo "TOKEN_NAME: ${TOKEN_NAME}"
echo "TOKEN_SYMBOL: ${TOKEN_SYMBOL}"
echo "INITIAL_TOKEN_SUPPLY: ${INITIAL_TOKEN_SUPPLY}"
echo "DISABLE_DETERMINISTIC_DEPLOYMENT: ${DISABLE_DETERMINISTIC_DEPLOYMENT}"
# Check if L1 chain id key is present for L1 deployment
if [ -f "$nitro_addresses_file" ] && jq -e "has(\"$GETH_CHAIN_ID\")" ${nitro_addresses_file} > /dev/null; then
echo "L1 addresses found in ${nitro_addresses_file}, skipping deployment"
else
# Deploy Nitro contracts
yarn contracts:deploy-geth
# Deploy custom token
yarn contracts:deploy-token-geth
cp ${addresses_deployment_file} ${nitro_addresses_file}
fi
echo "Done"
# Keep the container running for future asset transfers
tail -f /dev/null
@@ -10,31 +10,19 @@ nitro_addresses_file="/app/deployment/nitro-addresses.json"
bridge_assets_map_file="/app/deployment/bridge-assets-map.toml"
echo "Using the following environment variables:"
echo "GETH_URL: ${GETH_URL}"
echo "OPTIMISM_URL: ${OPTIMISM_URL}"
echo "GETH_CHAIN_ID: ${GETH_CHAIN_ID}"
echo "OPTIMISM_CHAIN_ID: ${OPTIMISM_CHAIN_ID}"
echo "GETH_DEPLOYER_PK: ${GETH_DEPLOYER_PK}"
echo "OPTIMISM_DEPLOYER_PK: ${OPTIMISM_DEPLOYER_PK}"
echo "GETH_URL: ${GETH_URL}"
echo "GETH_CHAIN_ID: ${GETH_CHAIN_ID}"
echo "GETH_DEPLOYER_PK: ${GETH_DEPLOYER_PK}"
echo "TOKEN_NAME: ${TOKEN_NAME}"
echo "TOKEN_SYMBOL: ${TOKEN_SYMBOL}"
echo "INITIAL_TOKEN_SUPPLY: ${INITIAL_TOKEN_SUPPLY}"
echo "DISABLE_DETERMINISTIC_DEPLOYMENT: ${DISABLE_DETERMINISTIC_DEPLOYMENT}"
echo "L1_ASSET_ADDRESS: ${L1_ASSET_ADDRESS}"
# Check if L1 chain id key is present for L1 deployment
if [ -f "$nitro_addresses_file" ] && jq -e "has(\"$GETH_CHAIN_ID\")" ${nitro_addresses_file} > /dev/null; then
echo "L1 addresses found in ${nitro_addresses_file}, skipping deployment"
else
# Deploy Nitro contracts
yarn contracts:deploy-geth
# Deploy custom token
yarn contracts:deploy-token-geth
cp ${addresses_deployment_file} ${nitro_addresses_file}
fi
# Check if L1 chain id key is present for L1 deployment
# Check if L2 chain id key is present for L2 deployment
if [ -f "$nitro_addresses_file" ] && jq -e "has(\"$OPTIMISM_CHAIN_ID\")" ${nitro_addresses_file} > /dev/null; then
echo "L2 addresses found in ${nitro_addresses_file}, skipping deployment"
else
@@ -47,7 +35,6 @@ else
cp ${addresses_deployment_file} ${nitro_addresses_file}
fi
L1_ASSET_ADDRESS=$(jq -r ".\"$GETH_CHAIN_ID\"[0].contracts.Token.address" ${nitro_addresses_file})
L2_ASSET_ADDRESS=$(jq -r ".\"$OPTIMISM_CHAIN_ID\"[0].contracts.Token.address" ${nitro_addresses_file})
# Deploy custom tokens and create bridge-assets-map.toml
@@ -7,6 +7,5 @@ containers:
- cerc/nitro-client
- cerc/go-nitro
pods:
- nitro-contracts
- nitro-bridge
- nitro-rpc-client
@@ -0,0 +1,59 @@
# nitro-contracts
## Setup
- Clone the stack repo:
```bash
laconic-so fetch-stack git.vdb.to/cerc-io/nitro-stack
```
- Clone required repositories:
```bash
laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/nitro-contracts setup-repositories
```
- Build container images:
```bash
laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/nitro-contracts build-containers
```
## Create a deployment
- Create a spec file
```bash
laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/nitro-contracts deploy init --output nitro-contracts-spec.yml
```
- Create deployment
```bash
laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/nitro-contracts deploy create --spec-file nitro-contracts-spec.yml --deployment-dir nitro-contracts-deployment
```
## Configuration
- Inside the `nitro-contracts-deployment` deployment directory, open `config.env` file and set following env variables:
```bash
# URL endpoint of the L1 chain (Example: http://host.docker.internal:8545)
GETH_URL=
# Private key of the account on chain that is used for deploying L1 contracts
GETH_DEPLOYER_PK=
TOKEN_NAME=LaconicNetworkToken
TOKEN_SYMBOL=LNT
INITIAL_TOKEN_SUPPLY=129600
```
## Start the deployment
```bash
laconic-so deployment --dir nitro-contracts-deployment start
```
@@ -0,0 +1,9 @@
version: "1.0"
name: nitro-contracts
description: "Deploy nitro contracts"
repos:
- github.com/cerc-io/go-nitro
containers:
- cerc/nitro-client
pods:
- nitro-contracts