feat(stellar): integrate on-chain metadata resolver for wraith-names - #150
feat(stellar): integrate on-chain metadata resolver for wraith-names#150OTimileyin wants to merge 2 commits into
Conversation
|
This PR is a duplicate of #136 (identical +2626/-116 across the same 13 files). Please close one of them so I only have one to track. Whichever you keep, rebase against develop and retarget the base branch from |
|
Thanks so much I have closed it |
|
@truthixify has it now been resolved? |
|
Thanks for closing #136. Two things left on this one:
Once the rebase is clean, CI will re-run and I will merge. |
Closes #119
Summary
Add optional on-chain metadata resolver for wraith-names, allowing name
owners to attach text records and content hashes to their
.wraithnames,similar to ENS text records. The feature is opt-in, owner-gated, and avoids
the resolution hot path.
Changes
New:
src/metadata.rsMetadataEntrystruct withtext_records: Map<String, String>andcontent_hash: BytesN<32>MetadataErrorenum with 5 dedicated error codes (101–105):MetadataKeyTooLong,MetadataValueTooLong,MetadataRecordTooLong,MetadataTotalTooLong,MetadataNotFound(≤ 1024B) size limits
Modified:
src/lib.rsDataKey::Metadata(BytesN<32>)storage key variant for per-name metadataNamesErrorvariants (50–54) for metadata error propagationset_metadata(env, owner, name, metadata)— owner-gated setter with fullvalidation
get_metadata(env, name)— public reader, returnsNameNotFoundorMetadataNotFoundrelease()— metadata is removed when a name isreleased
MetadataUpdatedevent emission on metadata changesHot path untouched
resolve()andname_of()remain completely unchanged — no metadatalookups added to the resolution path
Tests
test_set_and_get_metadata— happy path with avatar + twitter recordstest_set_metadata_not_owner— non-owner rejected withNotOwnertest_set_metadata_key_too_long— 65B key →MetadataKeyTooLongtest_set_metadata_value_too_long— 257B value →MetadataValueTooLongtest_set_metadata_total_too_long— 5 records × 210B →MetadataTotalTooLongtest_get_metadata_not_found— name exists, no metadata →MetadataNotFoundtest_get_metadata_unregistered_name— name doesn't exist →NameNotFoundtest_metadata_cleaned_on_release— metadata removed when name is releasedtest_hot_path_unchanged_after_metadata—resolve()andname_of()workidentically before/after metadata
metadata.rsmodule tests for isolated validationAll 17 wraith-names tests pass,
cargo fmtclean, zero warnings.