Skip to content

unconfirmedlabs/ori

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ori

A Sui Move library for referencing data stored on Walrus. Supports both standalone blobs and quilt patches.

Overview

ori provides a single enum type, WalrusData, that represents a reference to data on Walrus. It has two variants:

  • Blob(u256) — a reference to a standalone Walrus blob, identified by its blob ID.
  • QuiltPatch(u256, u8, u16, u16) — a reference to a patch within a Walrus quilt, identified by the quilt ID, version, start index, and end index.

The type has copy, drop, and store abilities, so it can be freely embedded in other on-chain objects.

Installation

Add ori as a dependency in your Move.toml:

[dependencies]
ori = { git = "https://github.com/unconfirmedlabs/ori.git", rev = "main" }

Usage

use ori::walrus_data::{Self, WalrusData};

// Reference a standalone blob
let blob: WalrusData = walrus_data::new_blob(blob_id);

// Reference a quilt patch
let patch: WalrusData = walrus_data::new_quilt_patch(
    quilt_id,
    version,
    start_index,
    end_index,
);

Reading fields

// Check the variant
if (data.is_blob()) {
    let id: u256 = data.blob_id();
} else {
    let qid: u256 = data.quilt_id();
    let ver: u8 = data.quilt_patch_version();
    let start: u16 = data.quilt_patch_start_index();
    let end: u16 = data.quilt_patch_end_index();
};

Calling a field accessor on the wrong variant aborts the transaction.

Quilt patch ID encoding

quilt_patch_id serializes a quilt patch reference into a 37-byte vector<u8>:

Bytes Field Encoding
0..31 quilt_id 32 bytes, little-endian
32 version 1 byte
33..34 start_index 2 bytes, little-endian
35..36 end_index 2 bytes, little-endian
let raw: vector<u8> = patch.quilt_patch_id();

Assertions

data.assert_is_blob();        // aborts if not a Blob
data.assert_is_quilt_patch(); // aborts if not a QuiltPatch

API Reference

Function Signature Description
new_blob (u256): WalrusData Create a blob reference
new_quilt_patch (u256, u8, u16, u16): WalrusData Create a quilt patch reference
blob_id (&WalrusData): u256 Get blob ID (aborts on QuiltPatch)
quilt_id (&WalrusData): u256 Get quilt ID (aborts on Blob)
quilt_patch_version (&WalrusData): u8 Get patch version (aborts on Blob)
quilt_patch_start_index (&WalrusData): u16 Get patch start index (aborts on Blob)
quilt_patch_end_index (&WalrusData): u16 Get patch end index (aborts on Blob)
quilt_patch_id (&WalrusData): vector<u8> Encode patch as 37-byte ID (aborts on Blob)
is_blob (&WalrusData): bool Check if Blob variant
is_quilt_patch (&WalrusData): bool Check if QuiltPatch variant
assert_is_blob (&WalrusData) Abort if not Blob
assert_is_quilt_patch (&WalrusData) Abort if not QuiltPatch

Testnet Deployment

ori is published on Sui testnet:

Package ID: 0xcfd348c336ec562d7cce245711ddd7835df6b02e88aaea4fcb6ec08a7afb1829

Development

Build

sui move build

Test

sui move test

The test suite covers blob and quilt patch construction, field accessors, boundary values, quilt patch ID encoding against real quilt data, and cross-variant abort behavior.

License

MIT

About

Structured Walrus blob and quilt patch references.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors