Head to the latest release page and download the binary for your platform. Complete instructions are provided in there.
The typical installation path is to copy the downloaded binary to /usr/local/bin/powerloom-snapshotter-cli or /usr/local/bin/snapshotter and make it executable.
For example, if you are on an x86_64 Linux machine and v0.2.0 is the latest release, these would be the commands to install the CLI:
wget https://github.com/powerloom/snapshotter-lite-multi-setup/releases/download/v0.2.0/powerloom-snapshotter-cli-linux-amd64
chmod +x powerloom-snapshotter-cli-linux-amd64
sudo mv powerloom-snapshotter-cli-linux-amd64 /usr/local/bin/powerloom-snapshotter-cliTip
📚 Complete instructions on using pre-built snapshotter CLI binary are also available in the Snapshotter CLI documentation.
Warning
If you are not sure about the architecture of your platform (for eg., ARM64 vs x86_64), it is recommended to use the uv package manager with the bundled installer as detailed below to install the CLI.
Tip
Caveat: With this approach, you will always have to cd into the repository directory to run the commands.
git clone https://github.com/powerloom/snapshotter-lite-multi-setup.git dsv-mainnet-snapshotter-lite-multi-setup
cd dsv-mainnet-snapshotter-lite-multi-setup
git checkout masterRun the following script from within the repository directory to install the snapshotter CLI and its dependencies.
./install-uv.shIf everything went well, you should see the following output:
🚀 Installing Powerloom Snapshotter CLI with uv...
Installing uv...
downloading uv 0.10.2 x86_64-unknown-linux-gnu
no checksums to verify
installing to /root/.local/bin
uv
uvx
everything's installed!
[ . . . more output . . . ]
Installing Powerloom Snapshotter CLI globally...
Installing from source...
Verifying installation...
✅ Installation successful!
Version: Powerloom Snapshotter CLI version: 0.2.0 (pip)
✅ Installation complete!
You can now use any of these commands:
powerloom-snapshotter-cli
snapshotter
Try: powerloom-snapshotter-cli --help
To add /root/.local/bin to your PATH, either restart your shell or run:
source /root/.local/bin/env (sh, bash, zsh)
source /root/.local/bin/env.fish (fish)As the instructions at the end of the output suggest, you can add the ~/.local/bin directory to your PATH by running the following command:
source ~/.local/bin/envYou can now run the snapshotter CLI commands by prefixing them with powerloom-snapshotter-cli or snapshotter. Try out the help command to get started:
powerloom-snapshotter-cli --help
# or
snapshotter --helpYou should see the following output:
Usage: powerloom-snapshotter-cli [OPTIONS] COMMAND [ARGS]...
Powerloom Snapshotter Node Management CLI
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --version Show version and exit. │
│ --changelog Show changelog and exit. │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ shell Start an interactive shell session for faster command execution. │
│ diagnose Run diagnostics on the system and optionally clean up existing deployments. Use filters to target specific slot IDs, chains, or markets. │
│ deploy Deploy snapshotter nodes for specified environment and data markets. │
│ configure Configure credentials and settings for a specific chain and market combination. │
│ status Show status of deployed snapshotter instances (screen sessions and Docker containers). Optionally filter by environment and/or data market. │
│ check Check slot status: compare wallet-owned slots against running containers. │
│ list Display available Powerloom chains and their data markets │
│ identity Manage chain and market-specific identity configurations via namespaced .env files. │
│ profile Manage CLI profiles for different wallet configurations │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯powerloom-snapshotter-cli list
# or from the shell mode:
powerloom-snapshotter> list
# or with uv:
uv run powerloom-snapshotter-cli listYou should see the following output with the BDS Data Market available for DSV Mainnet as BDS_MAINNET_UNISWAPV3.
Note
The Blockchain Data Services (BDS) data market is the first one being launched on the Decentralized Sequencer-Validator Mainnet network. This specifically serves close to realtime data on Uniswap V3 pools from the Ethereum Mainnet.
🌐 Available Powerloom Chains
🌐 Available Powerloom Chains
├── DEVNET (Chain ID: 11167, RPC: https://rpc-devnet.powerloom.dev)
[ . . . devnet data markets . . . ]
└── MAINNET (Chain ID: 7869, RPC: https://rpc-v2.powerloom.network)
├── BDS_MAINNET_UNISWAPV3 - Source: ETH-MAINNET
│ ├── Market Contract: 0x4198Bf81B55EE4Af6f9Ddc176F8021960813f641
│ ├── Market Protocol State: 0xa1100CB00Acd3cA83a7C8F4DAA42701D1Eaf4A6c
│ ├── Sequencer: /dns/soon-to-be-deprecated/tcp/9100/p2p/peer-id
│ ├── Compute: https://github.com/powerloom/snapshotter-computes.git (feat/bds_lite) Commit: 50aea0c
│ └── Config: https://github.com/powerloom/snapshotter-configs.git (feat/bds_lite) Commit: 8b8296b
└── UNISWAPV2 - Source: ETH-MAINNET
├── [ . . legacy uniswapv2 market . . . ]🏷️ TIP: You can use the powerloom-snapshotter-cli configure command to configure the snapshotter lite node(s) for the DSV Mainnet Alpha Data Market.
powerloom-snapshotter-cli configure --env mainnet --market BDS_MAINNET_UNISWAPV3
# or from the shell mode:
powerloom-snapshotter> configure --env mainnet --market BDS_MAINNET_UNISWAPV3
# or with uv:
uv run powerloom-snapshotter-cli configure --env mainnet --market BDS_MAINNET_UNISWAPV3👉 Enter slot NFT holder wallet address (0x...) (): <slot NFT holder wallet address>
👉 Enter SNAPSHOTTER signer address (0x...) (): <SNAPSHOTTER signer address>
👉 Enter signer private key (): <signer private key>
👉 Enter RPC URL for ETH-MAINNET (): <ETH-MAINNET RPC URL>
👉 Enter Telegram chat ID (optional) (): <Telegram chat ID can be left blank>
👉 Enter local collector P2P port (for gossipsub mesh communication) (8001): <local collector P2P port. Can be left blank, default is 8001>
✅ Created /root/.powerloom-snapshotter-cli/profiles/bds-mainnet-alpha-uniswapv3/.env.mainnet.bds_mainnet_alpha_uniswapv3.eth_mainnet with following values:
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Environment File Contents ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
< Your environment file contents >uv run powerloom-snapshotter-cli deploy --env mainnet --market BDS_MAINNET_UNISWAPV3
🐳 Docker daemon is running.
🚀 Deploying to environment: MAINNET...
✓ Found profile config for market BDS_MAINNET_UNISWAPV3: /home/ubuntu/.powerloom-snapshotter-cli/profiles/default/.env.mainnet.bds_mainnet_uniswapv3.eth_mainnet
ℹ️ No specific slots provided. Fetching all slots owned by 0xabcdefghijklmnopqrstuvwxyz0123456789 on mainnet...
Found N slots for wallet 0xabcdefghijklmnopqrstuvwxyz0123456789 on mainnet: [ . . . ]
ℹ️ Found slots for wallet 0xabcdefghijklmnopqrstuvwxyz0123456789: [ . . . ]
# choose to deploy select or all slots
☑️ Do you want to deploy all of these fetched slots? (y/n) [y]: n
🫸 ▶︎ Enter the start slot ID from the list above to deploy: N1
🫸 ▶︎ Enter the end slot ID from the list above to deploy (or same as start for single): N2
🎰 Targeting slots for deployment: [N1, N2]
🚀 BDS DSV market detected - using branch: feat/bds_lite_dsv_rollout
🚀 Deploying snapshotter nodes for market: BDS_MAINNET_UNISWAPV3...
🛠️ Preparing base snapshotter-lite-v2 clone at /home/ubuntu/snapshotter-lite-multi-setup/.tmp_snapshotter_base_clone...
↪️ Running Git command: /usr/bin/git clone --branch feat/bds_lite_dsv_rollout https://github.com/PowerLoom/snapshotter-lite-v2.git . in
/home/ubuntu/snapshotter-lite-multi-setup/.tmp_snapshotter_base_clone
✅ Cloning base snapshotter-lite-v2 repository from {snapshotter_lite_repo_url} (branch: feat/bds_lite_dsv_rollout) successful.
✅ Base snapshotter-lite-v2 cloned successfully from branch: feat/bds_lite_dsv_rollout.
📦 Processing market BDS_MAINNET_UNISWAPV3 on MAINNET...
✓ Found profile config for market BDS_MAINNET_UNISWAPV3: /home/ubuntu/.powerloom-snapshotter-cli/profiles/default/.env.mainnet.bds_mainnet_uniswapv3.eth_mainnet
🔑 Using Signer: 0xSignerAddress for market BDS_MAINNET_UNISWAPV3
🔩 Deploying slot N1 for market BDS_MAINNET_UNISWAPV3 (Source RPC: <ETH-Mainnet-RPC>)
⚙️ Starting deployment for Market BDS_MAINNET_UNISWAPV3 on Powerloom Chain mainnet, Slot N1
📂 Deployment directory: snapshotter-lite-v2/mainnet/bds_mainnet_uniswapv3_eth-mainnet/slot-5481
< Deployment logs >
----- Deployment Summary -----
✅ Successfully deployed n snapshotter instance(s).
🧹 Cleaning up temporary base snapshotter clone at /home/ubuntu/snapshotter-lite-multi-setup/.tmp_snapshotter_base_clone...
✅ Cleanup successful.Note
Let us assume slot ID 1234 is one of the slots deployed. The examples follow this assumption.
You can check the simulation submission status on the fully decentralized Snapshotter Dashboard. If everything goes well, you should see the simulation submission timestamp appearing within a couple of minutes of the logs as shown in the example sections below.
Note
The above screenshot is a sample one. The BDS data market is not yet live on the DSV mainnet and only simulation submissions are shown. There wont be any actual snapshot submissions yet.
sudo docker ps | grep -iE 'mainnet|collector'
1dce7f01765b snapshotter-lite-v2-1234-mainnet-bds_mainnet_uniswapv3-eth-snapshotter-lite-v2 "bash -c '\n rm -f /…" 31 seconds ago Up 31 seconds snapshotter-lite-v2-1234-mainnet-BDS_MAINNET_UNISWAPV3-ETH
03f92f3996ee snapshotter-lite-v2-1234-mainnet-bds_mainnet_uniswapv3-eth-snapshotter-lite-v2 "bash -c '\n rm -f /…" 36 seconds ago Up 36 seconds snapshotter-lite-v2-1234-mainnet-BDS_MAINNET_UNISWAPV3-ETH
d4092014c788 snapshotter-lite-v2-1234-mainnet-bds_mainnet_uniswapv3-eth-snapshotter-lite-local-collector "/snapshotter-local-…" 36 seconds ago Up 36 seconds 127.0.0.1:8001->8001/tcp, 127.0.0.1:8085->8085/tcp, 127.0.0.1:50051->50051/tcp snapshotter-lite-local-collector-mainnet-BDS_MAINNET_UNISWAPV3-ETH
22c4ed99acd3 5f56581c58f2 "/snapshotter-local-…" 8 weeks ago Up 8 weeks 0.0.0.0:50052->50052/tcp, [::]:50052->50052/tcp snapshotter-core-snapshotter-local-collector-1# attach to one of the screen sessions
screen -r pl_mainnet_bds_mainnet_uniswapv3_1234
# or check container logs
sudo docker logs -f snapshotter-lite-v2-1234-mainnet-BDS_MAINNET_UNISWAPV3-ETHYou should see the snapshotter logs as following indicating simulation submission snapshot generation and submission.
February 15, 2026 > 13:25:48 | INFO | 🎲 Genesis epoch: querying BDS with epoch 24462489 (latest - 1)| {'module': 'EpochContext'}
February 15, 2026 > 13:25:48 | INFO | 📋 BDS response for active pools: {'snapshot_cid': 'bafkreicy4wnb6rvi72o7yiwejqq5sxku3uc43d3zr7ebxhed5ehldnsrsq', 'epoch_id': 24462489, 'pools': {'0x202A6012894Ae5c288eA824cbc8A9bfb26A49b93': 1, '0x4d68B530920D26c3b01C99fecC19e21011B72bBD': 1, '0x6546055f46e866a4B9a4A13e81273e3152BAE5dA': 1, '0x6d69DCE31606AbD62C58E95BA984718EEbD540eA': 1, '0x75A5A265D21bC89eC130F18EdDe2b49a4B200dac': 1, '0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640': 1, '0xE0554a476A092703abdB3Ef35c80e0D76d32939F': 4, '0xc756BBA710d45647715079cE50aa16aab36deD42': 1, '0xc7bBeC68d12a0d1830360F8Ec58fA599bA1b0e9b': 5, '0xe6ff8b9A37B0fab776134636D9981Aa778c4e718': 1, '0xf31C54cb6F15a5A807Dc33d9dACC2471303D182e': 1}}| {'module': 'EpochContext'}
February 15, 2026 > 13:25:48 | INFO | 🎲 Genesis epoch (epoch 0) - slot 1234 processing pool: 0x<POOL_ADDRESS>| {'module': 'PairTotalReservesProcessor'}
February 15, 2026 > 13:25:55 | INFO | 📈 [Epoch 24462480-24462480] Pool 0xf31C54cb6F15a5A807Dc33d9dACC2471303D182e | Epoch total trade data: totalTradesUSD=0 totalTradesMintBurnUSD=0 totalFeeUSD=0 token0MintBurnVolume=0 token1MintBurnVolume=0 token0MintBurnVolumeUSD=0 token1MintBurnVolumeUSD=0 token0TradeVolume=0 token1TradeVolume=0 token0TradeVolumeUSD=0 token1TradeVolumeUSD=0| {'module': 'PowerLoom|UniswapCore'}
February 15, 2026 > 13:25:55 | DEBUG | [Epoch 24462480-24462480] Pool 0xf31C54cb6F15a5A807Dc33d9dACC2471303D182e | Reserves and trade data generated successfully| {'module': 'PowerLoom|UniswapCore'}
February 15, 2026 > 13:25:55 | DEBUG | [Epoch 24462480-24462480] Pool 0xf31C54cb6F15a5A807Dc33d9dACC2471303D182e | Creating final base snapshot| {'module': 'PowerLoom|UniswapCore'}
February 15, 2026 > 13:25:55 | INFO | ✅ [Epoch 24462480-24462480] Pool 0xf31C54cb6F15a5A807Dc33d9dACC2471303D182e | Base snapshot generated successfully | Total trade: $0.00 | Total fee: $0.00| {'module': 'PowerLoom|UniswapCore'}
February 15, 2026 > 13:25:55 | DEBUG | ✅ [Epoch 24462480-24462480] Pool 0xf31C54cb6F15a5A807Dc33d9dACC2471303D182e | Computation completed | Wall time: 1771161955.8083541| {'module': 'EpochContext'}
February 15, 2026 > 13:25:55 | DEBUG | Sending submission to collector...| {'module': 'GenericAsyncWorker'}
February 15, 2026 > 13:25:55 | DEBUG | Snapshot submission creation with request: slotId: 1234
deadline: 3174717
snapshotCid: "bafkreigx5okipomw2qurii4n25u34fjpd5b5gpcbxwm4j3htnxmubgqim4"
projectId: "baseSnapshot:0x<POOL_ADDRESS>:mainnet-BDS_MAINNET_UNISWAPV3-ETH"
| {'module': 'GenericAsyncWorker'}
February 15, 2026 > 13:25:55 | DEBUG | Snapshot submission created: request {
slotId: 1234
deadline: 3174717
snapshotCid: "bafkreigx5okipomw2qurii4n25u34fjpd5b5gpcbxwm4j3htnxmubgqim4"
projectId: "baseSnapshot:0x<POOL_ADDRESS>:mainnet-BDS_MAINNET_UNISWAPV3-ETH"
}
signature: "c94ad005cc6d5f0999844fdce7955b23a8eb9a7c8ab5bedcc9177912f6c59ead6f2642ed4bcb072cf8ca2f7ba389a1dd48bfe5a4a58ddddae2eae019eefd84251b"
header: "0x999a6932c997573d9b2557ba2188a488c0c993862abd63dacc0471a58a86c2ed"
dataMarket: "0x4198Bf81B55EE4Af6f9Ddc176F8021960813f641"
nodeVersion: "v2.8.0"
protocolState: "0xa1100CB00Acd3cA83a7C8F4DAA42701D1Eaf4A6c"
| {'module': 'GenericAsyncWorker'}
February 15, 2026 > 13:25:55 | DEBUG | Sent message to local collector and received response: message: "Success"
| {'module': 'GenericAsyncWorker'}
February 15, 2026 > 13:25:55 | INFO | Successfully submitted snapshot to local collector: request {
slotId: 1234
deadline: 3174717
snapshotCid: "bafkreigx5okipomw2qurii4n25u34fjpd5b5gpcbxwm4j3htnxmubgqim4"
projectId: "baseSnapshot:0x<POOL_ADDRESS>:mainnet-BDS_MAINNET_UNISWAPV3-ETH"
}
signature: "c94ad005cc6d5f0999844fdce7955b23a8eb9a7c8ab5bedcc9177912f6c59ead6f2642ed4bcb072cf8ca2f7ba389a1dd48bfe5a4a58ddddae2eae019eefd84251b"
header: "0x999a6932c997573d9b2557ba2188a488c0c993862abd63dacc0471a58a86c2ed"
dataMarket: "0x4198Bf81B55EE4Af6f9Ddc176F8021960813f641"
nodeVersion: "v2.8.0"
protocolState: "0xa1100CB00Acd3cA83a7C8F4DAA42701D1Eaf4A6c"
| {'module': 'GenericAsyncWorker'}sudo docker logs snapshotter-lite-local-collector-mainnet-BDS_MAINNET_ALPHA_UNISWAPV3-ETH -f -n 100 2>&1 | grep -i 'gossipsub'You should see the local collector logs as following indicating submission publication to the DSV mesh network.
time="2026-02-15T13:25:36Z" level=info msg="✅ Successfully published submission to gossipsub" func="proto-snapshot-server/pkgs/service.(*server).publishToMesh" file="/app/pkgs/service/msg_server.go:751" epoch_id=0 mesh_state=healthy msg_size=717 peer_count=5 project_id="baseSnapshot:0xc7bbec68d12a0d1830360f8ec58fa599ba1b0e9b:mainnet-BDS_MAINNET_ALPHA_UNISWAPV3-ETH" snapshot_cid=bafkreidpfvo6do3lrdrr5f2skmhsbk4nkkkk35ed5ksf7hjd43d4aoqwi4 topic=/powerloom/dsv-mainnet-alpha/snapshot-submissions/0 total_connected=162 uptime_seconds=40110
