diff --git a/CHANGELOG.md b/CHANGELOG.md index bc6f9e6..3422621 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,19 @@ y el versionado sigue [Versionado Semántico](https://semver.org/lang/es/): --- +## [1.2.1] — 2026-06-02 + +### Cambiado + +- La herramienta de OP_RETURN pasa de decodificar y mostrar el contenido a + solo detectar su presencia y tamaño. Para auditar privacidad, lo relevante + es que una transacción contenga datos arbitrarios (revela uso de un + protocolo o servicio), no qué dicen esos datos. Además, la herramienta no + debe funcionar como visor de contenido arbitrario de la cadena. Ahora indica + cuántos outputs OP_RETURN hay y su tamaño en bytes, sin mostrar el contenido. + +--- + ## [1.2.0] — 2026-06-01 ### Añadido diff --git a/dashboard.html b/dashboard.html index f664ae2..91059e4 100644 --- a/dashboard.html +++ b/dashboard.html @@ -2586,7 +2586,7 @@ const tools = [ {id:"converter", label:"Conversor", icon:"⇄"}, {id:"validator", label:"Validar dirección", icon:"✓"}, - {id:"op_return", label:"OP_RETURN", icon:"📄"}, + {id:"op_return", label:"OP_RETURN", icon:"🔍"}, {id:"psbt", label:"PSBT", icon:"🔍"}, {id:"rawtx", label:"Tx Raw", icon:"⬡"}, {id:"verifysig", label:"Verificar firma", icon:"🔐"}, @@ -2737,7 +2737,11 @@ ); } - // ── Decodificador OP_RETURN ──────────────────────────────────────────── + // ── Detector OP_RETURN ───────────────────────────────────────────────── + // Indica SI hay datos arbitrarios y su tamaño, pero NO decodifica ni + // muestra el contenido. Para auditar privacidad lo relevante es QUE HAYA + // un OP_RETURN (revela uso de protocolo/servicio), no qué dice. Además, + // evita ser un visor de contenido arbitrario de la cadena. function ToolOpReturn({base}) { const {get} = useApi(base); const [txid, setTxid] = useState(""); @@ -2754,37 +2758,45 @@ if (!tx) throw new Error("Transacción no encontrada"); const opReturns = tx.vout.filter(o=>o.scriptpubkey_type==="op_return"||o.scriptpubkey?.startsWith("6a")); if (opReturns.length===0) { setErr("Esta transacción no contiene outputs OP_RETURN"); setLoading(false); return; } - const decoded = opReturns.map(o=>{ + // Solo medimos el tamaño en bytes. NO decodificamos el contenido. + const detected = opReturns.map(o=>{ const hex = o.scriptpubkey?.slice(4)||""; - let text = ""; - try { text = decodeURIComponent(escape(hex.match(/.{1,2}/g).map(b=>String.fromCharCode(parseInt(b,16))).join(""))); } catch {} - return { hex, text, value:o.value }; + const bytes = Math.floor(hex.length/2); + return { bytes }; }); - setResult({ txid:tx.txid, outputs:decoded }); + setResult({ txid:tx.txid, count:opReturns.length, outputs:detected }); } catch(e) { setErr(e.message); } setLoading(false); }; return ( -
Decodificador OP_RETURN
-
Los outputs OP_RETURN almacenan mensajes arbitrarios en la blockchain. Introduce un txid para leerlos.
+
Detector OP_RETURN
+
Indica si una transacción contiene datos arbitrarios (OP_RETURN) y su tamaño. No muestra el contenido: para auditar privacidad lo relevante es que existan, no qué dicen.
setTxid(e.target.value)} onKeyDown={e=>e.key==="Enter"&&decode()} placeholder="txid de una transacción" style={{flex:1,background:C.bg,border:`1px solid ${C.borderBright}`,borderRadius:6,padding:"9px 12px",color:C.t1,fontFamily:"monospace",fontSize:"0.75rem",outline:"none"}} onFocus={e=>e.target.style.borderColor=C.blue} onBlur={e=>e.target.style.borderColor=C.borderBright} /> - +
{err&&
{err}
} - {result&&result.outputs.map((o,i)=>( -
-
OP_RETURN #{i+1}
- {o.text&&
"{o.text}"
} -
HEX: {o.hex||"(vacío)"}
+ {result&&( +
+
+ Contiene {result.count} output{result.count>1?"s":""} OP_RETURN con datos arbitrarios. +
+ {result.outputs.map((o,i)=>( +
+ OP_RETURN #{i+1}: {o.bytes} bytes de datos +
+ ))} +
+ Se indica la presencia y el tamaño, no el contenido. Un OP_RETURN puede revelar qué protocolo o servicio se usó — ese es el dato relevante para tu privacidad. +
- ))} + )} ); } @@ -3087,7 +3099,7 @@

Herramientas criptográficas que funcionan completamente en el navegador. Ningún dato se envía a servidores externos.

  • Conversor sat/BTC/EUR/USD — conversión en tiempo real usando el precio de tu propio nodo. Sin APIs de terceros.
  • Validador de dirección — verifica el formato y tipo de cualquier dirección Bitcoin: Legacy, P2SH, Native SegWit o Taproot.
  • -
  • Decodificador OP_RETURN — lee los mensajes almacenados en outputs OP_RETURN de cualquier transacción.
  • +
  • Detector OP_RETURN — indica si una transacción contiene datos arbitrarios y su tamaño, sin mostrar el contenido.
  • Validador PSBT — verifica que una PSBT tiene formato correcto antes de firmarla. Para verificación criptográfica completa usa Sparrow o Bitcoin Core.
  • Decodificador tx raw — valida el formato hexadecimal de una transacción sin firmar.
  • Verificador de firma — valida el formato de una firma de mensaje Bitcoin. Para verificación criptográfica completa usa Bitcoin Core (verifymessage).