NO CUSTODY
Sense custòdia de seed o claus privades.
La documentació se centra en seguretat transaccional: entrada a SafeSign, anàlisi de Security Core, autorització i estat real de cada integració.

Aquestes restriccions són més importants que el framework.
Sense custòdia de seed o claus privades.
No mutar el payload presentat per wallet o dApp.
Sense auto-sign ni auto-broadcast; autorització explícita.
Evidència absent és incertesa, mai permís silenciós.
Conserva el request original i afegeix evidència llegible.
Rebre request i context disponible.
Normalitzar mètode, paràmetres, typed data, approvals o PSBT.
Afegir policy, destí i simulació quan existeixin.
Mostrar risc i incertesa; l'usuari conserva l'autorització.
Hi ha un scaffold Chrome/Brave que embolcalla ethereum.request i espera continuar/rebutjar. Encara falta el pipeline de build 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
}Només preferències locals no sensibles; mai claus, seed, signatures crues o historial complet.
Cada superfície declara el seu límit real.
Guard — base Manifest V3 existent; build/distribució pendent.
Wallet — UI existent; fluxos reals han de passar per SafeSign.
Relay — anàlisi rutes/fees/PSBT existent; firma i execution són integració futura.
Conserva la request, deriva evidència, registra incògnites i retorna una decisió explicable sense assumir signing authority.
Captura origin, chain, method, payload hash i intent abans d'analitzar.
Mantén facts, provenance, freshness, contradiccions i unknowns com nodes separats.
Retorna ALLOW, WARN, REVIEW o BLOCK amb reason codes i payload hash revisat.
Conserva la request, deriva evidència, registra incògnites i retorna una decisió explicable sense assumir 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:..."
}Si el payload canvia després de la review, la decisió és invàlida i cal una nova review.