diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 30d37a3..d792ab1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -47,7 +47,7 @@ verifiers.
Each heading covers one feature, formatted exactly as it appears in
`wallets/_feature_registry.yaml`, e.g.:
```markdown
- ## CC support (transfers and holding) `cc_support`
+ ## CC support `cc_support`
```
In the third-party attestation file, each heading also names the verifier
and the outcome (see "Third-party verification" below), and is unique per
diff --git a/WALLET_DIRECTORY.md b/WALLET_DIRECTORY.md
index 3277899..871ba4a 100644
--- a/WALLET_DIRECTORY.md
+++ b/WALLET_DIRECTORY.md
@@ -9,62 +9,72 @@
Source of truth for Canton Network wallet providers' supported features and
assets, per the Wallet Directory Program (see [CONTRIBUTING.md](./CONTRIBUTING.md)).
-**Legend:** โ
self-attested -- click through to the evidence ยท ๐ก๏ธ *name* verified by an
-independent third party -- click the name for their evidence ยท โ *name* found this claim to
-be unsupported, contradicting the wallet -- click the name for their evidence ยท a linked
-"Not supported" means the wallet has said no with a reason ยท
+**Legend**
+
+โ
self-attested -- click through to the evidence
+
+๐ก๏ธ *name* verified by an independent third party -- click the name for their evidence
+
+โ *name* found this claim to be unsupported, contradicting the wallet -- click the name for their evidence
+
+A linked "Not supported" means the wallet has said no with a reason
+
โ no claim made either way.
## Wallet Overview & Primary Canton Network Features
-| Feature | [Askardex Wallet](wallets/askardex-wallet.yaml) | [Dfns](wallets/dfns.yaml) | [Send](wallets/send.yaml) | [Walley](wallets/walley.yaml) |
+| Feature | [Dfns](wallets/dfns.yaml) | [Send](wallets/send.yaml) | [Askardex Wallet](wallets/askardex-wallet.yaml) | [Walley](wallets/walley.yaml) |
|---|---|---|---|---|
| **Wallet Overview** | | | | |
-| Website | [https://wallet.askardex.com](https://wallet.askardex.com) | [https://www.dfns.co](https://www.dfns.co) | [https://cantonwallet.com](https://cantonwallet.com) | [https://walley.cc](https://walley.cc) |
-| Added | 2026-07-25 | 2026-07-24 | 2026-07-24 | 2026-07-27 |
+| Website | [https://www.dfns.co](https://www.dfns.co) | [https://cantonwallet.com](https://cantonwallet.com) | [https://wallet.askardex.com](https://wallet.askardex.com) | [https://walley.cc](https://walley.cc) |
+| Added | 2026-07-24 | 2026-07-24 | 2026-07-25 | 2026-07-27 |
| **Wallet Type** | | | | |
-| Retail / Enterprise | Retail | enterprise | retail, enterprise | retail |
-| Custody Type | Self-custodial | self-custodial | self-custodial | self-custodial |
-| Form factor (Mobile / Browser / Desktop / Browser Extension / Hardware) | mobile | browser | browser, mobile, browser-extension | browser |
-| Deployment Model (Self-hosted / SaaS / Hybrid) | saas | self-hosted, saas, hybrid | saas | saas |
+| Retail / Enterprise | Enterprise | Retail, Enterprise | Retail | Retail |
+| Custody Type | Self-custodial | Self-custodial | Self-custodial | Self-custodial |
+| Form factor (Mobile / Browser / Desktop
/ Browser Extension / Hardware) | Browser | Browser, Mobile,
Browser-extension | Mobile | Browser |
+| Deployment Model (Self-hosted / SaaS /
Hybrid) | Self-hosted, SaaS, Hybrid | SaaS | SaaS | SaaS |
| **Canton Coin** | | | | |
-| CC support (transfers and holding) | [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#cc-support-transfers-and-holding-cc_support) | [โ
](proofs/dfns/dfns-self-attestation.md#cc-support-transfers-and-holding-cc_support) | โ
| [โ
](proofs/walley/walley-self-attestation.md#cc-support-transfers-and-holding-cc_support) |
-| Pre-approvals for CC | [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#pre-approvals-for-cc-preapprovals) | [โ
](proofs/dfns/dfns-self-attestation.md#pre-approvals-for-cc-preapprovals) | โ
| [โ
](proofs/walley/walley-self-attestation.md#pre-approvals-for-cc-preapprovals) |
+| CC support | [โ
](proofs/dfns/dfns-self-attestation.md#cc-support-cc_support) | โ
| [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#cc-support-cc_support) | [โ
](proofs/walley/walley-self-attestation.md#cc-support-cc_support) |
+| Two-step CC transfers | โ | โ | โ | โ |
+| Pre-approvals for CC | [โ
](proofs/dfns/dfns-self-attestation.md#pre-approvals-for-cc-preapprovals) | โ
| [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#pre-approvals-for-cc-preapprovals) | [โ
](proofs/walley/walley-self-attestation.md#pre-approvals-for-cc-preapprovals) |
| **Token Standard** | | | | |
-| CIP-0056 token standard transfer support | [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#cip-0056-token-standard-transfer-support-cip_0056_transfer) | [โ
](proofs/dfns/dfns-self-attestation.md#cip-0056-token-standard-transfer-support-cip_0056_transfer) | โ
| [โ
](proofs/walley/walley-self-attestation.md#cip-0056-token-standard-transfer-support-cip_0056_transfer) |
-| CIP-0056 token standard allocation support | โ | โ | โ
| [โ
](proofs/walley/walley-self-attestation.md#cip-0056-token-standard-allocation-support-cip_0056_allocation) |
-| CIP-112 token standard v2 support | โ | โ | โ
| [Not supported](wallets/walley.yaml) |
-| **Interoperability** | | | | |
-| CIP-0103 dApp API support | [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#cip-0103-dapp-api-support-cip_0103_dapp_api) | โ | โ
| [โ
](proofs/walley/walley-self-attestation.md#cip-0103-dapp-api-support-cip_0103_dapp_api) |
-| Wallet Connect support | [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#wallet-connect-support-walletconnect_support) | [โ
](proofs/dfns/dfns-self-attestation.md#wallet-connect-support-walletconnect_support) | โ
| [Not supported](wallets/walley.yaml) |
-| Memo tag support for transfers to exchanges | [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#memo-tag-support-for-transfers-to-exchanges-memo_tag_support) | [โ
](proofs/dfns/dfns-self-attestation.md#memo-tag-support-for-transfers-to-exchanges-memo_tag_support) | โ
| [โ
](proofs/walley/walley-self-attestation.md#memo-tag-support-for-transfers-to-exchanges-memo_tag_support) |
+| CIP-0056 token standard transfer support | [โ
](proofs/dfns/dfns-self-attestation.md#cip-0056-token-standard-transfer-support-cip_0056_transfer) | โ
| [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#cip-0056-token-standard-transfer-support-cip_0056_transfer) | [โ
](proofs/walley/walley-self-attestation.md#cip-0056-token-standard-transfer-support-cip_0056_transfer) |
+| CIP-0056 token standard allocation support | โ | โ
| โ | [โ
](proofs/walley/walley-self-attestation.md#cip-0056-token-standard-allocation-support-cip_0056_allocation) |
+| CIP-112 token standard v2 support | โ | โ
| โ | [Not supported](wallets/walley.yaml) |
+| Memo tag support for transfers to omnibus accounts | [โ
](proofs/dfns/dfns-self-attestation.md#memo-tag-support-for-transfers-to-omnibus-accounts-memo_tag_support) | โ
| [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#memo-tag-support-for-transfers-to-omnibus-accounts-memo_tag_support) | [โ
](proofs/walley/walley-self-attestation.md#memo-tag-support-for-transfers-to-omnibus-accounts-memo_tag_support) |
+| **dApp Connectivity (CIP-103)** | | | | |
+| CIP-0103 dApp API support | โ | โ
| [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#cip-0103-dapp-api-support-cip_0103_dapp_api) | [โ
](proofs/walley/walley-self-attestation.md#cip-0103-dapp-api-support-cip_0103_dapp_api) |
+| Wallet Connect support | [โ
](proofs/dfns/dfns-self-attestation.md#wallet-connect-support-walletconnect_support) | โ
| [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#wallet-connect-support-walletconnect_support) | [Not supported](wallets/walley.yaml) |
## Other Features
-| Feature | [Askardex Wallet](wallets/askardex-wallet.yaml) | [Dfns](wallets/dfns.yaml) | [Send](wallets/send.yaml) | [Walley](wallets/walley.yaml) |
+| Feature | [Dfns](wallets/dfns.yaml) | [Send](wallets/send.yaml) | [Askardex Wallet](wallets/askardex-wallet.yaml) | [Walley](wallets/walley.yaml) |
|---|---|---|---|---|
| **App Specific** | | | | |
-| Pre-approvals for DA Registry issued assets | โ | [Not supported](wallets/dfns.yaml) | โ | [โ
](proofs/walley/walley-self-attestation.md#pre-approvals-for-da-registry-issued-assets-registry_preapprovals) |
-| Wallet Gateway signing driver | โ | [โ
](proofs/dfns/dfns-self-attestation.md#wallet-gateway-signing-driver-wallet_gateway_signing_driver) | โ | [Not supported](wallets/walley.yaml) |
+| Pre-approvals for DA Registry issued assets | [Not supported](wallets/dfns.yaml) | โ | โ | [โ
](proofs/walley/walley-self-attestation.md#pre-approvals-for-da-registry-issued-assets-registry_preapprovals) |
+| Wallet Gateway signing driver | [โ
](proofs/dfns/dfns-self-attestation.md#wallet-gateway-signing-driver-wallet_gateway_signing_driver) | โ | โ | [Not supported](wallets/walley.yaml) |
| **Party Specific** | | | | |
-| Key generation method | Seed phrase (BIP-39 mnemonic, 24 words) | MPC/TSS -- keys generated as distributed shares across Dfns's signing network -- or HSM-based key generation; no seed phrases | โ | WebAuthn passkey PRF secret, expanded with HKDF-SHA512 into an Ed25519 signing key that is generated and held in the browser. A 24-word BIP-39 phrase backs up the same secret. |
+| Key generation method | MPC/TSS -- keys generated as
distributed shares across
Dfns's signing network -- or
HSM-based key generation; no
seed phrases | โ | Seed phrase (BIP-39 mnemonic,
24 words) | WebAuthn passkey PRF secret,
expanded with HKDF-SHA512 into
an Ed25519 signing key that is
generated and held in the
browser. A 24-word BIP-39
phrase backs up the same
secret. |
| Key recovery | โ
| โ
| โ
| โ
|
| Social recovery | โ | โ | โ | [Not supported](wallets/walley.yaml) |
-| Multi-address / account | โ | โ
| โ
| [Not supported](wallets/walley.yaml) |
-| Distributed parties | โ | โ | โ
| [Not supported](wallets/walley.yaml) |
-| **Network relevant features** | | | | |
+| Multi-address / account | โ
| โ
| โ | [Not supported](wallets/walley.yaml) |
+| Distributed parties | โ | โ
| โ | [Not supported](wallets/walley.yaml) |
+| **Network Relevant Features** | | | | |
| UTXO merge delegation contract enabled | โ | โ | โ | [โ
](proofs/walley/walley-self-attestation.md#utxo-merge-delegation-contract-enabled-utxo_merge_delegation) |
+| **Validator Hosting** | | | | |
+| Bring-Your-Own-Validator (BYOV) | โ
| โ | โ | [Not supported](wallets/walley.yaml) |
+| Private validator | โ | โ | โ | โ |
+| Shared validator | โ | โ | โ | โ |
| **Transaction Signing** | | | | |
-| Policy workflows | โ | โ
| โ
| [Not supported](wallets/walley.yaml) |
-| Threshold Signature Scheme | โ | โ
| โ
| [Not supported](wallets/walley.yaml) |
-| Hardware wallet support | โ | [โ
](proofs/dfns/dfns-self-attestation.md#hardware-wallet-support-hardware_wallet_support) | โ
| [Not supported](wallets/walley.yaml) |
+| Policy workflows | โ
| โ
| โ | [Not supported](wallets/walley.yaml) |
+| Threshold Signature Scheme | โ
| โ
| โ | [Not supported](wallets/walley.yaml) |
+| Hardware wallet support | [โ
](proofs/dfns/dfns-self-attestation.md#hardware-wallet-support-hardware_wallet_support) | โ
| โ | [Not supported](wallets/walley.yaml) |
| **Wallet Capabilities** | | | | |
-| Compliance | โ | โ
| โ | โ |
-| Validator hosting (self-hosted / BYOV) | โ
| โ
| โ | [Not supported](wallets/walley.yaml) |
+| Compliance | โ
| โ | โ | โ |
| Tokenization | โ | โ | โ | โ |
-| Reward minting | [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#reward-minting-reward_minting) | โ | โ | [Not supported](wallets/walley.yaml) |
+| Reward minting | โ | โ | [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#reward-minting-reward_minting) | [Not supported](wallets/walley.yaml) |
| Transfer object / proof of transfer support | โ | โ | โ | [Not supported](wallets/walley.yaml) |
-| Clear signing | [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#clear-signing-clear_signing) | [โ
](proofs/dfns/dfns-self-attestation.md#clear-signing-clear_signing) | โ | [โ
](proofs/walley/walley-self-attestation.md#clear-signing-clear_signing) |
-| Integrated swaps | [Not supported](wallets/askardex-wallet.yaml) | โ | โ
| [โ
](proofs/walley/walley-self-attestation.md#integrated-swaps-integrated_swaps) |
-| Assets supported | CC, USDCx (CIP-0056), CBTC (CIP-0056), CETH (CIP-0056), HANDL (CIP-0056) | CC, Other CIP-0056 tokens on demand (token issuer provides an RPC node) | CC, CIP-0056 tokens | CC, USDCx, CBTC, cETH, SBC, raUSD, HANDL, EDELx, USDM1, TRKX index tokens, Tradecraft LP tokens, any CIP-0056 token in the Walley registry (79 live at api.walley.cc/v1/tokens) |
+| Clear signing | [โ
](proofs/dfns/dfns-self-attestation.md#clear-signing-clear_signing) | โ | [โ
](proofs/askardex-wallet/askardex-wallet-self-attestation.md#clear-signing-clear_signing) | [โ
](proofs/walley/walley-self-attestation.md#clear-signing-clear_signing) |
+| Integrated swaps | โ | โ
| [Not supported](wallets/askardex-wallet.yaml) | [โ
](proofs/walley/walley-self-attestation.md#integrated-swaps-integrated_swaps) |
+| Assets supported | CC, Other CIP-0056 tokens on
demand (token issuer provides
an RPC node) | CC, CIP-0056 tokens | CC, USDCx (CIP-0056), CBTC
(CIP-0056), CETH (CIP-0056),
HANDL (CIP-0056) | CC, USDCx, CBTC, cETH, SBC,
raUSD, HANDL, EDELx, USDM1,
TRKX index tokens, Tradecraft
LP tokens, any CIP-0056 token
in the Walley registry (79
live at
api.walley.cc/v1/tokens) |
| Languages supported | English | English | English | English |
diff --git a/examples/dummy-wallet-self-attestation.md b/examples/dummy-wallet-self-attestation.md
index 8728785..ac9a8f3 100644
--- a/examples/dummy-wallet-self-attestation.md
+++ b/examples/dummy-wallet-self-attestation.md
@@ -9,7 +9,7 @@ placeholder data, not a real transaction record. -->
---
-## CC support (transfers and holding) `cc_support`
+## CC support `cc_support`
> Send, receive, and hold Canton Coin.
>
@@ -23,6 +23,20 @@ placeholder data, not a real transaction record. -->
- Screenshot(s) / video: 
- Notes: Round-trip transfer performed on Canton MainNet.
+## Two-step CC transfers `two_step_cc_transfers`
+
+> Perform a two-step CC transfer (propose/create followed by a separate
+> accept/settle step, rather than a single atomic send).
+>
+> Suggested test: Perform a two-step CC transfer. Record the transaction
+> update ID(s) for both steps and optionally provide screenshots of each.
+
+- Transaction update ID(s): `1220a2b3c4d5e6f7...dummy-2step-propose`, `1220b3c4d5e6f7a8...dummy-2step-accept`
+- Party ID(s): `dummy-wallet-party-1::1220...`
+- Explorer link(s): https://scan.example.com/tx/1220a2b3c4d5e6f7...dummy-2step-propose
+- Screenshot(s) / video: 
+- Notes: Proposed the transfer, then accepted it as a separate step, confirmed on Canton MainNet.
+
## Pre-approvals for CC `preapprovals`
> Auto-accept incoming CC without manual confirmation. Distinct from
@@ -68,7 +82,7 @@ placeholder data, not a real transaction record. -->
- Screenshot(s) / video: 
- Notes: Connected to a sample dApp via CIP-0103 and signed a transaction initiated from it.
-## Memo tag support for transfers to exchanges `memo_tag_support`
+## Memo tag support for transfers to omnibus accounts `memo_tag_support`
> Attach a memo tag to a transfer, recorded under the
> splice.lfdecentralizedtrust.org/reason metadata.
diff --git a/examples/dummy-wallet-third-party-attestation.md b/examples/dummy-wallet-third-party-attestation.md
index 6bb3b3e..65abd65 100644
--- a/examples/dummy-wallet-third-party-attestation.md
+++ b/examples/dummy-wallet-third-party-attestation.md
@@ -9,7 +9,7 @@ record. -->
---
-## CC support (transfers and holding) `cc_support` โ Verified by Third Party
+## CC support `cc_support` โ Verified by Third Party
> Send, receive, and hold Canton Coin.
>
diff --git a/examples/dummy-wallet.yaml b/examples/dummy-wallet.yaml
index db1cad5..451cf6a 100644
--- a/examples/dummy-wallet.yaml
+++ b/examples/dummy-wallet.yaml
@@ -9,20 +9,24 @@ slack_party_scaling_channel_joined: true
features:
# Wallet Type
- wallet_model: [retail, enterprise]
- custody_model: self-custodial
- form_factor: [browser, mobile]
- deployment_model: [saas, hybrid]
+ wallet_model: [Retail, Enterprise]
+ custody_model: Self-custodial
+ form_factor: [Browser, Mobile]
+ deployment_model: [SaaS, Hybrid]
# Canton Coin
cc_support:
supported: true
- proof: examples/dummy-wallet-self-attestation.md#cc-support-transfers-and-holding-cc_support
+ proof: examples/dummy-wallet-self-attestation.md#cc-support-cc_support
verified_by:
- by: ThirdParty
date: "2026-06-05"
result: verified
- proof: examples/dummy-wallet-third-party-attestation.md#cc-support-transfers-and-holding-cc_support-verified-by-thirdparty
+ proof: examples/dummy-wallet-third-party-attestation.md#cc-support-cc_support-verified-by-third-party
+ two_step_cc_transfers:
+ supported: true
+ proof: examples/dummy-wallet-self-attestation.md#two-step-cc-transfers-two_step_cc_transfers
+ verified_by: []
preapprovals:
supported: true
proof: examples/dummy-wallet-self-attestation.md#pre-approvals-for-cc-preapprovals
@@ -37,8 +41,12 @@ features:
supported: true
proof: null
verified_by: []
+ memo_tag_support:
+ supported: true
+ proof: examples/dummy-wallet-self-attestation.md#memo-tag-support-for-transfers-to-omnibus-accounts-memo_tag_support
+ verified_by: []
- # Interoperability
+ # dApp Connectivity (CIP-103)
cip_0103_dapp_api:
supported: true
proof: examples/dummy-wallet-self-attestation.md#cip-0103-dapp-api-support-cip_0103_dapp_api
@@ -48,12 +56,8 @@ features:
reason: "Not yet implemented; CIP-0103 is used today for dApp connections."
proof: null
verified_by: []
- memo_tag_support:
- supported: true
- proof: examples/dummy-wallet-self-attestation.md#memo-tag-support-for-transfers-to-exchanges-memo_tag_support
- verified_by: []
- # Network relevant features
+ # Network Relevant Features
utxo_merge_delegation:
supported: false
proof: null
@@ -63,6 +67,10 @@ features:
key_recovery:
supported: true
+ # Validator Hosting
+ validator_hosting_byov:
+ supported: true
+
# Transaction Signing
hardware_wallet_support:
supported: true
diff --git a/proofs/_TEMPLATE/TEMPLATE-self-attestation.md b/proofs/_TEMPLATE/TEMPLATE-self-attestation.md
index c93e6a6..4d9cd27 100644
--- a/proofs/_TEMPLATE/TEMPLATE-self-attestation.md
+++ b/proofs/_TEMPLATE/TEMPLATE-self-attestation.md
@@ -11,7 +11,7 @@ features you're backing with evidence; screenshots go in
---
-## CC support (transfers and holding) `cc_support`
+## CC support `cc_support`
> Send, receive, and hold Canton Coin.
>
@@ -37,6 +37,22 @@ wallets/_feature_registry.yaml). Just set `supported` in your wallet YAML
for those; no proof, no heading, no verification.
-->
+
+
+
+
-
-
+
+
diff --git a/proofs/askardex-wallet/askardex-wallet-self-attestation.md b/proofs/askardex-wallet/askardex-wallet-self-attestation.md
index a1f9a0e..4fde748 100644
--- a/proofs/askardex-wallet/askardex-wallet-self-attestation.md
+++ b/proofs/askardex-wallet/askardex-wallet-self-attestation.md
@@ -7,7 +7,7 @@ All tests performed on Canton Network MainNet (Splice 0.6.x, Migration ID 4).
---
-## CC support (transfers and holding) `cc_support`
+## CC support `cc_support`
> Send, receive, and hold Canton Coin.
>
@@ -102,7 +102,7 @@ Four CIP-0056 tokens tested on mainnet:
---
-## Memo tag support for transfers to exchanges `memo_tag_support`
+## Memo tag support for transfers to omnibus accounts `memo_tag_support`
> Attach a memo tag to a transfer, recorded under the
> splice.lfdecentralizedtrust.org/reason metadata.
diff --git a/proofs/dfns/dfns-self-attestation.md b/proofs/dfns/dfns-self-attestation.md
index b521f3d..8a6c1c7 100644
--- a/proofs/dfns/dfns-self-attestation.md
+++ b/proofs/dfns/dfns-self-attestation.md
@@ -5,7 +5,7 @@ Last updated: 2026-07-24
---
-## CC support (transfers and holding) `cc_support`
+## CC support `cc_support`
> Send, receive, and hold Canton Coin.
@@ -45,7 +45,7 @@ Last updated: 2026-07-24
[Use WalletConnect โ Dfns docs](https://docs.dfns.co/guides/walletconnect),
[Institutional Certified by WalletConnect](https://www.dfns.co/article/institutional-certified-by-walletconnect).
-## Memo tag support for transfers to exchanges `memo_tag_support`
+## Memo tag support for transfers to omnibus accounts `memo_tag_support`
> Attach a memo tag to a transfer, recorded under the
> splice.lfdecentralizedtrust.org/reason metadata.
diff --git a/proofs/walley/walley-self-attestation.md b/proofs/walley/walley-self-attestation.md
index 2af801c..71166c2 100644
--- a/proofs/walley/walley-self-attestation.md
+++ b/proofs/walley/walley-self-attestation.md
@@ -19,7 +19,7 @@ request.
---
-## CC support (transfers and holding) `cc_support`
+## CC support `cc_support`
> Send, receive, and hold Canton Coin.
>
@@ -133,7 +133,7 @@ request.
connecting and revoking sessions at
.
-## Memo tag support for transfers to exchanges `memo_tag_support`
+## Memo tag support for transfers to omnibus accounts `memo_tag_support`
> Attach a memo tag to a transfer, recorded under the
> splice.lfdecentralizedtrust.org/reason metadata.
diff --git a/scripts/generate_table.py b/scripts/generate_table.py
index b6db435..424be08 100644
--- a/scripts/generate_table.py
+++ b/scripts/generate_table.py
@@ -17,7 +17,8 @@
Output is two tables, matching the split in Feature List.md: "Wallet
Overview & Primary Canton Network Features" (Wallet Type, Canton Coin,
-Token Standard, Interoperability) and "Other Features" (everything else).
+Token Standard, dApp Connectivity (CIP-103)) and "Other Features"
+(everything else).
There is no "required vs. optional" distinction -- see the note at the top
of wallets/_feature_registry.yaml.
"""
@@ -25,12 +26,20 @@
import glob
import os
import re
+import textwrap
INDENT = " "
+# GitHub markdown tables have no column-width control (no CSS support in
+# rendered .md), so long free-text cells (e.g. key_generation_method,
+# assets_supported) would otherwise force that whole column wide. Wrapping
+# at a fixed character count with
keeps every column's width capped
+# and predictable -- the cell just gets taller instead of the column wider.
+CELL_WRAP_WIDTH = 30
+
# Categories that make up table 1, "Wallet Overview & Primary Canton
# Network Features" -- everything else goes in table 2, "Other Features".
-TABLE_1_CATEGORIES = {"Wallet Type", "Canton Coin", "Token Standard", "Interoperability"}
+TABLE_1_CATEGORIES = {"Wallet Type", "Canton Coin", "Token Standard", "dApp Connectivity (CIP-103)"}
# --- Minimal YAML reader -----------------------------------------------
@@ -221,7 +230,9 @@ def load_wallets(wallets_dir):
continue
data["_source_file"] = os.path.relpath(path)
wallets.append(data)
- return sorted(wallets, key=lambda w: w.get("name", "").lower())
+ # Ordered by date added (earliest first, left to right); wallets missing
+ # `added` sort to the end. Same-day ties break alphabetically by name.
+ return sorted(wallets, key=lambda w: (w.get("added") or "9999-99-99", w.get("name", "").lower()))
def wallet_file_link(wallet):
@@ -273,13 +284,24 @@ def link_names(entries):
return cell
+def wrap_cell_text(text, width=CELL_WRAP_WIDTH):
+ # break_long_words=False: a single word/URL longer than `width` is left
+ # intact on its own line rather than getting chopped mid-word.
+ lines = textwrap.wrap(text, width=width, break_long_words=False, break_on_hyphens=False)
+ return "
".join(lines) if lines else text
+
+
def render_freetext_cell(feature_id, wallet):
val = (wallet.get("features") or {}).get(feature_id)
if val in (None, "", []):
return "โ"
if isinstance(val, list):
- return ", ".join(str(v) for v in val) if val else "โ"
- return str(val)
+ text = ", ".join(str(v) for v in val) if val else None
+ else:
+ text = str(val)
+ if not text:
+ return "โ"
+ return wrap_cell_text(text)
def render_feature_cell(feature, wallet):
@@ -360,10 +382,16 @@ def main():
Source of truth for Canton Network wallet providers' supported features and
assets, per the Wallet Directory Program (see [CONTRIBUTING.md](./CONTRIBUTING.md)).
-**Legend:** โ
self-attested -- click through to the evidence ยท ๐ก๏ธ *name* verified by an
-independent third party -- click the name for their evidence ยท โ *name* found this claim to
-be unsupported, contradicting the wallet -- click the name for their evidence ยท a linked
-"Not supported" means the wallet has said no with a reason ยท
+**Legend**
+
+โ
self-attested -- click through to the evidence
+
+๐ก๏ธ *name* verified by an independent third party -- click the name for their evidence
+
+โ *name* found this claim to be unsupported, contradicting the wallet -- click the name for their evidence
+
+A linked "Not supported" means the wallet has said no with a reason
+
โ no claim made either way.
## Wallet Overview & Primary Canton Network Features
diff --git a/wallets/TEMPLATE.yaml b/wallets/TEMPLATE.yaml
index 6ebfddf..338d887 100644
--- a/wallets/TEMPLATE.yaml
+++ b/wallets/TEMPLATE.yaml
@@ -25,7 +25,7 @@ added: null # YYYY-MM-DD
# not supported".
# proof: link to your evidence heading in
# proofs/your-wallet-name/your-wallet-name-self-attestation.md,
-# e.g. proofs/your-wallet-name/your-wallet-name-self-attestation.md#cc-support-transfers-and-holding-cc_support
+# e.g. proofs/your-wallet-name/your-wallet-name-self-attestation.md#cc-support-cc_support
# Leave null if you haven't put together evidence yet.
# verified_by: list of independent verifications. Leave as [] until a
# third party verifies this claim (see CONTRIBUTING.md ->
@@ -50,9 +50,9 @@ features:
# Who holds the private keys (custodial and/or self-custodial).
custody_model: null # Custodial and / or Self-custodial
# Mobile, browser, desktop, browser extension, hardware.
- form_factor: [] # any of: mobile, browser, desktop, browser-extension, hardware
+ form_factor: [] # any of: Mobile, Browser, Desktop, Browser-extension, Hardware
# Self-hosted, SaaS, hybrid, or on-prem.
- deployment_model: [] # any of: self-hosted, saas, hybrid, on-prem
+ deployment_model: [] # any of: Self-hosted, SaaS, Hybrid, On-prem
# Canton Coin
# Send, receive, and hold Canton Coin.
@@ -65,6 +65,16 @@ features:
proof: null
verified_by: []
+ # Two-step CC transfer (propose/create followed by a separate
+ # accept/settle step, rather than a single atomic send).
+ # Suggested test: Perform a two-step CC transfer. Record the transaction
+ # update ID(s) for both steps and optionally provide screenshots of each.
+ two_step_cc_transfers:
+ supported: false
+ # reason: ""
+ proof: null
+ verified_by: []
+
# Auto-accept incoming CC without manual confirmation. Distinct from
# registry_preapprovals (App Specific) below.
# Suggested test: Enable pre-approvals for CC. Send CC to the wallet
@@ -110,7 +120,19 @@ features:
# proof: null
# verified_by: []
- # Interoperability
+ # Attach a memo tag to a transfer, recorded under the
+ # splice.lfdecentralizedtrust.org/reason metadata.
+ # Suggested test: Include a memo tag in an asset transfer (this can be
+ # combined with the cc_support test). Record the transaction update ID
+ # showing the memo tag under the splice.lfdecentralizedtrust.org/reason
+ # metadata in the transaction JSON.
+ memo_tag_support:
+ supported: false
+ # reason: ""
+ proof: null
+ verified_by: []
+
+ # dApp Connectivity (CIP-103)
# Connect to and sign transactions from a third-party dApp via CIP-0103.
# Suggested test: Connect to a dApp using a CIP-0103 connection. Initiate
# a transaction from within the dApp and sign it from the wallet. Confirm
@@ -134,18 +156,6 @@ features:
proof: null
verified_by: []
- # Attach a memo tag to a transfer, recorded under the
- # splice.lfdecentralizedtrust.org/reason metadata.
- # Suggested test: Include a memo tag in an asset transfer (this can be
- # combined with the cc_support test). Record the transaction update ID
- # showing the memo tag under the splice.lfdecentralizedtrust.org/reason
- # metadata in the transaction JSON.
- memo_tag_support:
- supported: false
- # reason: ""
- proof: null
- verified_by: []
-
# App Specific
## Auto-accept incoming registry-issued (non-CC) assets. Distinct from
## Canton Coin preapprovals.
@@ -203,7 +213,7 @@ features:
# verified_by: []
- # Network relevant features
+ # Network Relevant Features
## The wallet enables the merge delegation contract so UTXOs can be
## consolidated on-chain, reducing UTXO bloat.
@@ -216,6 +226,21 @@ features:
# proof: null
# verified_by: []
+ # Validator Hosting
+ ## Which validator hosting model(s) the wallet supports. Not Canton
+ ## Network specific -- no proof needed.
+ # validator_hosting_byov:
+ # supported: true
+ # # reason: ""
+
+ # validator_hosting_private:
+ # supported: true
+ # # reason: ""
+
+ # validator_hosting_shared:
+ # supported: true
+ # # reason: ""
+
# Transaction Signing
## Configurable approval policies before a transaction is signed. Not
## Canton Network specific -- no proof needed.
@@ -245,12 +270,6 @@ features:
# supported: true
# # reason: ""
- ## Validator hosting, self-hosted or bring-your-own-validator (BYOV). Not
- ## Canton Network specific -- no proof needed.
- # validator_hosting:
- # supported: true
- # # reason: ""
-
## Tokenization capabilities the wallet supports.
# tokenization:
# supported: true
diff --git a/wallets/_feature_registry.yaml b/wallets/_feature_registry.yaml
index 4118a7d..428bfec 100644
--- a/wallets/_feature_registry.yaml
+++ b/wallets/_feature_registry.yaml
@@ -11,6 +11,13 @@
# test against the network. Wallets just set
# supported: true/false (plus reason if false); omit
# proof and verified_by entirely for these ids.
+#
+# A `name` may contain a manual "
" line break to keep the Feature
+# column in WALLET_DIRECTORY.md from forcing a wide column -- only ever
+# add one to a freetext feature or a boolean with no proof heading. Never
+# add one to a feature that has a matching proof-file heading (see
+# CONTRIBUTING.md -- headings must match `name` exactly, and a literal
+# "
" would break both the heading and its GitHub anchor).
features:
# --- Wallet Type ---
@@ -25,24 +32,34 @@ features:
type: freetext
- id: form_factor
- name: "Form factor (Mobile / Browser / Desktop / Browser Extension / Hardware)"
+ name: "Form factor (Mobile / Browser / Desktop
/ Browser Extension / Hardware)"
category: "Wallet Type"
type: freetext
- id: deployment_model
- name: "Deployment Model (Self-hosted / SaaS / Hybrid)"
+ name: "Deployment Model (Self-hosted / SaaS /
Hybrid)"
category: "Wallet Type"
type: freetext
# --- Primary Canton Network Features > Canton Coin ---
- id: cc_support
- name: "CC support (transfers and holding)"
+ name: "CC support"
category: "Canton Coin"
type: boolean
suggested_test: >
- Send CC to and from the wallet. Record the transaction update IDs and
+ Send CC to and from the wallet. Record the transaction update IDs and
optionally provide screenshots of the holding, transfer, and party ID.
+ - id: two_step_cc_transfers
+ name: "Two-step CC transfers"
+ category: "Canton Coin"
+ type: boolean
+ suggested_test: >
+ Perform a two-step CC transfer (propose/create followed by a separate
+ accept/settle step, rather than a single atomic send). Record the
+ transaction update ID(s) for both steps and optionally provide
+ screenshots of each.
+
- id: preapprovals
name: "Pre-approvals for CC"
category: "Canton Coin"
@@ -81,10 +98,20 @@ features:
update ID and optionally provide screenshots of the holding and transfer, noting
the CIP-112 version in the token metadata.
- # --- Primary Canton Network Features > Interoperability
+ - id: memo_tag_support
+ name: "Memo tag support for transfers to omnibus accounts"
+ category: "Token Standard"
+ type: boolean
+ suggested_test: >
+ Include a memo tag in an asset transfer (this can be combined with
+ the cc_support test). Record the transaction update ID showing the
+ memo tag under the splice.lfdecentralizedtrust.org/reason metadata in
+ the transaction JSON.
+
+ # --- Primary Canton Network Features > dApp Connectivity (CIP-103) ---
- id: cip_0103_dapp_api
name: "CIP-0103 dApp API support"
- category: "Interoperability"
+ category: "dApp Connectivity (CIP-103)"
type: boolean
suggested_test: >
Connect to a dApp using a CIP-0103 connection. Initiate a transaction
@@ -94,23 +121,13 @@ features:
- id: walletconnect_support
name: "Wallet Connect support"
- category: "Interoperability"
+ category: "dApp Connectivity (CIP-103)"
type: boolean
suggested_test: >
Connect to a dApp using Wallet Connect. Initiate a transaction from
within the dApp and sign it from the wallet. Confirm the successful
transaction. Optionally provide screenshots or a video recording.
- - id: memo_tag_support
- name: "Memo tag support for transfers to exchanges"
- category: "Interoperability"
- type: boolean
- suggested_test: >
- Include a memo tag in an asset transfer (this can be combined with
- the cc_support test). Record the transaction update ID showing the
- memo tag under the splice.lfdecentralizedtrust.org/reason metadata in
- the transaction JSON.
-
# --- Other Features > App Specific ---
# NOTE: this used to share the "preapprovals" id with the Canton Coin
# entry above on the theory that one combined test covered both. Their
@@ -167,16 +184,39 @@ features:
category: "Party Specific"
type: boolean
- # --- Other Features > Network relevant features ---
+ # --- Other Features > Network Relevant Features ---
- id: utxo_merge_delegation
name: "UTXO merge delegation contract enabled"
- category: "Network relevant features"
+ category: "Network Relevant Features"
type: boolean
suggested_test: >
Enable the merge delegation contract in the wallet. Witness a UTXO
consolidation contract on-chain for CC (sender & receiver are the
same party).
+ # --- Other Features > Validator Hosting ---
+ # NOTE: this used to be a single "Validator hosting (self-hosted / BYOV)"
+ # boolean under the "validator_hosting" id. Split into three so wallets
+ # can indicate which specific hosting model(s) they support, rather than
+ # a single yes/no.
+ - id: validator_hosting_byov
+ name: "Bring-Your-Own-Validator (BYOV)"
+ category: "Validator Hosting"
+ type: boolean
+ self_attested_only: true
+
+ - id: validator_hosting_private
+ name: "Private validator"
+ category: "Validator Hosting"
+ type: boolean
+ self_attested_only: true
+
+ - id: validator_hosting_shared
+ name: "Shared validator"
+ category: "Validator Hosting"
+ type: boolean
+ self_attested_only: true
+
# --- Other Features > Transaction Signing ---
- id: policy_workflows
name: "Policy workflows"
@@ -202,12 +242,6 @@ features:
type: boolean
self_attested_only: true
- - id: validator_hosting
- name: "Validator hosting (self-hosted / BYOV)"
- category: "Wallet Capabilities"
- type: boolean
- self_attested_only: true
-
- id: tokenization
name: "Tokenization"
category: "Wallet Capabilities"
diff --git a/wallets/askardex-wallet.yaml b/wallets/askardex-wallet.yaml
index 148ebab..55d4ab4 100644
--- a/wallets/askardex-wallet.yaml
+++ b/wallets/askardex-wallet.yaml
@@ -13,15 +13,15 @@ features:
custody_model: "Self-custodial"
form_factor:
- - mobile
+ - Mobile
deployment_model:
- - saas
+ - SaaS
# Canton Coin
cc_support:
supported: true
- proof: proofs/askardex-wallet/askardex-wallet-self-attestation.md#cc-support-transfers-and-holding-cc_support
+ proof: proofs/askardex-wallet/askardex-wallet-self-attestation.md#cc-support-cc_support
verified_by: []
preapprovals:
@@ -35,7 +35,12 @@ features:
proof: proofs/askardex-wallet/askardex-wallet-self-attestation.md#cip-0056-token-standard-transfer-support-cip_0056_transfer
verified_by: []
- # Interoperability
+ memo_tag_support:
+ supported: true
+ proof: proofs/askardex-wallet/askardex-wallet-self-attestation.md#memo-tag-support-for-transfers-to-omnibus-accounts-memo_tag_support
+ verified_by: []
+
+ # dApp Connectivity (CIP-103)
cip_0103_dapp_api:
supported: true
proof: proofs/askardex-wallet/askardex-wallet-self-attestation.md#cip-0103-dapp-api-support-cip_0103_dapp_api
@@ -46,21 +51,25 @@ features:
proof: proofs/askardex-wallet/askardex-wallet-self-attestation.md#wallet-connect-support-walletconnect_support
verified_by: []
- memo_tag_support:
- supported: true
- proof: proofs/askardex-wallet/askardex-wallet-self-attestation.md#memo-tag-support-for-transfers-to-exchanges-memo_tag_support
- verified_by: []
-
# Party Specific
key_generation_method: "Seed phrase (BIP-39 mnemonic, 24 words)"
key_recovery:
supported: true
- # Wallet Capabilities
- validator_hosting:
- supported: true
+ # Validator Hosting
+ # TODO: "validator_hosting" was split into validator_hosting_byov,
+ # validator_hosting_private, and validator_hosting_shared. Askardex's
+ # prior answer (supported: true) doesn't say which model(s) apply --
+ # needs a follow-up from Askardex to fill these in correctly.
+ # validator_hosting_byov:
+ # supported: true
+ # validator_hosting_private:
+ # supported: true
+ # validator_hosting_shared:
+ # supported: true
+ # Wallet Capabilities
reward_minting:
supported: true
proof: proofs/askardex-wallet/askardex-wallet-self-attestation.md#reward-minting-reward_minting
diff --git a/wallets/dfns.yaml b/wallets/dfns.yaml
index 53e265d..19eed7e 100644
--- a/wallets/dfns.yaml
+++ b/wallets/dfns.yaml
@@ -7,15 +7,15 @@ slack_party_scaling_channel_joined: true
features:
# Wallet Type
- wallet_model: [enterprise]
- custody_model: self-custodial
- form_factor: [browser]
- deployment_model: [self-hosted, saas, hybrid]
+ wallet_model: [Enterprise]
+ custody_model: Self-custodial
+ form_factor: [Browser]
+ deployment_model: [Self-hosted, SaaS, Hybrid]
# Canton Coin
cc_support:
supported: true
- proof: proofs/dfns/dfns-self-attestation.md#cc-support-transfers-and-holding-cc_support
+ proof: proofs/dfns/dfns-self-attestation.md#cc-support-cc_support
verified_by: []
preapprovals:
supported: true
@@ -27,16 +27,16 @@ features:
supported: true
proof: proofs/dfns/dfns-self-attestation.md#cip-0056-token-standard-transfer-support-cip_0056_transfer
verified_by: []
+ memo_tag_support:
+ supported: true
+ proof: proofs/dfns/dfns-self-attestation.md#memo-tag-support-for-transfers-to-omnibus-accounts-memo_tag_support
+ verified_by: []
- # Interoperability
+ # dApp Connectivity (CIP-103)
walletconnect_support:
supported: true
proof: proofs/dfns/dfns-self-attestation.md#wallet-connect-support-walletconnect_support
verified_by: []
- memo_tag_support:
- supported: true
- proof: proofs/dfns/dfns-self-attestation.md#memo-tag-support-for-transfers-to-exchanges-memo_tag_support
- verified_by: []
# App Specific
registry_preapprovals:
@@ -56,6 +56,10 @@ features:
multi_address:
supported: true
+ # Validator Hosting
+ validator_hosting_byov:
+ supported: true
+
# Transaction Signing
policy_workflows:
supported: true
@@ -69,8 +73,6 @@ features:
# Wallet Capabilities
compliance:
supported: true
- validator_hosting:
- supported: true
clear_signing:
supported: true
proof: proofs/dfns/dfns-self-attestation.md#clear-signing-clear_signing
diff --git a/wallets/send.yaml b/wallets/send.yaml
index f46537d..510dc85 100644
--- a/wallets/send.yaml
+++ b/wallets/send.yaml
@@ -7,10 +7,10 @@ slack_party_scaling_channel_joined: true
features:
# Wallet Type
- wallet_model: [retail, enterprise]
- custody_model: self-custodial
- form_factor: [browser, mobile, browser-extension]
- deployment_model: [saas]
+ wallet_model: [Retail, Enterprise]
+ custody_model: Self-custodial
+ form_factor: [Browser, Mobile, Browser-extension]
+ deployment_model: [SaaS]
# Canton Coin
cc_support:
@@ -35,17 +35,17 @@ features:
supported: true
proof: null
verified_by: []
-
- # Interoperability
- cip_0103_dapp_api:
+ memo_tag_support:
supported: true
proof: null
verified_by: []
- walletconnect_support:
+
+ # dApp Connectivity (CIP-103)
+ cip_0103_dapp_api:
supported: true
proof: null
verified_by: []
- memo_tag_support:
+ walletconnect_support:
supported: true
proof: null
verified_by: []
diff --git a/wallets/walley.yaml b/wallets/walley.yaml
index 28785dc..f5feeaf 100644
--- a/wallets/walley.yaml
+++ b/wallets/walley.yaml
@@ -7,15 +7,15 @@ slack_party_scaling_channel_joined: true
features:
# Wallet Type
- wallet_model: [retail]
- custody_model: self-custodial
- form_factor: [browser]
- deployment_model: [saas]
+ wallet_model: [Retail]
+ custody_model: Self-custodial
+ form_factor: [Browser]
+ deployment_model: [SaaS]
# Canton Coin
cc_support:
supported: true
- proof: proofs/walley/walley-self-attestation.md#cc-support-transfers-and-holding-cc_support
+ proof: proofs/walley/walley-self-attestation.md#cc-support-cc_support
verified_by: []
preapprovals:
supported: true
@@ -37,7 +37,12 @@ features:
proof: null
verified_by: []
- # Interoperability
+ memo_tag_support:
+ supported: true
+ proof: proofs/walley/walley-self-attestation.md#memo-tag-support-for-transfers-to-omnibus-accounts-memo_tag_support
+ verified_by: []
+
+ # dApp Connectivity (CIP-103)
cip_0103_dapp_api:
supported: true
proof: proofs/walley/walley-self-attestation.md#cip-0103-dapp-api-support-cip_0103_dapp_api
@@ -47,10 +52,6 @@ features:
reason: "dApps connect to Walley through the CIP-0103 provider adapter. WalletConnect is used only to attach an external Ethereum wallet for USDCx bridging, never for dApp sessions with Walley."
proof: null
verified_by: []
- memo_tag_support:
- supported: true
- proof: proofs/walley/walley-self-attestation.md#memo-tag-support-for-transfers-to-exchanges-memo_tag_support
- verified_by: []
# App Specific
registry_preapprovals:
@@ -98,10 +99,22 @@ features:
proof: null
verified_by: []
- # Wallet Capabilities
- validator_hosting:
+ # Validator Hosting
+ validator_hosting_byov:
supported: false
- reason: "Walley hosts every user party on its own validator. Bring-your-own-validator is not offered."
+ reason: "Bring-your-own-validator is not offered. Walley hosts every user party on its own validator."
+ # TODO: "validator_hosting" was split into validator_hosting_byov,
+ # validator_hosting_private, and validator_hosting_shared. Walley's prior
+ # answer confirms BYOV is not offered (carried forward above), but doesn't
+ # say whether "hosts every user party on its own validator" means a
+ # dedicated (private) validator per user or one Walley-run validator
+ # shared across users -- needs a follow-up from Walley to fill these in.
+ # validator_hosting_private:
+ # supported: true
+ # validator_hosting_shared:
+ # supported: true
+
+ # Wallet Capabilities
reward_minting:
supported: false
reason: "Walley does not claim or mint validator or app rewards on behalf of users."