◉ Arbitrary Protocols on top of Bitcoin (Bitcoin NFTs/Ordinals & Bitcoin Identities/Usernames)

Related tags

Miscellaneous arb
Overview

arb

arb is a command-line wallet, index, and explorer interface that implements the arb protocol, which enables arbitrary protocols on top of Bitcoin, such as Bitcoin NFTs/Ordinals & Bitcoin Identities/Usernames.

It is experimental software, should be considered a work-in-progress, and has no warranty. All features may not be fully implemented currently. See issues and LICENSE for more details.

Join the Gitter room to chat about the arb ecosystem.

Features

  • Arbitrary Protocols #1

    • Read Arbitrary Protocol Inscriptions
    • Write Arbitrary Protocol Inscriptions
  • Content Compression #2

  • Data Deduplication #3

  • Hash-addressed Content #4

  • Inscription Constraints #5

  • Inscription Metadata (JSON) #6

  • Multipart Inscriptions #7

  • Non-tracked / Non-transferable Inscriptions #8

  • Off-chain Content (BitTorrent) #9

Default Protocols

  • 📁 bfs: Bitcoin File System, enabling storage and retrieval of public files using a filesystem paradigm.

  • 🪪 bid: Bitcoin Identifiers/Usernames, enabling unique, human-meaningful name registration natively on Bitcoin.

  • bnw: Bitcoin NFT Walls, enabling a bid to showcase a curated collection of NFTs that it owns.

  • 💎 ord: Bitcoin NFTs/Ordinals, enabling NFTs natively on Bitcoin by imbuing satoshis with numismatic value, allowing them to be collected and traded as curios.

  • arb supports arbitrary protocols on top of Bitcoin using inscriptions, so additional protocols can be defined using a JSON specification file, which are loaded to run the arbitrary protocol.

bfs Protocol

  • Is associated with a specific bid Identifier/Username.

bid Protocol

  • Characters can be alphanumeric with underscores, lowercase a through z, 0 through 9, and _ in any combination.

  • Length can be 1 through 16 characters, with 6 characters and shorter reserved for a future update, so 7 to 16 characters to start with.

  • Usernames must be renewed periodically, likely every 52,500 blocks, which is about 1 year, but perhaps a shorter period initially to discourage speculation and encourage engagement.

  • A "sunrise period" where a list of the top ten thousand domains are reserved, with the matching username claimable by publishing some specific data at a well-known location on the domain prior to the end of the sunrise period, which would be some specified block height.

bnw Protocol

  • Is associated with a specific bid Identifier/Username.

  • Is addressable at USERNAME/WALL where USERNAME is a valid bid inscription and WALL is the name for a wal inscription that the bid inscription is associated with.

  • Has a text description that can be whatever the owner chooses.

ord Protocol

  • Version 0 (ordv0): As defined in https://github.com/casey/ord.

  • Version 1 (ordv1): Extended with new features, implemented through a backward-compatible, soft-fork mechanism termed Envelope Expansion.

    • Content Compression
    • Inscription Metadata (JSON)
    • Off-chain Content (BitTorrent)
    • Optional Title, Subtitle, Description, License, and Comment Fields
    • Upgradable Version Mechanism

Wallet

arb relies on Bitcoin Core for key management and transaction signing. This has a number of implications that you must understand in order to use arb wallet commands safely:

  • Bitcoin Core is not aware of inscriptions and does not perform sat control. Using bitcoin-cli commands and RPC calls with arb wallets may lead to loss of inscriptions.

  • arb wallet commands automatically load the arb wallet given by the --wallet option, which defaults to 'arb'. Keep in mind that after running an arb wallet command, an arb wallet may be loaded.

  • Because arb has access to your Bitcoin Core wallets, arb should not be used with wallets that contain a material amount of funds. Keep ordinal and cardinal wallets segregated.

Installation

arb is written in Rust and can be built from source. Pre-built binaries are available on the releases page.

You can install the latest pre-built binary from the command line with:

curl --proto '=https' --tlsv1.2 -fsLS https://raw.githubusercontent.com/tyjvazum/arb/master/install.sh | bash -s

Once arb is installed, you should be able to run arb --version on the command line.

Building

On Debian and Ubuntu, arb 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 arb from source:

git clone https://github.com/tyjvazum/arb.git
cd arb
cargo build --release

The default location for the arb binary once built is ./target/release/arb.

arb 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.

Syncing

arb requires a synced bitcoind node with -txindex to build the index of satoshi locations. arb communicates with bitcoind via RPC.

If bitcoind is run locally by the same user, without additional configuration, arb should find it automatically by reading the .cookie file from bitcoind's datadir, and connecting using the default RPC port.

If bitcoind is not on mainnet, is not run by the same user, has a non-default datadir, or a non-default port, you'll need to pass additional flags to arb. See arb --help for details.

