Saltar a contenido

Edge Subscriber Connection

By connecting to DoubleZero I agree to the DoubleZero Terms of Use. Please note that the data is for your internal purposes only and may not be retransmitted (see Section 2(e)).

Step 1: DoubleZero Setup

1. Complete Setup

Install the Solana CLI.

Follow the setup instructions to install and configure the DoubleZero client.

If you have previously setup DoubleZero, ensure you have the latest Doublezero-Solana CLI with sudo apt update && sudo apt install doublezero-solana

2. Configure the Firewall

Allow GRE, BGP, PIM, and shred traffic.

iptables:

sudo iptables -A OUTPUT -p gre -j ACCEPT
sudo iptables -A INPUT -i doublezero1 -s 169.254.0.0/16 -d 169.254.0.0/16 -p tcp --dport 179 -j ACCEPT
sudo iptables -A OUTPUT -o doublezero1 -s 169.254.0.0/16 -d 169.254.0.0/16 -p tcp --dport 179 -j ACCEPT
sudo iptables -A OUTPUT -o doublezero1 -p pim -j ACCEPT
sudo iptables -A INPUT -i doublezero1 -p udp --dport 7733 -j ACCEPT
sudo iptables -A INPUT -i doublezero0 -p udp --dport 44880 -j ACCEPT

UFW:

sudo ufw allow proto gre from any to any
sudo ufw allow in on doublezero1 from 169.254.0.0/16 to 169.254.0.0/16 port 179 proto tcp
sudo ufw allow out on doublezero1 from 169.254.0.0/16 to 169.254.0.0/16 port 179 proto tcp
sudo ufw allow out on doublezero1 proto pim from any to any
sudo ufw allow in on doublezero1 to any port 7733 proto udp
sudo ufw allow in on doublezero0 to any port 44880 proto udp

3. Enable the Reconciler

The reconciler monitors onchain state and automatically provisions tunnels when your seat is allocated. It is not enabled by default.

doublezero enable

4. Retrieve the Server's DoubleZero Identity

Review your DoubleZero Identity. This identity will be used to create the connection between your machine and DoubleZero.

doublezero address

Output:

YourDoubleZeroAddress11111111111111111111111111111


Step 2: Set Up Your Wallet

1. Create a Solana Keypair

The doublezero-solana CLI uses a standard Solana keypair for onchain seat management. If you don't have one:

solana-keygen new

This writes to ~/.config/solana/id.json. To use a different path, pass --keypair <path> to any doublezero-solana command.

Print your wallet address:

solana address

2. Fund Your Wallet

Your wallet needs two tokens:

  • SOL — for Solana transaction fees. Transfer SOL to the wallet address printed above.
  • USDC — for seat funding. The CLI pulls from your wallet's Associated Token Account (ATA) for the mainnet USDC mint (EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v).

Step 3: Buy a Seat

1. Find Your Nearest Device

Before buying a seat, identify the device with the lowest latency from your machine:

doublezero latency

Note the device code from the lowest-latency result (e.g., <Device_Name>). You'll use this when purchasing a seat.

2. Check Pricing

View current device pricing before committing funds. Pricing has two components: a base metro price and a per-device premium. Prices update each epoch. You can also view pricing and availability here.

All devices:

doublezero-solana shreds price

Specific device:

doublezero-solana shreds price --device-code <Device_Name>
doublezero-solana shreds price --device <PUBKEY>

All devices in a metro:

doublezero-solana shreds price --metro <PUBKEY>

Output columns: Device Code, Metro Code, Metro Name, Status, Settled Seats, Available Seats, Base Price (USDC), Premium (USDC), Epoch Price (USDC).

The epoch price is the total cost per epoch for a seat on that device (base + premium). Use --wide to show full pubkeys, or --json for JSON output.

3. Buy a Seat

Purchase a seat with a single command. This initializes your seat, funds the escrow, and requests allocation:

doublezero-solana shreds pay \
  --device-code <Device_Name> \
  --client-ip <Target_IP> \
  --amount <Cost_Of_Seat>

Parameters:

