Skip to content

Commit d27f4c2

Browse files
NAOR YUVALNAOR YUVAL
authored andcommitted
docs: replace NFT references with XLS-70 credentials
Grant liveness uses XLS-70 CredentialCreate/Delete, not NFTokenMint/Burn. Policy anchoring uses Hedera HCS only (xrpl-nft rail removed). Updated: l1-ecosystem-evaluation, service-api, sdk, stablecoin-profile, verifier, intent-anchoring, dispute-verification, animation pack, README Made-with: Cursor
1 parent 7e5a4d5 commit d27f4c2

9 files changed

Lines changed: 21 additions & 35 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ Import from `mpcp-service/sdk`.
118118
```
119119
mpcp-reference
120120
├── src
121-
│ ├── anchor/ # On-chain adapters: did:xrpl, HCS, XRPL NFT revocation
121+
│ ├── anchor/ # On-chain adapters: did:xrpl, HCS; grant liveness via XLS-70 credentials
122122
│ ├── hash/ # Canonical JSON serialization and SHA-256 hashing
123123
│ ├── policy-core/ # Policy evaluation engine and types
124124
│ ├── protocol/ # Artifact types, schemas, SBA/PolicyGrant signing, Trust Bundles

docs/animation/MPCP_ANIMATION_PACK.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ Narration:
6565

6666
## Scene 5 — Policy Anchoring
6767
Visual:
68-
Policy document hash flowing into a public ledger (Hedera HCS or XRPL NFT).
68+
Policy document hash flowing into a public ledger (Hedera HCS).
6969

7070
Narration:
7171
"An optional anchorRef on the PolicyGrant links it to a public ledger record — providing tamper-evident policy history for audit and dispute resolution."
@@ -113,7 +113,7 @@ Autonomous parking example
113113
Vehicle enters → policy → budget → Trust Gateway → XRPL settlement
114114

115115
Scene 5
116-
Policy document anchored to ledger (Hedera HCS / XRPL NFT)
116+
Policy document anchored to ledger (Hedera HCS)
117117

118118
Scene 6
119119
Verification replay animation

docs/implementation/dispute-verification.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const result = verifyDisputedSettlement({
1818
context: settlementVerificationContext,
1919
// Optional: ledger anchor result from policy document anchoring
2020
ledgerAnchor: {
21-
anchorRef: grant.anchorRef, // "hcs:0.0.12345:42" or "xrpl:nft:ABC123..."
21+
anchorRef: grant.anchorRef, // "hcs:0.0.12345:42"
2222
rail: "hedera-hcs",
2323
sequenceNumber: "42",
2424
topicId: "0.0.12345",

docs/implementation/intent-anchoring.md

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
Optional support for publishing MPCP policy documents to distributed ledgers. Provides public auditability, dispute protection, and tamper-evident policy history.
44

5-
**Hedera HCS** adapter is implemented (publish policy document to a topic). **XRPL NFT** adapter is implemented (mint an NFT representing the policy document). Both return an `anchorRef` that is stored on the PolicyGrant.
5+
**Hedera HCS** adapter is implemented (publish policy document to a topic). It returns an `anchorRef` that is stored on the PolicyGrant for **policy document** auditability and dispute resolution.
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.
610
711
## Purpose
812

@@ -17,12 +21,11 @@ The `anchorRef` field on a PolicyGrant identifies the on-chain location of the a
1721
| Format | Rail | Example |
1822
|--------|------|---------|
1923
| `hcs:{topicId}:{seq}` | Hedera HCS | `hcs:0.0.12345:42` |
20-
| `xrpl:nft:{tokenId}` | XRPL NFT | `xrpl:nft:ABC123...` |
2124

2225
## Usage
2326

2427
```typescript
25-
import { hederaHcsAnchorPolicyDocument, checkXrplNftRevocation } from "mpcp-service/anchor";
28+
import { hederaHcsAnchorPolicyDocument } from "mpcp-service/anchor";
2629

2730
const policyDoc = { version: "1.0", policyHash: "a1b2c3...", issuedAt: "2026-01-01T00:00:00Z" };
2831

