NO CUSTODY
Nessuna custodia di seed o private key.
La documentazione è centrata sulla sicurezza transazionale: ingresso SafeSign, analisi Security Core, autorizzazione e stato reale delle integrazioni.

Questi vincoli contano più del framework.
Nessuna custodia di seed o private key.
Non mutare il payload di wallet/dApp.
Niente auto-sign o auto-broadcast; autorizzazione esplicita.
Evidence assente = incertezza, mai silent allow.
Preserva il request originale e aggiungi evidenza leggibile.
Ricevi request e contesto.
Normalizza metodo, params, typed data, approvals o PSBT.
Aggiungi policy, destination e simulation quando disponibili.
Mostra rischio/incertezza; l'utente mantiene l'autorizzazione.
Esiste uno scaffold Chrome/Brave che avvolge ethereum.request e attende continua/rifiuta. Serve ancora la pipeline production.
// browser/page context — conceptual integration boundary
const original = ethereum.request.bind(ethereum)
ethereum.request = async (request) => {
const decision = await reviewWithSafeSign(request)
if (decision !== "continue") throw new Error("User rejected")
return original(request) // forward unchanged
}Solo preferenze locali non sensibili; mai keys, seed, raw signature o cronologia completa.
Ogni superficie dichiara il suo confine reale.
Guard — base Manifest V3 esiste; build/distribuzione production separati.
Wallet — UI esiste; flussi reali via SafeSign.
Relay — analisi rotte/fee/PSBT esiste; firma/execution future.
Preserva la request, deriva evidenza strutturata, registra unknowns e restituisci una decisione spiegabile senza assumere signing authority.
Cattura origin, chain, method, payload hash e intento prima dell'analisi.
Mantieni fatti, provenance, freshness, contraddizioni e unknowns separati.
Restituisci ALLOW, WARN, REVIEW o BLOCK con reason codes e payload hash revisionato.
Preserva la request, deriva evidenza strutturata, registra unknowns e restituisci una decisione spiegabile senza assumere signing authority.
{
"origin":"https://app.example",
"chainId":1,
"method":"eth_signTypedData_v4",
"payloadHash":"sha256:...",
"intent":"swap 1 ETH"
}{
"decision":"REVIEW",
"reasonCodes":["AUTHORITY_EXCEEDS_INTENT"],
"unknowns":["spender_reputation"],
"payloadHash":"sha256:..."
}Se il payload cambia dopo la review, la decisione è invalida e serve nuova review.