transfer100.pizza#71,256,398brc-20249869.bitnats#61,511,820text249869.bitnats#61,511,819text249869.bitnats#61,511,818text249869.bitnats#61,511,817text249869.bitnats#61,511,816text249869.bitnats#61,511,815text249869.bitnats#61,511,814text249869.bitnats#61,511,813text249869.bitnats#61,511,812text249869.bitnats#61,511,811textmint0.1brc#52,592,036brc-20mint0.1brc#52,592,009brc-20mint0.1brc#52,592,004brc-20mint0.1brc#52,591,977brc-20mint0.1brc#52,591,971brc-20mint0.1brc#52,591,946brc-20mint0.1brc#52,591,942brc-20mint0.1brc#52,591,929brc-20mint0.1brc#52,591,909brc-20mint0.1brc#52,591,907brc-20mint0.1brc#52,591,902brc-20mint0.1brc#52,591,895brc-20mint0.1brc#52,591,894brc-20mint1,000.keys#46,525,286brc-20mint1,000.keys#46,525,285brc-20mint1,000.keys#46,525,284brc-20mint1,000.keys#46,525,283brc-20mint1,000.keys#46,525,282brc-20mint1,000.keys#46,525,281brc-20mint1,000.keys#46,525,280brc-20mint1,000.keys#46,525,279brc-20mint1,000.keys#46,525,278brc-20mint1,000.keys#46,525,277brc-20mint1,000.keys#46,525,276brc-20mint1,000.keys#46,525,275brc-20mint1,000.keys#46,525,274brc-20mint1,000.keys#46,525,273brc-20mint1,000.keys#46,525,272brc-20mint1,000.keys#46,525,271brc-20mint1,000.keys#46,525,270brc-20mint1,000.keys#46,525,269brc-20mint1,000.keys#46,525,268brc-20mint1,000.keys#46,525,267brc-20mint1,000.keys#46,525,266brc-20mint1,000.keys#46,525,265brc-20mint1,000.keys#46,525,264brc-20 ![](images/sending_01.png) There is a few of important things to check here: * The `output` identifier matches the identifier of the UTXO you are going to send * The `offset` of the inscription is `0` (this means that the inscription is located on the first sat in the UTXO) * the `output_value` has enough sats to cover the transaction fee (postage) for sending the transaction. The exact amount you will need depends on the fee rate you will select for the transaction If all of the above are true for your inscription, it should be safe for you to send it using the method below. ⚠️⚠️ Be very careful sending your inscription particularly if the `offset` value is not `0`. It is not recommended to use this method if that is the case, as doing so you could accidentally send your inscription to a bitcoin miner unless you know what you are doing. #### Sending your inscription To send an inscription navigate to the `UTXOs` tab, and find the UTXO which you previously validated contains your inscription. If you previously froze the UXTO you will need to right-click on it and unfreeze it. #44,986,812text Some Bitcoin wallets do not expose this level of detail, and they just show you a single summed up value of all the bitcoin in your wallet. However, when sending inscriptions it is important that you use a wallet like Sparrow which allows for UTXO control. #### Inspecting your inscription before sending Like we have previously described inscriptions are inscribed onto sats, and sats are stored within UTXOs. UTXO's are a collection of satoshis with some particular value of the number of satoshis (the output value). Usually (but not always) the inscription will be inscribed on the first satoshi in the UTXO. When inspecting your inscription before sending the main thing you will want to check is which satoshi in the UTXO your inscription is inscribed on. To do this, you can follow the [Validating / Viewing Received Inscriptions](./sparrow-wallet.md#validating--viewing-received-inscriptions) described above to find the inscription page for your inscription on ordinals.com There you will find some metadata about your inscription which looks like the following: #44,986,811text#!/usr/bin/env bash set -euo pipefail if [ ! -z ${GITHUB_ACTIONS-} ]; then set -x fi help() { cat <<'EOF' Install a binary release of ord hosted on GitHub USAGE: install.sh [options] FLAGS: -h, --help Display this message -f, --force Force overwriting an existing binary OPTIONS: --tag TAG Tag (version) of the crate to install, defaults to latest release --to LOCATION Where to install the binary [default: ~/bin] --target TARGET EOF } crate=ord url=https://github.com/ordinals/ord releases=$url/releases say() { echo "install.sh: $*" >&2 } err() { if [ ! -z ${tempdir-} ]; then rm -rf $tempdir fi say "error: $*" exit 1 } need() { if ! command -v $1 > /dev/null 2>&1; then err "need $1 (command not found)" fi } force=false while test $# -gt 0; do case $1 in --force | -f) force=true ;; --help | -h) help exit 0 ;; --tag) tag=$2 shift ;; --target) target=$2 shift ;; #44,986,580text``` Once `ord` is installed, you should be able to run `ord --version` on the command line. Building -------- On Debian and Ubuntu, `ord` requires `libssl-dev` when building from source: ``` sudo apt-get install libssl-dev ``` You'll also need Rust: ``` curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` To build `ord` from source: ``` git clone https://github.com/ordinals/ord.git cd ord cargo build --release ``` Once built, the `ord` binary can be found at `./target/release/ord`. `ord` requires `rustc` version 1.67.0 or later. Run `rustc --version` to ensure you have this version. Run `rustup update` to get the latest stable release. ### Homebrew `ord` is available in [Homebrew](https://brew.sh/): ``` brew install ord ``` ### Debian Package To build a `.deb` package: ``` cargo install cargo-deb cargo deb ``` Contributing ------------ If you wish to contribute there are a couple things that are helpful to know. We put a lot of emphasis on proper testing in the code base, with three broad #44,986,577text "bitflags 1.3.2", ] [[package]] name = "redox_users" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom 0.2.10", "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" #44,986,576text let split_coinbase_output = TransactionTemplate { inputs: &[(1, 0, 0, Default::default())], outputs: 2, fee: 0, ..Default::default() }; let txid = context.rpc_server.broadcast_tx(split_coinbase_output); context.mine_blocks(1); assert_eq!( context.index.list(OutPoint::new(txid, 0)).unwrap().unwrap(), List::Unspent(vec![(50 * COIN_VALUE, 75 * COIN_VALUE)]) ); assert_eq!( context.index.list(OutPoint::new(txid, 1)).unwrap().unwrap(), List::Unspent(vec![(75 * COIN_VALUE, 100 * COIN_VALUE)]) ); } #[test] fn list_merge_ranges_are_tracked_correctly() { let context = Context::builder().arg("--index-sats").build(); context.mine_blocks(2); let merge_coinbase_outputs = TransactionTemplate { inputs: &[(1, 0, 0, Default::default()), (2, 0, 0, Default::default())], fee: 0, ..Default::default() }; let txid = context.rpc_server.broadcast_tx(merge_coinbase_outputs); context.mine_blocks(1); assert_eq!( #44,985,795text bitcoin::secp256k1::rand::{self, RngCore}, }; #[test] fn height_limit() { { let context = Context::builder().args(["--height-limit", "0"]).build(); context.mine_blocks(1); assert_eq!(context.index.block_height().unwrap(), None); assert_eq!(context.index.block_count().unwrap(), 0); } { let context = Context::builder().args(["--height-limit", "1"]).build(); context.mine_blocks(1); assert_eq!(context.index.block_height().unwrap(), Some(Height(0))); assert_eq!(context.index.block_count().unwrap(), 1); } { let context = Context::builder().args(["--height-limit", "2"]).build(); context.mine_blocks(2); assert_eq!(context.index.block_height().unwrap(), Some(Height(1))); assert_eq!(context.index.block_count().unwrap(), 2); } } #[test] fn inscriptions_below_first_inscription_height_are_skipped() { let inscription = inscription("text/plain;charset=utf-8", "hello"); let template = TransactionTemplate { #44,985,787text [[package]] name = "futures-util" version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", "futures-io", "futures-macro", "futures-sink", "futures-task", "memchr", "pin-project-lite", "pin-utils", "slab", ] [[package]] name = "fuzz" version = "0.0.0" dependencies = [ "arbitrary", "bitcoin", "libfuzzer-sys", "ord", ] [[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", ] [[package]] name = "getopts" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" dependencies = [ "unicode-width", ] [[package]] name = "getrandom" version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" #44,985,771text "tokio-util", "tower-http", ] [[package]] name = "ord-bitcoincore-rpc" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d57a4297d466506cde088e020b33819f9a496d50272b14d7890e6fde5595a3e" dependencies = [ "bitcoin-private", "jsonrpc", "log", "ord-bitcoincore-rpc-json", "serde", "serde_json", ] [[package]] name = "ord-bitcoincore-rpc-json" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bb35088f918c775bc27fa79e372d034892b216fb7900aeedd6e06654879ad33" dependencies = [ "bitcoin", "bitcoin-private", "serde", "serde_json", ] [[package]] name = "parking" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" [[package]] name = "pem" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ #44,985,768text .index .get_inscription_satpoint_by_id(inscription_id) .unwrap(), None, ); } } #[test] fn list_first_coinbase_transaction() { let context = Context::builder().arg("--index-sats").build(); assert_eq!( context .index .list( "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b:0" .parse() .unwrap() ) .unwrap() .unwrap(), List::Unspent(vec![(0, 50 * COIN_VALUE)]) ) } #[test] fn list_second_coinbase_transaction() { let context = Context::builder().arg("--index-sats").build(); let txid = context.mine_blocks(1)[0].txdata[0].txid(); assert_eq!( context.index.list(OutPoint::new(txid, 0)).unwrap().unwrap(), List::Unspent(vec![(50 * COIN_VALUE, 100 * COIN_VALUE)]) ) } #[test] fn list_split_ranges_are_tracked_correctly() { let context = Context::builder().arg("--index-sats").build(); context.mine_blocks(1); #44,985,762text [[package]] name = "anstyle-parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ "windows-sys 0.48.0", ] [[package]] name = "anstyle-wincon" version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", "windows-sys 0.48.0", ] [[package]] name = "anyhow" version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" dependencies = [ "backtrace", ] [[package]] name = "arbitrary" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" #44,985,748textchecksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ "cfg-if", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] [[package]] name = "getrandom" version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] name = "gimli" version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" [[package]] name = "gloo-timers" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" dependencies = [ "futures-channel", "futures-core", "js-sys", "wasm-bindgen", ] [[package]] name = "h2" version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" #44,985,732text {{/if}} // The page path (mdbook only gives us // access to the path to the Markdown file). let path = "{{ path }}".replace(/\.md$/, ".html"); for (let lang of langList.querySelectorAll("a")) { if (lang.id == "en") { lang.href = `${full_path_to_root}${path}`; } else { lang.href = `${full_path_to_root}${lang.id}/${path}`; } } </script> {{#if print_enable}} <a href="{{ path_to_root }}print.html" title="Print this book" aria-label="Print this book"> <i id="print-button" class="fa fa-print"></i> </a> {{/if}} {{#if git_repository_url}} #44,985,723text