Flag Description
--device <PUBKEY> Target device by public key (mutually exclusive with --device-code)
--device-code <CODE> Target device by human-readable code (e.g., <Device_Name>)
--client-ip <IP> Your machine's public IPv4 address
--amount <USDC> USDC to fund (decimal format, e.g. 100 = 100 USDC). Must meet the minimum epoch price.
--source-token-account <PUBKEY> Custom USDC source account (defaults to your wallet's ATA)
--accept-partial-epoch Skip the epoch-remaining warning (see below)
--fee-payer <PATH> Use a different wallet for SOL transaction fees
--dry-run Simulate the transaction without executing it
--with-compute-unit-price <PRICE> Set a compute unit price for faster inclusion during congestion

Once your seat is allocated, the daemon establishes the GRE tunnel automatically. Check your connection with:

doublezero status

Epoch Timing

Seats are allocated per Solana epoch (~2 days). If less than 10% of the current epoch remains when you pay, the CLI warns that your seat will be allocated immediately but only covers the remainder of the current epoch. A separate payment will be deducted from your escrow when the next epoch begins.

It is advisable to fund for more than 1 epoch at a time so you don't lose your seat. You can check the current time left in an epoch here.

You can bypass this warning with --accept-partial-epoch.

Keep Your Escrow Funded

If your escrow balance is below the epoch price at settlement, your seat will not be allocated, the tunnel will be torn down, and you lose your accumulated tenure. Tenure determines your priority for future epochs — losing it means you compete as a newcomer again.

You may overfund this account to fund multiple epochs. Each settlement deducts one epoch's price from your escrow, and the remaining balance carries forward. For example, funding 5x the per-epoch price keeps your seat active for up to 5 epochs without re-funding.

To top up your escrow, run shreds pay again at any time:

doublezero-solana shreds pay \
  --device-code <Device_Name> \
  --client-ip <Target_IP> \
  --amount 500

Note that the Target_IP must be a public ipv4 address on the machine which will be receiving shreds. You can find this by running a command like curl -4 ifconfig.me on the target machine.

Monitor Seats

View your active seats and escrow balances:

All your seats:

doublezero-solana shreds list

Filter by device:

doublezero-solana shreds list --device-code <Device_Name>

Filter by client IP:

doublezero-solana shreds list --client-ip <Target_IP>

Filter by wallet:

doublezero-solana shreds list --withdraw-authority <PUBKEY>

Output columns: Device Code, Client IP, Tenure, Balance (USDC), Est. Epochs Paid.

The "Est. Epochs Paid" column shows how many epochs your current balance covers at current pricing. If prices change, this estimate adjusts.

Withdraw Funds

Close your escrow and refund remaining USDC to your wallet:

doublezero-solana shreds withdraw \
  --device-code <Device_Name> \
  --client-ip <Target_IP>

You can identify the device by either --device <PUBKEY> or --device-code <CODE>, same as other commands.

To send the refund to a different token account:

doublezero-solana shreds withdraw \
  --device-code <Device_Name> \
  --client-ip <Target_IP> \
  --refund-token-account <PUBKEY>

Withdrawing means you lose your seat and accumulated tenure.


Expected Port

Leader Shreds and high-stake Retransmit Shreds will arrive over port 7733, over the doublezero1 interface. The doublezero0 interface is for unicast traffic. Port 5765 is a heartbeat monitor from the shred publishers — this will not contain shreds.

GRE Tunnel Header — XDP

Shred traffic delivered over the network is GRE-encapsulated. You may need to strip the GRE header before feeding data into your existing pipeline (e.g. an XDP-based deshredder).


Tools and Dashboards

Edge Scoreboard

Scoreboard benchmarks shred delivery speed across DoubleZero Edge and other providers, using slot-level data to compare performance in real time. Use this dashboard to see a view of Edge shreds win rates against other providers. You can view results for leader shreds only, in addition to full feed comparison. You can also drill down by region to see expected performance.

Edge Publishers

The "Publishing Shreds" metric at the top left of the dashboard shows the total percent of stake weight of all Solana validators publishing leader shreds on DoubleZero Edge. You can see details for each publisher on the network.

Edge Subscribers, Devices and Activity

You can easily search your Client IP on this page for subscribed seats and view status. Click through specific seat subscriptions to view payment history and activity. You can also view available devices on the Devices page and all recent activity on the Activity page.


Troubleshooting

If you run into an issue not covered here, please reach out over your existing channel before working around it. If you do not have a channel, please search Discord and open a ticket if required.

Ensure your Client is up to date:

Run: sudo apt update && sudo apt install doublezero-solana

Insufficient escrow balance

If your escrow balance is below the epoch price at settlement, the seat is not allocated, the tunnel is torn down, and tenure is lost. Top up with shreds pay before the next settlement.

Seat not allocated after paying

  • You may have paid late in the epoch — the seat takes effect next epoch.
  • All seats on the device may be taken by higher-tenure incumbents. Check available seats with shreds price.
  • If you withdrew before settlement, the seat was not eligible.

Tunnel not coming up

  1. Verify the daemon is running: sudo systemctl status doublezerod
  2. Verify the reconciler is enabled: doublezero enable
  3. Verify firewall rules are in place (GRE, BGP, PIM, shred traffic on doublezero1, port 44880 on doublezero0)
  4. Verify your seat is active for the current epoch: doublezero-solana shreds list
  5. Check your connection status: doublezero status

The daemon's client IP is auto-discovered from your host's public IP — verify it matches the --client-ip used in your seat commands.

Epoch warning prompt

The CLI warns when less than 10% of the epoch remains. Your options:

  • Accept with --accept-partial-epoch if you want the seat immediately
  • Wait for the next epoch to get a full epoch's coverage

"Amount is below the current price"

The pay command validates your amount against the minimum epoch price (metro base + device premium). Use shreds price to check current pricing and increase your amount.

"Multicast user already exists"

You already have an active subscription through a different path. Disconnect first with doublezero disconnect, then retry shreds pay.