Geolocalizzazione
Il servizio di Geolocalizzazione di DoubleZero aiuta gli utenti a determinare la posizione fisica dei dispositivi utilizzando misurazioni di latenza. Le misurazioni RTT (round-trip time) tra infrastrutture con posizione nota e un dispositivo target forniscono prove firmate crittograficamente che un dispositivo si trova entro una certa distanza da un punto specifico. La registrazione onchain delle misurazioni sul DoubleZero Ledger è prevista per una versione futura.
I casi d'uso includono la conformità normativa (ad es., GDPR — dimostrare che i validatori operano all'interno dell'UE), audit sulla distribuzione geografica e qualsiasi applicazione che necessiti di prove verificabili sulla posizione di un dispositivo o IP.
Come funziona
flowchart LR
subgraph DZ["DoubleZero Network"]
DZD["DZD\n(known location)"]
Probe["geoProbe\n(bare metal server)"]
DZD -- "TWAMP\n(continuous latency)" --> Probe
end
subgraph Target["Target Device"]
T["Target\n(validator / server)"]
end
Probe -- "RTT measurement" --> T
T -- "RTT response" --> Probe
Probe -. "signed offset" .-> T
Il diagramma seguente mostra i tre tipi di flusso delle sonde — Outbound, OutboundIcmp e Inbound — che differiscono nel modo in cui il geoProbe comunica con il target:
flowchart TB
subgraph out["Outbound Flow (TWAMP)"]
direction LR
P1["geoProbe"] -- "TWAMP probe" --> T1["Target"]
T1 -- "TWAMP reply" --> P1
end
subgraph icmp["OutboundIcmp Flow"]
direction LR
P3["geoProbe"] -- "ICMP Echo Request" --> T3["Target"]
T3 -- "ICMP Echo Reply" --> P3
end
subgraph in["Inbound Flow (NAT-friendly)"]
direction LR
T2["Target"] -- "signed packets" --> P2["geoProbe"]
P2 -- "reply" --> T2
end
La geolocalizzazione utilizza una catena di misurazione a tre livelli:
DZD (known location) ◄──TWAMP──► geoProbe ◄──RTT──► Target device
- DZD <-> geoProbe: TWAMP misura continuamente la latenza tra il DoubleZero Device e la sonda. I DZD hanno coordinate geografiche note e fisse registrate sul DZ Ledger.
- geoProbe <-> Target: L'RTT viene misurato tra la sonda e il dispositivo da localizzare.
I risultati dell'offset sono firmati crittograficamente e consegnati tramite UDP al target o a una destinazione alternativa specificata dall'utente.
Importante: La geolocalizzazione riporta solo l'RTT — non la distanza dedotta o le coordinate. Un modo comune di utilizzarlo è dividere l'RTT per 2, e poi moltiplicare per la velocità della luce nel vetro (~200km/ms) per ottenere un raggio intorno alle coordinate del DZD entro il quale si trova il target. L'interpretazione dell'RTT (ad es., il calcolo di un raggio di distanza massima) è a vostra discrezione.
Tipi di flusso delle sonde
Esistono tre modi in cui una sonda può misurare un target:
| Flusso | Chi inizia | Protocollo | Da usare quando |
|---|---|---|---|
| Outbound | Sonda -> Target | TWAMP | Il target ha un IP pubblico, una porta in ingresso aperta e può eseguire un riflettore TWAMP |
| OutboundIcmp | Sonda -> Target | ICMP echo | Il target ha un IP pubblico ma non può eseguire un riflettore TWAMP (o TWAMP è bloccato dal firewall) |
| Inbound | Target -> Sonda | TWAMP firmato | Il target non può accettare connessioni in ingresso, o si vuole verificare la posizione di una chiave di firma |
In tutti i casi, la misurazione DZD <-> geoProbe avviene nello stesso modo. Solo la direzione e il protocollo della comunicazione geoProbe <-> target differiscono.
Specifica Tecnica
Per la specifica tecnica completa del sistema di verifica della geolocalizzazione, inclusi i dettagli sulla firma crittografica e il protocollo di misurazione, consultare RFC 16: Geolocation Verification.
Prerequisiti
1. DoubleZero ID con crediti
Gli utenti della geolocalizzazione necessitano di un DoubleZero ID finanziato. Non è necessario connettersi alla rete DoubleZero (nessun pass di accesso richiesto), ma la propria chiave necessita di crediti sul DoubleZero ledger per creare un account utente e gestire i target — ogni operazione di aggiunta/rimozione target costa crediti.
Se non hai un DoubleZero ID:
doublezero keygen
doublezero address # get your pubkey
Contatta il team DoubleZero con la tua pubkey per ottenere il finanziamento del tuo ID. Finanzialo con un importo superiore alla media se prevedi di aggiungere e rimuovere target in modo dinamico.
2. Account token 2Z
È necessario un account 2Z token. Le tariffe del servizio vengono detratte da questo account su base per-epoch.
Installazione
Su un computer di gestione:
curl -1sLf https://dl.cloudsmith.io/public/malbeclabs/doublezero/setup.deb.sh | sudo -E bash
sudo apt install doublezero
Su un target per Inbound o TWAMP Outbound:
curl -1sLf https://dl.cloudsmith.io/public/malbeclabs/doublezero/setup.deb.sh | sudo -E bash
sudo apt install doublezero-geoprobe-target
doublezero-geoprobe-target (outbound) e doublezero-geoprobe-target-sender (inbound)
ICMP Outbound
I target outbound-icmp non richiedono l'installazione di alcun software.
Controllare il proprio saldo
doublezero balance
Configurazione
Passo 1: Creare un utente di geolocalizzazione
doublezero geolocation user create \
--env testnet \
--code <your-user-code> \
--token-account <your-2Z-token-account>
--code: un identificatore breve e univoco per il tuo account (ad es.myorg)--token-account: la chiave pubblica del tuo account 2Z token — le tariffe del servizio vengono detratte da qui
Attivazione dell'account
Dopo aver creato un utente, contatta la DoubleZero Foundation per attivare il tuo account. Lo stato del pagamento deve essere contrassegnato come attivo prima che il probing possa iniziare.
Passo 2: Elencare le sonde disponibili
doublezero geolocation probe list
Annota il code o il public_ip, e il signing_pubkey (per i target inbound) della sonda che desideri utilizzare.
Passo 3: Aggiungere un target
Usa questo flusso se il tuo target ha un IP pubblico, una porta in ingresso aperta e può eseguire un riflettore TWAMP.
doublezero geolocation user add-target \
--user <your-user-code> \
--type outbound \
--probe <probe-code> \
--target-ip <target-public-ip>
--probe: il codice del geoProbe che misurerà il target (ad es. ams-mn-gp1)
--ip-address: l'indirizzo IPv4 pubblico del dispositivo target
Usa questo flusso se il tuo target ha un IP pubblico ma non può eseguire un riflettore TWAMP, o se il traffico TWAMP è bloccato dal firewall. Il target deve solo rispondere alle richieste ICMP echo (ping) — non è richiesto alcun software aggiuntivo.
doublezero geolocation user add-target \
--user <your-user-code> \
--type OutboundIcmp \
--probe <probe-code> \
--ip-address <target-public-ip>
--probe: il codice del geoProbe che misurerà il target (ad es. ams-mn-gp1)
--ip-address: l'indirizzo IPv4 pubblico del dispositivo target
Destinazione dei risultati
I target Outbound ICMP funzionano solo se il tuo utente ha una destinazione alternativa per i risultati impostata. (Vedi Passo 3b)
Usa questo flusso se il tuo target è dietro NAT o non può accettare connessioni in ingresso.
doublezero geolocation user add-target \
--user <your-user-code> \
--type inbound \
--probe <probe-code> \
--target-pk <target-keypair-pubkey>
--probe: il codice del geoProbe che misurerà il target (ad es. ams-mn-gp1)
--target-pk: chiave pubblica della coppia di chiavi che il target userà per firmare i messaggi — la sonda accetta solo messaggi da chiavi pubbliche registrate
Passo 3b: Impostare una destinazione dei risultati (opzionale)
Configura un host:port alternativo dove vengono consegnati i risultati compositi LocationOffset per qualsiasi tipo di target Outbound. Questo sostituisce l'invio del LocationOffset al target ed è configurato su base per-utente. Se è necessario un comportamento diverso per ogni target, è richiesto configurare due utenti, uno per ciascun tipo di comportamento desiderato.
La destinazione alternativa è utile per aggregare i risultati di più target verso un singolo endpoint. È obbligatoria per il probing ICMP.
doublezero geolocation user set-result-destination \
--user <your-user-code> \
--destination <host:port>
--destination: un indirizzo IPv4 pubblicamente raggiungibile o un nome di dominio valido con porta (ad es., 203.0.113.10:9000 o results.example.com:9000). Passa una stringa vuota per cancellare.
Usa user get per verificare la tua destinazione dei risultati:
doublezero geolocation user get --user <your-user-code>
Passo 4: Eseguire l'applicazione target
Sia i flussi outbound che inbound richiedono l'esecuzione di un'applicazione sul dispositivo target. Implementazioni di riferimento con esempi sono disponibili in Go — puoi eseguirle direttamente o usarle come punto di partenza per la tua integrazione.
Per il probing outbound, il dispositivo target deve eseguire un riflettore TWAMP in modo che il geoProbe possa misurare l'RTT. Esegui l'applicazione target sul dispositivo da misurare:
doublezero-geoprobe-target
Per il probing inbound, il dispositivo target deve eseguire un software che invia messaggi firmati alla sonda.
Sul dispositivo da misurare:
doublezero-geoprobe-target-sender \
-probe-ip <probe-ip> \
-probe-pk <probe-pubkey> \
-keypair <path-to-keypair.json>
-probe-ip: indirizzo IP del geoProbe (da probe list)
-probe-pk: chiave pubblica del geoProbe (da probe list)
-keypair: percorso alla coppia di chiavi la cui chiave pubblica è stata registrata come --target-pk nel Passo 3
Il target sender utilizza un meccanismo a doppia coppia di sonde: invia due sonde TWAMP pre-firmate in rapida successione. La risposta della sonda al secondo pacchetto include SinceLastRxNs — il tempo tra l'invio della risposta 0 da parte della sonda e la ricezione della sonda 1 — che funge da RTT misurato dalla sonda. Questo approccio a coppie fornisce una misurazione accurata dell'RTT anche quando il target non è in grado di eseguire un timestamping preciso a livello kernel.
Riferimento dei comandi
doublezero geolocation user
| Sottocomando | Descrizione |
|---|---|
create |
Crea un nuovo account utente di geolocalizzazione |
get |
Ottieni i dettagli di un utente specifico |
list |
Elenca tutti gli utenti di geolocalizzazione |
delete |
Elimina un utente |
add-target |
Aggiungi un target a un utente |
remove-target |
Rimuovi un target da un utente |
set-result-destination |
Imposta un host:port alternativo per la consegna degli offset |
update-payment |
Aggiorna lo stato del pagamento (uso fondazione) |
doublezero geolocation probe
| Sottocomando | Descrizione |
|---|---|
create |
Registra un nuovo geoProbe |
get |
Ottieni i dettagli di una sonda specifica |
list |
Elenca tutte le sonde |
update |
Aggiorna la configurazione della sonda |
delete |
Elimina una sonda |
add-parent |
Collega un DZD come parent della sonda |
remove-parent |
Rimuovi un DZD parent |
Flag globali
| Flag | Descrizione |
|---|---|
--env |
Ambiente di rete: testnet, devnet o mainnet-beta |
--rpc-url |
Endpoint RPC DoubleZero personalizzato |
--keypair |
Percorso alla coppia di chiavi per la firma (richiesto per le operazioni di scrittura) |