Logging

arb uses env_logger. Set the RUST_LOG environment variable in order to turn on logging. For example, run the server and show info-level log messages and above:

$ RUST_LOG=info cargo run server

Logo

The arb logo is ◉, which is the Unicode "Fisheye" character with Unicode codepoint U+25C9. Other representations include HTML (decimal) ◉, HTML (hex) &#x25C9, CSS-code \0025C9, and JavaScript code \u25C9. It should ideally be displayed using the font color #F7931A, but when that isn't possible (e.g., on social media posts), using the default character in a black or white font color is acceptable as a fallback logo.

A PNG version of the logo (logo-1000x1000.png), in font color #F7931A, has also been included for use where needed.

New Releases

Release commit messages use the following template:

Release x.y.z

- Bump version: x.y.z → x.y.z
- Update changelog
- Update dependencies
- Update database schema version

Acknowledgements

This repository is based on the great work done in ord: https://github.com/casey/ord

Comments
  • Feature: Off-chain Content (BitTorrent)

    Feature: Off-chain Content (BitTorrent)

    • [x] Optional Off-chain Content (BitTorrent) for Inscriptions w/ Envelope Expansion

    Based on: https://github.com/casey/ord/issues/801, https://github.com/casey/ord/pull/1805

    enhancement 
    opened by tyjvazum 0
  • Feature: Inscription Metadata (JSON)

    Feature: Inscription Metadata (JSON)

    • [x] Optional JSON Metadata for Inscriptions w/ Envelope Expansion

    Based on: https://github.com/casey/ord/issues/887, https://github.com/casey/ord/issues/1005, https://github.com/casey/ord/issues/1859

    enhancement 
    opened by tyjvazum 0
  • Feature: Content Compression

    Feature: Content Compression

    • [x] Optional Content Compression for Inscriptions w/ Envelope Expansion

    Based on: https://github.com/casey/ord/issues/891, https://github.com/casey/ord/pull/1713, https://github.com/casey/ord/pull/1926

    enhancement 
    opened by tyjvazum 0
  • Feature: A Companion Extension for Browsers

    Feature: A Companion Extension for Browsers

    @sull tweeted a great point about centralized explorers being an issue for the space, along with a desire for a browser extension to help deal with it.

    Ideally, this could be done with a trust-minimized light-client mode that could optionally be enhanced to a trustless full-node mode, if the user wants to run arb locally in addition to the browser extension, using native messaging.

    @stet

    help wanted good first issue 
    opened by tyjvazum 0
  • Feature: A Desktop App (GUI)

    Feature: A Desktop App (GUI)

    There should be a desktop app with a clean UI/UX, that uses the CLI program internally (https://github.com/tyjvazum/arb/issues/11), and web technologies for the interface.

    I've shown work on an identicon system (https://github.com/casey/ord/issues/1838) that will be used throughout the higher-level protocols like bid. This is currently written in JavaScript, to be able to leverage the Canvas API, so I'm open to using Electron or similar. If anyone has any experience in this area or helpful ideas, please jump in.

    Related work: https://github.com/casey/ord/issues/1247

    help wanted 
    opened by tyjvazum 0
  • Feature: A Complete CLI API

    Feature: A Complete CLI API

    There's currently a lot of functionality contained in the server code that isn't exposed through the CLI. I plan on removing the server portion (after this feature is completed) since I think the project shouldn't be focused on use cases involving HTTP and certainly shouldn't intimately combine the primary code with server code. This API should return JSON for ease of use.

    Related work: https://github.com/casey/ord/pull/2036, https://github.com/casey/ord/pull/2002

    enhancement 
    opened by tyjvazum 0
  • Consider Integrating Proposed `ord` Protocol Changes

    Consider Integrating Proposed `ord` Protocol Changes

    Current discussion threads: https://github.com/casey/ord/pull/2031, https://github.com/casey/ord/issues/2045, https://github.com/casey/ord/pull/2079, https://github.com/casey/ord/pull/2081

    question 
    opened by tyjvazum 0
Releases(v0.2.0)
  • v0.2.0(May 13, 2023)

    Added

    • Add support for Envelope Expansions
    • Add write support for Arbitrary Protocol Inscriptions https://github.com/tyjvazum/arb/issues/1
    • Add support for Content Compression https://github.com/tyjvazum/arb/issues/2
    • Add support for Inscription Metadata (JSON) https://github.com/tyjvazum/arb/issues/6
    • Add support for Non-tracked / Non-transferable Inscriptions https://github.com/tyjvazum/arb/issues/8
    • Add support for Off-chain Content (BitTorrent) https://github.com/tyjvazum/arb/issues/9
    • Add support for Optional Title, Subtitle, Description, License, and Comment Fields

    Optional PGP Verification Instructions

    1. Download tyjvazum's PGP public key here, and then import it with gpg --import "C4106BFE9B8BEB40(tyjvazum).asc" in the directory where the file is.

    2. Verify that the fingerprint is 8092 8E49 1421 22FB A2AB 4B50 C410 6BFE 9B8B EB40 with gpg --list-keys tyjvazum.

    3. Download the latest release file (currently arb-v0.2.0), for whichever platform you want (arb-v0.2.0-x86_64-unknown-linux-gnu.tar.gz, arb-v0.2.0-aarch64-apple-darwin.tar.gz, arb-v0.2.0-x86_64-apple-darwin.tar.gz, or arb-v0.2.0-x86_64-pc-windows-msvc.zip), the arb-v0.2.0-SHA256SUMS file and the corresponding arb-v0.2.0-SHA256SUMS.asc signature file.

    4. Compute the SHA-256 hash of the release file using the command sha256sum RELEASE_FILE where RELEASE_FILE is the filename of the release file being used.

    5. Make sure that the resulting hash matches the one in the arb-v0.2.0-SHA256SUMS text file.

    6. Verify the signature with gpg --verify arb-v0.2.0-SHA256SUMS.asc arb-v0.2.0-SHA256SUMS. If the message returned says Good signature from Ty Vazum and that it was signed with Primary key fingerprint: 8092 8E49 1421 22FB A2AB 4B50 C410 6BFE 9B8B EB40, then the software was not tampered with since being signed.

    Note: The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to Ty Vazum.

    Source code(tar.gz)
    Source code(zip)
    arb-v0.2.0-aarch64-apple-darwin.tar.gz(7.00 MB)
    arb-v0.2.0-SHA256SUMS(585 bytes)
    arb-v0.2.0-SHA256SUMS.asc(833 bytes)
    arb-v0.2.0-x86_64-apple-darwin.tar.gz(7.19 MB)
    arb-v0.2.0-x86_64-pc-windows-msvc.zip(6.25 MB)
    arb-v0.2.0-x86_64-unknown-linux-gnu.tar.gz(9.00 MB)
  • v0.1.0(Apr 5, 2023)

    Changed

    • Branding
    • License

    Fixed

    • Workflows

    Optional PGP Verification Instructions

    1. Download tyjvazum's PGP public key here, and then import it with gpg --import "C4106BFE9B8BEB40(tyjvazum).asc" in the directory where the file is.

    2. Verify that the fingerprint is 8092 8E49 1421 22FB A2AB 4B50 C410 6BFE 9B8B EB40 with gpg --list-keys tyjvazum.

    3. Download the latest release file (currently arb-v0.1.0), for whichever platform you want (arb-v0.1.0-x86_64-unknown-linux-gnu.tar.gz, arb-v0.1.0-aarch64-apple-darwin.tar.gz, arb-v0.1.0-x86_64-apple-darwin.tar.gz, or arb-v0.1.0-x86_64-pc-windows-msvc.zip), the arb-v0.1.0-SHA256SUMS file and the corresponding arb-v0.1.0-SHA256SUMS.asc signature file.

    4. Compute the SHA-256 hash of the release file using the command sha256sum RELEASE_FILE where RELEASE_FILE is the filename of the release file being used.

    5. Make sure that the resulting hash matches the one in the arb-v0.1.0-SHA256SUMS text file.

    6. Verify the signature with gpg --verify arb-v0.1.0-SHA256SUMS.asc arb-v0.1.0-SHA256SUMS. If the message returned says Good signature from Ty Vazum and that it was signed with Primary key fingerprint: 8092 8E49 1421 22FB A2AB 4B50 C410 6BFE 9B8B EB40, then the software was not tampered with since being signed.

    Note: The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to Ty Vazum.

    Source code(tar.gz)
    Source code(zip)
    arb-v0.1.0-aarch64-apple-darwin.tar.gz(6.83 MB)
    arb-v0.1.0-SHA256SUMS(585 bytes)
    arb-v0.1.0-SHA256SUMS.asc(833 bytes)
    arb-v0.1.0-x86_64-apple-darwin.tar.gz(7.02 MB)
    arb-v0.1.0-x86_64-pc-windows-msvc.zip(6.11 MB)
    arb-v0.1.0-x86_64-unknown-linux-gnu.tar.gz(8.81 MB)
Owner
Ty Vazum
Ty Vazum
This crate provides a convenient macro that allows you to generate type wrappers that promise to always uphold arbitrary invariants that you specified.

prae This crate provides a convenient macro that allows you to generate type wrappers that promise to always uphold arbitrary invariants that you spec

null 96 Dec 4, 2022
An abstraction build on top of discord-rich-presence that makes possible to use it in a more declarative way

Declarative Discord Rich Presence This library is an abstraction build on top of discord-rich-presence crate that allows you to use it in a more decla

null 2 Sep 7, 2022
A highly modular Bitcoin Lightning library written in Rust. Its Rust-Lightning, not Rusty's Lightning!

Rust-Lightning is a Bitcoin Lightning library written in Rust. The main crate, lightning, does not handle networking, persistence, or any other I/O. Thus, it is runtime-agnostic, but users must implement basic networking logic, chain interactions, and disk storage. More information is available in the About section.

Lightning Dev Kit 850 Jan 3, 2023
Matrix Bot for Bitcoin Push Notification Service

BPNS Matrix Bot Description Matrix Bot for Bitcoin Push Notification Service. Requirements Rust (1.57.0+) BPNS Server Matrix account Build cargo build

BPNS 0 Mar 14, 2022
Expose local age identities to remote machines via SSH

age-plugin-remote TBD Design Notes Proxy identities act as bearer tokens. A proxy identity is only "active" if the authority provides it when starting

null 6 Aug 19, 2022
Light and fast indexer for Ordinals.

ordi ordi is a fast light indexer for building ordinals data source. Usage export btc_data_dir= export ordi_data_dir= export btc_rpc_host= export btc

null 21 Oct 1, 2023
Light and fast indexer for Ordinals.

ordi ordi is a fast light indexer for building ordinals data source. Usage export btc_data_dir= export ordi_data_dir= export btc_rpc_host= export btc

null 22 Oct 7, 2023
Open Protocol Indexer, OPI, is the best-in-slot open-source indexing client for meta-protocols on Bitcoin.

OPI - Open Protocol Indexer Open Protocol Indexer, OPI, is the best-in-slot open-source indexing client for meta-protocols on Bitcoin. OPI uses a fork

Best in Slot 33 Dec 16, 2023
figure out who holds the nfts that came out of a candy machine.

Candy Holders This is far from finished, but can: find tokens with a given update authority find holders of those tokens Neither the Rust or Node APIs

ExiledApes 24 Dec 29, 2022
Open Internet Service to store transaction history for NFTs/Tokens on the Internet Computer

CAP - Certified Asset Provenance Transaction history & asset provenance for NFT’s & Tokens on the Internet Computer CAP is an open internet service pr

Psychedelic 42 Nov 10, 2022
CosmWasm Contract for Dynamic CW721 NFTs on Terra

CosmWasm Starter Pack This is a template to build smart contracts in Rust to run inside a Cosmos SDK module on all chains that enable it.

null 9 Sep 12, 2022
A solana program designed to mint Metaplex compliant NFTs.

Solana Minter My program used to mint Amoebits & Amoebit Minis. I wrote it from scratch using the hello-world program as an example & base. Features C

vlawmz 35 Sep 22, 2022
Eternally liquid. Forward compatible. Nested, conditional, & Multi-resourced NFTs.

RMRK Substrate Rust Setup First, complete the basic Rust setup instructions. Run Use Rust's native cargo command to build and launch the template node

RMRK Team 67 Dec 25, 2022
CosmWasm implementation for limited edition, fixed-price NFTs

CW721 Editions This contract enables the creation of limited edition fixed price NFTs according to the cw721 token standard. Instantiation To instanti

Vernon Johnson 4 Oct 5, 2022
ufo2nft is a CLI Rust tool to automate creating on-chain SVG NFTs from UFO font sources

ufo2nft is a CLI Rust program created by Eli Heuer at the 2022 Seattle Solana Hacker House event. It uses Norad to create on-chain SVG images from UFO font sources, and prepares them for minting as Solana NFTs. For Ethereum NFTs the program can just export the SVGs and Ethereum NFTs can be built manually.

Eli Heuer 1 Feb 10, 2022
A reference NFT Staking Program & Client for Solana NFTs

This is a reference NFT Staking Program & Client for Solana NFTs. This program is compatible with both Candy Machine v1 and Candy Machine v2 NFTs.

Tracy Adams 73 Dec 19, 2022
Galleries of NFTs using Solana and Rust for contracts

About this Package created to simplify the process of parsing NFTs on Solana. It consists of: Package basic things like fetch all NFTs for specific wa

Andrew Scott 1 Jan 28, 2022
A specialized blockchain for testing use cases with the FRAME NFTs Pallet.

Substrate NFTs Node The Substrate NFTs node is a specialized blockchain for testing use cases with the FRAME NFTs Pallet. ?? The purpose of this node

Sacha Lansky 4 May 25, 2023
Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transactions of your non-custodial wallets on a provider of your choice, all while respecting your privacy

Bitcoin Push Notification Service (BPNS) Description Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transacti

BPNS 1 May 2, 2022
Minimal Bitcoin wallet intended for teaching rust-bitcoin

Insanely minimal Bitcoin wallet intended for demonstration of Rust Bitcoin ecosystem Absolutely DO NOT use with mainnet funds!!! No privacy - address

Martin Habovštiak 4 May 5, 2023