UNPKG

bc-runes-js-new

Version:

A package to be able to mint, etch or transfer bitcoin runes very easily.

133 lines (109 loc) 2.97 kB
# BC RUNES JS A package that makes use of [runelib](https://www.npmjs.com/package/runelib) library to allow minting, etching or transferring [bitcoin runes](https://docs.taproot.com/runes/specification.html) very easily, by abstracting a bit more of what runelib does, creating the whole environment and scripts for transaction signing, submitting, and waiting. # USAGE ## Preparing the address ```javascript const { generateAddress, getRandomWif } = require('bc-runes-js') async function main() { // If getting an address for the first time, a random wif should be used. // Otherwise, skip the line below and invoke generateAddress($yourWif) const randomWif = getRandomWif() const address = generateAddress(randomWif).taprootAddress console.log(address) } ``` Will output the following ```bash { taprootAddress: 'tb1paygndrxzphwlgpn8utlcp592wf267jvk50wxnam6zuvszruhk3pqut4e6f', WIF: 'cMjdU3yAEif9P6eug1pa3MxYbpgPjd5vTnRP1cfzLPrWg85N5NAg' } ``` Save `taprootAddress` and `WIF` in an .env file or anywhere for later use in the project. This only taproot address will hold the runes sent to it, minted or premined, in outputs with a value of 546. It will need bigger utxos to pay the fees for the transactions it may send. <br> <br> **Note:** the address is randomly generated and purely for this example, don't try to use it. ## Example for etching a rune ```javascript const { etch, init } = require('bc-runes-js') const { TAPROOT_ADDRESS, WIF } = process.env async function main() { init({ taprootAddress: TAPROOT_ADDRESS, wif: WIF, feePerVByte: 300 }) const res = await etch({ amount: 1, cap: 100, divisibility: 0, name: 'YOURRUNENAME', symbol: '❤︎' }) console.log({ res }) } main() ``` ## Example for minting a rune ```javascript const { mint, init } = require('bc-runes-js') const { TAPROOT_ADDRESS, WIF } = process.env async function main() { init({ taprootAddress: TAPROOT_ADDRESS, wif: WIF, feePerVByte: 300 }) // only one of these two arguments is mandatory const res = await mint({ name: 'a rune name with or without spacers ()', runeId: 'blockNumber:txIndex' }) console.log({ res }) } main() ``` ## Example for transferring a rune ```javascript const { transfer, init } = require('bc-runes-js') const { TAPROOT_ADDRESS, WIF } = process.env async function main() { init({ taprootAddress: TAPROOT_ADDRESS, wif: WIF, feePerVByte: 300 }) // only the rune name or the id is needed in a transfer object const res = await transfer([ { amount: 'how many runes to transfer', to: 'taproot address to send the runes to', runeId: 'the id of the rune', name: 'the full name of the rune, with or without spacers' }, { // other desired transfer objects } ]) console.log({ res }) }