diff --git a/testnet-onboarding-demo.md b/testnet-onboarding-demo.md index 35fa7bc..5a8c505 100644 --- a/testnet-onboarding-demo.md +++ b/testnet-onboarding-demo.md @@ -86,7 +86,7 @@ - Follow these steps to install laconic-so: -### Fixturenet laconicd Stack and laconic-faucet +### fixturenet-laconicd and laconic-faucet Stacks 1. Clone the stack repos: @@ -154,20 +154,10 @@ laconic-so --stack ~/cerc/fixturenet-laconicd-stack/stack-orchestrator/stacks/fixturenet-laconicd deploy init --output stage1-spec.yml ``` - - Edit `network` in the spec file to map container ports to host ports as required: + - Copy the contents of `stage0-spec.yml` to `stage1-spec.yml`: ```bash - # stage1-spec.yml - ... - network: - ports: - laconicd: - - '6060' - - '26657:26657' - - '26656:26656' - - '9473:9473' - - '9090:9090' - - '1317:1317' + cp stage0-spec.yml stage1-spec.yml ``` - Create a deployment from the spec file: @@ -203,7 +193,7 @@ cp stage0-deployment/deployment.yml laconic-faucet-deployment/deployment.yml ``` -### L1 eth and L2 optimism stacks +### L1 eth and L2 Optimism Stacks 1. Clone the stack repo: @@ -310,64 +300,41 @@ ### Go Nitro +Clone the stack repo: + + ```bash + laconic-so fetch-stack git.vdb.to/cerc-io/nitro-stack --git-ssh --pull + ``` + #### Bridge Stack -1. Clone the stack repos: +1. Clone required repositories: ```bash - laconic-so fetch-stack git.vdb.to/cerc-io/nitro-stack --git-ssh --pull - ``` - -2. Clone required repositories: - - ```bash - # laconicd laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/bridge setup-repositories --git-ssh --pull ``` -3. Build the container images: +2. Build the container images: ```bash - # laconicd laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/bridge build-containers --force-rebuild ``` -4. Create a deployment for the bridge: - - Create a spec-file for the deployment, map container ports to host ports and set env variables: - - ```bash - laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/bridge deploy init --map-ports-to-host any-same --output bridge-nitro-spec.yml --config 'CERC_NITRO_L1_CHAIN_URL=ws://host.docker.internal:8546,CERC_NITRO_L2_CHAIN_URL=ws://host.docker.internal:9546,CERC_NITRO_CHAIN_PK=888814df89c4358d7ddb3fa4b0213e7331239a80e1f013eaa7b2deca2a41a218,CERC_NITRO_SC_PK=0279651921cd800ac560c21ceea27aab0107b67daf436cdd25ce84cad30159b4,CERC_GETH_URL=http://host.docker.internal:8545,CERC_OPTIMISM_URL=http://host.docker.internal:9545,CERC_GETH_DEPLOYER_PK=888814df89c4358d7ddb3fa4b0213e7331239a80e1f013eaa7b2deca2a41a218,CERC_OPTIMISM_DEPLOYER_PK=888814df89c4358d7ddb3fa4b0213e7331239a80e1f013eaa7b2deca2a41a218,CERC_TOKEN_NAME=LaconicNetworkToken,CERC_TOKEN_SYMBOL=LNT,CERC_INITIAL_TOKEN_SUPPLY=129600' - ``` - - - Create a deployment from the spec file: - - ```bash - laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/bridge deploy create --spec-file bridge-nitro-spec.yml --deployment-dir bridge-deployment - ``` - #### Nitro-node Stack -1. Clone the stack repos: +1. Clone required repositories: ```bash - laconic-so fetch-stack git.vdb.to/cerc-io/nitro-stack --git-ssh --pull - ``` - -2. Clone required repositories: - - ```bash - # laconicd laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/nitro-node setup-repositories --git-ssh --pull ``` -3. Build the container images: +2. Build the container images: ```bash - # laconicd laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/nitro-node build-containers --force-rebuild ``` -4. Create a deployment spec-file for Alice's L1 nitro-node: +3. Create a deployment spec-file for Alice's L1 nitro-node: - Create spec files for the deployment: ```bash @@ -386,7 +353,7 @@ - 4007:4005 ``` -5. Create a deployment spec-file for Charlie's L1 nitro-node: +4. Create a deployment spec-file for Charlie's L1 nitro-node: - Create spec file for the deployment: ```bash @@ -405,7 +372,7 @@ - 4008:4005 ``` -6. Create a deployment spec-file for Alice's L2 nitro-node: +5. Create a deployment spec-file for Alice's L2 nitro-node: - Create spec files for the deployment: ```bash @@ -424,7 +391,7 @@ - 4009:4005 ``` -7. Create a deployment spec-file for Charlie's L2 nitro-node: +6. Create a deployment spec-file for Charlie's L2 nitro-node: - Create spec file for the deployment: ```bash @@ -530,20 +497,31 @@ # 100000000000000000 ``` -- Start the nitro bridge +- Create a deployment for the bridge: + - Create a spec-file for the deployment, map container ports to host ports and set env variables: + ```bash + laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/bridge deploy init --map-ports-to-host any-same --output bridge-nitro-spec.yml --config 'CERC_NITRO_L1_CHAIN_URL=ws://host.docker.internal:8546,CERC_NITRO_L2_CHAIN_URL=ws://host.docker.internal:9546,CERC_NITRO_CHAIN_PK=888814df89c4358d7ddb3fa4b0213e7331239a80e1f013eaa7b2deca2a41a218,CERC_NITRO_SC_PK=0279651921cd800ac560c21ceea27aab0107b67daf436cdd25ce84cad30159b4,CERC_GETH_URL=http://host.docker.internal:8545,CERC_OPTIMISM_URL=http://host.docker.internal:9545,CERC_GETH_DEPLOYER_PK=$ACCOUNT_PK,CERC_OPTIMISM_DEPLOYER_PK=$ACCOUNT_PK,CERC_TOKEN_NAME=LaconicNetworkToken,CERC_TOKEN_SYMBOL=LNT,CERC_INITIAL_TOKEN_SUPPLY=129600' + ``` - ```bash - laconic-so deployment --dir bridge-deployment start + - Create a deployment from the spec file: - # Check the logs, ensure that the node is running - laconic-so deployment --dir bridge-deployment logs nitro-bridge -f - ``` + ```bash + laconic-so --stack ~/cerc/nitro-stack/stack-orchestrator/stacks/bridge deploy create --spec-file bridge-nitro-spec.yml --deployment-dir bridge-deployment + ``` + + - Start the nitro bridge + + ```bash + laconic-so deployment --dir bridge-deployment start + + # Check the logs, ensure that the node is running + laconic-so deployment --dir bridge-deployment logs nitro-bridge -f + ``` - Send custom tokens to Alice and Charlie on L1 - Export variables for L1 token address - ```bash export L1_ASSET_ADDRESS="$(laconic-so deployment --dir bridge-deployment exec nitro-contracts "jq -r '.\"1212\"[0].contracts.Token.address' /app/deployment/nitro-addresses.json")" export A_CHAIN_ADDRESS="0xe22AD83A0dE117bA0d03d5E94Eb4E0d80a69C62a" @@ -663,7 +641,12 @@ export BRIDGE_ADDRESS=$(laconic-so deployment --dir bridge-deployment exec nitro-bridge "jq -r '.\"42069\"[0].contracts.Bridge.address' /app/deployment/nitro-addresses.json") ``` -- Get Ethereum private keys for accounts Alice and Charlie from `laconic-wallet` (to be used as statechannel PKs) +- Get Ethereum private keys for accounts Alice and Charlie from `laconic-wallet` using the `Show private key` link (to be used as statechannel PKs) + + ```bash + export A_PRIVATE_KEY= + export C_PRIVATE_KEY= + ``` - Prepare deployments for the nodes - Set the env variables for L1 Alice's nitro-node: @@ -671,7 +654,7 @@ ```bash cat <> lialice-nitro-deployment/config.env CERC_NITRO_CHAIN_URL=ws://host.docker.internal:8546 - CERC_NITRO_SC_PK= + CERC_NITRO_SC_PK=$A_PRIVATE_KEY CERC_NITRO_CHAIN_PK=570b909da9669b2f35a0b1ac70b8358516d55ae1b5b3710e95e9a94395090597 CERC_NA_ADDRESS=$CERC_NA_ADDRESS CERC_VPA_ADDRESS=$CERC_VPA_ADDRESS @@ -692,7 +675,7 @@ ```bash cat <> l1charlie-nitro-deployment/config.env CERC_NITRO_CHAIN_URL=ws://host.docker.internal:8546 - CERC_NITRO_SC_PK= + CERC_NITRO_SC_PK=$C_PRIVATE_KEY CERC_NITRO_CHAIN_PK=570b909da9669b2f35a0b1ac70b8358516d55ae1b5b3710e95e9a94395090597 CERC_NA_ADDRESS=$CERC_NA_ADDRESS CERC_VPA_ADDRESS=$CERC_VPA_ADDRESS @@ -713,7 +696,7 @@ ```bash cat <> l2alice-nitro-deployment/config.env CERC_NITRO_CHAIN_URL=ws://host.docker.internal:9546 - CERC_NITRO_SC_PK= + CERC_NITRO_SC_PK=$A_PRIVATE_KEY CERC_NITRO_CHAIN_PK=111b7500bdce494d6f4bcfe8c2a0dde2ef92f751d9070fac6475dbd6d8021b3f CERC_NITRO_MSG_PORT=3008 CERC_NITRO_RPC_PORT=4008 @@ -737,7 +720,7 @@ ```bash cat <> l2charlie-nitro-deployment/config.env CERC_NITRO_CHAIN_URL=ws://host.docker.internal:9546 - CERC_NITRO_SC_PK= + CERC_NITRO_SC_PK=$C_PRIVATE_KEY CERC_NITRO_CHAIN_PK=111b7500bdce494d6f4bcfe8c2a0dde2ef92f751d9070fac6475dbd6d8021b3f CERC_NITRO_MSG_PORT=3010 CERC_NITRO_RPC_PORT=4010 @@ -758,40 +741,32 @@ - Start nitro nodes for Alice and Charlie on L1 and L2: - - Start the deployements for L1 Alice's node + - Start the deployments for L1 Alice's node ```bash laconic-so deployment --dir l1alice-nitro-deployment start ``` - - Start the deployements for L1 Charlie's node + - Start the deployments for L1 Charlie's node ```bash laconic-so deployment --dir l1charlie-nitro-deployment start ``` - - Start the deployements for L2 Alice's node + - Start the deployments for L2 Alice's node ```bash laconic-so deployment --dir l2alice-nitro-deployment start ``` - - Start the deployements for L2 Charlie's node + - Start the deployments for L2 Charlie's node ```bash laconic-so deployment --dir l2charlie-nitro-deployment start ``` - Create ledger channels on L1 and mirrored channel on L2s - - Open new terminal - - - Set the `NODE_EXTRA_CA_CERTS` environment variable to the path of mkcert's root CA certificate. This allows Node.js to trust locally-trusted development certificates created by mkcert - - ```bash - export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem" - ``` - - - Check that no channels exist on L2 + - Open new terminal, check that no channels exist on L2 ```bash nitro-rpc-client get-all-l2-channels -p 4006 @@ -805,8 +780,6 @@ export L1_ASSET_ADDRESS="" ``` - NOTE: Replace `` with LNT token address deployed previously on L1 in [Run](#run) section - - Create ledger channel between A and Bridge with custom token ```bash @@ -913,20 +886,20 @@ - Use the scripts in fixturenet-laconicd stack to generate genesis file for stage 1 with token allocations: - ```bash - cd ~/cerc/fixturenet-laconicd-stack/stack-orchestrator/stacks/fixturenet-laconicd + ```bash + cd ~/cerc/fixturenet-laconicd-stack/stack-orchestrator/stacks/fixturenet-laconicd - ./scripts/generate-stage1-genesis.sh + ./scripts/generate-stage1-genesis.sh - # Expected output: - # Genesis file for stage1 written to output/genesis.json + # Expected output: + # Genesis file for stage1 written to output/genesis.json - # Remove the temporary data directory - sudo rm -rf stage1-genesis + # Remove the temporary data directory + sudo rm -rf stage1-genesis - # Go back to the directory where deployments are created - cd - - ``` + # Go back to the directory where deployments are created + cd - + ``` - Copy over the generated genesis file (`.json`) containing the onboarding module state with funded participants to data directory in stage1 deployment (`stage1-deployment/data/genesis-config`): @@ -1054,14 +1027,31 @@ ## Demo cleanup -- Stop the bridge, A, A', C and C' terminals - - Change directory to go-nitro repo root - - Clear the durable store +- Reset nitro-node deployments: + + - Stop nitro-node deployments and remove volumes: ```bash - rm -rf ./data/ + # Run where deployments are created + laconic-so deployment --dir l1alice-nitro-deployment stop --delete-volumes + laconic-so deployment --dir l1charlie-nitro-deployment stop --delete-volumes + laconic-so deployment --dir l2alice-nitro-deployment stop --delete-volumes + laconic-so deployment --dir l2charlie-nitro-deployment stop --delete-volumes ``` + - Clear nitro-node deployments: + + ```bash + # Run where deployments are created + sudo rm -rf 'l1alice-nitro-deployment' + sudo rm -rf 'l1charlie-nitro-deployment' + sudo rm -rf 'l2alice-nitro-deployment' + sudo rm -rf 'l2charlie-nitro-deployment' + ``` + +- Reset wallet: + - In laconic-wallet, click on the `Reset Wallet` button to disconnect all apps and clear the accounts + - Reset stage 0 and stage 1 laconicd deployments: - Stop deployment and remove volumes: @@ -1095,25 +1085,33 @@ # Run where deployments are created sudo rm -rf 'laconic-faucet-deployment/data/faucet-data/*' ``` - ## Re-run - After running demo cleanup, follow the steps from [Demo](#demo) to re-run the demo ## Cleanup -- Stop Nitro nodes: - - Stop (`Ctrl+C`) the bridge, A, A', C and C' nitro nodes +- Clean up nitro-node deployments and remove volumes: - - Clear out nitro nodes data and configurations: - - Change directory to go-nitro repo root + ```bash + # Run where deployments are created + laconic-so deployment --dir l1alice-nitro-deployment stop --delete-volumes + laconic-so deployment --dir l1charlie-nitro-deployment stop --delete-volumes + laconic-so deployment --dir l2alice-nitro-deployment stop --delete-volumes + laconic-so deployment --dir l2charlie-nitro-deployment stop --delete-volumes + laconic-so deployment --dir bridge-deployment stop --delete-volumes + ``` - - Cleanup: + - Clear nitro-node deployments: - ```bash - # In go-nitro - git clean -xdf - ``` + ```bash + # Run where deployments are created + sudo rm -rf 'l1alice-nitro-deployment' + sudo rm -rf 'l1charlie-nitro-deployment' + sudo rm -rf 'l2alice-nitro-deployment' + sudo rm -rf 'l2charlie-nitro-deployment' + sudo rm -rf 'bridge-deployment' + ``` - Reset wallet and stop the app: - In laconic-wallet, click on the `Reset Wallet` button to disconnect all apps and clear the accounts