Guide · Parte 7 di 7
Gestisci il tuo gateway
Verificare un record Label 309 non richiede nulla a nessuno: né account, né server, né chiavi. La pubblicazione è l'altra metà: mette una transazione su Cardano, e questo ha un costo. Il gateway è il tassello che lo paga. Custodisce il wallet Cardano finanziato che ancora il record (e un wallet Arweave per i file sigillati), costruisce e invia la transazione, la segue fino alla conferma e restituisce i record per la verifica in autonomia.
Nella maggior parte dei casi punti l'SDK o la CLI al gateway di qualcun altro.
Ma l'intero backend è open source, label-309-gateway,
un unico binario Rust più Postgres, così puoi gestirne uno tuo. Mettine in piedi
uno in privato per le tue app, oppure gestiscine uno come servizio a pagamento
per gli altri: è multi-tenant per definizione, con molti account e
molte API key sotto un'unica istanza. Questa guida ti accompagna da zero fino al
primo preventivo con prezzo, usando il Docker Compose di riferimento.
Prima di iniziare
Ti servono Docker e Docker Compose e un host con qualche gigabyte di spazio libero su disco. Tutto ciò che segue punta alla preprod di Cardano, l'assetto più sicuro per avviare un deployment. Il passaggio a mainnet è una scelta deliberata che fai più avanti, una volta che il deployment è finanziato e verificato.
Prendi il codice e scrivi la configurazione
Clona il repository e lavora dalla cartella deploy/, dove si trova il
docker-compose.yml di riferimento. Copia la configurazione di esempio e
adattala al tuo deployment: rete, fascia di fee, storage e prezzi:
git clone https://github.com/cardanowall/label-309-gateway
cd label-309-gateway/deploy
cp ../gateway.example.toml gateway.tomlL'esempio è commentato e punta già alla preprod, quindi si avvia così com'è per una prima prova.
Crea il keyring
Ogni chiave di firma usata dal gateway risiede in un unico file keyring cifrato
con age. Crealo, poi aggiungi una chiave Cardano (preprod), una chiave Arweave e
una chiave per il wrapping dei webhook. Questi passaggi keyring eseguono
direttamente il binario gateway: il keyring va creato su una macchina fidata,
copiando poi nel container soltanto il suo file cifrato, quindi per questo unico
passaggio procurati una build di release dal repository.
mkdir -p secrets
printf '%s' 'a-strong-passphrase' > secrets/gateway-keyring-passphrase
export GATEWAY_KEYRING_PASSPHRASE="$(cat secrets/gateway-keyring-passphrase)"
gateway keyring init --path secrets/gateway-keyring.age
gateway keyring add-cardano --path secrets/gateway-keyring.age --network preprod
gateway keyring add-arweave --path secrets/gateway-keyring.age
gateway keyring add-webhook-wrap --path secrets/gateway-keyring.age
chmod 600 secrets/*Ogni passaggio add- stampa l'indirizzo appena creato. Finanzia i due
indirizzi stampati: l'indirizzo Cardano paga le fee di ancoraggio, mentre
l'indirizzo Arweave alimenta i crediti di storage per i file sigillati. Poi
imposta la password del database che il compose legge:
echo 'POSTGRES_PASSWORD=a-strong-db-password' > .envMettilo in funzione
Prima prepara l'operatore. Questo comando applica le migrazioni e stampa il segreto root una sola volta: conservalo in un posto sicuro, è la credenziale principale del control plane:
docker compose run --rm gateway operator bootstrap --label acmePoi avvia Postgres e il gateway:
docker compose up -dRegistra un wallet, un account e una chiave
Il compose non pubblica di proposito alcuna porta sull'host: il data plane e il control plane condividono un unico socket, quindi esporlo esporrebbe anche il control plane. Pilota il control plane da dentro il container. Apri una shell:
docker compose exec gateway shPuntalo al control plane locale con il segreto root stampato da bootstrap, poi
registra il wallet Cardano finanziato (l'indirizzo stampato da
keyring add-cardano), crea un account, accreditalo e genera una API key del
data plane con gli scope per pubblicare:
export GATEWAY_CONTROL_URL=http://127.0.0.1:8080/control/v1
export GATEWAY_CONTROL_TOKEN='ctl_…the root secret from bootstrap…'
gateway admin wallet register primary addr_test1… preprod
gateway admin account create
gateway admin account fund <account_id> 10000000 "starter credit" # $10
gateway admin key create <account_id> poe:create,poe:read,account:readkey create stampa la API key che pilota il data plane. Questa, insieme all'URL
di base, è tutto ciò che serve a un'app.
Ottieni il tuo primo preventivo
Per raggiungere il data plane dall'host durante la configurazione, togli il
commento dalla mappatura ports di loopback (127.0.0.1:8080:8080) in
docker-compose.yml ed esegui di nuovo docker compose up -d: solo loopback,
mai 0.0.0.0. Poi blocca un prezzo con la API key che hai appena generato:
curl -sS -X POST http://127.0.0.1:8080/api/v1/poe/quote \
-H "Authorization: Bearer <your-api-key>" \
-H "Content-Type: application/json" \
-d '{"record_bytes":256,"recipient_count":0,"file_bytes_total":0}'La risposta contiene un quote_id valido per 15 minuti e il dettaglio dei costi.
Una chiamata di pubblicazione consuma quel quote_id in modo atomico insieme
all'addebito sul balance: la stessa struttura in due passaggi, blocca un
prezzo, poi invia, usata nelle guide dell'SDK. Il tuo gateway è attivo.
Come proseguire
Il binario in esecuzione espone il proprio riferimento API interattivo: il data
plane su /api/v1/docs e il control plane su /control/v1/docs, entrambi resi
completamente offline. Due documenti nel repository approfondiscono l'argomento:
il runbook per operatori
copre il finanziamento, le credenziali, la logica dei movimenti di denaro e
l'operatività quotidiana, mentre la
guida per gli integratori
spiega come costruirci sopra un prodotto.
Il data plane del tuo gateway è esattamente ciò che le guide dell'SDK e della CLI
intendono per URL di base. Sostituisci https://your-gateway.example con
l'indirizzo che ora controlli, distribuisci le API key e
pubblica la tua prima PoE attraverso un backend
che è interamente tuo.
Prima la preprod, la mainnet quando sei pronto
Tutto ciò che trovi qui punta alla preprod di Cardano, il modo sicuro per avviare un deployment.
Il passaggio a mainnet è una scelta deliberata: imposta network = "mainnet" nella
configurazione, aggiungi al keyring una chiave Cardano di mainnet e registra il wallet come
mainnet. Tutti e tre gli elementi devono concordare prima che il gateway ancori una transazione
reale.