Skip to content

Commit

Permalink
update caip-25 profile syntax and lint
Browse files Browse the repository at this point in the history
  • Loading branch information
bumblefudge committed Jul 1, 2024
1 parent b2a60ed commit a7ae4f8
Showing 1 changed file with 38 additions and 23 deletions.
61 changes: 38 additions & 23 deletions solana/caip25.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,22 +25,19 @@ Few use-cases incorporating multiple Solana-compatible networks require granular

## Multichain Considerations

Developers addressing multichain use-cases incorporating non-Solana networks are RECOMMENDED to use distinct [CAIP-217] authorization objects per chain type, in cases where those [CAIP-25] capabilities and configurations can be deterministically mapped to [Wallet Standard Multichain Extensions] variables by a [CAIP-25] provider.
Developers addressing multichain use-cases incorporating non-Solana networks are RECOMMENDED to use distinct [CAIP-217] authorization objects per chain type, in cases where those [CAIP-25] capabilities and configurations can be deterministically mapped to [Wallet Standard Multichain Extensions] variables by a [CAIP-25] provider.

Also, consumers of the [Wallet Standard][] interface assume the `WalletAdapterNetwork` enum variable to be set to exactly one network at a time, so implementers are recommended to map only one `chains` member at a time to this standard interface, whether by ordering it by preference or by never allowing it to have more than one member at a time.

## Session Properties
## Setting Environmental Variables to pass via Wallet Standard

Wallet capabilities in the [Wallet Standard] model are declared upfront at time of connection and persisted as read-only constants, so wallets are recommended to declare them explicitly in the `sessionProperties` object in a [CAIP-25] interaction for maximum interoperability and stability.
Note that the `sessionProperties` object is shared across any and all namespaces in a given wallet<>application session, which may span multiple types of networks all declaring `sessionProperties`, so to avoid collisions the following properties names are recommended for easily mapping to the **case-sensitive** properties names in the [Wallet Standard]:
Wallet capabilities in the [Wallet Standard] model are declared upfront at time of connection and persisted as read-only constants.
For maximum interoperability and stability, wallets are recommended to declare these variables explicitly in the `scopedProperties` object corresponding to each Solana scope they authorize when accepting a [CAIP-25] connection.
Note that the `scopedProperties` object is partitioned to parallel the `sessionScopes`, so duplicate entries need to be made for each Solana scope.

|`sessionProperties` key in [CAIP-25] expression|[Wallet Adapter] mapping|values|documentation|reference implementation|
|`scopedProperties` key in [CAIP-25] expression|[Wallet Adapter] mapping|values|documentation|interface reference|
|---|---|---|---|---|
|`SolanaTransactionVersion`|`SolanaTransactionVersion`|`0` or `legacy` (default)|[solana.com][Transaction Version Declaration]|[github.com][Transaction Version Refimpl]|
|`SolanaTransactionCommitment`|`SolanaTransactionCommitment`|`finalized` (default), `confirmed`, `processed`|[solana.com][State Commitment Declaration]|[github.com][State Commitment Refimpl]|

As these properties are mandatory and required for stability in [Wallet Standard] connections, [CAIP-25] providers MAY inject defaults if any of the above are not set explicitly by a wallet.
For this reason, wallets are RECOMMENDED to set them explicitly even if not requested by their counterparty to avoid inaccurate values being injected.
|`supportedTransactionVersions`|`supportedTransactionVersions`|array containing `0` and/or `legacy` (both by default)|[solana.com][Transaction Version Declaration]|[github.com][Transaction Version Interface Reference]|

## Examples

Expand All @@ -53,16 +50,37 @@ Example CAIP-25 Request
"jsonrpc": "2.0",
"method": "provider_authorize",
"params": {
"optionalScopes": {
"eip155": { ... },
"solana": { ... }
"sessionScopes": {
"bip122": { ... },
"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": { ... }
"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1": { ... }
},
}
}

```

Example CAIP-25 Response

```json

{
"id": 1,
"jsonrpc": "2.0",
"method": "provider_authorize",
"params": {
"sessionScopes": {
"bip122": { ... },
"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": { ... }
"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1": { ... }
},
"sessionProperties": {
"capabilities": { ... }
"eip155": { ... }
"solana": {
"SolanaTransactionVersion": "0",
"SolanaTransactionCommitment": "finalized"
"scopedProperties": {
"bip122": { ... }
"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": {
"supportedTransactionVersions": ["legacy", "0"]
}
"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1": {
"supportedTransactionVersions": ["0"]
}
}
}
Expand All @@ -77,15 +95,12 @@ Example CAIP-25 Request
- [Wallet Adapter][] Tooling
- [Wallet Standard Multichain Extensions][]
- [Transaction Version Declaration][]
- [State Commitment Declaration][]

[Wallet Adapter]: https://github.com/anza-xyz/wallet-adapter/tree/master?tab=readme-ov-file#wallet-adapter
[Wallet Standard]: https://wallet-standard.github.io/wallet-standard/
[Wallet Standard Multichain Extensions]: https://github.com/wallet-standard/wallet-standard/blob/master/EXTENSIONS.md
[Transaction Version Declaration]: https://solana.com/docs/core/transactions/versions#current-transaction-versions
[Transaction Version Refimpl]: https://github.com/anza-xyz/wallet-standard/blob/2c354cf07daa1d440ba9631fcefc5c00b07aa9dd/packages/core/features/src/signTransaction.ts#L31
[State Commitment Declaration]: https://solana.com/docs/rpc#configuring-state-commitment
[State Commitment Refimpl]: https://github.com/anza-xyz/wallet-standard/blob/2c354cf07daa1d440ba9631fcefc5c00b07aa9dd/packages/core/features/src/signTransaction.ts#L66
[Transaction Version Interface Reference]: https://github.com/wallet-standard/wallet-standard/blob/master/packages/example/wallets/src/solanaWallet.ts#L79-L88
[CAIP-25]: https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-25.md
[CAIP-217]: https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-217.md
[EIP155]: https://eips.ethereum.org/EIPS/eip-155
Expand Down

0 comments on commit a7ae4f8

Please sign in to comment.