Official command-line client for ProxyBase — a decentralized bandwidth marketplace.
proxybase-cli allows you to manage wallets, sell internet bandwidth (directly and via external upstream proxies), purchase residential/datacenter proxy sessions, and run local SOCKS5 bridges.
m/44'/60'/0'/0/{index}) with automated sweeping into a central settlement wallet.systemd on Linux, launchd on macOS, Windows Services).Download pre-built binaries for Linux (x86_64, aarch64), macOS (Apple Silicon), or Windows from the Releases page.
Requirements: Rust toolchain (1.75+).
cargo build --release
# Binary placed at target/release/proxybase-cli
Before running a seller node or buying proxy sessions, configure your wallet identity:
# 1. Create a new wallet
proxybase-cli wallet create
# OR import an existing 12/24-word recovery phrase
proxybase-cli wallet import "your twelve word mnemonic seed phrase goes right here"
# 2. Authenticate against the backend
proxybase-cli login
Authentication uses an ECDSA challenge-response handshake over secp256k1. The backend issues a timestamped nonce, the CLI signs address:nonce:timestamp, and on verification, saves an authenticated bearer session token to ~/.proxybase/session_token.
The seller subsystem allows operators to monetize network access. Beyond sharing raw node bandwidth, proxybase-cli includes Upstream Reselling, allowing node operators to route ProxyBase traffic through one or more third-party upstream SOCKS5 proxies.
┌─────────────────────────────────────────────────────────────┐
│ proxybase-cli │
│ │
│ ┌─────────────────┐ ┌─────────────────────────────┐ │
│ │ Direct Path │ ───► │ Direct TCP Connection │──┼──► Target Host (e.g. 93.184.216.34:443)
│ │ (path: direct) │ │ (Node's local IP / ISP) │ │
│ └────────┬────────┘ └─────────────────────────────┘ │
│ │ WS Tunnel │
│ ▼ │
ProxyBase │ ┌─────────────────┐ ┌─────────────────────────────┐ │
Backend Relay ◄───►│ │ Upstream Path 0 │ ───► │ SOCKS5: user:pass@host:port │──┼──► Target Host (via Upstream Proxy 0)
(/v2/ws/seller) │ │ (upstream_0) │ │ (External Residential IP) │ │
│ └────────┬────────┘ └─────────────────────────────┘ │
│ │ WS Tunnel │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────────────────────┐ │
│ │ Upstream Path 1 │ ───► │ SOCKS5: user:pass@host:port │──┼──► Target Host (via Upstream Proxy 1)
│ │ (upstream_1) │ │ (External Mobile/DC IP) │ │
│ └─────────────────┘ └─────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
--upstream):
--no-direct):
build_paths)When you start the seller with upstream proxies, proxybase-cli builds independent logical paths:
direct (if --no-direct is false)upstream_0, upstream_1, ..., upstream_N (for each --upstream entry)Each path operates as an independent async task with its own persistent WebSocket connection to {backend}/v2/ws/seller?token=....
Upon connecting, each path identifies itself to the backend:
{"type": "path_info", "path_id": "upstream_0"}.upstream_0::7a8f9b1c) and registers that specific tunnel into its routing and Quality of Service (QoS) engine.The ProxyBase backend treats each path as an individual exit node:
residential, datacenter, mobile), latency, throughput, and uptime.Trial to verified tiers based on their individual uptime and QoS scores.run_stream_relay)When a buyer connects to an allocated proxy session:
stream_open Command: The backend sends a stream_open message to the matching path connection over WebSocket:
{
"type": "stream_open",
"session_id": "sess_89a1c2",
"target_ip": "93.184.216.34",
"target_port": 443,
"target_host": "example.com",
"seq": 42
}
{"type": "cmd_ack", "seq": 42} message.direct path: Connects directly via TCP (TcpStream::connect("target_ip:target_port")).upstream_N path: Performs an authenticated SOCKS5 handshake using fast-socks5 against the upstream proxy address (Socks5Stream::connect_with_password(&proxy.address, target_dest, target_port, user, pass)). Handshakes are bounded by a 10-second timeout to prevent dead upstreams from hanging sockets.{"type": "relay_response", "session_id": "...", "data": "..."}.relay_data frames from the buyer are base64-decoded and written to the upstream/direct socket.tokio::select! so that closure on either side immediately tears down the full socket pair, preventing lingering CLOSE_WAIT sockets.Arc<Mutex<String>> authentication token.AUTH_EXPIRED (401) notice from the backend, it signs a new ECDSA challenge with the local wallet and updates the token. All other paths immediately inherit the fresh token on their next reconnection.{"type": "heartbeat", "active_streams": N, ...}) and resets a 90-second connection watchdog timer.proxybase-cli seller start [OPTIONS]
| Flag | Description |
|---|---|
--upstream <HOST:PORT> | Upstream SOCKS5 proxy address (e.g. proxy.vendor.com:1080). Repeatable. |
--upstream-user <USER> | Username for the paired --upstream proxy. Repeatable. |
--upstream-pass <PASS> | Password for the paired --upstream proxy. Repeatable. |
--no-direct | Disable node's direct bandwidth. Only relay through --upstream proxies. |
--volunteer | Run in volunteer mode (donate bandwidth unpaid, 0 seller share). |
--foreground | Keep process running in the terminal instead of daemonizing to background. |
--backend <URL> | Override backend API URL (default: https://api.proxybase.xyz). |
proxybase-cli seller status — Inspect background daemon PID, node type, and live backend pool statistics.proxybase-cli seller stop — Stop the background seller daemon (sends SIGTERM, escalates to SIGKILL after 5s) and remove any autostart service.proxybase-cli seller install — Install seller daemon as a persistent OS service (systemd on Linux, launchd on macOS) that automatically boots on system startup.proxybase-cli seller payout create --amount <microcredits> --tempo-address <address> — Lock accrued earnings for withdrawal (1,000,000 microcredits = $1.00 USD).proxybase-cli seller payout list — View payout transaction history and on-chain status.Monetize your local device's internet connection:
proxybase-cli seller start
Resell access through an external SOCKS5 proxy while keeping local bandwidth active:
proxybase-cli seller start \
--upstream residential.proxyprovider.net:8000 \
--upstream-user resi_user_102 \
--upstream-pass secretpassword123
Run multiple upstream proxies and direct bandwidth concurrently:
proxybase-cli seller start \
--upstream us-east.provider.com:1080 --upstream-user userA --upstream-pass passA \
--upstream eu-west.provider.com:1080 --upstream-user userB --upstream-pass passB \
--upstream ap-south.provider.com:1080 --upstream-user userC --upstream-pass passC
The CLI will spawn 4 independent paths: direct, upstream_0, upstream_1, and upstream_2.
Do not expose or route traffic through the host server's local IP:
proxybase-cli seller start \
--no-direct \
--upstream socks5.premiumprovider.com:9050 \
--upstream-user customer456 \
--upstream-pass tokenXYZ
Keep standard output attached to inspect live connection events and traffic logs:
proxybase-cli seller start --foreground \
--upstream 10.0.0.50:1080 \
--upstream-user proxyuser \
--upstream-pass proxypass
When proxybase-cli seller start is called with upstream parameters, settings are automatically serialized to:
~/.proxybase/seller_config.json (or $PROXYBASE_DIR/seller_config.json).
{
"upstream_proxies": [
{
"address": "residential.proxyprovider.net:8000",
"username": "resi_user_102",
"password": "secretpassword123",
"country": "US",
"proxy_category": "residential"
}
],
"no_direct": false,
"volunteer": false
}
systemd or launchd), it automatically reads seller_config.json and restores the exact upstream topology.proxybase-cli seller install
proxybase-cli seller stop
When deploying with Docker, Kubernetes, or serverless container runners, upstream configuration can be passed via environment variables. The entrypoint script (docker-entrypoint.sh) parses these and launches the seller daemon.
| Variable | Example | Description |
|---|---|---|
PROXYBASE_UPSTREAM | 10.0.1.1:1080,10.0.1.2:1080 | Comma-separated list of upstream proxy host:port addresses. |
PROXYBASE_UPSTREAM_USER | user1,user2 | Comma-separated list of upstream usernames (paired by index). |
PROXYBASE_UPSTREAM_PASS | pass1,pass2 | Comma-separated list of upstream passwords (paired by index). |
PROXYBASE_NO_DIRECT | true | Set to true to resell upstreams only (disables direct node bandwidth). |
PROXYBASE_VOLUNTEER | false | Set to true to donate bandwidth unpaid. |
MASTER_MNEMONIC | word1 word2 ... word12 | 12/24-word master seed for HD key derivation. |
PROXYBASE_HD_INDEX | 0 | Explicit HD child index (m/44'/60'/0'/0/{index}). |
PROXYBASE_DIR | /tmp/proxybase | Path for keystore, logs, and config files. |
docker run -d \
--name proxybase-node \
-e MASTER_MNEMONIC="apple banana cherry dog elephant fox grape horse igloo jaguar kite lemon" \
-e PROXYBASE_HD_INDEX=0 \
-e PROXYBASE_UPSTREAM="proxy1.reseller.com:8000,proxy2.reseller.com:8000" \
-e PROXYBASE_UPSTREAM_USER="clientA,clientB" \
-e PROXYBASE_UPSTREAM_PASS="passA,passB" \
-e PROXYBASE_NO_DIRECT="false" \
ghcr.io/proxybase/proxybase-cli:latest
ProxyBase supports hierarchical deterministic (BIP-32 / BIP-44) wallet derivation to run large-scale node fleets from a single master mnemonic without sharing private keys across nodes.
Each fleet node derives a dedicated child keypair at path m/44'/60'/0'/0/{index}:
# Derive and import child identity index 3
proxybase-cli wallet import "<master phrase>" --hd-index 3
proxybase-cli login
proxybase-cli seller start
To collect earnings from hundreds or thousands of worker nodes, sweep child accounts in a single automated command:
proxybase-cli wallet sweep "<master phrase>" \
--start-index 0 \
--count 100 \
--min-threshold 1000000 \
--target-tempo 0x71C2B4958189874a7D1F6bC1D2A1f6e02F179782
--min-threshold (in microcredits).For complete Kubernetes StatefulSet manifests and cronjob sweeper scripts, see docs/HD_WALLETS.md and deploy/.
Purchase and use proxy sessions directly through the CLI:
# 1. Check account balance
proxybase-cli buyer balance
# 2. Deposit funds (USDC on Solana)
proxybase-cli buyer deposit create --amount 5000000 --currency usdcsol
proxybase-cli buyer deposit list
# 3. Check market pricing for country and network type
proxybase-cli market prices --country US --network-type residential
# 4. Buy a rotating proxy session
proxybase-cli market buy --country US --network-type residential --session-type rotating
# 5. Buy a sticky session with a local SOCKS5 bridge on port 10800
proxybase-cli market buy \
--country DE \
--network-type datacenter \
--session-type sticky \
--sticky-duration 3600 \
--bridge \
--bridge-port 10800
Many applications (web scrapers, command-line utilities, browsers) do not natively support SOCKS5 username/password authentication. The bridge command exposes a local, unauthenticated SOCKS5 listener (127.0.0.1:<PORT>) that transparently relays traffic to the authenticated remote ProxyBase gateway:
# Start a local bridge daemon for session
proxybase-cli bridge start <SESSION_ID> --port 10800
# View active bridges
proxybase-cli bridge list
# Route traffic through local bridge without auth headers
curl --socks5 127.0.0.1:10800 https://api.ipify.org
# Stop the bridge
proxybase-cli bridge stop <SESSION_ID>
Check for and install updates to proxybase-cli:
# Check if a new version is available
proxybase-cli update --check
# Download and replace binary with the latest release
proxybase-cli update
Every command also performs a passive daily check in the background and notifies stderr if a newer release exists.
Apache-2.0 / MIT. See repository LICENSE for details.
40 commits
Rust
94.1%
Shell
4.3%
Dockerfile
1.6%
Official command-line client for ProxyBase — a decentralized bandwidth marketplace.
proxybase-cli allows you to manage wallets, sell internet bandwidth (directly and via external upstream proxies), purchase residential/datacenter proxy sessions, and run local SOCKS5 bridges.
m/44'/60'/0'/0/{index}) with automated sweeping into a central settlement wallet.systemd on Linux, launchd on macOS, Windows Services).Download pre-built binaries for Linux (x86_64, aarch64), macOS (Apple Silicon), or Windows from the Releases page.
Requirements: Rust toolchain (1.75+).
cargo build --release
# Binary placed at target/release/proxybase-cli
Before running a seller node or buying proxy sessions, configure your wallet identity:
# 1. Create a new wallet
proxybase-cli wallet create
# OR import an existing 12/24-word recovery phrase
proxybase-cli wallet import "your twelve word mnemonic seed phrase goes right here"
# 2. Authenticate against the backend
proxybase-cli login
Authentication uses an ECDSA challenge-response handshake over secp256k1. The backend issues a timestamped nonce, the CLI signs address:nonce:timestamp, and on verification, saves an authenticated bearer session token to ~/.proxybase/session_token.
The seller subsystem allows operators to monetize network access. Beyond sharing raw node bandwidth, proxybase-cli includes Upstream Reselling, allowing node operators to route ProxyBase traffic through one or more third-party upstream SOCKS5 proxies.
┌─────────────────────────────────────────────────────────────┐
│ proxybase-cli │
│ │
│ ┌─────────────────┐ ┌─────────────────────────────┐ │
│ │ Direct Path │ ───► │ Direct TCP Connection │──┼──► Target Host (e.g. 93.184.216.34:443)
│ │ (path: direct) │ │ (Node's local IP / ISP) │ │
│ └────────┬────────┘ └─────────────────────────────┘ │
│ │ WS Tunnel │
│ ▼ │
ProxyBase │ ┌─────────────────┐ ┌─────────────────────────────┐ │
Backend Relay ◄───►│ │ Upstream Path 0 │ ───► │ SOCKS5: user:pass@host:port │──┼──► Target Host (via Upstream Proxy 0)
(/v2/ws/seller) │ │ (upstream_0) │ │ (External Residential IP) │ │
│ └────────┬────────┘ └─────────────────────────────┘ │
│ │ WS Tunnel │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────────────────────┐ │
│ │ Upstream Path 1 │ ───► │ SOCKS5: user:pass@host:port │──┼──► Target Host (via Upstream Proxy 1)
│ │ (upstream_1) │ │ (External Mobile/DC IP) │ │
│ └─────────────────┘ └─────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
--upstream):
--no-direct):
build_paths)When you start the seller with upstream proxies, proxybase-cli builds independent logical paths:
direct (if --no-direct is false)upstream_0, upstream_1, ..., upstream_N (for each --upstream entry)Each path operates as an independent async task with its own persistent WebSocket connection to {backend}/v2/ws/seller?token=....
Upon connecting, each path identifies itself to the backend:
{"type": "path_info", "path_id": "upstream_0"}.upstream_0::7a8f9b1c) and registers that specific tunnel into its routing and Quality of Service (QoS) engine.The ProxyBase backend treats each path as an individual exit node:
residential, datacenter, mobile), latency, throughput, and uptime.Trial to verified tiers based on their individual uptime and QoS scores.run_stream_relay)When a buyer connects to an allocated proxy session:
stream_open Command: The backend sends a stream_open message to the matching path connection over WebSocket:
{
"type": "stream_open",
"session_id": "sess_89a1c2",
"target_ip": "93.184.216.34",
"target_port": 443,
"target_host": "example.com",
"seq": 42
}
{"type": "cmd_ack", "seq": 42} message.direct path: Connects directly via TCP (TcpStream::connect("target_ip:target_port")).upstream_N path: Performs an authenticated SOCKS5 handshake using fast-socks5 against the upstream proxy address (Socks5Stream::connect_with_password(&proxy.address, target_dest, target_port, user, pass)). Handshakes are bounded by a 10-second timeout to prevent dead upstreams from hanging sockets.{"type": "relay_response", "session_id": "...", "data": "..."}.relay_data frames from the buyer are base64-decoded and written to the upstream/direct socket.tokio::select! so that closure on either side immediately tears down the full socket pair, preventing lingering CLOSE_WAIT sockets.Arc<Mutex<String>> authentication token.AUTH_EXPIRED (401) notice from the backend, it signs a new ECDSA challenge with the local wallet and updates the token. All other paths immediately inherit the fresh token on their next reconnection.{"type": "heartbeat", "active_streams": N, ...}) and resets a 90-second connection watchdog timer.proxybase-cli seller start [OPTIONS]
| Flag | Description |
|---|---|
--upstream <HOST:PORT> | Upstream SOCKS5 proxy address (e.g. proxy.vendor.com:1080). Repeatable. |
--upstream-user <USER> | Username for the paired --upstream proxy. Repeatable. |
--upstream-pass <PASS> | Password for the paired --upstream proxy. Repeatable. |
--no-direct | Disable node's direct bandwidth. Only relay through --upstream proxies. |
--volunteer | Run in volunteer mode (donate bandwidth unpaid, 0 seller share). |
--foreground | Keep process running in the terminal instead of daemonizing to background. |
--backend <URL> | Override backend API URL (default: https://api.proxybase.xyz). |
proxybase-cli seller status — Inspect background daemon PID, node type, and live backend pool statistics.proxybase-cli seller stop — Stop the background seller daemon (sends SIGTERM, escalates to SIGKILL after 5s) and remove any autostart service.proxybase-cli seller install — Install seller daemon as a persistent OS service (systemd on Linux, launchd on macOS) that automatically boots on system startup.proxybase-cli seller payout create --amount <microcredits> --tempo-address <address> — Lock accrued earnings for withdrawal (1,000,000 microcredits = $1.00 USD).proxybase-cli seller payout list — View payout transaction history and on-chain status.Monetize your local device's internet connection:
proxybase-cli seller start
Resell access through an external SOCKS5 proxy while keeping local bandwidth active:
proxybase-cli seller start \
--upstream residential.proxyprovider.net:8000 \
--upstream-user resi_user_102 \
--upstream-pass secretpassword123
Run multiple upstream proxies and direct bandwidth concurrently:
proxybase-cli seller start \
--upstream us-east.provider.com:1080 --upstream-user userA --upstream-pass passA \
--upstream eu-west.provider.com:1080 --upstream-user userB --upstream-pass passB \
--upstream ap-south.provider.com:1080 --upstream-user userC --upstream-pass passC
The CLI will spawn 4 independent paths: direct, upstream_0, upstream_1, and upstream_2.
Do not expose or route traffic through the host server's local IP:
proxybase-cli seller start \
--no-direct \
--upstream socks5.premiumprovider.com:9050 \
--upstream-user customer456 \
--upstream-pass tokenXYZ
Keep standard output attached to inspect live connection events and traffic logs:
proxybase-cli seller start --foreground \
--upstream 10.0.0.50:1080 \
--upstream-user proxyuser \
--upstream-pass proxypass
When proxybase-cli seller start is called with upstream parameters, settings are automatically serialized to:
~/.proxybase/seller_config.json (or $PROXYBASE_DIR/seller_config.json).
{
"upstream_proxies": [
{
"address": "residential.proxyprovider.net:8000",
"username": "resi_user_102",
"password": "secretpassword123",
"country": "US",
"proxy_category": "residential"
}
],
"no_direct": false,
"volunteer": false
}
systemd or launchd), it automatically reads seller_config.json and restores the exact upstream topology.proxybase-cli seller install
proxybase-cli seller stop
When deploying with Docker, Kubernetes, or serverless container runners, upstream configuration can be passed via environment variables. The entrypoint script (docker-entrypoint.sh) parses these and launches the seller daemon.
| Variable | Example | Description |
|---|---|---|
PROXYBASE_UPSTREAM | 10.0.1.1:1080,10.0.1.2:1080 | Comma-separated list of upstream proxy host:port addresses. |
PROXYBASE_UPSTREAM_USER | user1,user2 | Comma-separated list of upstream usernames (paired by index). |
PROXYBASE_UPSTREAM_PASS | pass1,pass2 | Comma-separated list of upstream passwords (paired by index). |
PROXYBASE_NO_DIRECT | true | Set to true to resell upstreams only (disables direct node bandwidth). |
PROXYBASE_VOLUNTEER | false | Set to true to donate bandwidth unpaid. |
MASTER_MNEMONIC | word1 word2 ... word12 | 12/24-word master seed for HD key derivation. |
PROXYBASE_HD_INDEX | 0 | Explicit HD child index (m/44'/60'/0'/0/{index}). |
PROXYBASE_DIR | /tmp/proxybase | Path for keystore, logs, and config files. |
docker run -d \
--name proxybase-node \
-e MASTER_MNEMONIC="apple banana cherry dog elephant fox grape horse igloo jaguar kite lemon" \
-e PROXYBASE_HD_INDEX=0 \
-e PROXYBASE_UPSTREAM="proxy1.reseller.com:8000,proxy2.reseller.com:8000" \
-e PROXYBASE_UPSTREAM_USER="clientA,clientB" \
-e PROXYBASE_UPSTREAM_PASS="passA,passB" \
-e PROXYBASE_NO_DIRECT="false" \
ghcr.io/proxybase/proxybase-cli:latest
ProxyBase supports hierarchical deterministic (BIP-32 / BIP-44) wallet derivation to run large-scale node fleets from a single master mnemonic without sharing private keys across nodes.
Each fleet node derives a dedicated child keypair at path m/44'/60'/0'/0/{index}:
# Derive and import child identity index 3
proxybase-cli wallet import "<master phrase>" --hd-index 3
proxybase-cli login
proxybase-cli seller start
To collect earnings from hundreds or thousands of worker nodes, sweep child accounts in a single automated command:
proxybase-cli wallet sweep "<master phrase>" \
--start-index 0 \
--count 100 \
--min-threshold 1000000 \
--target-tempo 0x71C2B4958189874a7D1F6bC1D2A1f6e02F179782
--min-threshold (in microcredits).For complete Kubernetes StatefulSet manifests and cronjob sweeper scripts, see docs/HD_WALLETS.md and deploy/.
Purchase and use proxy sessions directly through the CLI:
# 1. Check account balance
proxybase-cli buyer balance
# 2. Deposit funds (USDC on Solana)
proxybase-cli buyer deposit create --amount 5000000 --currency usdcsol
proxybase-cli buyer deposit list
# 3. Check market pricing for country and network type
proxybase-cli market prices --country US --network-type residential
# 4. Buy a rotating proxy session
proxybase-cli market buy --country US --network-type residential --session-type rotating
# 5. Buy a sticky session with a local SOCKS5 bridge on port 10800
proxybase-cli market buy \
--country DE \
--network-type datacenter \
--session-type sticky \
--sticky-duration 3600 \
--bridge \
--bridge-port 10800
Many applications (web scrapers, command-line utilities, browsers) do not natively support SOCKS5 username/password authentication. The bridge command exposes a local, unauthenticated SOCKS5 listener (127.0.0.1:<PORT>) that transparently relays traffic to the authenticated remote ProxyBase gateway:
# Start a local bridge daemon for session
proxybase-cli bridge start <SESSION_ID> --port 10800
# View active bridges
proxybase-cli bridge list
# Route traffic through local bridge without auth headers
curl --socks5 127.0.0.1:10800 https://api.ipify.org
# Stop the bridge
proxybase-cli bridge stop <SESSION_ID>
Check for and install updates to proxybase-cli:
# Check if a new version is available
proxybase-cli update --check
# Download and replace binary with the latest release
proxybase-cli update
Every command also performs a passive daily check in the background and notifies stderr if a newer release exists.
Apache-2.0 / MIT. See repository LICENSE for details.
40 commits
Rust
94.1%
Shell
4.3%
Dockerfile
1.6%