TypeScript Python Go Rust Java Solidity

Rust SDK

l3rs1-sdk - crates.io - Rust 1.77+
cargo add l3rs1-sdk
Dependencies: sha2, hex, serde_json, thiserror.

Quick Example

use l3rs1::crypto::construct_asset_id;
use l3rs1::modules::apply_state_transition;
use l3rs1::types::AssetState;

let id = construct_asset_id(
    "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
    1740355200, "0000000000000001").unwrap();

let state = apply_state_transition(&AssetState::Issued, "ACTIVATION").unwrap();
// state == AssetState::Active

API Reference

Function/Method§Description
constructAssetId / ConstructAssetID2.2H(pk_issuer ∥ ts ∥ nonce)
constructCID / ConstructCID8.3CID = H(I ∥ SH ∥ CH ∥ GH ∥ t)
constructTxId / ConstructTxID9.6TxID = H(sender ∥ receiver ∥ amount ∥ nonce ∥ ts)
canonicalize13.11Sorted-key JSON, no whitespace
applyStateTransition2.5Deterministic state machine, Invariant I1
evaluateCompliance4.3C: E to {0,1}, O(n), Invariant I2
validateFeeModule6.12Allocations must sum to 10000 bp
identityStatus3.6VALID / EXPIRED / REVOKED
isReplay9.6Replay protection via TxID/nonce

Error Type

pub enum L3rsError {
    InvalidStateTransition(String),
    Validation(String),
    Crypto(String),
    Serialization(String),
}

State Transition Matrix

FromTriggerTo
ISSUEDACTIVATIONACTIVE
ACTIVEBREACHRESTRICTED
ACTIVEFREEZEFROZEN
RESTRICTEDCLEAREDACTIVE
FROZENRELEASEACTIVE
ACTIVEREDEMPTIONREDEEMED
REDEEMEDFINALIZATIONBURNED (terminal)
ACTIVESUSPENSIONSUSPENDED
SUSPENDEDREINSTATEMENTACTIVE