You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: restore NFT as valid policy anchoring mechanism
NFT on XRPL is still supported for policy document anchoring
(minting NFToken with policy hash URI). Only grant liveness via
NFT (mint-on-issue / burn-on-revoke) was replaced by XLS-70
credentials. All 9 doc files now clearly distinguish:
- NFT = policy document anchoring (supported)
- XLS-70 credentials = grant liveness/revocation (new)
Made-with: Cursor
Copy file name to clipboardExpand all lines: docs/animation/MPCP_ANIMATION_PACK.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -65,7 +65,7 @@ Narration:
65
65
66
66
## Scene 5 — Policy Anchoring
67
67
Visual:
68
-
Policy document hash flowing into a public ledger (Hedera HCS).
68
+
Policy document hash flowing into a public ledger (Hedera HCS or XRPL NFT).
69
69
70
70
Narration:
71
71
"An optional anchorRef on the PolicyGrant links it to a public ledger record — providing tamper-evident policy history for audit and dispute resolution."
Copy file name to clipboardExpand all lines: docs/implementation/intent-anchoring.md
+31-9Lines changed: 31 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,11 +2,9 @@
2
2
3
3
Optional support for publishing MPCP policy documents to distributed ledgers. Provides public auditability, dispute protection, and tamper-evident policy history.
4
4
5
-
**Hedera HCS**adapter is implemented (publish policy documentto a topic). It returns an `anchorRef`that is stored on the PolicyGrant for**policy document** auditability and dispute resolution.
5
+
**Hedera HCS**and **XRPL NFT** adapters support **policy document** anchoring: HCS publishes to a topic; the XRPL path encrypts (optional), stores ciphertext on IPFS, and records the policy via an NFToken whose URI points at that content (`anchorRef`= `xrpl:nft:{tokenId}` with the policy hash in the anchoring flow). Store the returned reference on the PolicyGrant for auditability and dispute resolution.
6
6
7
-
> **Grant liveness** (revoking or invalidating a grant) is a **separate** mechanism: XRPL **XLS-70** credentials (`CredentialCreate` / `CredentialDelete`), not policy `anchorRef` on HCS.
8
-
9
-
> **Historical note:** An earlier **XRPL NFT** policy-anchor path (`xrpl:nft:{tokenId}`) existed in reference discussions; it is **removed / superseded** for anchoring. Use HCS for policy documents; use XLS-70 for grant state.
7
+
> **Grant liveness** (revoking or invalidating a grant) is a **separate** mechanism: XRPL **XLS-70** credentials (`CredentialCreate` / `CredentialDelete`). That replaces the older **NFT mint-on-issue / burn-on-revoke** pattern for **grants**. Do not conflate XLS-70 grant credentials with **policy**`anchorRef` on HCS or XRPL NFT.
10
8
11
9
## Purpose
12
10
@@ -21,33 +19,46 @@ The `anchorRef` field on a PolicyGrant identifies the on-chain location of the a
txHash?:string; // Optional ledger record id (implementation-specific)
53
64
topicId?:string; // Hedera HCS topic ID
@@ -75,6 +86,17 @@ The Hedera HCS adapter publishes policy documents to a Hedera Consensus Service
75
86
-`MPCP_HCS_POLICY_TOPIC_ID` — HCS topic ID for policy anchoring
76
87
-`HEDERA_NETWORK` (optional) — `testnet` or `mainnet`, default `testnet`
77
88
89
+
## XRPL NFT Adapter (policy document anchoring)
90
+
91
+
> **Scope:** This path is for **policy document anchoring** only (tamper-evident policy history on XRPL). **Grant liveness** (revocation) uses **XLS-70 Credentials** — see PolicyGrant and the XRPL profile; do not use NFToken burn as the grant revocation mechanism.
92
+
93
+
The reference SDK provides `xrplEncryptAndStorePolicyDocument` (in `mpcp-service/anchor`): it encrypts the policy document, uploads the ciphertext via an injected IPFS client, and returns a **CID** intended as the NFToken URI (`ipfs://{cid}`). **NFTokenMint** (and setting `anchorRef` to `xrpl:nft:{tokenId}`) is typically performed by the policy authority service, not inside the lightweight SDK.
94
+
95
+
**Requirements:**
96
+
- Caller-supplied **IPFS store** (`PolicyDocumentIpfsStore`) — no bundled IPFS client
97
+
- Encryption options when using encrypted submit mode (`PolicyAnchorEncryptionOptions`)
98
+
- XRPL account with NFToken issuance rights for minting the policy anchor NFT
99
+
78
100
## XRPL Payment Memos
79
101
80
102
Every XRPL payment submitted via the Trust Gateway includes an `mpcp/grant-id` memo field. This provides a lightweight on-chain audit trail linking each payment to its PolicyGrant — even without a full policy document anchor.
| anchorRef | If present on PolicyGrant, format validated (`hcs:{topicId}:{seq}`) |
24
+
| anchorRef | If present on PolicyGrant, format validated (`hcs:{topicId}:{seq}` or `xrpl:nft:{tokenId}`) |
25
25
26
26
## Usage
27
27
@@ -102,7 +102,7 @@ Settlement bundles for development and conformance testing may include `sbaPubli
102
102
103
103
## Dispute Verification
104
104
105
-
When a settlement is disputed, `verifyDisputedSettlement` runs full chain verification plus optional policy anchor verification. If the PolicyGrant has an `anchorRef` (e.g., to Hedera HCS), the anchor can be checked to confirm the policy document was published before the settlement.
105
+
When a settlement is disputed, `verifyDisputedSettlement` runs full chain verification plus optional policy anchor verification. If the PolicyGrant has an `anchorRef` (e.g., to Hedera HCS or XRPL NFT), the anchor can be checked to confirm the policy document was published before the settlement.
106
106
107
107
See [Dispute Resolution](https://github.com/mpcp-protocol/mpcp-spec/blob/main/docs/guides/dispute-resolution.md) for the guide.
Supported rails for **policy document** anchoring: **`hedera-hcs`**, **`xrpl-nft`**.
75
79
76
-
> **Removed / superseded:**The former `xrpl-nft` rail (NFTokenMint/Burn for policy anchors) is no longer supported. **Grant liveness**(whether a grant is still valid) is handled separately via **XLS-70**`CredentialCreate` / `CredentialDelete` on XRPL — not via policy `anchorRef`.
80
+
> **Grant liveness**(whether a grant is still valid) is **not**defined by burning the policy anchor NFT. Use **XLS-70**`CredentialCreate` / `CredentialDelete` on XRPL for credential-based grant revocation. Policy `anchorRef` (HCS or XRPL NFT) remains the tamper-evident **policy document** anchor only.
77
81
78
-
The returned `anchorRef` can be stored on the PolicyGrant (`grant.anchorRef`) to provide on-chain auditability of the **policy document** (HCS).
82
+
The returned `anchorRef` can be stored on the PolicyGrant (`grant.anchorRef`) to provide on-chain auditability of the **policy document**.
0 commit comments