Minimale JS-Bibliothek für Ordnungszahlen und Inschriften zusätzlich zu scure-btc-signer.
Verwenden Sie es als Bibliothek in Ihrem JS-Code oder führen Sie ein enthaltenes CLI-Tool aus. Inschriften ermöglichen das Hochladen zufälliger Dateien auf die BTC-Blockchain.
Experimentell: Kann zu Geldverlusten führen, bis es gründlich getestet wird.
npm installiert Mikroordinalzahlen
Inschrift erstellen
TypeScript-API
CLI
// npm install micro-ordinals @scure/btc-signer @scure/baseimport * as btc from '@scure/btc-signer';import * as ordinals from 'micro-ordinals';import { hex, utf8 } from '@ scure/base';const TESTNET = btc.utils.TEST_NETWORK;const privKey = hex.decode('0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a');const pubKey = btc.utils.pubSchnorr(privKey);const customScripts = [ordinals.OutOrdinalReveal]; // Benutzerdefinierte Skripte außerhalb aktivieren// Dies wird auf dem ersten Satoshi der ersten Eingabe eingeschrieben (Standard)const inscription = { Tags: {contentType: 'application/json', // kann ein beliebiges Format sein (MIME-Typ)// ContentEncoding: 'br', // Komprimierung: nur Brotli wird unterstützt }, body: utf8.decode(JSON.stringify({ some: 1, test: 2, inscription: true, in: 'json' })), // Man kann zuvor eingeschriebene JS-Skripte in HTML verwenden // utf8.decode(`<html><head></head><body><script src="/content/script_inscription_id"></script>test</html>`)};const revealPayment = btc.p2tr ( undefiniert, // internalPubKey ordinals.p2tr_ord_reveal(pubKey, [inscription]), // TaprootScriptTree TESTNET, // Mainnet oder Testnet false, //allowUnknownOutputs, Sicherheitsfunktion customScripts // wie man mit benutzerdefinierten Skripten umgeht);// Wir müssen vor der Offenlegung einige Bitcoins an diese Adresse senden.// Außerdem sollte es genug sein, um Reveal Tx abzudecken fee.console.log('Address', RevealPayment.address) ; // 'tb1p5mykwcq5ly7y2ctph9r2wfgldq94eccm2t83dd58k785p0zqzwkspyjkp5'// Seien Sie besonders vorsichtig: Es ist möglich, versehentlich eine Inschrift als Gebühr zu senden.// Außerdem ist die Seltenheit nur mit einer Ordinal-Wallet verfügbar.// Sie können aber auch andere Inschriften analysieren und damit eine gemeinsame erstellen. const changeAddr = offenbarenPayment.address; // kann unterschiedlich seinconst revealAmount = 2000n;const fee = 500n;const tx = new btc.Transaction({ customScripts });tx.addInput({ ...offenbarenZahlung, // Dies ist die Txid der Sendung mit den von uns gesendeten Bitcoins (ersetzen) txid: '75ddabb27b8845f5247975c8a5ba7c6f336c4570708ebe230caf6db5217ae858', Index: 0, ZeugeUtxo: { script: RevealPayment.script, Betrag: RevealAmount },});tx.addOutputAddress(changeAddr, RevealAmount - Gebühr, TESTNET);tx.sign(privKey, undefiniert, neue Uint8Array(32));tx.finalize() ;const txHex = hex.encode(tx.extract());console.log(txHex); // Hex von Reveal tx to Broadcastconst tx2 = btc.Transaction.fromRaw(hex.decode(txHex)); // Parsing inscriptionsconsole.log('parsed', ordinals.parseWitness(tx2.inputs[0].finalScriptWitness));console.log('vsize', tx2.vsize); // Reveal tx sollte mindestens diese Gebühr zahlen
import { Coder } from '@scure/base';import * as P from 'micro-packed';import { ScriptType, OptScript, CustomScript } from '@scure/btc-signer';type Bytes = Uint8Array;export declare const InscriptionId : P.Coder<string, Bytes>;type TagRaw = {tag: Bytes;data: Bytes;};declare const TagCoders: {pointer: P.CoderType<bigint>;contentType: P.CoderType<string>;parent: P.Coder<string, Uint8Array>;metadata: P.CoderType<any>;metaprotocol: P.CoderType<string>;contentEncoding: P.CoderType<string>;delegierter: P.Coder<string, Uint8Array>;rune: P.CoderType<bigint>;Hinweis: P.CoderType<string>;};export type Tags = Partial<{[K in keyof typeof TagCoders]: P.UnwrapCoder<(typeof TagCoders)[K]>;}> & {unknown?: [Bytes, Bytes][ ];};Exporttyp Inscription = { Tags: Tags; Körper: Bytes; verflucht?: boolean; };type OutOrdinalRevealType = { type: 'tr_ord_reveal'; pubkey: Bytes; Inschriften: Inschrift[]; };export deklarieren const OutOrdinalReveal: Coder<OptScript, OutOrdinalRevealType | undefiniert> & CustomScript;Export-Deklarationsfunktion parseInscriptions(script: ScriptType, strict?: boolean): Inscription[] | undefiniert;/** * Inschriften von Reveal Tx Input Witness (tx.inputs[0].finalScriptWitness) analysieren */export Declare Function parseWitness(witness: Bytes[]): Inscription[] | undefiniert;/** * Offenlegungstransaktion erstellen. Inschrift erstellt für die Ausgabenausgabe von dieser Adresse durch * Offenlegung des Taproot-Skripts. */export deklarieren Funktion p2tr_ord_reveal(pubkey: Bytes, inscriptions: Inscription[]): {type: string;script: Uint8Array;};
npm install -g Mikroordinalzahlen ord file.jpg
Verwendung: ord [--net mainnet|testnet] [--priv key] [--recovery key] [--compress=on|off] [--fee 10.1] [--addr address]
Netz: Bitcoin-Netzwerk
priv: privater Taproot-Schlüssel im WIF-Format, wird zur Offenlegung der Transaktion verwendet. Verwenden Sie nicht Ihr Wallet, priv sollte ein neues sein. Wir generieren einen temporären Schlüssel, falls keiner bereitgestellt wird
Wiederherstellung: privater Taproot-Schlüssel im WIF-Format, kann verwendet werden, um versehentlich an die Registrierungsadresse gesendete Bitcoins wiederherzustellen, ohne die volle Registrierungsgebühr zu zahlen.
komprimieren: Mit Brotli komprimierte Inschriften. Kompatibel mit Explorern. Standard=ein
Gebühr: Bitcoin-Netzwerkgebühr in Satoshis
Adresse: Adresse, an die die Anmeldung nach der Enthüllung gesendet wird. Wichtig: Der erste Samstag wird immer eingeschrieben. Stapelbeschriftungen werden nicht unterstützt.
Es gibt keinen Netzwerkcode. Dadurch wird das Paket sicherer, die Entwicklererfahrung verringert sich jedoch.
Wir können die Gebühren wahrscheinlich automatisch abrufen, aber die utxo-Auswahl würde komplexer werden. Wenn der Benutzer beispielsweise zuvor etwas eingeschrieben hat oder seltene Ordnungszahlen hat, benötigen wir Zugriff auf den Ordnungsknoten, um das zu wissen. Außerdem wissen wir nichts über eingefrorene Ausgaben in der Wallet: Sie befinden sich nur innerhalb einer Wallet.
Zu beachtende Randfälle:
Der Benutzer hat die falsche TXID/den falschen Index hinzugefügt oder die Anwendung nach dem Senden beendet
Wir drucken den temporären privaten Schlüssel aus. Der Benutzer kann neu starten, indem er ihn mit „--priv“ bereitstellt.
Solange Gebühr/Netzwerk/Pfad gleich sind, können Sie den Vorgang neu starten
Der Benutzer hat weniger als den Betrag oder mehrere UTXO gesendet.
Dies ist tatsächlich schwieriger, da für jede Ausgabe die volle Anmeldegebühr anfällt
dazu fügen wir recovery
hinzu
Verwenden Sie Mempool und Ordinalsbot.
Es gibt mehrere Wasserhähne: uo1, eu, pump
So verwenden Sie Sparrow auf dem Mac:
open /Applications/Sparrow.app --args -n testnet
MIT (c) Paul Miller (https://paulmillr.com), siehe LIZENZdatei.