Add setup and demo instructions
This commit is contained in:
parent
fe0b456b86
commit
7dd98ee010
@ -4,8 +4,92 @@ Instructions to setup and deploy an end-to-end MobyMask v3 stack (fixturenet-opt
|
|||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
TODO
|
* Clone required repositories:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack mobymask-v3-demo setup-repositories --pull
|
||||||
|
```
|
||||||
|
|
||||||
|
* Build the container images:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack mobymask-v3-demo build-containers
|
||||||
|
```
|
||||||
|
|
||||||
|
* Install MetaMask Flask extension in a chromium browser from chrome web store and follow the setup instructions
|
||||||
|
|
||||||
## Deploy
|
## Deploy
|
||||||
|
|
||||||
TODO
|
* Create a spec file for the deployment:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack mobymask-v3-demo deploy init --output mobymask-v3-demo-spec.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
* Create a deployment from the generated spec file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack mobymask-v3-demo deploy create --spec-file mobymask-v3-demo-spec.yml --deployment-dir mobymask-v3-demo-deployment
|
||||||
|
```
|
||||||
|
|
||||||
|
* Copy over the demo config to place it at the appropriate path:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp mobymask-v3-demo-deployment/config/watcher-mobymask-v3-demo/local/config.env mobymask-v3-demo-deployment/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Start the stack
|
||||||
|
|
||||||
|
* Start the deployment:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so deployment --dir mobymask-v3-demo-deployment start
|
||||||
|
|
||||||
|
# Useful ports exposed on host
|
||||||
|
# 3001: MobyMask v3 watcher 1 GQL endpoint
|
||||||
|
# 9090: MobyMask v3 watcher 1 relay node endpoint
|
||||||
|
# 9091: MobyMask v3 watcher 2 relay node endpoint
|
||||||
|
# 9092: MobyMask v3 watcher 3 relay node endpoint
|
||||||
|
# 8080: MobyMask snap
|
||||||
|
# 3004: MobyMask v3 app
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: This may take several minutes as it configures and runs the L1, L2 chains and the watchers; you can follow the progress from containers' logs
|
||||||
|
|
||||||
|
* To list and monitor the running containers:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so deployment --dir mobymask-v3-demo-deployment ps
|
||||||
|
|
||||||
|
# With status
|
||||||
|
docker ps
|
||||||
|
|
||||||
|
# Check logs for a container
|
||||||
|
docker logs -f <CONTAINER_ID>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
|
||||||
|
Follow [demo](./demo.md) to try out the MobyMask app
|
||||||
|
|
||||||
|
## Clean up
|
||||||
|
|
||||||
|
To stop all services running in the background, while preserving data:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so deployment --dir mobymask-v3-demo-deployment stop
|
||||||
|
```
|
||||||
|
|
||||||
|
To stop all services and also delete data:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so deployment --dir mobymask-v3-demo-deployment stop --delete-volumes
|
||||||
|
|
||||||
|
# Also remove the deployment directory
|
||||||
|
rm -rf mobymask-v3-demo-deployment
|
||||||
|
```
|
||||||
|
|
||||||
|
## Known Issues
|
||||||
|
|
||||||
|
* Resource requirements (memory + time) for building the `cerc/foundry` image are on the higher side
|
||||||
|
* `cerc/optimism-contracts` image is currently based on `cerc/foundry` (Optimism requires foundry installation)
|
||||||
|
@ -1 +1,194 @@
|
|||||||
# Demo
|
# Demo
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
* Follow logs and check that all 3 watchers are running in consensus:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Follow the logs in three different terminals and keep them running
|
||||||
|
docker logs -f $(docker ps --filter "name=mobymask-watcher-1" -q)
|
||||||
|
docker logs -f $(docker ps --filter "name=mobymask-watcher-2" -q)
|
||||||
|
docker logs -f $(docker ps --filter "name=mobymask-watcher-3" -q)
|
||||||
|
|
||||||
|
# Expected output when all three are running in consensus:
|
||||||
|
# ...
|
||||||
|
# 2024-02-21T10:42:23.932Z laconic:consensus State changed to 3 (FOLLOWER) with term 286
|
||||||
|
# 2024-02-21T10:42:23.932Z laconic:consensus State changed to 2 (CANDIDATE) with term 287
|
||||||
|
# 2024-02-21T10:42:24.406Z laconic:consensus State changed to 1 (LEADER) with term 287
|
||||||
|
# ...
|
||||||
|
|
||||||
|
# At any moment, only one of watchers is the 'LEADER'
|
||||||
|
```
|
||||||
|
|
||||||
|
* In MetaMask, go to settings add a custom network with the following settings:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Network name
|
||||||
|
Local Optimism
|
||||||
|
|
||||||
|
# New RPC URL
|
||||||
|
http://127.0.0.1:8545
|
||||||
|
|
||||||
|
# Chain ID
|
||||||
|
42069
|
||||||
|
|
||||||
|
# Currency symbol
|
||||||
|
ETH
|
||||||
|
```
|
||||||
|
|
||||||
|
Switch to the newly added network
|
||||||
|
|
||||||
|
* Import a account using private key pre-funded for Nitro client in the MobyMask app:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# PK: 689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd
|
||||||
|
# Address: 0xbDA5747bFD65F08deb54cb465eB87D40e51B197E
|
||||||
|
```
|
||||||
|
|
||||||
|
## Run
|
||||||
|
|
||||||
|
### Open MobyMask app
|
||||||
|
|
||||||
|
* Copy the generated invite link from MobyMask deployment container logs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker logs -f $(docker ps -a --filter "name=mobymask-1" -q)
|
||||||
|
|
||||||
|
# A SIGNED DELEGATION/INVITE LINK:
|
||||||
|
# ...
|
||||||
|
# http://127.0.0.1:3004/#/members?invitation=<INVITATION>
|
||||||
|
```
|
||||||
|
|
||||||
|
* Open the invite link in browser where MetaMask was setup
|
||||||
|
|
||||||
|
* In the app’s debug panel (bottom-right), check from `PEERS` and `GRAPH` tabs that the peer gets connected to relay nodes and watcher peers
|
||||||
|
|
||||||
|
* Perform phisher status checks from the app
|
||||||
|
* First 10 queries are served for free; repeat until the free quota is exhausted
|
||||||
|
* Same can be seen in the watcher-1's logs (the app makes all the GQL queries to watcher-1):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# ...
|
||||||
|
# 2024-02-21T11:01:20.084Z laconic:payments Query rate not configured for "latestBlock", serving free query
|
||||||
|
# 2024-02-21T11:01:20.084Z vulcanize:resolver latestBlock
|
||||||
|
# 2024-02-21T11:01:20.108Z laconic:payments Serving a free query to 0x3c9B491ACA5cf17B6C11E39bbFddCA603F387d41
|
||||||
|
# 2024-02-21T11:01:20.109Z vulcanize:resolver isPhisher 0xf8995f83bbab2bc13fb9a43c6fea4a605616e6f59503f36cbe2ad3abffd0efd3 0xAFA36c47E130d89bcE4470a9030d99f3CEcaD146 TWT:dummyPhisher
|
||||||
|
# 2024-02-21T11:01:20.113Z vulcanize:indexer isPhisher: db miss, fetching from upstream server
|
||||||
|
# ...
|
||||||
|
|
||||||
|
# After free quota has been exhausted:
|
||||||
|
# 2024-02-21T11:06:49.311Z laconic:payments Query rate not configured for "latestBlock", serving free query
|
||||||
|
# 2024-02-21T11:06:49.312Z vulcanize:resolver latestBlock
|
||||||
|
# 2024-02-21T11:06:49.337Z laconic:payments Rejecting query from 0x3c9B491ACA5cf17B6C11E39bbFddCA603F387d41: Free quota exhausted
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setup app's Nitro node
|
||||||
|
|
||||||
|
* Open the `NITRO` tab in debug panel
|
||||||
|
|
||||||
|
* Click on `Connect Wallet` button to connect to MetaMask (use the imported account with funds)
|
||||||
|
|
||||||
|
* Click on `Connect Snap` to install / connect snap; the watcher Nitro clients should show up in the `NITRO` tab
|
||||||
|
|
||||||
|
* Click on `DIRECT FUND` button against watcher-1's Nitro account (`0xAAA6628Ec44A8a742987EF3A114dDFE2D4F7aDCE`) to create a ledger channel with the pre-set amount
|
||||||
|
* Confirm the tx in MetaMask popup
|
||||||
|
* Wait some time for the tx to be confirmed
|
||||||
|
* The created ledger channel should now be visible in the `NITRO` tab; click on `REFRESH` button otherwise
|
||||||
|
|
||||||
|
* Change amount to `10000` and click on `VIRTUAL FUND` button to create a virtual payment channel
|
||||||
|
* This results in a payment channel between the app and watcher-1
|
||||||
|
* The payment channel's details should now be visible along with a `PAY` and `VIRTUAL DEFUND` buttons
|
||||||
|
|
||||||
|
* Close the debug panel
|
||||||
|
|
||||||
|
### Paid queries and mutations
|
||||||
|
|
||||||
|
* Perform phisher status checks now that a payment channel has been created
|
||||||
|
* Amount set in the debug panel's `NITRO` tab is sent along with each request to the watcher
|
||||||
|
* Check the watcher-1 logs for the received payments:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# ...
|
||||||
|
# 2024-02-21T11:35:25.538Z ts-nitro:engine {"msg":"Received message","_msg":{"to":"0xAAA662","from":"0x5D12ac","payloadSummaries":[],"proposalSummaries":[],"payments":[{"amount":50,"channelId":"0x654a85725442828f89b497e3973640613c03b5f5ec47302bfa4402d42c07de30"}],"rejectedObjectives":[]}}
|
||||||
|
# 2024-02-21T11:35:25.552Z laconic:payments Query rate not configured for "latestBlock", serving free query
|
||||||
|
# 2024-02-21T11:35:25.553Z vulcanize:resolver latestBlock
|
||||||
|
# 2024-02-21T11:35:25.557Z laconic:payments Received a payment voucher of 50 from 0x5D12acfbBB1caD65fD61983003a50E0CB6900Fd3
|
||||||
|
# 2024-02-21T11:35:25.570Z laconic:payments Serving a paid query for 0x5D12acfbBB1caD65fD61983003a50E0CB6900Fd3
|
||||||
|
# 2024-02-21T11:35:25.570Z vulcanize:resolver isPhisher 0x6a1f0dce967aefd4adf7762c523cde358960236f05734f616ebe69c0abfcb0cc 0xAFA36c47E130d89bcE4470a9030d99f3CEcaD146 TWT:dummyPhisher
|
||||||
|
# 2024-02-21T11:35:25.580Z vulcanize:indexer isPhisher: db miss, fetching from upstream server
|
||||||
|
# ...
|
||||||
|
```
|
||||||
|
|
||||||
|
* Rate for mutations is set to `100` in the watcher; go back to the `NITRO` tab in the debug panel and change amount value besides `PAY` button to >=100
|
||||||
|
|
||||||
|
* Perform a phisher report
|
||||||
|
* Among all three watchers running in consensus, whoever is the `LEADER` at time of reporting sends a tx to the chain
|
||||||
|
* Check all the watchers' logs:
|
||||||
|
|
||||||
|
If the payment receiving watcher (1) is leader at that moment:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# On watcher-1 (payment received + tx sent)
|
||||||
|
# ...
|
||||||
|
# 2024-02-21T11:42:55.088Z vulcanize:libp2p-utils [11:42:55] Received a message on mobymask P2P network from peer: 12D3KooWGXxcwevUY7KCfw8fcGhxqxPaiFMGSU4tgJDjE54QGKzf
|
||||||
|
# 2024-02-21T11:42:55.102Z ts-nitro:engine {"msg":"Received message","_msg":{"to":"0xAAA662","from":"0x5D12ac","payloadSummaries":[],"proposalSummaries":[],"payments":[{"amount":150,"channelId":"0x654a85725442828f89b497e3973640613c03b5f5ec47302bfa4402d42c07de30"}],"rejectedObjectives":[]}}
|
||||||
|
# 2024-02-21T11:42:55.115Z laconic:payments Received a payment voucher of 100 from 0x5D12acfbBB1caD65fD61983003a50E0CB6900Fd3
|
||||||
|
# 2024-02-21T11:42:55.115Z vulcanize:libp2p-utils Payment received for a mutation request from 0x5D12acfbBB1caD65fD61983003a50E0CB6900Fd3
|
||||||
|
# 2024-02-21T11:42:59.115Z vulcanize:libp2p-utils Transaction receipt for invoke message {
|
||||||
|
# to: '0xAFA36c47E130d89bcE4470a9030d99f3CEcaD146',
|
||||||
|
# blockNumber: 4638,
|
||||||
|
# blockHash: '0x23a42bc2ae43771c62b0d59cc48b5858e6e2e488953527ba6a9f5119ae72b42a',
|
||||||
|
# transactionHash: '0xb61cfdfd0ffe937a191a230e1355b9bc5cdd32507f7b4f24a8e6356adf089b64',
|
||||||
|
# effectiveGasPrice: '1500000050',
|
||||||
|
# gasUsed: '136450'
|
||||||
|
# }
|
||||||
|
# ...
|
||||||
|
|
||||||
|
# On other watchers (payment not received + tx not sent)
|
||||||
|
...
|
||||||
|
# 2024-02-21T11:42:50.329Z laconic:consensus State changed to 3 (FOLLOWER) with term 478
|
||||||
|
# 2024-02-21T11:42:55.089Z vulcanize:libp2p-utils [11:42:55] Received a message on mobymask P2P network from peer: 12D3KooWGXxcwevUY7KCfw8fcGhxqxPaiFMGSU4tgJDjE54QGKzf
|
||||||
|
# 2024-02-21T11:42:55.096Z vulcanize:libp2p-utils Not a leader, skipped sending L2 tx
|
||||||
|
# 2024-02-21T11:43:05.095Z vulcanize:libp2p-utils Payment not received
|
||||||
|
# ...
|
||||||
|
```
|
||||||
|
|
||||||
|
If the payment receiving watcher (1) is NOT leader at that moment:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# On watcher 1 (payment received + tx not sent)
|
||||||
|
...
|
||||||
|
2024-02-21T11:46:52.049Z vulcanize:libp2p-utils [11:46:52] Received a message on mobymask P2P network from peer: 12D3KooWGXxcwevUY7KCfw8fcGhxqxPaiFMGSU4tgJDjE54QGKzf
|
||||||
|
2024-02-21T11:46:52.051Z vulcanize:libp2p-utils Not a leader, skipped sending L2 tx
|
||||||
|
2024-02-21T11:46:52.074Z ts-nitro:engine {"msg":"Received message","_msg":{"to":"0xAAA662","from":"0x5D12ac","payloadSummaries":[],"proposalSummaries":[],"payments":[{"amount":450,"channelId":"0x654a85725442828f89b497e3973640613c03b5f5ec47302bfa4402d42c07de30"}],"rejectedObjectives":[]}}
|
||||||
|
2024-02-21T11:46:52.097Z laconic:payments Received a payment voucher of 100 from 0x5D12acfbBB1caD65fD61983003a50E0CB6900Fd3
|
||||||
|
2024-02-21T11:46:52.097Z vulcanize:libp2p-utils Payment received for a mutation request from 0x5D12acfbBB1caD65fD61983003a50E0CB6900Fd3
|
||||||
|
...
|
||||||
|
|
||||||
|
# On the leader watcher (payment not received + tx sent)
|
||||||
|
...
|
||||||
|
2024-02-21T11:46:40.111Z vulcanize:libp2p-utils Payment not received
|
||||||
|
2024-02-21T11:46:52.048Z vulcanize:libp2p-utils [11:46:52] Received a message on mobymask P2P network from peer: 12D3KooWGXxcwevUY7KCfw8fcGhxqxPaiFMGSU4tgJDjE54QGKzf
|
||||||
|
2024-02-21T11:46:56.048Z vulcanize:libp2p-utils Transaction receipt for invoke message {
|
||||||
|
to: '0xAFA36c47E130d89bcE4470a9030d99f3CEcaD146',
|
||||||
|
blockNumber: 4757,
|
||||||
|
blockHash: '0x859aa54cb02e8a3f910a01b85c2a7bf9bff7540e83018e7e846f87ca1770e55e',
|
||||||
|
transactionHash: '0x92f087e4b6ac5604c9d4ecd823d526ca5f8f1bf5c2a92861d6b0f69bd899ba83',
|
||||||
|
effectiveGasPrice: '1500000050',
|
||||||
|
gasUsed: '136438'
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
* Check the phisher status for the reported phishers to confirm state update
|
||||||
|
|
||||||
|
## Clean up
|
||||||
|
|
||||||
|
* From the `NITRO` tab in debug panel, perform `VIRTUAL DEFUND` and `DIRECT DEFUND` for any payment channels created
|
||||||
|
|
||||||
|
* In the browser's console, delete all indexedDBs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
await clearNodeStorage()
|
||||||
|
```
|
||||||
|
|
||||||
|
* Remove the snap from MetaMask flask extension
|
||||||
|
Loading…
Reference in New Issue
Block a user