Compare commits

..
Author SHA1 Message Date
Neeraj dbf7c12042 Update README to start nodes from contract deployed block 2024-10-16 19:58:25 +05:30
16 changed files with 91 additions and 980 deletions
-1
View File
@@ -11,7 +11,6 @@ Stacks to run a node for laconic testnet
- [Update deployments after code changes](./ops/update-deployments.md) - [Update deployments after code changes](./ops/update-deployments.md)
- [Halt stage0 and start stage1](./ops/stage0-to-stage1.md) - [Halt stage0 and start stage1](./ops/stage0-to-stage1.md)
- [Create deployments from scratch (for reference only)](./ops/deployments-from-scratch.md) - [Create deployments from scratch (for reference only)](./ops/deployments-from-scratch.md)
- [Deploy and transfer new tokens for nitro operations](./ops/nitro-token-ops.md)
## Join LORO testnet ## Join LORO testnet
+42 -269
View File
@@ -26,114 +26,6 @@
* laconic-so: see [installation](https://git.vdb.to/cerc-io/testnet-ops/src/branch/main/stack-orchestrator-setup/README.md#setup-stack-orchestrator) * laconic-so: see [installation](https://git.vdb.to/cerc-io/testnet-ops/src/branch/main/stack-orchestrator-setup/README.md#setup-stack-orchestrator)
<details open>
<summary>Fixturenet Eth</summary>
## Fixturenet Eth
* Stack: <https://git.vdb.to/cerc-io/fixturenet-eth-stacks>
* Target dir: `/srv/fixturenet-eth/fixturenet-eth-deployment`
* Cleanup an existing deployment if required:
```bash
cd /srv/fixturenet-eth
# Stop the deployment
laconic-so deployment --dir fixturenet-eth-deployment stop --delete-volumes
# Remove the deployment dir
sudo rm -rf fixturenet-eth-deployment
```
### Setup
* Create a `fixturenet-eth` dir if not present already and cd into it
```bash
mkdir /srv/fixturenet-eth
cd /srv/fixturenet-eth
```
* Clone the stack repo:
```bash
laconic-so fetch-stack git.vdb.to/cerc-io/fixturenet-eth-stacks --pull
```
* Clone required repositories:
```bash
laconic-so --stack ~/cerc/fixturenet-eth-stacks/stack-orchestrator/stacks/fixturenet-eth setup-repositories --pull
# If this throws an error as a result of being already checked out to a branch/tag in a repo, remove all repositories from that stack and re-run the command
# The repositories are located in $HOME/cerc by default
```
* Build the container images:
```bash
# Remove any older foundry image with `latest` tag
docker rmi ghcr.io/foundry-rs/foundry:latest
laconic-so --stack ~/cerc/fixturenet-eth-stacks/stack-orchestrator/stacks/fixturenet-eth build-containers --force-rebuild
# If errors are thrown during build, old images used by this stack would have to be deleted
```
* NOTE: this will take >10 mins depending on the specs of your machine, and **requires** 16GB of memory or greater.
* Remove any dangling Docker images (to clear up space):
```bash
docker image prune
```
* Create spec files for deployments, which will map the stack's ports and volumes to the host:
```bash
laconic-so --stack ~/cerc/fixturenet-eth-stacks/stack-orchestrator/stacks/fixturenet-eth deploy init --output fixturenet-eth-spec.yml
```
* Configure ports:
* `fixturenet-eth-spec.yml`
```yml
...
network:
ports:
fixturenet-eth-bootnode-geth:
- '9898:9898'
- '30303'
fixturenet-eth-geth-1:
- '7545:8545'
- '7546:8546'
- '40000'
- '6060'
fixturenet-eth-lighthouse-1:
- '8001'
...
```
* Create deployments:
Once you've made any needed changes to the spec files, create deployments from them:
```bash
laconic-so --stack ~/cerc/fixturenet-eth-stacks/stack-orchestrator/stacks/fixturenet-eth deploy create --spec-file fixturenet-eth-spec.yml --deployment-dir fixturenet-eth-deployment
```
### Run
* Start `fixturenet-eth-deployment` deployment:
```bash
laconic-so deployment --dir fixturenet-eth-deployment start
```
</details>
<details open> <details open>
<summary>Nitro Contracts Deployment</summary> <summary>Nitro Contracts Deployment</summary>
@@ -155,7 +47,6 @@
# Remove the deployment dir # Remove the deployment dir
sudo rm -rf nitro-contracts-deployment sudo rm -rf nitro-contracts-deployment
```
### Setup ### Setup
@@ -174,21 +65,21 @@
* Edit [`contract-vars.yml`](./contract-vars.yml) and fill in the following values: * Edit [`contract-vars.yml`](./contract-vars.yml) and fill in the following values:
```bash ```bash
# RPC endpoint # L1 RPC endpoint
geth_url: "https://fixturenet-eth.laconic.com" geth_url: "https://sepolia.laconic.com"
# Chain ID (Fixturenet-eth: 1212) # L1 chain ID (Sepolia: 11155111)
geth_chain_id: "1212" geth_chain_id: "11155111"
# Private key for a funded L1 account, to be used for contract deployment on L1 # Private key for a funded L1 account, to be used for contract deployment on L1
# Must also be funded on L2 for deploying contracts
# Required since this private key will be utilized by both L1 and L2 nodes of the bridge # Required since this private key will be utilized by both L1 and L2 nodes of the bridge
geth_deployer_pk: ""
geth_deployer_pk: "888814df89c4358d7ddb3fa4b0213e7331239a80e1f013eaa7b2deca2a41a218" # Custom L1 token to be deployed
token_name: ""
# Custom token to be deployed token_symbol: ""
token_name: "TestToken" intial_token_supply: ""
token_symbol: "TST"
initial_token_supply: "129600"
``` ```
* Update the target dir in `setup-vars.yml`: * Update the target dir in `setup-vars.yml`:
@@ -251,8 +142,6 @@
laconic-so deployment --dir nitro-contracts-deployment logs nitro-contracts -f laconic-so deployment --dir nitro-contracts-deployment logs nitro-contracts -f
``` ```
* To deploy a new token and transfer it to another account, refer to this [doc](./nitro-token-ops.md)
</details> </details>
<details open> <details open>
@@ -289,10 +178,10 @@
# Expected output: # Expected output:
# { # {
# "1212": [ # "11155111": [
# { # {
# "name": "geth", # "name": "geth",
# "chainId": "1212", # "chainId": "11155111",
# "contracts": { # "contracts": {
# "ConsensusApp": { # "ConsensusApp": {
# "address": "0xC98aD0B41B9224dad0605be32A9241dB9c67E2e8" # "address": "0xC98aD0B41B9224dad0605be32A9241dB9c67E2e8"
@@ -303,7 +192,7 @@
# "VirtualPaymentApp": { # "VirtualPaymentApp": {
# "address": "0x778e4e6297E8BF04C67a20Ec989618d72eB4a19E" # "address": "0x778e4e6297E8BF04C67a20Ec989618d72eB4a19E"
# }, # },
# "TestToken": { # "Token": {
# "address": "0x02ebfB2706527C7310F2a7d9098b2BC61014C5F2" # "address": "0x02ebfB2706527C7310F2a7d9098b2BC61014C5F2"
# } # }
# } # }
@@ -312,6 +201,15 @@
# } # }
``` ```
* Get the start block for Nitro Adjudicator events by executing the following command:
```bash
laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq '.receipt.blockNumber' /app/deployment/hardhat-deployments/geth/NitroAdjudicator.json"
# Expected output:
101
```
* Switch to `testnet-ops/nitro-bridge-setup` directory on your local machine: * Switch to `testnet-ops/nitro-bridge-setup` directory on your local machine:
```bash ```bash
@@ -328,19 +226,22 @@
```bash ```bash
# WS endpoint # WS endpoint
nitro_chain_url: "wss://fixturenet-eth.laconic.com" nitro_chain_url: "wss://sepolia.laconic.com"
# Private key for bridge Nitro address # Private key for bridge Nitro address
nitro_sc_pk: "" nitro_sc_pk: ""
# Private key should correspond to a funded account on L1 and this account must own the Nitro contracts # Private key should correspond to a funded account on L1 and this account must own the Nitro contracts
# It also needs to hold L1 tokens to fund Nitro channels # It also needs to hold L1 tokens to fund Nitro channels
nitro_chain_pk: "888814df89c4358d7ddb3fa4b0213e7331239a80e1f013eaa7b2deca2a41a218" nitro_chain_pk: ""
# Deployed Nitro contract addresses # Deployed L1 Nitro contract addresses
na_address: "" na_address: ""
vpa_address: "" vpa_address: ""
ca_address: "" ca_address: ""
# Specifies the block number to start looking for nitro adjudicator events
nitro_chain_start_block: 0
``` ```
* Update the target dir in `setup-vars.yml`: * Update the target dir in `setup-vars.yml`:
@@ -409,12 +310,14 @@
cd /srv/bridge cd /srv/bridge
# Create required variables # Create required variables
GETH_CHAIN_ID="1212" GETH_CHAIN_ID="11155111"
export NA_ADDRESS=$(laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq -r '.\"$GETH_CHAIN_ID\"[0].contracts.NitroAdjudicator.address' /app/deployment/nitro-addresses.json") export NA_ADDRESS=$(laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq -r '.\"$GETH_CHAIN_ID\"[0].contracts.NitroAdjudicator.address' /app/deployment/nitro-addresses.json")
export CA_ADDRESS=$(laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq -r '.\"$GETH_CHAIN_ID\"[0].contracts.ConsensusApp.address' /app/deployment/nitro-addresses.json") export CA_ADDRESS=$(laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq -r '.\"$GETH_CHAIN_ID\"[0].contracts.ConsensusApp.address' /app/deployment/nitro-addresses.json")
export VPA_ADDRESS=$(laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq -r '.\"$GETH_CHAIN_ID\"[0].contracts.VirtualPaymentApp.address' /app/deployment/nitro-addresses.json") export VPA_ADDRESS=$(laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq -r '.\"$GETH_CHAIN_ID\"[0].contracts.VirtualPaymentApp.address' /app/deployment/nitro-addresses.json")
export ASSET_ADDRESS=$(laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq -r '.\"$GETH_CHAIN_ID\"[0].contracts.Token.address' /app/deployment/nitro-addresses.json")
export BRIDGE_NITRO_ADDRESS=$(laconic-so deployment --dir bridge-deployment exec nitro-rpc-client "nitro-rpc-client get-node-info -p 4005 -h nitro-bridge" | jq -r '.SCAddress') export BRIDGE_NITRO_ADDRESS=$(laconic-so deployment --dir bridge-deployment exec nitro-rpc-client "nitro-rpc-client get-node-info -p 4005 -h nitro-bridge" | jq -r '.SCAddress')
export BRIDGE_PEER_ID=$(laconic-so deployment --dir bridge-deployment exec nitro-rpc-client "nitro-rpc-client get-node-info -p 4005 -h nitro-bridge" | jq -r '.MessageServicePeerId') export BRIDGE_PEER_ID=$(laconic-so deployment --dir bridge-deployment exec nitro-rpc-client "nitro-rpc-client get-node-info -p 4005 -h nitro-bridge" | jq -r '.MessageServicePeerId')
@@ -422,41 +325,30 @@
export L1_BRIDGE_MULTIADDR="/dns4/bridge.laconic.com/tcp/3005/p2p/$BRIDGE_PEER_ID" export L1_BRIDGE_MULTIADDR="/dns4/bridge.laconic.com/tcp/3005/p2p/$BRIDGE_PEER_ID"
export L2_BRIDGE_MULTIADDR="/dns4/bridge.laconic.com/tcp/3006/p2p/$BRIDGE_PEER_ID" export L2_BRIDGE_MULTIADDR="/dns4/bridge.laconic.com/tcp/3006/p2p/$BRIDGE_PEER_ID"
# Create the required config files export NITRO_CHAIN_START_BLOCK=$(laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq '.receipt.blockNumber' /app/deployment/hardhat-deployments/geth/NitroAdjudicator.json")
# Create the required config file
cat <<EOF > nitro-node-config.yml cat <<EOF > nitro-node-config.yml
nitro_chain_url: "wss://fixturenet-eth.laconic.com" nitro_chain_url: "wss://sepolia.laconic.com"
na_address: "$NA_ADDRESS" na_address: "$NA_ADDRESS"
ca_address: "$CA_ADDRESS" ca_address: "$CA_ADDRESS"
vpa_address: "$VPA_ADDRESS" vpa_address: "$VPA_ADDRESS"
asset_address: "${ASSET_ADDRESS}"
nitro_chain_start_block: $NITRO_CHAIN_START_BLOCK
bridge_nitro_address: "$BRIDGE_NITRO_ADDRESS" bridge_nitro_address: "$BRIDGE_NITRO_ADDRESS"
nitro_l1_bridge_multiaddr: "$L1_BRIDGE_MULTIADDR" nitro_l1_bridge_multiaddr: "$L1_BRIDGE_MULTIADDR"
nitro_l2_bridge_multiaddr: "$L2_BRIDGE_MULTIADDR" nitro_l2_bridge_multiaddr: "$L2_BRIDGE_MULTIADDR"
EOF EOF
laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq --arg chainId \"$GETH_CHAIN_ID\" '{
(\$chainId): [
{
\"name\": .[\$chainId][0].name,
\"chainId\": .[\$chainId][0].chainId,
\"contracts\": (
.[\$chainId][0].contracts
| to_entries
| map(select(.key | in({\"ConsensusApp\":1, \"NitroAdjudicator\":1, \"VirtualPaymentApp\":1}) | not))
| from_entries
)
}
]
}' /app/deployment/nitro-addresses.json" > assets.json
``` ```
* The required config files should be generated at `/srv/bridge/nitro-node-config.yml` and `/srv/bridge/assets.json` * The required config file should be generated at `/srv/bridge/nitro-node-config.yml`
* Check in the generated files at locations `ops/stage2/nitro-node-config.yml` and `ops/stage2/assets.json` within this repository respectively * Check in the generated file at location `ops/stage2/nitro-node-config.yml` within this repository
* List down L2 channels created by the bridge: * List down L2 channels created by the bridge:
```bash ```bash
laconic-so deployment --dir bridge-deployment exec nitro-rpc-client "nitro-rpc-client get-all-l2-channels -p 4005 -h nitro-bridge" laconic-so deployment --dir bridge-deployment exec nitro-rpc-client "nitro-rpc-client get-all-l2-channels -p 4006 -h nitro-bridge"
``` ```
</details> </details>
@@ -714,123 +606,6 @@
</details> </details>
<details open>
<summary>Shopify</summary>
## Shopify
* Stack: <https://git.vdb.to/cerc-io/testnet-laconicd-stack/src/branch/main/stack-orchestrator/stacks/laconic-shopify>
* Source repo: <https://git.vdb.to/cerc-io/shopify>
* Target dir: `/srv/shopify/laconic-shopify-deployment`
* Cleanup an existing deployment if required:
```bash
cd /srv/shopify
# Stop the deployment
laconic-so deployment --dir laconic-shopify-deployment stop
# Remove the deployment dir
sudo rm -rf laconic-shopify-deployment
# Remove the existing spec file
rm laconic-shopify-spec.yml
```
### Setup
* Clone the stack repo:
```bash
laconic-so fetch-stack git.vdb.to/cerc-io/testnet-laconicd-stack --pull
# This should clone the testnet-laconicd-stack repo at `/home/dev/cerc/testnet-laconicd-stack`
```
* Clone required repositories:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-shopify setup-repositories --pull
# This should clone the laconicd repos at `/home/dev/cerc/shopify` and `/home/dev/cerc/laconic-faucet`
```
* Build the container images:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-shopify build-containers --force-rebuild
# This should create the "cerc/laconic-shopify" and "cerc/laconic-shopify-faucet" Docker images
```
### Deployment
* Create a spec file for the deployment:
```bash
cd /srv/shopify
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-shopify deploy init --output laconic-shopify-spec.yml
```
* Create a deployment from the spec file:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-shopify deploy create --spec-file laconic-shopify-spec.yml --deployment-dir laconic-shopify-deployment
```
* Inside the `laconic-shopify-deployment` deployment directory, open `config.env` file and set following env variables:
```bash
# Shopify GraphQL URL
CERC_SHOPIFY_GRAPHQL_URL='https://6h071x-zw.myshopify.com/admin/api/2024-10/graphql.json'
# Access token for Shopify API
CERC_SHOPIFY_ACCESS_TOKEN=
# Delay for fetching orders in milliseconds
CERC_FETCH_ORDER_DELAY=10000
# Number of line items per order in Get Orders GraphQL query
CERC_ITEMS_PER_ORDER=10
# Private key of a funded faucet account
CERC_FAUCET_KEY=
# laconicd RPC endpoint
CERC_LACONICD_RPC_ENDPOINT='https://laconicd-sapo.laconic.com'
# laconicd chain id
CERC_LACONICD_CHAIN_ID=laconic-testnet-2
# laconicd address prefix
CERC_LACONICD_PREFIX=laconic
# laconicd gas price
CERC_LACONICD_GAS_PRICE=0.001
```
### Start
* Start the deployment:
```bash
laconic-so deployment --dir laconic-shopify-deployment start
```
* Check status:
```bash
# Check logs for faucet and shopify containers
laconic-so deployment --dir laconic-shopify-deployment logs shopify -f
laconic-so deployment --dir laconic-shopify-deployment logs faucet -f
```
</details>
<details open> <details open>
<summary>testnet-onboarding-app</summary> <summary>testnet-onboarding-app</summary>
@@ -1246,10 +1021,8 @@ https://wallet.laconic.com -> 5000
https://loro-console.laconic.com -> 4001 https://loro-console.laconic.com -> 4001
# Machine 2 # Machine 2
https://sepolia.laconic.com -> 8545 https://sepolia.laconic.com -> 8545
wss://sepolia.laconic.com -> 8546 wss://sepolia.laconic.com -> 8546
https://fixturenet-eth.laconic.com -> 7545
wss://fixturenet-eth.laconic.com -> 7546
bridge.laconic.com bridge.laconic.com
Open ports: Open ports:
-63
View File
@@ -1,63 +0,0 @@
# Nitro Token Ops
## Setup
* Go to the directory where `nitro-contracts-deployment` is present:
```bash
cd /srv/bridge
```
## Deploy new token
* To deploy another token:
```bash
# These values can be changed to deploy another token with different name and symbol
export TOKEN_NAME="TestToken2"
export TOKEN_SYMBOL="TST2"
# Note: Token supply denotes actual number of tokens and not the supply in Wei
export INITIAL_TOKEN_SUPPLY="129600"
laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "TOKEN_NAME=$TOKEN_NAME TOKEN_SYMBOL=$TOKEN_SYMBOL INITIAL_TOKEN_SUPPLY=$INITIAL_TOKEN_SUPPLY /app/deploy-l1-tokens.sh"
```
* Recreate `assets.json` to include newly deployed token address:
```bash
export GETH_CHAIN_ID="1212"
laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq --arg chainId \"$GETH_CHAIN_ID\" '{
(\$chainId): [
{
\"name\": .[\$chainId][0].name,
\"chainId\": .[\$chainId][0].chainId,
\"contracts\": (
.[\$chainId][0].contracts
| to_entries
| map(select(.key | in({\"ConsensusApp\":1, \"NitroAdjudicator\":1, \"VirtualPaymentApp\":1}) | not))
| from_entries
)
}
]
}' /app/deployment/nitro-addresses.json" > assets.json
```
* The required config file should be generated at `/srv/bridge/assets.json`
* Check in the generated file at location `ops/stage2/assets.json` within this repository
## Transfer deployed tokens to given address
* To transfer a token to an account:
```bash
export GETH_CHAIN_ID=1212
export TOKEN_NAME="<name-of-token-to-be-transferred>"
export ASSET_ADDRESS=$(laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "jq -r '.\"$GETH_CHAIN_ID\"[0].contracts.$TOKEN_NAME.address' /app/deployment/nitro-addresses.json")
export ACCOUNT="<target-account-address>"
export AMOUNT="<transfer-amount>"
laconic-so deployment --dir nitro-contracts-deployment exec nitro-contracts "cd packages/nitro-protocol && yarn hardhat transfer --contract $ASSET_ADDRESS --to $ACCOUNT --amount 1000 --network geth"
```
-16
View File
@@ -1,16 +0,0 @@
{
"1212": [
{
"name": "geth",
"chainId": "1212",
"contracts": {
"TestToken": {
"address": "0x2b79F4a92c177B4E61F5c4AC37b1B8A623c665A4"
},
"TestToken2": {
"address": "0xa6B4B8b84576047A53255649b4994743d9C83A71"
}
}
}
]
}
+5 -4
View File
@@ -1,7 +1,8 @@
nitro_chain_url: "wss://fixturenet-eth.laconic.com" nitro_chain_url: "wss://sepolia.laconic.com"
na_address: "0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9" na_address: "0xfD5276DDfE0E7738Af5F3dA0dE58D36560BbE544"
ca_address: "0xBca48057Da826cB2eb1258E2C679678b269dC262" ca_address: "0xC71F47d58d521aE24FDf5e324969aCD6f83b6Ff8"
vpa_address: "0xCf5207018766587b8cBad4B8B1a1a38c225ebA7A" vpa_address: "0xEA55dEab3718CF4d084a94Fe4C0D750a80Eb1F2C"
asset_address: "0xa4351114dAE1aBEb2d552d441C9733c72682a45D"
bridge_nitro_address: "0xf0E6a85C6D23AcA9ff1b83477D426ed26F218185" bridge_nitro_address: "0xf0E6a85C6D23AcA9ff1b83477D426ed26F218185"
nitro_l1_bridge_multiaddr: "/dns4/bridge.laconic.com/tcp/3005/p2p/16Uiu2HAky2PYTfBNHpytybz4ADY9n7boiLgK5btJpTrGVbWC3diZ" nitro_l1_bridge_multiaddr: "/dns4/bridge.laconic.com/tcp/3005/p2p/16Uiu2HAky2PYTfBNHpytybz4ADY9n7boiLgK5btJpTrGVbWC3diZ"
nitro_l2_bridge_multiaddr: "/dns4/bridge.laconic.com/tcp/3006/p2p/16Uiu2HAky2PYTfBNHpytybz4ADY9n7boiLgK5btJpTrGVbWC3diZ" nitro_l2_bridge_multiaddr: "/dns4/bridge.laconic.com/tcp/3006/p2p/16Uiu2HAky2PYTfBNHpytybz4ADY9n7boiLgK5btJpTrGVbWC3diZ"
@@ -1,49 +0,0 @@
services:
shopify:
restart: unless-stopped
image: cerc/laconic-shopify:local
depends_on:
faucet:
condition: service_healthy
command: ["bash", "-c", "./start-shopify.sh"]
environment:
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
CERC_SHOPIFY_GRAPHQL_URL: ${CERC_SHOPIFY_GRAPHQL_URL}
CERC_SHOPIFY_ACCESS_TOKEN: ${CERC_SHOPIFY_ACCESS_TOKEN}
CERC_FETCH_ORDER_DELAY: ${CERC_FETCH_ORDER_DELAY:-10000}
CERC_FAUCET_URL: http://faucet:3000/
CERC_ITEMS_PER_ORDER: ${CERC_ITEMS_PER_ORDER:-10}
volumes:
- shopify-data:/app/data
- ../config/laconic-shopify/start-shopify.sh:/app/start-shopify.sh
- ../config/laconic-shopify/product_pricings.json:/app/config/product_pricings.json
extra_hosts:
- "host.docker.internal:host-gateway"
faucet:
restart: unless-stopped
image: cerc/laconic-shopify-faucet:local
command: ["bash", "-c", "./start-faucet.sh"]
environment:
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
CERC_LACONICD_RPC_ENDPOINT: ${CERC_LACONICD_RPC_ENDPOINT:-https://laconicd-sapo.laconic.com}
CERC_FAUCET_KEY: ${CERC_FAUCET_KEY}
CERC_LACONICD_CHAIN_ID: ${CERC_LACONICD_CHAIN_ID:-laconic-testnet-2}
CERC_LACONICD_PREFIX: ${CERC_LACONICD_PREFIX:-laconic}
CERC_LACONICD_GAS_PRICE: ${CERC_LACONICD_GAS_PRICE:-0.001}
volumes:
- faucet-data:/app/db
- ../config/laconic-shopify/start-faucet.sh:/app/start-faucet.sh
- ../config/laconic-shopify/config-template.toml:/app/environments/config-template.toml
healthcheck:
test: ["CMD", "nc", "-vz", "127.0.0.1", "3000"]
interval: 10s
timeout: 5s
retries: 10
start_period: 5s
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
shopify-data:
faucet-data:
@@ -1,12 +0,0 @@
[upstream]
rpcEndpoint = "REPLACE_WITH_CERC_LACONICD_RPC_ENDPOINT"
chainId = "REPLACE_WITH_CERC_LACONICD_CHAIN_ID"
prefix = "REPLACE_WITH_CERC_LACONICD_PREFIX"
gasPrice = "REPLACE_WITH_CERC_LACONICD_GAS_PRICE"
faucetKey = "REPLACE_WITH_CERC_FAUCET_KEY"
denom = "alnt"
[server]
port=3000
enableRateLimit=false
dbDir = "db"
@@ -1,6 +0,0 @@
{
"10 webapp deployments": "100000",
"100 webapp deployments": "1000000",
"500 webapp deployments": "5000000",
"1000 webapp deployments": "10000000"
}
@@ -1,29 +0,0 @@
#!/bin/bash
set -e
set -u
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
set -x
fi
config_template=$(cat environments/config-template.toml)
target_config="./environments/local.toml"
# Check if faucet key is set
if [ -z "${CERC_FAUCET_KEY:-}" ]; then
echo "Error: CERC_FAUCET_KEY is not set. Exiting..."
exit 1
fi
echo "Using laconicd RPC endpoint: $CERC_LACONICD_RPC_ENDPOINT"
FAUCET_CONFIG=$(echo "$config_template" | \
sed -E "s|REPLACE_WITH_CERC_FAUCET_KEY|${CERC_FAUCET_KEY}|g; \
s|REPLACE_WITH_CERC_LACONICD_CHAIN_ID|${CERC_LACONICD_CHAIN_ID}|g; \
s|REPLACE_WITH_CERC_LACONICD_PREFIX|${CERC_LACONICD_PREFIX}|g; \
s|REPLACE_WITH_CERC_LACONICD_GAS_PRICE|${CERC_LACONICD_GAS_PRICE}|g; \
s|REPLACE_WITH_CERC_LACONICD_RPC_ENDPOINT|${CERC_LACONICD_RPC_ENDPOINT}|g; ")
echo "$FAUCET_CONFIG" > $target_config
echo "Starting faucet..."
node dist/index.js
@@ -1,21 +0,0 @@
#!/bin/bash
set -e
set -u
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
set -x
fi
echo "Shopify GraphQL URL: $CERC_SHOPIFY_GRAPHQL_URL"
echo "Shopify access token: $CERC_SHOPIFY_ACCESS_TOKEN"
echo "Fetch order delay: $CERC_FETCH_ORDER_DELAY"
echo "Faucet URL: $CERC_FAUCET_URL"
echo "Number of line items per order: $CERC_ITEMS_PER_ORDER"
export SHOPIFY_GRAPHQL_URL=$CERC_SHOPIFY_GRAPHQL_URL
export SHOPIFY_ACCESS_TOKEN=$CERC_SHOPIFY_ACCESS_TOKEN
export FETCH_ORDER_DELAY=$CERC_FETCH_ORDER_DELAY
export FAUCET_URL=$CERC_FAUCET_URL
export ITEMS_PER_ORDER=$CERC_ITEMS_PER_ORDER
yarn start
@@ -1,5 +0,0 @@
#!/usr/bin/env bash
# Build cerc/laconic-shopify-faucet
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
docker build -t cerc/laconic-shopify-faucet:local ${build_command_args} ${CERC_REPO_BASE_DIR}/laconic-faucet
@@ -1,9 +0,0 @@
FROM node:20-bullseye
WORKDIR /app
COPY . .
RUN yarn install
CMD ["yarn", "start"]
@@ -1,8 +0,0 @@
#!/usr/bin/env bash
# Build cerc/laconic-faucet
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
docker build -t cerc/laconic-shopify:local ${build_command_args} -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/shopify
@@ -1,109 +0,0 @@
# laconic-shopify
Instructions for running the laconic shopify
## Setup
* Clone the stack repo:
```bash
laconic-so fetch-stack git.vdb.to/cerc-io/testnet-laconicd-stack
```
* Clone the laconic-shopify respository:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-shopify setup-repositories
```
* Build the container image:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-shopify build-containers
```
This should create the `cerc/laconic-shopify` and `cerc/laconic-shopify-faucet` images locally
## Create a deployment
* Create a spec file for the deployment:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-shopify deploy init --output laconic-shopify-spec.yml
```
* Create a deployment from the spec file:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-shopify deploy create --spec-file laconic-shopify-spec.yml --deployment-dir laconic-shopify-deployment
```
## Configuration
* Inside the `laconic-shopify-deployment` deployment directory, open `config.env` file and set following env variables:
```bash
# Shopify GraphQL URL (default: 'https://6h071x-zw.myshopify.com/admin/api/2024-10/graphql.json')
CERC_SHOPIFY_GRAPHQL_URL=
# Access token for Shopify API
CERC_SHOPIFY_ACCESS_TOKEN=
# Delay for fetching orders in milliseconds (default: 10000)
CERC_FETCH_ORDER_DELAY=
# Number of line items per order in Get Orders GraphQL query (default: 10)
CERC_ITEMS_PER_ORDER=
# Private key of a funded faucet account
CERC_FAUCET_KEY=
# laconicd RPC endpoint (default: https://laconicd-sapo.laconic.com/)
CERC_LACONICD_RPC_ENDPOINT=
# laconicd chain id (default: laconic-testnet-2)
CERC_LACONICD_CHAIN_ID=
# laconicd address prefix (default: laconic)
CERC_LACONICD_PREFIX=
# laconicd gas price (default: 0.001)
CERC_LACONICD_GAS_PRICE=
```
## Start the deployment
```bash
laconic-so deployment --dir laconic-shopify-deployment start
```
## Check status
* To list down and monitor the running container:
```bash
# With status
docker ps
# Check logs for a container
docker logs -f <CONTAINER_ID>
```
## Clean up
* Stop the `laconic-shopify-faucet` service running in the background:
```bash
# Stop the docker container
laconic-so deployment --dir laconic-shopify-deployment stop
```
* To stop the service and also delete data:
```bash
# Stop the docker containers
laconic-so deployment --dir laconic-shopify-deployment stop --delete-volumes
# Remove deployment directory (deployment will have to be recreated for a re-run)
rm -r laconic-shopify-deployment
```
@@ -1,11 +0,0 @@
version: "1.0"
name: laconic-shopify
description: "Service that integrates a Shopify app with the Laconic wallet."
repos:
- git.vdb.to/cerc-io/shopify
- git.vdb.to/cerc-io/laconic-faucet@shopify
containers:
- cerc/laconic-shopify
- cerc/laconic-shopify-faucet
pods:
- laconic-shopify
+44 -368
View File
@@ -35,35 +35,13 @@
# na_address: "" # na_address: ""
# ca_address: "" # ca_address: ""
# vpa_address: "" # vpa_address: ""
# asset_address: ""
# nitro_chain_start_block: 0
# bridge_nitro_address: "" # bridge_nitro_address: ""
# nitro_l1_bridge_multiaddr: "" # nitro_l1_bridge_multiaddr: ""
# nitro_l2_bridge_multiaddr: "" # nitro_l2_bridge_multiaddr: ""
``` ```
* Fetch required asset addresses:
```bash
wget -O assets.json https://git.vdb.to/cerc-io/testnet-laconicd-stack/raw/branch/main/ops/stage2/assets.json
# Example output:
# {
# "1212": [
# {
# "name": "geth",
# "chainId": "1212",
# "contracts": {
# "TestToken": {
# "address": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9"
# },
# "TestToken2": {
# "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9"
# }
# }
# }
# ]
# }
```
* TODO: Get L1 tokens on your address * TODO: Get L1 tokens on your address
* Edit `nitro-vars.yml` and add the following variables: * Edit `nitro-vars.yml` and add the following variables:
@@ -207,10 +185,7 @@ Create a ledger channel with the bridge on L1 which is mirrored on L2
cd $DEPLOYMENTS_DIR/nitro-node cd $DEPLOYMENTS_DIR/nitro-node
export BRIDGE_NITRO_ADDRESS=$(yq eval '.bridge_nitro_address' nitro-node-config.yml) export BRIDGE_NITRO_ADDRESS=$(yq eval '.bridge_nitro_address' nitro-node-config.yml)
export ASSET_ADDRESS=$(yq eval '.asset_address' nitro-node-config.yml)
# Get asset addresses from assets.json file
export ASSET_ADDRESS_1=$(jq -r --arg chainId "$CHAIN_ID" '.[$chainId][0].contracts.TestToken.address' assets.json)
export ASSET_ADDRESS_2=$(jq -r --arg chainId "$CHAIN_ID" '.[$chainId][0].contracts.TestToken2.address' assets.json)
``` ```
* Check that check that you have no existing channels on L1 or L2: * Check that check that you have no existing channels on L1 or L2:
@@ -226,7 +201,10 @@ Create a ledger channel with the bridge on L1 which is mirrored on L2
* Create a ledger channel between your L1 Nitro node and Bridge with custom asset: * Create a ledger channel between your L1 Nitro node and Bridge with custom asset:
```bash ```bash
laconic-so deployment --dir l1-nitro-deployment exec nitro-rpc-client "nitro-rpc-client direct-fund $BRIDGE_NITRO_ADDRESS --asset "$ASSET_ADDRESS_1:1000,1000" --asset "$ASSET_ADDRESS_2:1000,1000" -p 4005 -h nitro-node" # Set amount to ledger
LEDGER_AMOUNT=1000000
laconic-so deployment --dir l1-nitro-deployment exec nitro-rpc-client "nitro-rpc-client direct-fund $BRIDGE_NITRO_ADDRESS --assetAddress $ASSET_ADDRESS --alphaAmount $LEDGER_AMOUNT --betaAmount $LEDGER_AMOUNT -p 4005 -h nitro-node"
# Follow your L1 Nitro node logs for progress # Follow your L1 Nitro node logs for progress
@@ -257,26 +235,17 @@ Create a ledger channel with the bridge on L1 which is mirrored on L2
```bash ```bash
laconic-so deployment --dir l1-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-ledger-channel $LEDGER_CHANNEL_ID -p 4005 -h nitro-node" laconic-so deployment --dir l1-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-ledger-channel $LEDGER_CHANNEL_ID -p 4005 -h nitro-node"
# Example output: # Expected output:
# { # {
# ID: '0xbb28acc2e1543f4b41eb1ab9eb2e354b18554aefe4e7f0fa5f20046869d8553f', # ID: '0x161d289a50222caa781db215bb82a3ede4f557217742245525b8e8cbff04ec21',
# Status: 'Open', # Status: 'Open',
# Balances: [ # Balance: {
# { # AssetAddress: '<l1-asset-address>',
# AssetAddress: '0xa6b4b8b84576047a53255649b4994743d9c83a71', # Me: '<your-nitro-address>',
# Me: '0xdaaa6ef3bc03f9c7dabc9a02847387d2c19107f5', # Them: '<bridge-nitro-address>',
# Them: '0xf0e6a85c6d23aca9ff1b83477d426ed26f218185', # MyBalance: <ledger-amount>n,
# MyBalance: 1000n, # TheirBalance: <ledger-amount>n
# TheirBalance: 1000n # },
# },
# {
# AssetAddress: '0x0000000000000000000000000000000000000000',
# Me: '0xdaaa6ef3bc03f9c7dabc9a02847387d2c19107f5',
# Them: '0xf0e6a85c6d23aca9ff1b83477d426ed26f218185',
# MyBalance: 1000n,
# TheirBalance: 1000n
# }
# ],
# ChannelMode: 'Open' # ChannelMode: 'Open'
# } # }
``` ```
@@ -286,27 +255,18 @@ Create a ledger channel with the bridge on L1 which is mirrored on L2
```bash ```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-all-ledger-channels -p 4005 -h nitro-node" laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-all-ledger-channels -p 4005 -h nitro-node"
# Example output: # Expected output:
# [ # [
# { # {
# "ID": "0xb34210b763d4fdd534190ba11886ad1daa1e411c87be6fd20cff74cd25077c46", # "ID": "0x6a9f5ccf1fa802525d794f4a899897f947615f6acc7141e61e056a8bfca29179",
# "Status": "Open", # "Status": "Open",
# "Balances": [ # "Balance": {
# { # "AssetAddress": "<l2-asset-address>",
# "AssetAddress": "0xa4351114dae1abeb2d552d441c9733c72682a45d", # "Me": "<your-nitro-address>",
# "Me": "0x075400039e303b3fb46c0cff0404c5fa61947c05", # "Them": "<bridge-nitro-address>",
# "Them": "0xf0e6a85c6d23aca9ff1b83477d426ed26f218185", # "MyBalance": <ledger-amount>n,
# "MyBalance": 1000, # "TheirBalance": <ledger-amount>n
# "TheirBalance": 1000 # },
# },
# {
# "AssetAddress": "0x314e43f9825b10961859c2a62c2de6a765c1c1f1",
# "Me": "0x075400039e303b3fb46c0cff0404c5fa61947c05",
# "Them": "0xf0e6a85c6d23aca9ff1b83477d426ed26f218185",
# "MyBalance": 1000,
# "TheirBalance": 1000
# }
# ],
# "ChannelMode": "Open" # "ChannelMode": "Open"
# } # }
# ] # ]
@@ -316,10 +276,6 @@ Create a ledger channel with the bridge on L1 which is mirrored on L2
Perform payments using a virtual payment channel created with another Nitro node over the mirrored L2 channel with bridge as an intermediary Perform payments using a virtual payment channel created with another Nitro node over the mirrored L2 channel with bridge as an intermediary
* Prerequisite: Ledger channel is required to create a payment channel
* Note: Currently payment channel is created from first asset present in ledger channel
* Run the following commands on deployment machine * Run the following commands on deployment machine
* Switch to the `nitro-node` directory: * Switch to the `nitro-node` directory:
@@ -335,27 +291,18 @@ Perform payments using a virtual payment channel created with another Nitro node
```bash ```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-all-ledger-channels -p 4005 -h nitro-node" laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-all-ledger-channels -p 4005 -h nitro-node"
# Example output: # Expected output:
# [ # [
# { # {
# "ID": "0xb34210b763d4fdd534190ba11886ad1daa1e411c87be6fd20cff74cd25077c46", # "ID": "0x6a9f5ccf1fa802525d794f4a899897f947615f6acc7141e61e056a8bfca29179",
# "Status": "Open", # "Status": "Open",
# "Balances": [ # "Balance": {
# { # "AssetAddress": "<l2-asset-address>",
# "AssetAddress": "0xa4351114dae1abeb2d552d441c9733c72682a45d", # "Me": "<your-nitro-address>",
# "Me": "0x075400039e303b3fb46c0cff0404c5fa61947c05", # "Them": "<bridge-nitro-address>",
# "Them": "0xf0e6a85c6d23aca9ff1b83477d426ed26f218185", # "MyBalance": Xn,
# "MyBalance": 1000, # "TheirBalance": Yn
# "TheirBalance": 1000 # },
# },
# {
# "AssetAddress": "0x314e43f9825b10961859c2a62c2de6a765c1c1f1",
# "Me": "0x075400039e303b3fb46c0cff0404c5fa61947c05",
# "Them": "0xf0e6a85c6d23aca9ff1b83477d426ed26f218185",
# "MyBalance": 1000,
# "TheirBalance": 1000
# }
# ],
# "ChannelMode": "Open" # "ChannelMode": "Open"
# } # }
# ] # ]
@@ -373,7 +320,7 @@ Perform payments using a virtual payment channel created with another Nitro node
export L2_CHANNEL_ID=<l2-channel-id> export L2_CHANNEL_ID=<l2-channel-id>
# Amount to create the payment channel with # Amount to create the payment channel with
export PAYMENT_CHANNEL_AMOUNT=500 export PAYMENT_CHANNEL_AMOUNT=10000
``` ```
* Check for existing payment channels for the L2 channel: * Check for existing payment channels for the L2 channel:
@@ -450,27 +397,18 @@ Perform payments using a virtual payment channel created with another Nitro node
```bash ```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-all-ledger-channels -p 4005 -h nitro-node" laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-all-ledger-channels -p 4005 -h nitro-node"
# Example output: # Expected output:
# [ # [
# { # {
# "ID": "0xb34210b763d4fdd534190ba11886ad1daa1e411c87be6fd20cff74cd25077c46", # "ID": "0x6a9f5ccf1fa802525d794f4a899897f947615f6acc7141e61e056a8bfca29179",
# "Status": "Open", # "Status": "Open",
# "Balances": [ # "Balance": {
# { # "AssetAddress": "<l2-asset-address>",
# "AssetAddress": "0xa4351114dae1abeb2d552d441c9733c72682a45d", # "Me": "<your-nitro-address>",
# "Me": "0x075400039e303b3fb46c0cff0404c5fa61947c05", # "Them": "<bridge-nitro-address>",
# "Them": "0xf0e6a85c6d23aca9ff1b83477d426ed26f218185", # "MyBalance": <your-updated-balance>n,
# "MyBalance": <updated balance>, # "TheirBalance": <bridge-updated-balance>n
# "TheirBalance": <updated balance> # },
# },
# {
# "AssetAddress": "0x314e43f9825b10961859c2a62c2de6a765c1c1f1",
# "Me": "0x075400039e303b3fb46c0cff0404c5fa61947c05",
# "Them": "0xf0e6a85c6d23aca9ff1b83477d426ed26f218185",
# "MyBalance": <updated balance>,
# "TheirBalance": <updated balance>
# }
# ],
# "ChannelMode": "Open" # "ChannelMode": "Open"
# } # }
# ] # ]
@@ -478,256 +416,6 @@ Perform payments using a virtual payment channel created with another Nitro node
Your balance on the L2 channel should be reduced by total payments done on the virtual payment channel Your balance on the L2 channel should be reduced by total payments done on the virtual payment channel
## Swaps on L2
Perform swaps using a swap channel created with another Nitro node over the mirrored L2 channel with bridge as an intermediary
* Prerequisite: Ledger channel is required to create a swap channel
* Run the following commands on deployment machine
* Switch to the `nitro-node` directory:
```bash
DEPLOYMENTS_DIR=<path-to-deployments-dir>
cd $DEPLOYMENTS_DIR/nitro-node
```
* Check status of the mirrored channel on L2:
```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-all-ledger-channels -p 4005 -h nitro-node"
# Example output:
# [
# {
# "ID": "0xb34210b763d4fdd534190ba11886ad1daa1e411c87be6fd20cff74cd25077c46",
# "Status": "Open",
# "Balances": [
# {
# "AssetAddress": "0xa4351114dae1abeb2d552d441c9733c72682a45d",
# "Me": "0x075400039e303b3fb46c0cff0404c5fa61947c05",
# "Them": "0xf0e6a85c6d23aca9ff1b83477d426ed26f218185",
# "MyBalance": 1000,
# "TheirBalance": 1000
# },
# {
# "AssetAddress": "0x314e43f9825b10961859c2a62c2de6a765c1c1f1",
# "Me": "0x075400039e303b3fb46c0cff0404c5fa61947c05",
# "Them": "0xf0e6a85c6d23aca9ff1b83477d426ed26f218185",
# "MyBalance": 1000,
# "TheirBalance": 1000
# }
# ],
# "ChannelMode": "Open"
# }
# ]
```
* Set required variables:
```bash
export BRIDGE_NITRO_ADDRESS=$(yq eval '.bridge_nitro_address' nitro-node-config.yml)
# Counterparty to create the swap channel with
export COUNTER_PARTY_ADDRESS=<counterparty-nitro-address>
# Get asset addresses from assets.json file
export ASSET_ADDRESS_1=$(jq -r --arg chainId "$CHAIN_ID" '.[$chainId][0].contracts.TestToken.address' assets.json)
export ASSET_ADDRESS_2=$(jq -r --arg chainId "$CHAIN_ID" '.[$chainId][0].contracts.TestToken2.address' assets.json)
```
* Create swap channel:
```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client swap-fund $COUNTER_PARTY_ADDRESS $BRIDGE_NITRO_ADDRESS --asset "$ASSET_ADDRESS_1:100,100" --asset "$ASSET_ADDRESS_2:100,100" -p 4005 -h nitro-node"
# Expected output
# Objective started SwapFund-0x1dbd58d314f123f4b0f4147eee7fd92fa523ba7082d8a75b846f6d1189e2f0e9
# Channel open 0x1dbd58d314f123f4b0f4147eee7fd92fa523ba7082d8a75b846f6d1189e2f0e9
```
* Export swap channel ID:
```bash
export SWAP_CHANNEL_ID=
```
* Check swap channel:
```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-swap-channel $SWAP_CHANNEL_ID -p 4005 -h nitro-node"
# Expected output:
# {
# ID: '0x1dbd58d314f123f4b0f4147eee7fd92fa523ba7082d8a75b846f6d1189e2f0e9',
# Status: 'Open',
# Balances: [
# {
# AssetAddress: '0xa4351114dae1abeb2d552d441c9733c72682a45d',
# Me: '0x075400039e303b3fb46c0cff0404c5fa61947c05',
# Them: '0xd0ea8b27591b1d070cccd4d30b8d408fe794fdfc',
# MyBalance: 100n,
# TheirBalance: 100n
# },
# {
# AssetAddress: '0x314e43f9825b10961859c2a62c2de6a765c1c1f1',
# Me: '0x075400039e303b3fb46c0cff0404c5fa61947c05',
# Them: '0xd0ea8b27591b1d070cccd4d30b8d408fe794fdfc',
# MyBalance: 100n,
# TheirBalance: 100n
# }
# ]
# }
```
### Performing swaps
* One of the participants can initiate the swap and other one will either accept it or reject it
* For initiating the swap:
```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client swap-initiate $SWAP_CHANNEL_ID --AssetIn "$ASSET_ADDRESS_1:20" --AssetOut "$ASSET_ADDRESS_2:10" -p 4005 -h nitro-node"
# Expected output:
# {
# SwapAssetsData: {
# TokenIn: '0xa4351114dae1abeb2d552d441c9733c72682a45d',
# TokenOut: '0x314e43f9825b10961859c2a62c2de6a765c1c1f1',
# AmountIn: 20,
# AmountOut: 10
# },
# Channel: '0x1dbd58d314f123f4b0f4147eee7fd92fa523ba7082d8a75b846f6d1189e2f0e9'
# }
```
OR
* For receiving the swap
* Get the pending swap:
```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-pending-swap $SWAP_CHANNEL_ID -p 4005 -h nitro-node"
# Expected output:
# {
# Id: '0x7d582020753335cfd2f2af14127c9b51c7ed7a5d547a674d9cb04fe62de6ddf3',
# ChannelId: '0x1dbd58d314f123f4b0f4147eee7fd92fa523ba7082d8a75b846f6d1189e2f0e9',
# Exchange: {
# TokenIn: '0xa4351114dae1abeb2d552d441c9733c72682a45d',
# TokenOut: '0x314e43f9825b10961859c2a62c2de6a765c1c1f1',
# AmountIn: 20,
# AmountOut: 10
# },
# Sigs: {
# '0': '0x0a018de18a091f7bfb400d9bc64fe958d298882e569c1668c5b1c853b5493221576b2d72074ef6e1899b79e60eaa9934afac5c1e07b7000746bac5b3b1da93311b'
# },
# Nonce: 2840594896360394000
# }
```
* Export swap ID:
```bash
export SWAP_ID=
```
* Either accept or reject the swap
* To accept:
```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client swap-accept $SWAP_ID -p 4005 -h nitro-node"
# Expected output:
# Confirming Swap with accepted
# Objective complete Swap-0x7d582020753335cfd2f2af14127c9b51c7ed7a5d547a674d9cb04fe62de6ddf3
```
OR
* To reject:
```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client swap-reject $SWAP_ID -p 4005 -h nitro-node"
# Expected output:
# Confirming Swap with accepted
# Objective complete Swap-0x7d582020753335cfd2f2af14127c9b51c7ed7a5d547a674d9cb04fe62de6ddf3
```
* Check swap channel:
```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-swap-channel $SWAP_CHANNEL_ID -p 4005 -h nitro-node"
# Example output:
# {
# ID: '0x1dbd58d314f123f4b0f4147eee7fd92fa523ba7082d8a75b846f6d1189e2f0e9',
# Status: 'Open',
# Balances: [
# {
# AssetAddress: '0xa4351114dae1abeb2d552d441c9733c72682a45d',
# Me: '0xd0ea8b27591b1d070cccd4d30b8d408fe794fdfc',
# Them: '0x075400039e303b3fb46c0cff0404c5fa61947c05',
# MyBalance: 120n,
# TheirBalance: 80n
# },
# {
# AssetAddress: '0x314e43f9825b10961859c2a62c2de6a765c1c1f1',
# Me: '0xd0ea8b27591b1d070cccd4d30b8d408fe794fdfc',
# Them: '0x075400039e303b3fb46c0cff0404c5fa61947c05',
# MyBalance: 90n,
# TheirBalance: 110n
# }
# ]
# }
```
* Close swap channel:
```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client swap-defund $SWAP_CHANNEL_ID -p 4005 -h nitro-node"
# Expected output:
# Objective started SwapDefund-0x1dbd58d314f123f4b0f4147eee7fd92fa523ba7082d8a75b846f6d1189e2f0e9
# Objective complete SwapDefund-0x1dbd58d314f123f4b0f4147eee7fd92fa523ba7082d8a75b846f6d1189e2f0e9
```
* Check L2 mirrored channel status:
```bash
laconic-so deployment --dir l2-nitro-deployment exec nitro-rpc-client "nitro-rpc-client get-all-ledger-channels -p 4005 -h nitro-node"
# Example output:
# [
# {
# "ID": "0xb34210b763d4fdd534190ba11886ad1daa1e411c87be6fd20cff74cd25077c46",
# "Status": "Open",
# "Balances": [
# {
# "AssetAddress": "0xa4351114dae1abeb2d552d441c9733c72682a45d",
# "Me": "0x075400039e303b3fb46c0cff0404c5fa61947c05",
# "Them": "0xf0e6a85c6d23aca9ff1b83477d426ed26f218185",
# "MyBalance": <updated balance>,
# "TheirBalance": <updated balance>
# },
# {
# "AssetAddress": "0x314e43f9825b10961859c2a62c2de6a765c1c1f1",
# "Me": "0x075400039e303b3fb46c0cff0404c5fa61947c05",
# "Them": "0xf0e6a85c6d23aca9ff1b83477d426ed26f218185",
# "MyBalance": <updated balance>,
# "TheirBalance": <updated balance>
# }
# ],
# "ChannelMode": "Open"
# }
# ]
```
## Clean up ## Clean up
* Switch to deployments dir: * Switch to deployments dir:
@@ -756,18 +444,6 @@ Perform swaps using a swap channel created with another Nitro node over the mirr
## Troubleshooting ## Troubleshooting
* Check the logs of nitro node to see if the objective is completed
```bash
# To check logs of L1 nitro-node
laconic-so deployment --dir l1-nitro-deployment logs nitro-node -f --tail 30
# To check logs of L2 nitro-node
laconic-so deployment --dir l2-nitro-deployment logs nitro-node -f --tail 30
```
* If the objective is completed, you can safely stop (`Ctrl+C`) the running CLI command and continue with the further instructions
* Stop (`Ctrl+C`) the direct-fund command if it is stuck * Stop (`Ctrl+C`) the direct-fund command if it is stuck
* Restart the L1 Nitro node: * Restart the L1 Nitro node: