Biblioteca JS mínima para ordinales e inscripciones encima de scure-btc-signer.
Úselo como biblioteca en su código JS o ejecute una herramienta CLI incluida. Las inscripciones permiten cargar archivos aleatorios en la cadena de bloques BTC.
Experimental: puede provocar la pérdida de fondos hasta que se pruebe exhaustivamente.
npm instala microordinales
Creando inscripción
API de mecanografiado
CLI
// npm instala microordinales @scure/btc-signer @scure/baseimport * como btc desde '@scure/btc-signer';import * como ordinales desde 'micro-ordinals';import { hexadecimal, utf8 } desde '@ scure/base';const TESTNET = btc.utils.TEST_NETWORK;const privKey = hex.decode('0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a');const pubKey = btc.utils.pubSchnorr(privKey);const customScripts = [ordinals.OutOrdinalReveal]; // Habilitar scripts personalizados afuera // Esto se inscribe en el primer satoshi de la primera entrada (predeterminado) const inscription = { etiquetas: {contentType: 'application/json', // puede ser cualquier formato (tipo MIME)// ContentEncoding: 'br', // compresión: solo se admite brotli }, cuerpo: utf8.decode(JSON.stringify({ algunos: 1, prueba: 2, inscripción: verdadero, en: 'json' })), // Se pueden utilizar scripts js previamente inscritos en html // utf8.decode(`<html><head></head><body><script src="/content/script_inscription_id"></script>test</html>`)};const revelaPago = btc.p2tr ( indefinido, // clave de pub interna ordinals.p2tr_ord_reveal(pubKey, [inscripción]), // TaprootScriptTree TESTNET, // red principal o red de prueba false, // enableUnknownOutputs, característica de seguridad customScripts // cómo manejar scripts personalizados);// Necesitamos enviar algunos bitcoins a esta dirección antes de la revelación.// Además, debería haber suficientes para cubrir la revelación tx fee.console.log('Address', revelaPayment.address) ; // 'tb1p5mykwcq5ly7y2ctph9r2wfgldq94eccm2t83dd58k785p0zqzwkspyjkp5'// Tenga mucho cuidado: es posible enviar accidentalmente una inscripción como pago.// Además, la rareza solo está disponible con la billetera ordinal.// Pero puede analizar otras inscripciones y crear una común usando esta. dirección de cambio constante = revelarPago.dirección; // puede ser diferenteconst revelaCantidad = 2000n;const fee = 500n;const tx = new btc.Transaction({ customScripts });tx.addInput({ ...revelarPago, // Este es el txid de tx con los bitcoins que enviamos (reemplazar) txid: '75ddabb27b8845f5247975c8a5ba7c6f336c4570708ebe230caf6db5217ae858', índice: 0, testigoUtxo: { script: revelarPayment.script, monto: revelarMonto },});tx.addOutputAddress(changeAddr, revelarMonto - tarifa, TESTNET);tx.sign(privKey, indefinido, nuevo Uint8Array(32));tx.finalize() ;const txHex = hex.encode(tx.extract());console.log(txHex); // Hexadecimal de revelar tx para transmitirconst tx2 = btc.Transaction.fromRaw(hex.decode(txHex)); // Analizando inscripcionesconsole.log('parsed', ordinals.parseWitness(tx2.inputs[0].finalScriptWitness));console.log('vsize', tx2.vsize); // Reveal tx debería pagar al menos esta tarifa
importar { Coder } desde '@scure/base'; importar * como P desde 'micro-packed'; importar { ScriptType, OptScript, CustomScript } desde '@scure/btc-signer'; escribir Bytes = Uint8Array; exportar declarar const InscriptionId : P.Coder<cadena, Bytes>;tipo TagRaw = {etiqueta: Bytes;datos: Bytes;};declarar const TagCoders: {puntero: P.CoderType<bigint>;contentType: P.CoderType<cadena>;padre: P.Coder<cadena, Uint8Array>;metadatos: P.CoderType<cualquier>;metaprotocolo: P.CoderType<cadena>; contentEncoding: P.CoderType<cadena>;delegado: P.Coder<cadena, Uint8Array>;rune: P.CoderType<bigint>;nota: P.CoderType<string>;};etiquetas de tipo de exportación = Partial<{[K en clave de tipo de TagCoders]: P.UnwrapCoder<(tipo de TagCoders)[K]>;}> & { ¿desconocido?: [Bytes, Bytes][];};tipo de exportación Inscripción = { etiquetas: Etiquetas; cuerpo: Bytes; ¿maldito?: booleano; }; escriba OutOrdinalRevealType = { tipo: 'tr_ord_reveal'; clave pública: bytes; inscripciones: Inscripción[]; };exportar declarar const OutOrdinalReveal: Coder<OptScript, OutOrdinalRevealType | undefinido> & CustomScript;exportar declarar función parseInscriptions(script: ScriptType, estricto?: booleano): Inscripción[] | undefinido;/** * Analizar inscripciones del testigo de entrada de tx revelado (tx.inputs[0].finalScriptWitness) */export declara la función parseWitness(witness: Bytes[]): Inscripción[] | undefinido;/** * Crear transacción de revelación. Inscripción creada en el resultado del gasto de esta dirección mediante * que revela el script de raíz principal. */exportar declarar función p2tr_ord_reveal(pubkey: Bytes, inscripciones: Inscripción[]): {tipo: cadena;script: Uint8Array;};
npm install -g microordinales ord file.jpg
Uso: ord [--net mainnet|testnet] [--clave privada] [--clave de recuperación] [--compress=on|off] [--fee 10.1] [--addr dirección]
neto: red bitcoin
priv: clave privada de raíz principal en formato WIF, se usará para revelar transacciones. No use su billetera, priv debe ser una nueva. Generamos una clave temporal, si no se proporciona ninguna.
recuperación: clave privada de raíz principal en formato WIF, se puede utilizar para recuperar cualquier bitcoin enviado a la dirección de inscripción por accidente sin pagar la tarifa de inscripción completa.
comprimir: inscripciones comprimidas con brotli. Compatible con exploradores. predeterminado = activado
tarifa: tarifa de la red bitcoin en satoshis
addr: dirección donde se enviará la inscripción después de la revelación Importante: siempre se inscribe el primer sat. No se admiten inscripciones por lotes.
No hay ningún código de red. Hace que el paquete sea más seguro, pero reduce la experiencia del desarrollador.
Probablemente podamos recuperar las tarifas automáticamente, pero la selección de utxo se volvería más compleja. Por ejemplo, si el usuario inscribió algo previamente o tiene ordinales raros, necesitamos acceso al nodo ordinal para saberlo. Además, no sabemos nada acerca de las salidas congeladas en la billetera: solo están dentro de una billetera.
Casos extremos a tener en cuenta:
el usuario agregó un txid/index incorrecto o abandonó la aplicación después de enviarla
imprimimos una clave privada temporal, el usuario puede reiniciar proporcionándole '--priv'
Siempre que la tarifa/red/ruta sea la misma, puedes reiniciar el proceso
el usuario envió menos de la cantidad o múltiples UTXO.
En realidad, esto es más difícil, porque cualquier gasto requerirá una tarifa de inscripción completa.
para esto agregamos recovery
Utilice mempool y ordinalsbot.
Hay varios grifos: uo1, eu, pump.
Para usar gorrión en mac:
open /Applications/Sparrow.app --args -n testnet
MIT (c) Paul Miller (https://paulmillr.com), consulte el archivo de LICENCIA.