From f2e76078f2778343488beb6b7ec4491c02b1946d Mon Sep 17 00:00:00 2001 From: David Meister Date: Sun, 14 Jun 2026 22:13:19 +0000 Subject: [PATCH 1/3] Add OffchainAsset (OA) magic numbers to KnownMagic enum Adds the five OffchainAsset magic numbers used by the gildlab/SFT frontend and h20.market tokenization UI to the KnownMagic enum so RainMetaDocumentV1Item can encode/decode receipt information: - OaSchema = 0xffa8e8a9b9cf4a31 - OaHashList = 0xff9fae3cc645f463 - OaStructure = 0xffc47a6299e8a911 - OaTokenImage = 0xff8cd2927c8c86cb - OaTokenCredentialLinks = 0xffbc38eb14ad2209 The new variants are also added to the TryFrom match so they round-trip on decode. Existing magic values are unchanged. Closes #98 Co-Authored-By: Claude Opus 4.8 --- crates/cli/src/meta/magic.rs | 71 ++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/crates/cli/src/meta/magic.rs b/crates/cli/src/meta/magic.rs index 3165c4d8..8b03ad17 100644 --- a/crates/cli/src/meta/magic.rs +++ b/crates/cli/src/meta/magic.rs @@ -45,6 +45,16 @@ pub enum KnownMagic { /// Payload is raw UTF-8 bytes containing the oracle endpoint URL. /// Used in order metadata to tell takers where to GET signed context data. RaindexSignedContextOracleV1 = 0xff7a1507ba4419ca, + /// OffchainAsset schema reference for offchain asset data + OaSchema = 0xffa8e8a9b9cf4a31, + /// OffchainAsset IPFS hash list for offchain assets + OaHashList = 0xff9fae3cc645f463, + /// OffchainAsset structured data (e.g. receipt information) + OaStructure = 0xffc47a6299e8a911, + /// OffchainAsset token image metadata + OaTokenImage = 0xff8cd2927c8c86cb, + /// OffchainAsset token credential links + OaTokenCredentialLinks = 0xffbc38eb14ad2209, } impl KnownMagic { @@ -78,6 +88,13 @@ impl TryFrom for KnownMagic { v if v == KnownMagic::RaindexSignedContextOracleV1 as u64 => { Ok(KnownMagic::RaindexSignedContextOracleV1) } + v if v == KnownMagic::OaSchema as u64 => Ok(KnownMagic::OaSchema), + v if v == KnownMagic::OaHashList as u64 => Ok(KnownMagic::OaHashList), + v if v == KnownMagic::OaStructure as u64 => Ok(KnownMagic::OaStructure), + v if v == KnownMagic::OaTokenImage as u64 => Ok(KnownMagic::OaTokenImage), + v if v == KnownMagic::OaTokenCredentialLinks as u64 => { + Ok(KnownMagic::OaTokenCredentialLinks) + } _ => Err(crate::error::Error::UnknownMagic), } } @@ -198,4 +215,58 @@ mod tests { let from_u64 = KnownMagic::try_from(magic_number as u64).unwrap(); assert_eq!(magic_number, from_u64); } + + #[test] + fn test_oa_schema() { + let magic_number = KnownMagic::OaSchema; + let magic_number_after_prefix = magic_number.to_prefix_bytes(); + + assert_eq!(hex::encode(magic_number_after_prefix), "ffa8e8a9b9cf4a31"); + } + + #[test] + fn test_oa_hash_list() { + let magic_number = KnownMagic::OaHashList; + let magic_number_after_prefix = magic_number.to_prefix_bytes(); + + assert_eq!(hex::encode(magic_number_after_prefix), "ff9fae3cc645f463"); + } + + #[test] + fn test_oa_structure() { + let magic_number = KnownMagic::OaStructure; + let magic_number_after_prefix = magic_number.to_prefix_bytes(); + + assert_eq!(hex::encode(magic_number_after_prefix), "ffc47a6299e8a911"); + } + + #[test] + fn test_oa_token_image() { + let magic_number = KnownMagic::OaTokenImage; + let magic_number_after_prefix = magic_number.to_prefix_bytes(); + + assert_eq!(hex::encode(magic_number_after_prefix), "ff8cd2927c8c86cb"); + } + + #[test] + fn test_oa_token_credential_links() { + let magic_number = KnownMagic::OaTokenCredentialLinks; + let magic_number_after_prefix = magic_number.to_prefix_bytes(); + + assert_eq!(hex::encode(magic_number_after_prefix), "ffbc38eb14ad2209"); + } + + #[test] + fn test_oa_magics_roundtrip() { + for magic_number in [ + KnownMagic::OaSchema, + KnownMagic::OaHashList, + KnownMagic::OaStructure, + KnownMagic::OaTokenImage, + KnownMagic::OaTokenCredentialLinks, + ] { + let from_u64 = KnownMagic::try_from(magic_number as u64).unwrap(); + assert_eq!(magic_number, from_u64); + } + } } From 2e438051ac3909733f161ed43bad312106cc7bb4 Mon Sep 17 00:00:00 2001 From: David Meister Date: Tue, 16 Jun 2026 01:04:06 +0000 Subject: [PATCH 2/3] ci: re-trigger after rainix LICENSE symlink fix (#232) From a81af0cda0c4c19cf7595991c350b56555a53a4f Mon Sep 17 00:00:00 2001 From: David Meister Date: Fri, 19 Jun 2026 17:24:22 +0000 Subject: [PATCH 3/3] merge(main): resolve conflicts [merge-update]