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: ![holding](./dummy-wallet-self-attestation-images/cc_support-holding.png) - 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: ![two-step](./dummy-wallet-self-attestation-images/two_step_cc_transfers-propose-accept.png) +- 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: ![dapp-connect](./dummy-wallet-self-attestation-images/cip_0103_dapp_api-session.png) - 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."