Add playbook to setup cosmos multisig app (#6)
Part of https://www.notion.so/Create-stacks-for-mainnet-1f2a6b22d4728034be4be2c51decf94e Co-authored-by: IshaVenikar <ishavenikar7@gmail.com> Reviewed-on: #6 Co-authored-by: ishavenikar <ishavenikar@noreply.git.vdb.to> Co-committed-by: ishavenikar <ishavenikar@noreply.git.vdb.to>
This commit is contained in:
parent
40ac26bd78
commit
1886a9acf0
@ -1,4 +1,5 @@
|
|||||||
# laconicd-stack
|
# laconicd-stack
|
||||||
|
|
||||||
- Follow [run-first-validator.md](docs/run-first-validator.md) to run the first validator node
|
- Follow [run-first-validator.md](docs/run-first-validator.md) to run the first validator node
|
||||||
|
- Follow [cosmos-multisig-app playbook](./playbooks/cosmos-multisig-app/README.md) to run the Cosmos Multisig app
|
||||||
- Follow [run-validator.md](docs/run-validator.md) to run subsequent validator nodes
|
- Follow [run-validator.md](docs/run-validator.md) to run subsequent validator nodes
|
||||||
|
45
config/network.json
Normal file
45
config/network.json
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"chainId": "laconic-mainnet",
|
||||||
|
"chainName": "Laconic Mainnet",
|
||||||
|
"rpc": "",
|
||||||
|
"rest": "",
|
||||||
|
"bip44": {
|
||||||
|
"coinType": 118
|
||||||
|
},
|
||||||
|
"bech32Config": {
|
||||||
|
"bech32PrefixAccAddr": "laconic",
|
||||||
|
"bech32PrefixAccPub": "laconipub",
|
||||||
|
"bech32PrefixValAddr": "laconicvaloper",
|
||||||
|
"bech32PrefixValPub": "laconicvaloperpub",
|
||||||
|
"bech32PrefixConsAddr": "laconicvalcons",
|
||||||
|
"bech32PrefixConsPub": "laconicvalconspub"
|
||||||
|
},
|
||||||
|
"currencies": [
|
||||||
|
{
|
||||||
|
"coinDenom": "ALNT",
|
||||||
|
"coinMinimalDenom": "alnt",
|
||||||
|
"coinDecimals": 18
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"feeCurrencies": [
|
||||||
|
{
|
||||||
|
"coinDenom": "ALNT",
|
||||||
|
"coinMinimalDenom": "alnt",
|
||||||
|
"coinDecimals": 18
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stakeCurrency": {
|
||||||
|
"coinDenom": "ALNT",
|
||||||
|
"coinMinimalDenom": "alnt",
|
||||||
|
"coinDecimals": 18
|
||||||
|
},
|
||||||
|
"gasPriceStep": {
|
||||||
|
"low": 0.01,
|
||||||
|
"average": 0.01,
|
||||||
|
"high": 0.02
|
||||||
|
},
|
||||||
|
"features": [
|
||||||
|
"stargate",
|
||||||
|
"ibc-transfer"
|
||||||
|
]
|
||||||
|
}
|
109
docs/demo.md
109
docs/demo.md
@ -188,6 +188,8 @@
|
|||||||
laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR logs laconicd -f
|
laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR logs laconicd -f
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- The chain will start running after some time.
|
||||||
|
|
||||||
- Verify that validator and TMKMS pubkeys match
|
- Verify that validator and TMKMS pubkeys match
|
||||||
|
|
||||||
- Get validator pubkey on chain
|
- Get validator pubkey on chain
|
||||||
@ -379,6 +381,113 @@
|
|||||||
rm $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/data/laconicd-data/config/priv_validator_key.json
|
rm $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/data/laconicd-data/config/priv_validator_key.json
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- Copy the example variables file for cosmos-multisig app playbook:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp ~/cerc/laconicd-stack/playbooks/cosmos-multisig-app/cosmos-multisig-vars.example.yml ~/cerc/laconicd-stack/playbooks/cosmos-multisig-app/cosmos-multisig-vars.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
- Update env values in `cosmos-multisig-vars.yml` withyour node RPC URL
|
||||||
|
|
||||||
|
```bash
|
||||||
|
next_public_node_addresses: '["http://localhost:26657"]'
|
||||||
|
node_rest_endpoint: 'http://localhost:1317'
|
||||||
|
next_public_is_http_enabled: true
|
||||||
|
```
|
||||||
|
|
||||||
|
- Set envs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Set multisig app deployment directory
|
||||||
|
export MULTISIG_DEPLOYMENT_DIR=cosmos-multisig-deployment
|
||||||
|
# Set path to custom network JSON file
|
||||||
|
export NETWORK_JSON_PATH=~/cerc/laconicd-stack/config/network.json
|
||||||
|
|
||||||
|
# Set network mode to host so that browser app and backend can use the same node localhost RPC URL
|
||||||
|
export USE_HOST_NETWORK=host
|
||||||
|
|
||||||
|
# Set local host URL for dgraph server
|
||||||
|
export DGRAPH_URL=http://localhost:8080/graphql
|
||||||
|
```
|
||||||
|
|
||||||
|
- Run playbook to setup cosmos multisig app
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook -v -i localhost, -c local ~/cerc/laconicd-stack/playbooks/cosmos-multisig-app/cosmos-multisig-app-start.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
- Check logs to ensure that the app is running:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so deployment --dir $DATA_DIRECTORY/$MULTISIG_DEPLOYMENT_DIR logs -f
|
||||||
|
```
|
||||||
|
|
||||||
|
- The app will be running on `http://localhost:3000/laconic`
|
||||||
|
|
||||||
|
### Create a multisig with both the validator accounts
|
||||||
|
|
||||||
|
- On opening the app, a prompt will be shown to add laconic network to you keplr wallet. Click on `Approve`
|
||||||
|
|
||||||
|
- Go to home and click on `I don't have a multisig`
|
||||||
|
|
||||||
|
- Add the addresses of your validators as member 1 and member 2
|
||||||
|
|
||||||
|
- Set the threshold to 2 out of 2 members (Both the validators should sign the TX to broadcast it)
|
||||||
|
|
||||||
|
- Click on `Submit` and `Create multisig`
|
||||||
|
|
||||||
|
- Copy your multisig address and send some funds to the address
|
||||||
|
|
||||||
|
```
|
||||||
|
laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR exec laconicd "laconicd tx bank send validator-2 <multisig_address> 1000000alnt --fees 2000alnt --keyring-backend test"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create and sign transaction
|
||||||
|
|
||||||
|
- Add accounts in keplr wallet for signing the transaction
|
||||||
|
|
||||||
|
- Open keplr wallet and click on the user icon in the top right corner
|
||||||
|
|
||||||
|
- Click on `Add wallet`, then select `Import an existing wallet` and go to `Use recovery phrase or private key`
|
||||||
|
|
||||||
|
- Select the `Private key` tab and then paste the private key of the validator account and click on import
|
||||||
|
|
||||||
|
- Set a name for the wallet (used when connecting wallet to app for signing transaction) and click on next
|
||||||
|
|
||||||
|
- Search for `Laconic network` and select it, then click on `Save`
|
||||||
|
|
||||||
|
- Follow the above steps for the second validator account
|
||||||
|
|
||||||
|
- Go to `home`, paste your multisig address and click on `Use this multisig`
|
||||||
|
|
||||||
|
- You will see the multisig members and holdings for the address
|
||||||
|
|
||||||
|
- Click on `Create new transaction` and then click on `Bank Send` under `Add New Msg`
|
||||||
|
|
||||||
|
- Enter the recipient address ( Eg: `laconic1n4wa366kh0zxndwyq3kkse9ulz9jv9xukx3hy4`), amount to be transfered and memo (optional)
|
||||||
|
|
||||||
|
- Click on create transaction
|
||||||
|
|
||||||
|
- Go back to the multisig info page and scroll down to the `Transactions` section
|
||||||
|
|
||||||
|
- Click on `Verify identity` and connect the app to your validator account in the keplr wallet
|
||||||
|
|
||||||
|
- After approving the connection, you will see the list of transactions created by your multisig
|
||||||
|
|
||||||
|
- Click on your transaction and under `Choose wallet to sign`, click on connect keplr
|
||||||
|
|
||||||
|
- After connecting the wallet, click on `Sign transaction` and approve the transaction
|
||||||
|
|
||||||
|
- Go back to multisig info page, switch to the second validator account in keplr wallet and repeat the same process to sign the transaction with the second validator account
|
||||||
|
|
||||||
|
- Once the transaction is signed by both the validators, click on `Broadcast Transaction`.
|
||||||
|
|
||||||
|
- Confirm funds transfer by checking balance of recipient address
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR exec laconicd "laconicd query bank balances laconic1n4wa366kh0zxndwyq3kkse9ulz9jv9xukx3hy4"
|
||||||
|
```
|
||||||
|
|
||||||
## Cleanup
|
## Cleanup
|
||||||
|
|
||||||
- Remove deployments and other config files
|
- Remove deployments and other config files
|
||||||
|
68
playbooks/cosmos-multisig-app/README.md
Normal file
68
playbooks/cosmos-multisig-app/README.md
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# Cosmos Multisig App Setup
|
||||||
|
|
||||||
|
This playbook sets up the Cosmos Multisig application for managing multisig wallets on the Laconic chain.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- [ansible](../README.md#ansible-installation)
|
||||||
|
- [laconic-so](https://github.com/cerc-io/stack-orchestrator/?tab=readme-ov-file#install)
|
||||||
|
- [Running Laconic validator node](../../docs/run-validator.md)
|
||||||
|
- Keplr wallet extension installed in browser
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
* Fetch the stack:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so fetch-stack git.vdb.to/cerc-io/laconicd-stack --git-ssh --pull
|
||||||
|
```
|
||||||
|
|
||||||
|
* Copy the example variables file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp ~/cerc/laconicd-stack/playbooks/cosmos-multisig-app/cosmos-multisig-vars.example.yml ~/cerc/laconicd-stack/playbooks/cosmos-multisig-app/cosmos-multisig-vars.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
* Update `cosmos-multisig-vars.yml` with your node configuration:
|
||||||
|
```yaml
|
||||||
|
# TODO: Update with example domains mapped to ports
|
||||||
|
next_public_node_addresses:
|
||||||
|
node_rest_endpoint:
|
||||||
|
```
|
||||||
|
|
||||||
|
## Setup Steps
|
||||||
|
|
||||||
|
* Set environment variables:
|
||||||
|
```bash
|
||||||
|
export CWD=$(pwd)
|
||||||
|
export DATA_DIRECTORY=$CWD
|
||||||
|
export MULTISIG_DEPLOYMENT_DIR=cosmos-multisig-deployment
|
||||||
|
export NETWORK_JSON_PATH=~/cerc/laconicd-stack/config/network.json
|
||||||
|
```
|
||||||
|
|
||||||
|
* Setup and start the multisig app:
|
||||||
|
```bash
|
||||||
|
ansible-playbook -v -i localhost, -c local ~/cerc/laconicd-stack/playbooks/cosmos-multisig-app/cosmos-multisig-app-start.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
* Access the app at `http://localhost:3000/laconic`
|
||||||
|
|
||||||
|
## Check Status
|
||||||
|
|
||||||
|
* Check app logs:
|
||||||
|
```bash
|
||||||
|
laconic-so deployment --dir $DATA_DIRECTORY/$MULTISIG_DEPLOYMENT_DIR logs -f
|
||||||
|
```
|
||||||
|
|
||||||
|
## Clean up
|
||||||
|
|
||||||
|
- To stop the deployment:
|
||||||
|
```bash
|
||||||
|
laconic-so deployment --dir $DATA_DIRECTORY/$MULTISIG_DEPLOYMENT_DIR stop
|
||||||
|
```
|
||||||
|
|
||||||
|
- To stop and delete all data:
|
||||||
|
```bash
|
||||||
|
laconic-so deployment --dir $DATA_DIRECTORY/$MULTISIG_DEPLOYMENT_DIR stop --delete-volumes
|
||||||
|
sudo rm -rf $DATA_DIRECTORY/$MULTISIG_DEPLOYMENT_DIR
|
||||||
|
```
|
88
playbooks/cosmos-multisig-app/cosmos-multisig-app-start.yml
Normal file
88
playbooks/cosmos-multisig-app/cosmos-multisig-app-start.yml
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
---
|
||||||
|
- name: Setup and deploy the cosmos multisig app
|
||||||
|
hosts: localhost
|
||||||
|
vars_files:
|
||||||
|
- cosmos-multisig-vars.yml
|
||||||
|
vars:
|
||||||
|
data_directory: "{{ lookup('env', 'DATA_DIRECTORY') }}"
|
||||||
|
multisig_deployment_dir: "{{ lookup('env', 'MULTISIG_DEPLOYMENT_DIR') }}"
|
||||||
|
spec_output: "{{data_directory}}/cosmos-multisig-ui-spec.yml"
|
||||||
|
spec_template: "./templates/specs/cosmos-multisig-app-spec-template.yml.j2"
|
||||||
|
network_json: "{{ lookup('env', 'NETWORK_JSON_PATH') }}"
|
||||||
|
temp_network_json: "{{data_directory}}/temp_network.json"
|
||||||
|
tasks:
|
||||||
|
- name: Fail if DATA_DIRECTORY env var is not set
|
||||||
|
fail:
|
||||||
|
msg: "Environment variable DATA_DIRECTORY is not set. Please export it before running the playbook."
|
||||||
|
when: lookup('env', 'DATA_DIRECTORY') == ''
|
||||||
|
|
||||||
|
- name: Clone cosmos-multisig-ui repo
|
||||||
|
shell: |
|
||||||
|
laconic-so fetch-stack git.vdb.to/cerc-io/cosmos-multisig-ui@v0.1.0 --git-ssh --pull
|
||||||
|
|
||||||
|
- name: Build container image
|
||||||
|
shell: |
|
||||||
|
laconic-so --stack ~/cerc/cosmos-multisig-ui/stack-orchestrator/stacks/cosmos-multisig-ui build-containers
|
||||||
|
|
||||||
|
- name: Create deployment spec file
|
||||||
|
shell: |
|
||||||
|
laconic-so --stack ~/cerc/cosmos-multisig-ui/stack-orchestrator/stacks/cosmos-multisig-ui deploy init --output {{ spec_output }}
|
||||||
|
|
||||||
|
- name: Replace network section in spec_output
|
||||||
|
shell: >
|
||||||
|
yq eval '(.network) = load("{{ spec_template }}").network' -i {{ spec_output }}
|
||||||
|
|
||||||
|
- name: Create deployment from spec file
|
||||||
|
shell: |
|
||||||
|
laconic-so --stack ~/cerc/cosmos-multisig-ui/stack-orchestrator/stacks/cosmos-multisig-ui/ deploy create --spec-file {{ spec_output }} --deployment-dir {{data_directory}}/{{ multisig_deployment_dir }}
|
||||||
|
|
||||||
|
- name: Create config.env in deployment dir
|
||||||
|
copy:
|
||||||
|
dest: "{{data_directory}}/{{ multisig_deployment_dir }}/config.env"
|
||||||
|
content: |
|
||||||
|
NEXT_PUBLIC_MULTICHAIN={{ next_public_multichain }}
|
||||||
|
NEXT_PUBLIC_REGISTRY_NAME={{ next_public_registry_name }}
|
||||||
|
NEXT_PUBLIC_LOGO={{ next_public_logo }}
|
||||||
|
NEXT_PUBLIC_CHAIN_ID={{ next_public_chain_id }}
|
||||||
|
NEXT_PUBLIC_CHAIN_DISPLAY_NAME={{ next_public_chain_display_name }}
|
||||||
|
NEXT_PUBLIC_NODE_ADDRESSES={{ next_public_node_addresses }}
|
||||||
|
NODE_REST_ENDPOINT={{ node_rest_endpoint }}
|
||||||
|
NEXT_PUBLIC_DENOM={{ next_public_denom }}
|
||||||
|
NEXT_PUBLIC_DISPLAY_DENOM={{ next_public_display_denom }}
|
||||||
|
NEXT_PUBLIC_DISPLAY_DENOM_EXPONENT={{ next_public_display_denom_exponent }}
|
||||||
|
NEXT_PUBLIC_ASSETS={{ next_public_assets }}
|
||||||
|
NEXT_PUBLIC_GAS_PRICE={{ next_public_gas_price }}
|
||||||
|
NEXT_PUBLIC_ADDRESS_PREFIX={{ next_public_address_prefix }}
|
||||||
|
NEXT_PUBLIC_IS_HTTP_ENABLED={{ next_public_is_http_enabled }}
|
||||||
|
CHAIN_CONFIG_PATH="{{data_directory}}/{{ multisig_deployment_dir }}/config/cosmos-multisig-ui/network.json"
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Fail if NETWORK_JSON_PATH env var is not set
|
||||||
|
fail:
|
||||||
|
msg: "Environment variable NETWORK_JSON_PATH is not set. Please export it before running the playbook."
|
||||||
|
when: lookup('env', 'NETWORK_JSON_PATH') == ''
|
||||||
|
|
||||||
|
- name: Update network.json with environment endpoints
|
||||||
|
shell: |
|
||||||
|
RPC_VALUE=$(echo '{{ next_public_node_addresses }}' | jq -r '.[0]')
|
||||||
|
echo "Using RPC value: $RPC_VALUE"
|
||||||
|
|
||||||
|
jq --arg rpc "$RPC_VALUE" --arg rest "{{ node_rest_endpoint }}" \
|
||||||
|
'.rpc = $rpc | .rest = $rest' "{{ lookup('env', 'NETWORK_JSON_PATH') }}" > "{{ temp_network_json }}"
|
||||||
|
args:
|
||||||
|
executable: /bin/bash
|
||||||
|
|
||||||
|
- name: Copy modified network JSON to deployment config directory
|
||||||
|
copy:
|
||||||
|
src: "{{ temp_network_json }}"
|
||||||
|
dest: "{{data_directory}}/{{ multisig_deployment_dir }}/config/cosmos-multisig-ui/network.json"
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Clean up temporary network.json
|
||||||
|
file:
|
||||||
|
path: "{{ temp_network_json }}"
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Start the deployment
|
||||||
|
shell: |
|
||||||
|
laconic-so deployment --dir {{data_directory}}/{{ multisig_deployment_dir }} start
|
@ -0,0 +1,13 @@
|
|||||||
|
next_public_multichain: false
|
||||||
|
next_public_registry_name: "Laconic Mainnet"
|
||||||
|
next_public_logo: ""
|
||||||
|
next_public_chain_id: "laconic-mainnet"
|
||||||
|
next_public_chain_display_name: "Laconic Mainnet"
|
||||||
|
next_public_node_addresses: ''
|
||||||
|
next_public_denom: "alnt"
|
||||||
|
next_public_display_denom: "ALNT"
|
||||||
|
next_public_display_denom_exponent: 18
|
||||||
|
next_public_assets: '[{"denom_units":[{"denom":"alnt","exponent":0},{"denom":"alnt","exponent":6}],"base":"alnt","name":"Laconic Token","display":"ALNT","symbol":"alnt"}]'
|
||||||
|
next_public_gas_price: "0.01alnt"
|
||||||
|
next_public_address_prefix: "laconic"
|
||||||
|
next_public_is_http_enabled: false
|
@ -0,0 +1,6 @@
|
|||||||
|
network:
|
||||||
|
ports:
|
||||||
|
cosmos-multisig-ui:
|
||||||
|
- 3000:3000
|
||||||
|
alpha:
|
||||||
|
- 8080:8080
|
Loading…
Reference in New Issue
Block a user