Skip to content

Canton Party Resolution Protocol - PR#171

Open
pdomenighetti wants to merge 20 commits intocanton-foundation:mainfrom
pdomenighetti:cprp-sync
Open

Canton Party Resolution Protocol - PR#171
pdomenighetti wants to merge 20 commits intocanton-foundation:mainfrom
pdomenighetti:cprp-sync

Conversation

@pdomenighetti
Copy link

PR from Freename AG

first commit

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
initial commit

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
formatting

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
formatting

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
txt tuning and review

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
txt tuning and review

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
styling

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
styling

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
styling

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
styling

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
Real CIP submission after error in uploading.

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
correction after wrong submission

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
styling anf formatting fixes

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
formatting and styling fixes

Signed-off-by: Paolo Domenighetti <paolo@freename.io>
Signed-off-by: Paolo Domenighetti <paolo@freename.io>
Signed-off-by: Paolo Domenighetti <paolo@freename.io>
Signed-off-by: Paolo Domenighetti <paolo@freename.io>
Signed-off-by: Paolo Domenighetti <paolo@freename.io>
Signed-off-by: Paolo Domenighetti <paolo@freename.io>
Signed-off-by: Paolo Domenighetti <paolo@freename.io>
Copy link
Contributor

@meiersi-da meiersi-da left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice work @pdomenighetti ! Thank you 🙏

I believe this has the right ingredients, and will result in a great improvement for the ecosystem after a few rounds of polishing. See my comments to drive a first iteration.

Some of the comments hint at scope that we might be able to remove: e.g, encrypted fields. In my experience, keeping scope tight is very valuable to focus our limited attention on the pieces with the highest ROI; and deliver the overall improvement in a timely fashion.


This CIP focuses on the naming and resolution mechanics. Trust evaluation, issuer classification, verification policies, and encrypted metadata are defined in the companion CIP-YYYY (Party Identity Verification).

A shared technical specification accompanies both CIPs: [CPRP-spec.md](./CPRP-spec.md).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not part of this PRs files. Should it be?

| `n` | Specific name within the namespace | `default`, `treasury`, `trading-desk-3` |

Examples:
- `mainnet/dns:goldmansachs.com:default`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- `mainnet/dns:goldmansachs.com:default`
- `party:<canton-party-name-space>:<canton-party-prefix>`
- `mainnet/dns:goldmansachs.com:default`

consider the benefit of injecting the party names in a uniform way into this system as well. This ensures every party has always at least FQPN referring to them.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cool, a built in party resolver would mean every Canton party automatically gets an FQPN like mainnet/party:: with no registration needed (so always resolvable) Would be T4 trust. i'll add it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

consider avoiding the mainnet/ prefix, as parties are not bound to networks. You might use party: without a qualifier or use protocol/party. Or perhaps avoid even stating that as party and just use the Canton concept: uid:, which stands for Universal Identifier, and is cryptic enough so that people don't attach too many unwarranted concepts to it.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i will keep the protocol syntax/composition rules in a separate review session just for complexity in managing reviews. I will proceed like this: answer to comments. apply agreed changes to both CIPs and SPEC not related to protocol syntax then we may iterate specifically on that :)

| `resolve` | namespace, name | `ResolutionResult` | Forward lookup: name → Party ID + metadata |
| `reverseResolve` | partyId | `ReverseResolutionResult` | Reverse lookup: Party ID → registered names |
| `resolveMulti` | queries[] | `ResolutionResult[]` | Batch resolution (latency optimization) |
| `changelog` | since timestamp | `ChangelogEntry[]` | Credential changes since a given time |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these HTTP methods? Can you add references to their specification?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They're logical interface methods. the spec also maps into HTTP endpoints. will make this explicit in the CIP text.


### Profile Rendering Guidelines

Profile claims (`cns-2.0/name`, `cns-2.0/avatar`, `cns-2.0/email`, `cns-2.0/website`) are informational only and MUST NOT be interpreted as verified identity attributes. Verification status is determined exclusively by CIP-YYYY's trust evaluation, not by profile content. Display names SHOULD be ≤64 Unicode characters. Avatars SHOULD be `https://` URLs; applications MAY additionally support `ipfs://` URIs.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The cns-2.0 prefix is not defined. Do you mean the namespace of PixelPlex's CIP? Consider defining the symbolic names for these in a preamble to avoid confusion.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

right, this is confusing as written. cns-2.0/* was our working name for the profile claims while PixelPlex is defining in their CIP (PR #169). Will add a preamble to both CIPs when defining namespaces

- Org-scoped: Corporate LDAP/directory service exposed via the resolver interface
- Validator-configured: Pre-loaded at the validator level for all apps on that node

Address books provide display names only — they cannot override trust tier or verification status (those come from CIP-YYYY).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about profile information?


Given a `ComposedResolutionResult` from CIP-XXXX's composition engine, the trust evaluator:

1. For each credential in the result, checks on-ledger state (active, archived, expired)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not make the composition engine only query for active, unexpired credentials in the first place?

The highest-trust automated verification path for institutions:

1. Party publishes DNS TXT record: `_canton.<domain> TXT "party=<party_id>"`
2. SV nodes verify the DNSSEC chain and confirm the record exists
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it required up front to the SV nodes to implement the DNS verification, or could we define the default DNS verification policy to be a quorum of featured resolvers?


Supports both Legal Entity vLEI (LE) and Official Organizational Role vLEI (OOR).

### Encrypted Fields
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What are two example use-cases for these encrypted fields? Why can these use-cases not be handled via application specific on-ledger communication? e.g., onboarding to a trading app requires the specification of shared parameters for settlement instructions.

Comment on lines +239 to +245
### ResolverFeaturedStatus

Records SV-approved featured resolver status. Fields: `resolver_operator` (Party), `resolver_id` (Text), `approved_by` (DSO Party), `approved_date` (Time), `renewal_deadline` (Time), `network` (Text). Choices: `RevokeStatus`, `RenewStatus`.

### CollisionArbitration

Records governance decisions on disputed name mappings between featured resolvers. Fields: `arbitrated_name` (Text), `winning_party_id` (Text), `losing_resolver_id` (Text), `decision_rationale` (Text), `arbitrated_by` (DSO Party). Published as T1 authority.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As on the other CIP: consider how to encode this as a credential in a credential registry; and double-check whether it even needs to be in the DSO registry.


Why post-quantum encryption: Canton's institutional users (DTCC, Goldman Sachs, HSBC) hold assets with multi-decade time horizons. ML-KEM-768 provides NIST-standardized post-quantum security for encrypted metadata that may remain sensitive for decades.

Why separate from resolution: Resolution and verification are independently useful and independently evolvable. An explorer resolves without verifying. A compliance tool verifies without resolving (it receives a Party ID directly). Coupling them would force unnecessary dependencies.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"An explorer resolves without verifying." I'm less sure about this. A good explorer might well want to do verification as well to provide better information to its users.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants