Setting Up a Provider

This guide walks you through setting up your Arkeo Provider—from bonding your service on-chain, to configuring metadata, running your backend (sentinel), and automating settlement. You do not need to be a validator or run a full node to be a provider, though running your own node is strongly recommended for reliability.

Before You Begin

What You Need

  • Arkeo Accounts:

    • Hot Wallet (automated settlement key created with keyring-backend test).

    • (Optional) Secure cold storage account for larger funds.

  • Arkeo CLI Tools installed (from GitHub).

  • Server or reliable machine for running your backend (sentinel).

  • Recommended: A full node for complete control over blockchain events and reliable settlements.

Install Arkeo Tools

git clone https://github.com/arkeonetwork/arkeo.git  
cd arkeo  
make install  
make tools

This installs the arkeod CLI and related tools.

Best Practice: Although no full chain sync is required for basic operations, running your own node is highly recommended. Doing so ensures full control over blockchain events critical for timely settlements, avoiding reliance on third-party RPC services.

Create a Hot Wallet (Automated Key)

Providers automate claim settlements using a dedicated "hot wallet":

arkeod keys add <provider-hot-wallet> --keyring-backend test
  • Fund this wallet only with minimal amounts required for bonding and fees.

Security Notice:

  • The test backend stores your keys unencrypted; use it only for automated scripts.

  • Never use this wallet for significant funds.

Bond Your Provider Service On-Chain

Bonding stakes collateral and registers your service:

USER="<provider-hot-wallet>"
SERVICE="<your-service-name>" 
BOND=100000000 
KEYRING_BACKEND="test"
FEES="200uarkeo"

RAWPUBKEY=$(arkeod keys show "$USER" -p --keyring-backend="$KEYRING_BACKEND" | jq -r .key)
PUBKEY=$(arkeod debug pubkey-raw $RAWPUBKEY | grep 'Bech32 Acc:' | sed "s|Bech32 Acc: ||g")

arkeod tx arkeo bond-provider "$PUBKEY" "$SERVICE" "$BOND" \
--from="$USER" \
--fees="$FEES" \
--keyring-backend="$KEYRING_BACKEND" \
-b sync \
-y

Notice:

  • No Validator privileges are required to be a Provider.

Configure Provider Metadata

Make your service discoverable and configure contract terms:

SENTINEL_URI="http://<your-domain-or-ip>:3636/metadata.json"
METADATA_NONCE=1
STATUS=1
MIN_CONTRACT_DUR=5
MAX_CONTRACT_DUR=432000
SUBSCRIPTION_RATES="200uarkeo"
PAY_AS_YOU_GO_RATES="200uarkeo"
SETTLEMENT_DUR=1000

arkeod tx arkeo mod-provider \
"$PUBKEY" "$SERVICE" "$SENTINEL_URI" "$METADATA_NONCE" "$STATUS" \
"$MIN_CONTRACT_DUR" "$MAX_CONTRACT_DUR" "$SUBSCRIPTION_RATES" \
"$PAY_AS_YOU_GO_RATES" "$SETTLEMENT_DUR" \
--from="$USER" --fees="$FEES" \
--keyring-backend="$KEYRING_BACKEND" -y

Provider and Sentinel Configuration

Example sentinel_config.yaml:

provider:
pubkey: "<your-bech32-pubkey>"
name: "My Arkeo Provider"

services:
- name: btc-mainnet-fullnode
  id: 10
  type: bitcoin
  rpc_url: http://localhost:8332
  rpc_user: "<rpc-username>"
  rpc_pass: "<rpc-password>"

api:
listen_addr: "0.0.0.0:3636"

Run Sentinel

Create and enable sentinel.service with systemd:

[Unit]
Description=Arkeo Sentinel (Provider)
After=network-online.target

[Service]
User=<your-os-user>
WorkingDirectory=/home/<your-os-user>
ExecStart=/home/<your-os-user>/go/bin/sentinel --config /home/<your-os-user>/sentinel_config.yaml
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
Environment="CLAIM_STORE_LOCATION=/home/<your-os-user>/.arkeo/claims"
Environment="CONTRACT_CONFIG_STORE_LOCATION=/home/<your-os-user>/.arkeo/contract_configs"
Environment="DESCRIPTION=Arkeo Core Multi-Provider: Core Provider of Blockchain Nodes and Indexers."
Environment="EVENT_STREAM_HOST=127.0.0.1:26657"
Environment="FREE_RATE_LIMIT=10"
Environment="LOCATION=USA, West Coast"
Environment="LOG_LEVEL=debug"
Environment="MONIKER=arkeo-core-multi-provider"
Environment="PORT=3636"
Environment="PROVIDER_CONFIG_STORE_LOCATION=/home/<your-os-user>/.arkeo/provider_configs"
Environment="PROVIDER_HUB_URI=http://127.0.0.1:1317"
Environment="PROVIDER_PUBKEY=<your-bech32-pubkey>"
Environment="SOURCE_CHAIN=arkeo-main-v2"
Environment="WEBSITE=https://arkeo.network"

[Install]
WantedBy=multi-user.target

Activate the service:

sudo systemctl daemon-reload
sudo systemctl enable --now sentinel

Automate Settlements

Set up your settlement script to use the "hot wallet" (keyring-backend test) for automated signing:

  • Do not store hot wallet mnemonics in plain text or public repositories.

  • Regularly monitor hot wallet transactions and balances.

Monitoring and Verification

Check provider status:

arkeod query arkeo show-provider <your-bech32-pubkey>

Metadata API:

curl http://localhost:3636/metadata.json

Logs:

journalctl -u sentinel -f

Additional Recommendations

  • Run your own full node for reliable and timely event processing.

  • Limit reliance on third-party RPC providers to maintain control over settlements.

  • Rotate and audit hot wallet keys regularly.

Last updated