Runestone Etch, Mint, Transfer, Recursive Rune, Airdrop, Encipher, Decipher
Before running the script, ensure you have the following dependencies installed:
bitcoinjs-libecpair@bitcoinerlab/secp256k1axiosrunelibcbor
You can install them using npm:
npm install bitcoinjs-lib ecpair @bitcoinerlab/secp256k1 axios runelibEnsure you have a .env file in your project root with the following variables:
PRIVATE_KEY=<your_private_key>
MNEMONIC=<your_seed_mnemonic> (optional, if using SeedWallet)
This script allows you to create a recursive ordinal inscription on the Bitcoin testnet using Taproot addresses. It involves creating an HTML content, enciphering it as a Taproot script, and broadcasting the transaction to the testnet network.
- 
Initialize ECC Library: The script initializes the ECC library using
initEccLibfrombitcoinjs-lib. - 
Wallet Setup: The script supports two types of wallets:
SeedWalletandWIFWallet. Currently, theWIFWalletis used. - 
Create Etching: The
etchingfunction is the main function that creates the recursive ordinal. It involves the following steps:- Define the HTML content to be inscribed.
 - Create an inscription object using 
EtchInscription. - Define a Taproot script with the inscription and the wallet's public key.
 - Generate a Taproot address and wait for UTXOs to be funded to this address.
 - Create a Partially Signed Bitcoin Transaction (PSBT).
 - Add inputs and outputs to the PSBT.
 - Sign and broadcast the transaction.
 
 - 
Broadcast Transaction: The
signAndSendfunction handles the signing and broadcasting of the transaction. It supports both node environment and browser environment. 
- etching(): Main function to create the recursive ordinal inscription.
 - waitUntilUTXO(address: string): Polls the address for UTXOs until found.
 - getTx(id: string): Fetches transaction hex by ID.
 - signAndSend(keyPair: BTCSigner, psbt: Psbt, address: string): Signs and broadcasts the PSBT.
 - broadcast(txHex: string): Broadcasts the raw transaction to the network.
 - tapTweakHash(pubKey: Buffer, h: Buffer | undefined): Computes the Taproot tweak hash.
 - toXOnly(pubkey: Buffer): Converts a public key to X-only format.
 - tweakSigner(signer: BTCSigner, opts: any): Tweaks the signer for Taproot key tweaking.
 
This script enables the minting of Runes using Taproot addresses on the Bitcoin testnet. It leverages bitcoinjs-lib, ecpair, and runelib to create, sign, and broadcast a Bitcoin transaction containing Runes.
- 
Initialize ECC Library: The script initializes the ECC library using
initEccLibfrombitcoinjs-lib. - 
Wallet Setup: The script supports two types of wallets:
SeedWalletandWIFWallet. Currently, theWIFWalletis used. - 
Minting with Taproot: The
mintWithTaprootfunction is the main function that mints Runes. It involves the following steps:- Define Runes to be minted.
 - Create a Runestone with the specified Runes.
 - Tweak the signer for Taproot key tweaking.
 - Generate a Taproot address.
 - Wait for UTXOs to be funded to this address.
 - Create a Partially Signed Bitcoin Transaction (PSBT).
 - Add inputs and outputs to the PSBT.
 - Sign and broadcast the transaction.
 
 - 
Broadcast Transaction: The
signAndSendfunction handles the signing and broadcasting of the transaction. It supports both node environment and browser environment. 
- mintWithTaproot(): Main function to mint Runes using Taproot.
 - waitUntilUTXO(address: string): Polls the address for UTXOs until found.
 - getTx(id: string): Fetches transaction hex by ID.
 - signAndSend(keyPair: BTCSigner, psbt: Psbt, address: string): Signs and broadcasts the PSBT.
 - broadcast(txHex: string): Broadcasts the raw transaction to the network.
 - tapTweakHash(pubKey: Buffer, h: Buffer | undefined): Computes the Taproot tweak hash.
 - toXOnly(pubkey: Buffer): Converts a public key to X-only format.
 - tweakSigner(signer: BTCSigner, opts: any): Tweaks the signer for Taproot key tweaking.
 
This script allows you to mint recursive Runes on the Bitcoin testnet using Taproot addresses. The script uses bitcoinjs-lib, ecpair, and runelib libraries to create, sign, and broadcast Bitcoin transactions containing Runes.
Make sure you have the following dependencies installed:
bitcoinjs-libecpair@bitcoinerlab/secp256k1axioscborrunelib
You can install them using npm:
npm install bitcoinjs-lib ecpair @bitcoinerlab/secp256k1 axios cbor runelib- 
Initialize ECC Library: The script initializes the ECC library using
initEccLibfrombitcoinjs-lib. - 
Wallet Setup: The script supports two types of wallets:
SeedWalletandWIFWallet. Currently, theWIFWalletis used. - 
Create Taproot Inscription: The
createChildInscriptionTapScriptfunction creates the Taproot script for the inscription, using the provided content and metadata. - 
Mint Runes and Create PSBT: The
childInscribefunction mints Runes and creates a Partially Signed Bitcoin Transaction (PSBT). It includes:- Funding the Taproot address.
 - Adding inputs and outputs to the PSBT.
 - Signing and broadcasting the transaction.
 
 - 
Broadcast Transaction: The
signAndSendfunction handles the signing and broadcasting of the transaction. 
- contentBuffer(content: string): Converts content string to a buffer.
 - createChildInscriptionTapScript(): Creates the Taproot script for child inscriptions.
 - childInscribe(): Main function to mint Runes using Taproot.
 - signAndSend(keyPair: BTCSigner, psbt: Psbt): Signs and broadcasts the PSBT.
 - waitUntilUTXO(address: string): Polls the address for UTXOs until found.
 - getTx(id: string): Fetches transaction hex by ID.
 - broadcast(txHex: string): Broadcasts the raw transaction to the network.
 - tapTweakHash(pubKey: Buffer, h: Buffer | undefined): Computes the Taproot tweak hash.
 - toXOnly(pubkey: Buffer): Converts a public key to X-only format.
 - tweakSigner(signer: BTCSigner, opts: any): Tweaks the signer for Taproot key tweaking.
 
- network: Configured to use Bitcoin testnet.
 - txhash: Transaction hash of the parent inscription.
 - memeType: MIME type for the content.
 - metaProtocol: Meta protocol buffer.
 - receiveAddress: Address to receive the Runes.
 - metadata: Metadata for the inscription.
 - fee: Transaction fee.
 - parentInscriptionTXID: Transaction ID of the parent inscription.
 - contentBufferData: Buffer containing the content for the inscription.
 - revealtxIDBuffer: Buffer of the parent inscription transaction ID.
 - pointerBuffer: Array of buffers for pointers in the Taproot script.
 - metadataBuffer: CBOR encoded metadata buffer.
 - contentBufferArray: Array of content buffers split into chunks.
 
The script will output logs at various stages:
- The Taproot address where funds should be sent.
 - The UTXO being used.
 - The raw transaction hex to be broadcasted.
 - The transaction ID after broadcasting.
 
- The script is configured to work with the Bitcoin testnet.
 - Ensure that you have testnet coins available in the provided private key.
 - Adjust the fee and other parameters as needed.