[WIP] E2E Relay Own Your Own Service
pocketd keys add olshansky_anvil_test_service_owner
pocketd keys add olshansky_anvil_test_app
pocketd keys add olshansky_anvil_test_gateway
pocketd keys add olshansky_anvil_test_supplierExport addresses:
export OLSHANSKY_ANVIL_TEST_SERVICE_OWNER_ADDR=$(pocketd keys show olshansky_anvil_test_service_owner -a)
export OLSHANSKY_ANVIL_TEST_APP_ADDR=$(pocketd keys show olshansky_anvil_test_app -a)
export OLSHANSKY_ANVIL_TEST_GATEWAY_ADDR=$(pocketd keys show olshansky_anvil_test_gateway -a)
export OLSHANSKY_ANVIL_TEST_SUPPLIER_ADDR=$(pocketd keys show olshansky_anvil_test_supplier -a)Fund accounts:
pocketd tx bank send $FUNDING_ADDR $OLSHANSKY_ANVIL_TEST_SERVICE_OWNER_ADDR 100000000upokt --network=beta --fees=100upokt --unordered --timeout-duration=5s --yes
pocketd tx bank send $FUNDING_ADDR $OLSHANSKY_ANVIL_TEST_APP_ADDR 100000000upokt --network=beta --fees=100upokt --unordered --timeout-duration=5s --yes
pocketd tx bank send $FUNDING_ADDR $OLSHANSKY_ANVIL_TEST_GATEWAY_ADDR 100000000upokt --network=beta --fees=100upokt --unordered --timeout-duration=5s --yes
pocketd tx bank send $FUNDING_ADDR $OLSHANSKY_ANVIL_TEST_SUPPLIER_ADDR 100000000upokt --network=beta --fees=100upokt --unordered --timeout-duration=5s --yesExport private keys:
pocketd keys export olshansky_anvil_test_service_owner --unsafe --unarmored-hex --yes
pocketd keys export olshansky_anvil_test_app --unsafe --unarmored-hex --yes
pocketd keys export olshansky_anvil_test_gateway --unsafe --unarmored-hex --yes
pocketd keys export olshansky_anvil_test_supplier --unsafe --unarmored-hex --yesImport Accounts to Vultr Instance
SSH into your Vultr instance and import the accounts.
Replace <hex> with the actual hex private keys exported in the previous step:
ssh root@$VULTR_INSTANCE_IP
# Import accounts using the hex private keys from previous step
pocketd keys import-hex --keyring-backend=test olshansky_anvil_test_service_owner <hex>
pocketd keys import-hex --keyring-backend=test olshansky_anvil_test_app <hex>
pocketd keys import-hex --keyring-backend=test olshansky_anvil_test_gateway <hex>
pocketd keys import-hex --keyring-backend=test olshansky_anvil_test_supplier <hex>(Direct link to Import Accounts to Vultr Instance: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#import-accounts-to-vultr-instance)
Service Setup
(Direct link to Service Setup: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#service-setup)
Create Service
Create a new service on-chain for your Anvil test environment:
# Format: pocketd tx service add-service <service_id> <name> <compute_units_per_relay>
pocketd tx service add-service olshansky_anvil_test "Test service for olshansky by olshansky" 7 --keyring-backend=test --from=olshansky_anvil_test_service_owner --network=beta --yes --fees=200upokt(Direct link to Create Service: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#create-service)
Create Application
Create the application configuration:
cat <<EOF > stake_app_config.yaml
stake_amount: 60000000000upokt # 60,000 POKT minimum for testnet
service_ids:
- "olshansky_anvil_test"
EOFStake the application:
pocketd tx application stake-application --config=stake_app_config.yaml --keyring-backend=test --from=olshansky_anvil_test_app --network=beta --yes --fees=200upokt --unordered --timeout-duration=1mVerify the application:
pocketd query application show-application $(pocketd keys show olshansky_anvil_test_app -a --keyring-backend=test) --network=beta(Direct link to Create Application: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#create-application)
Create Supplier
Create the supplier configuration:
cat <<EOF > stake_supplier_config.yaml
owner_address: $(pocketd keys show olshansky_anvil_test_supplier -a --keyring-backend=test)
operator_address: $(pocketd keys show olshansky_anvil_test_supplier -a --keyring-backend=test)
stake_amount: 100000000upokt # 100 POKT minimum for testnet
default_rev_share_percent:
$(pocketd keys show olshansky_anvil_test_supplier -a --keyring-backend=test): 100
services:
- service_id: "olshansky_anvil_test"
endpoints:
- publicly_exposed_url: http://$(curl ifconfig.me):8545 # Uses your public IP
rpc_type: JSON_RPC
EOFStake the supplier:
pocketd tx supplier stake-supplier --config=stake_supplier_config.yaml --keyring-backend=test --from=olshansky_anvil_test_supplier --network=beta --yes --fees=200upokt --unordered --timeout-duration=1mVerify the supplier:
pocketd query supplier show-supplier $(pocketd keys show olshansky_anvil_test_supplier -a --keyring-backend=test) --network=beta(Direct link to Create Supplier: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#create-supplier)
Anvil Node Setup
(Direct link to Anvil Node Setup: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#anvil-node-setup)
Install Foundry
curl -L https://foundry.paradigm.xyz | bash
source ~/.foundry/bin
foundryup(Direct link to Install Foundry: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#install-foundry)
Start Anvil
Create a startup script:
cat <<EOF> start_anvil.sh
#!/bin/bash
# Run Anvil in background with nohup, redirecting output to anvil.log
nohup anvil --port 8545 > anvil.log 2>&1 &
echo "Anvil started on port 8545. Logs: anvil.log"
EOF
chmod +x start_anvil.shStart Anvil:
./start_anvil.shVerify Anvil is running:
# Check if Anvil process is running
ps aux | grep anvil
# View recent logs
tail -20 anvil.logTest the connection:
curl -X POST http://127.0.0.1:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "eth_blockNumber", "params": []}'(Direct link to Start Anvil: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#start-anvil)
RelayMiner Configuration
(Direct link to RelayMiner Configuration: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#relayminer-configuration)
Create RelayMiner Config
cat <<EOF> relay_miner_config.yaml
default_signing_key_names:
- olshansky_anvil_test_supplier
smt_store_path: /root/.pocket/smt
pocket_node:
query_node_rpc_url: https://shannon-testnet-grove-rpc.beta.poktroll.com
query_node_grpc_url: https://shannon-testnet-grove-grpc.beta.poktroll.com:443
tx_node_rpc_url: https://shannon-testnet-grove-rpc.beta.poktroll.com
suppliers:
- service_id: "olshansky_anvil_test" # change if not using Anvil
service_config:
backend_url: "http://127.0.0.1:8545" # change if not using Anvil
listen_url: http://0.0.0.0:8545 # must match Supplier's public URL
metrics:
enabled: false
addr: :9090
pprof:
enabled: false
addr: :6060
EOF(Direct link to Create RelayMiner Config: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#create-relayminer-config)
Start RelayMiner
Configure firewall to allow external connections on port 8545:
sudo ufw allow 8545/tcpStart the RelayMiner:
pocketd relayminer start --config=relay_miner_config.yaml --chain-id=pocket-beta --keyring-backend=test --grpc-insecure=false(Direct link to Start RelayMiner: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#start-relayminer)
Testing
(Direct link to Testing: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#testing)
Send a Test Relay
In a separate shell, send a test relay:
pocketd relayminer relay --keyring-backend=test \
--app=$(pocketd keys show olshansky_anvil_test_app -a --keyring-backend=test) \
--supplier=$(pocketd keys show olshansky_anvil_test_supplier -a --keyring-backend=test) \
--node=https://shannon-testnet-grove-rpc.beta.poktroll.com \
--grpc-addr=shannon-testnet-grove-grpc.beta.poktroll.com:443 \
--grpc-insecure=false \
--payload="{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"eth_blockNumber\", \"params\": []}"(Direct link to Send a Test Relay: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#send-a-test-relay)
Verify Claims
Check if your RelayMiner created any claims:
pocketd query txs --node=https://shannon-testnet-grove-rpc.beta.poktroll.com \
--query="tx.height>20000 AND message.action='/pocket.proof.MsgCreateClaim'" \
--limit 10 --page 1 -o json | jq '[.txs[].tx.body.messages[] | select(."@type" == "/pocket.proof.MsgCreateClaim") | .supplier_operator_address] | unique'(Direct link to Verify Claims: https://dev.poktroll.com/operate/cheat_sheets/relays_to_your_own_service_cheatsheet#verify-claims)
Next Steps
Your RelayMiner should now be running and processing relays.
Monitoring and troubleshooting:
Monitor RelayMiner logs for incoming relay requests
Check Anvil logs at anvil.log for backend activity
Query claims periodically to verify relay processing
Use
pocketd query proof list-claims --network=betato see all recent claims
Common issues:
Port conflicts: Ensure port 8545 is not already in use (
netstat -tlnp | grep 8545)Firewall blocking: Verify UFW allows port 8545 (
sudo ufw status)Session not started: Relays only work during active sessions; check session timing with
pocketd query session get-session
Was this helpful?
