openassets-rust openassets at docs.rs Build Status MIT License

The implementation of the Open Assets Protocol for Rust.

Examples

bitcoin::TxOut supports marker output.

```rust use bitcoin::{Script, TxOut}; use bitcoin::blockdata::script::Builder; use bitcoin::util::misc::hexbytes; use hex::decode as hexdecode; use openassets::marker_output::{TxOutExt, Payload};

let markeroutput = TxOut {value: 0, scriptpubkey: Builder::from(hexdecode("6a244f4101000364007b1b753d68747470733a2f2f6370722e736d2f35596753553150672d71").unwrap()).intoscript()};

// judge marker output

markeroutput.isopenassets_marker();

// get open assets payload

let payload: Payload = markeroutput.getoa_payload().unwrap();

// asset quantities payload.quantities; => [127, 128, 12857]

// metadata payload.metadata => "u=https://cpr.sm/5YgSU1Pg-q"

// encode payload let metadata = "u=https://cpr.sm/5YgSU1Pg-q".tostring(); let payload = Payload { quantities: vec![100, 0, 123], metadata }; let serializedmarker: Vec = serialize(&payload); ```

Asset ID calculation.

```rust use std::str::FromStr; use bitcoin::blockdata::script::Builder; use openassets::assetid::AssetId; use hex::decode as hexdecode;

let p2pkh = Builder::from(hexdecode("76a914010966776006953d5567439e5e39f86a0d273bee88ac").unwrap()).intoscript(); let assetid = AssetId::new(&p2pkh, bitcoin::network::constants::Network::Bitcoin); assetid.to_string(); => "ALn3aK1fSuG27N96UGYB1kUYUpGKRhBuBC"

// load from string AssetId::from_str("ALn3aK1fSuG27N96UGYB1kUYUpGKRhBuBC"); ```

Open Assets Address

```rust use std::str::FromStr; use std::string::ToString; use openassets::address::OAAddressConverter;

// convert btc address to open assets address let addr = bitcoin::Address::fromstr("1F2AQr6oqNtcJQ6p9SiCLQTrHuM9en44H8").unwrap(); addr.tooaaddress().unwrap().tostring(); => "akQz3f1v9JrnJAeGBC4pNzGNRdWXKan4U6E"

// convert open assets address to btc address let openassetaddr = addr.tooaaddress().unwrap(); openassetaddr.tobtcaddr().unwrap().to_string(); => "1F2AQr6oqNtcJQ6p9SiCLQTrHuM9en44H8" ```