Bibliothèque JS minimale pour les ordinaux et les inscriptions au-dessus de scure-btc-signer.
Utilisez-le comme bibliothèque dans votre code JS ou exécutez un outil CLI inclus. Les inscriptions permettent de télécharger des fichiers aléatoires sur la blockchain BTC.
Expérimental : peut entraîner une perte de fonds jusqu'à ce qu'il soit testé de manière approfondie.
npm installer des micro-ordinaux
Création d'une inscription
API TypeScript
CLI
// npm installe les micro-ordinals @scure/btc-signer @scure/baseimport * en tant que btc depuis '@scure/btc-signer'; importer * en tant qu'ordinaux depuis 'micro-ordinals'; importer { hex, utf8 } depuis '@ scure/base';const TESTNET = btc.utils.TEST_NETWORK;const privKey = hex.decode('0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a');const pubKey = btc.utils.pubSchnorr(privKey);const customScripts = [ordinals.OutOrdinalReveal]; // Activer les scripts personnalisés à l'extérieur// Ceci s'inscrit sur le premier satoshi de la première entrée (par défaut) const inscription = { tags : {contentType : 'application/json', // peut être n'importe quel format (type MIME)// ContentEncoding : 'br', // compression : uniquement brotli pris en charge }, corps : utf8.decode(JSON.stringify({ some : 1, test : 2, inscription : true, in : 'json' })), // On peut utiliser des scripts js préalablement inscrits en html // utf8.decode(`<html><head></head><body><script src="/content/script_inscription_id"></script>test</html>`)};const révélationPayment = btc.p2tr ( non défini, // internalPubKey ordinals.p2tr_ord_reveal(pubKey, [inscription]), // TaprootScriptTree TESTNET, // réseau principal ou testnet false, //allowUnknownOutputs, fonctionnalité de sécurité customScripts // comment gérer les scripts personnalisés);// Nous devons envoyer des bitcoins à cette adresse avant de les révéler.// De plus, il devrait y en avoir suffisamment pour couvrir la révélation des tx fee.console.log('Address', révélationPayment.address) ; // 'tb1p5mykwcq5ly7y2ctph9r2wfgldq94eccm2t83dd58k785p0zqzwkspyjkp5'// Soyez très prudent : il est possible d'envoyer accidentellement une inscription moyennant des frais.// De plus, la rareté n'est disponible qu'avec le portefeuille ordinal.// Mais vous pouvez analyser d'autres inscriptions et en créer une commune en utilisant celle-ci. const changeAddr = révélerPayment.address; // peut être différentconst révélationAmount = 2000n;const fee = 500n;const tx = new btc.Transaction({ customScripts });tx.addInput({ ...révélerPaiement, // Ceci est l'ID de transmission avec les bitcoins que nous avons envoyés (remplacer) txid : '75ddabb27b8845f5247975c8a5ba7c6f336c4570708ebe230caf6db5217ae858', indice : 0, témoinUtxo : { script : révélationPayment.script, montant : révélerAmount },} );tx.addOutputAddress(changeAddr, révélationAmount - frais, TESTNET);tx.sign(privKey, non défini, new Uint8Array(32));tx.finalize() ;const txHex = hex.encode(tx.extract());console.log(txHex); // Hex de révélation du tx à Broadcastconst tx2 = btc.Transaction.fromRaw(hex.decode(txHex)); // Analyse des inscriptionsconsole.log('parsed', ordinals.parseWitness(tx2.inputs[0].finalScriptWitness));console.log('vsize', tx2.vsize); // Révéler que tx devrait payer au moins autant de frais
importer { Coder } depuis '@scure/base'; importer * en tant que P depuis 'micro-packed'; importer { ScriptType, OptScript, CustomScript } depuis '@scure/btc-signer'; type Bytes = Uint8Array; exporter déclarer const InscriptionId : P.Coder<string, Bytes>;type TagRaw = {tag: Bytes;data: Bytes;};déclarer const TagCoders : {pointeur : P.CoderType<bigint>;contentType : P.CoderType<string>;parent : P.Coder<string, Uint8Array>;métadonnées : P.CoderType<any>;métaprotocole : P.CoderType<string>; contentEncoding : P.CoderType<string>;délégué : P.Coder<string, Uint8Array>;rune : P.CoderType<bigint>;remarque : P.CoderType<string>;};export type Tags = Partial<{[K dans la clé du type de TagCoders] : P.UnwrapCoder<(typeof TagCoders)[K]>;}> & { inconnu ? : [Octets, Octets][];} ; type d'exportation Inscription = { tags : Tags ; corps : octets ; maudit ? : booléen ; };tapez OutOrdinalRevealType = { tapez : 'tr_ord_reveal'; clé publique : octets ; inscriptions : Inscription[] ; };export déclare const OutOrdinalReveal : Coder<OptScript, OutOrdinalRevealType | undefined> & CustomScript;export déclare la fonction parseInscriptions(script: ScriptType, strict?: boolean): Inscription[] | undefined;/** * Analyser les inscriptions du témoin d'entrée de transmission révélé (tx.inputs[0].finalScriptWitness) */export declare function parseWitness(witness: Bytes[]): Inscription[] | undefined;/** * Créer une transaction de révélation. Inscription créée sur la sortie de dépense de cette adresse en * révélant l'écriture de la racine pivotante. */export déclarer la fonction p2tr_ord_reveal(pubkey : Bytes, inscriptions : Inscription[]) : {type : string;script : Uint8Array;};
npm install -g micro-ordinaux ord file.jpg
Utilisation : ord [--net mainnet|testnet] [--priv key] [--recovery key] [--compress=on|off] [--fee 10.1] [--adresse adresse]
net : réseau Bitcoin
priv : clé privée de racine pivotante au format WIF, sera utilisée pour révéler la transaction. N'utilisez pas votre portefeuille, priv devrait être un nouveau. Nous générons une clé temporaire, si aucune n'est fournie
récupération : clé privée de racine pivotante au format WIF, peut être utilisée pour récupérer tous les bitcoins envoyés à l'adresse d'inscription par accident sans payer la totalité des frais d'inscription.
compresser : inscriptions compressées avec brotli. Compatible avec les explorateurs. par défaut = activé
frais : frais du réseau Bitcoin en satoshis
addr : adresse où l'inscription sera envoyée après révélation Important : le premier sat est toujours inscrit. Les inscriptions par lots ne sont pas prises en charge.
Il n'y a pas de code réseau. Cela rend le package plus sûr, mais diminue l'expérience du développeur.
Nous pouvons probablement récupérer les frais automatiquement, mais la sélection utxo deviendrait plus complexe. Par exemple, si l'utilisateur a déjà inscrit quelque chose ou possède des ordinaux rares, nous devons accéder au nœud ordinal pour le savoir. De plus, nous ne savons rien des sorties gelées dans le portefeuille : elles se trouvent uniquement à l'intérieur d'un portefeuille.
Cas extrêmes à garder à l’esprit :
l'utilisateur a ajouté un mauvais txid/index ou a quitté l'application après l'envoi
nous imprimons la clé privée temporaire, l'utilisateur peut redémarrer en lui fournissant '--priv'
tant que les frais/réseau/chemin sont les mêmes, vous pouvez redémarrer le processus
l'utilisateur a envoyé moins d'un montant ou plusieurs UTXO.
c'est en fait plus difficile, car toute dépense nécessitera des frais d'inscription complets
pour cela nous ajoutons recovery
Utilisez Mempool et Ordinalsbot.
Il existe plusieurs robinets : uo1, eu, pompe
Pour utiliser Sparrow sur Mac :
open /Applications/Sparrow.app --args -n testnet
MIT (c) Paul Miller (https://paulmillr.com), voir fichier LICENSE.