Git Product home page Git Product logo

arb's Introduction

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

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

arb's People

Contributors

casey avatar raphjaph avatar terror avatar tyjvazum avatar gmart7t2 avatar andrewtoth avatar rot13maxi avatar cryptoquick avatar windsok avatar jurraca avatar whoabuddy avatar cberner avatar veryordinally avatar niftynei avatar worm-emoji avatar kn0wmad avatar goodwinmark avatar batcavekid avatar toddynho avatar rayonx avatar psifour avatar hashbender avatar mjethani avatar jsahagun91 avatar hantuzun avatar neunenak avatar dplusplus1024 avatar cbspears avatar bnonni avatar apbendi avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.