Rail EVM, Polygon e signer remoto#
Il rail EVM consente di pubblicare una rappresentazione permissioned di uno strumento già governato da CertiExch. Nella configurazione prevista il contratto esterno è un mirror: la fonte autoritativa delle posizioni resta il registro CertiExch.
Architettura a due livelli#
Registro CertiExch
→ riserva o autorizza una quantità
→ adapter LedgerRailInterface
→ provider EVM
→ signer remoto
→ contratto mirror su Polygon/EVM
Il core dialoga con LedgerRailInterface, non con Polygon direttamente. Questo consente di sostituire la famiglia di rail senza modificare la logica di dominio.
Componenti#
| Componente | Funzione |
|---|---|
LedgerRailInterface | Contratto generico del dominio: deploy, mint, transfer, lock, release, burn, lettura e verifica. |
EvmLedgerRailAdapter | Traduce le operazioni generiche verso il provider EVM. |
EvmRailProviderInterface | Contratto tecnico EVM. |
| Provider simulato | Riproduce contratti, saldi, hold, eventi e blocchi nello store di test. |
| Provider JSON-RPC | Legge la rete EVM e delega le scritture al signer remoto. |
RemoteLedgerWalletProvider | Invia una richiesta firmabile a un servizio esterno che detiene la chiave. |
CertiExchBondMirror | Contratto di rappresentazione permissioned. |
Funzioni del mirror#
Il contratto di riferimento supporta:
- deployment del mirror;
- allowlist degli indirizzi;
- mint collegato a una riserva;
- burn collegato a un lock;
- hold per il settlement;
- esecuzione o rilascio dell’hold;
- lettura di balance e total supply;
- eventi on-chain.
La presenza di un saldo on-chain non deve essere interpretata da sola come titolarità giuridica fuori dal modello approvato.
Public-permissioned#
Polygon è una rete pubblica, ma le operazioni del mirror restano controllate tramite:
- allowlist;
- ruoli del contratto;
- istruzioni originate dal core;
- signer separato;
- riconciliazione con le riserve del registro.
Pubblico non significa che chiunque possa scrivere o che dati personali debbano essere pubblicati.
Provider JSON-RPC#
Il provider reale:
- accetta solo endpoint HTTPS;
- verifica il chain ID atteso;
- legge blocco corrente, log, balance e supply;
- non contiene la chiave privata;
- delega ogni scrittura al wallet provider esterno.
Se il chain ID osservato è diverso da quello configurato, il provider deve interrompere l’operazione.
Signer remoto#
Il signer remoto è un confine di sicurezza. La richiesta contiene:
network
network_id
key_reference
operation
payload
request_id
L’adattatore applica:
- HTTPS obbligatorio;
- TLS peer e hostname verification;
- nessun redirect;
- endpoint senza credenziali incorporate;
- bearer token separato;
- key reference controllata;
- timeout limitato;
- idempotency key;
- risposta entro 1 MiB;
- transaction hash EVM valido;
- correlazione del request ID.
La chiave privata non entra nel processo PHP né negli export di continuità.
Pubblicare un mirror#
Mint e riserva#
Il mint deve essere preceduto da una riserva o da un lock nel registro. Il riferimento della riserva collega la quantità on-chain alla posizione autoritativa.
Non eseguire mint “di comodo” per far quadrare la supply. Prima correggere la causa nel registro o usare una procedura di rettifica autorizzata.
Hold e DvP#
L’hold rappresenta una quantità bloccata in attesa del settlement. Deve contenere:
- hold/transfer ID;
- indirizzo cedente;
- indirizzo cessionario;
- unità;
- settlement reference.
Esecuzione o rilascio devono essere idempotenti e collegati allo stesso oggetto DvP.
Riconciliazione#
La metrica essenziale è:
supply osservata sul rail
− unità riservate/mintate nel registro
= differenza
Valore zero significa coerenza quantitativa, non assenza di ogni altro problema. Verificare anche:
- contract address;
- chain ID;
- allowlist;
- saldi per indirizzo;
- hold aperti;
- eventi;
- cursor di acquisizione;
- finalità dei blocchi;
- transazioni orfane o duplicate.
Log esterni#
Prima di acquisire un log:
- verificare chain ID;
- verificare contract address autorizzato;
- verificare topic/event signature;
- verificare transaction hash e block hash;
- attendere il numero di conferme previsto;
- decodificare con ABI approvata;
- verificare non duplicazione;
- correlare con un’istruzione del core.
Explorer pubblico#
Il link all’explorer serve a consultare la transazione, ma non sostituisce la verifica programmatica. L’explorer è un’interfaccia di terzi e può mostrare etichette o dati derivati non controllati da CertiExch.
Qualificazione produttiva#
Prima di usare il rail reale servono:
- smart contract auditato;
- governance di upgrade o immutabilità;
- HSM/KMS o custodia qualificata;
- policy di nonce e gas;
- gestione reorg e finalità;
- monitoraggio RPC multiplo;
- allowlist governance;
- runbook chiave compromessa;
- capacity e costi;
- privacy assessment;
- riconciliazione indipendente;
- exit strategy verso altro rail.