@@ -44,9 +47,9 @@ const grant = createPolicyGrant({
4447

4548
```typescript
4649
interface PolicyAnchorResult {
47-
anchorRef: string; // "hcs:{topicId}:{seq}" | "xrpl:nft:{tokenId}"
50+
anchorRef: string; // "hcs:{topicId}:{seq}"
4851
rail: AnchorRail;
49-
txHash?: string; // XRPL transaction hash
52+
txHash?: string; // Optional ledger record id (implementation-specific)
5053
topicId?: string; // Hedera HCS topic ID
5154
sequenceNumber?: string; // Hedera HCS sequence number
5255
anchoredAt?: string; // ISO 8601
@@ -72,21 +75,6 @@ The Hedera HCS adapter publishes policy documents to a Hedera Consensus Service
7275
- `MPCP_HCS_POLICY_TOPIC_ID` — HCS topic ID for policy anchoring
7376
- `HEDERA_NETWORK` (optional) — `testnet` or `mainnet`, default `testnet`
7477

75-
## XRPL NFT Adapter
76-
77-
The XRPL NFT adapter mints an NFT on the XRP Ledger representing the policy document. The NFT token ID becomes the `anchorRef`.
78-
79-
**Revocation check:** Use `checkXrplNftRevocation(tokenId)` to verify whether the NFT has been burned (which signals policy revocation).
80-
81-
```typescript
82-
import { checkXrplNftRevocation } from "mpcp-service/anchor";
83-
84-
const revoked = await checkXrplNftRevocation("ABC123...");
85-
if (revoked) {
86-
// Policy has been revoked on-chain
87-
}
88-
```
89-
9078
## XRPL Payment Memos
9179

9280
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.

docs/implementation/l1-ecosystem-evaluation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Adding a second rail is a protocol-level decision. It requires:
3939
| Identity | `did:xrpl` | On-ledger DID method; XLS-70 Credentials for grant liveness |
4040
| Offline friendliness | Strong | Trust Bundle + signature verification; no chain client needed |
4141
| Tooling | Good | `xrpl.js`, testnet faucet, well-documented |
42-
| MPCP integration | Deep | Anchor adapters, DID resolver, NFT revocation, stablecoin profile, golden vectors |
42+
| MPCP integration | Deep | Anchor adapters, DID resolver, XLS-70 credential revocation, stablecoin profile, golden vectors |
4343

4444
**Assessment:** Production-ready for MPCP v1.0. No gaps.
4545

docs/implementation/verifier.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ If any check fails, verification fails with a specific reason.
2121
| SBA | Signature valid; expiresAt not passed; sessionId, policyHash match |
2222
| SBA → decision | Budget not exceeded; rail, asset, destination in allowlists |
2323
| Settlement | Amount, rail, destination, asset match SBA constraints |
24-
| anchorRef | If present on PolicyGrant, format validated (`hcs:{topicId}:{seq}` or `xrpl:nft:{tokenId}`) |
24+
| anchorRef | If present on PolicyGrant, format validated (`hcs:{topicId}:{seq}`) |
2525

2626
## Usage
2727

@@ -102,7 +102,7 @@ Settlement bundles for development and conformance testing may include `sbaPubli
102102

103103
## Dispute Verification
104104

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.
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.
106106

107107
See [Dispute Resolution](https://github.com/mpcp-protocol/mpcp-spec/blob/main/docs/guides/dispute-resolution.md) for the guide.
108108

docs/implementation/xrpl-stablecoin-profile.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Policies using this profile must include:
2626
- `allowedAssets`: Array of `{ kind: "IOU", currency: string, issuer: string }`
2727
- `destinationAllowlist` (in SBA): XRPL account addresses allowed as payment destinations
2828
- `maxAmountMinor`, `expiresAt` per standard MPCP
29-
- `anchorRef` (optional): on-chain policy document anchor (`hcs:{topicId}:{seq}` or `xrpl:nft:{tokenId}`)
29+
- `anchorRef` (optional): on-chain policy document anchor (`hcs:{topicId}:{seq}`)
3030

3131
## Wallet Expectations
3232

docs/reference/sdk.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const grant = createPolicyGrant({
3636
allowedAssets: [{ kind: "IOU", currency: "RLUSD", issuer: "rIssuer" }],
3737
expiresAt: "2030-12-31T23:59:59Z",
3838
// Optional: on-chain anchor reference for this policy document
39-
// anchorRef: "hcs:0.0.12345:42" | "xrpl:nft:ABC123..."
39+
// anchorRef: "hcs:0.0.12345:42"
4040
});
4141

4242
// Signed (requires MPCP_POLICY_GRANT_SIGNING_PRIVATE_KEY_PEM — returns null if not set)

docs/reference/service-api.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,13 @@ Publish a policy document to a ledger and return an `anchorRef` for use in Polic
6969
// Hedera HCS (requires MPCP_HCS_POLICY_TOPIC_ID, MPCP_HCS_OPERATOR_ID, MPCP_HCS_OPERATOR_KEY)
7070
const result = await anchorPolicyDocument(policyDoc, { rail: "hedera-hcs" });
7171
// result.anchorRef: "hcs:{topicId}:{sequenceNumber}"
72-
73-
// XRPL NFT
74-
const result = await anchorPolicyDocument(policyDoc, { rail: "xrpl-nft" });
75-
// result.anchorRef: "xrpl:nft:{tokenId}"
7672
```
7773

78-
Supported rails: `hedera-hcs`, `xrpl-nft`.
74+
Supported rail: **`hedera-hcs`** (policy document anchoring).
75+
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`.
7977
80-
The returned `anchorRef` can be stored on the PolicyGrant (`grant.anchorRef`) to provide on-chain auditability.
78+
The returned `anchorRef` can be stored on the PolicyGrant (`grant.anchorRef`) to provide on-chain auditability of the **policy document** (HCS).
8179

8280
---
8381

0 commit comments

Comments
 (0)