v0.2.6-pre.016
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: crates/ksp-wallet-lib/USAGE.md -->
|
||||
<!-- version: 3 -->
|
||||
<!-- version: 4 -->
|
||||
|
||||
# Utilisation de `ksp-wallet-lib`
|
||||
|
||||
Ce guide présente les principales surfaces publiques de Wallet V1. La spécification cryptographique du fichier reste [`../../docs/formats/KSPWALLET_V1.md`](../../docs/formats/KSPWALLET_V1.md).
|
||||
Ce guide présente les principales surfaces publiques multi-version de Wallet. V1 reste spécifié par [`../../docs/formats/KSPWALLET_V1.md`](../../docs/formats/KSPWALLET_V1.md) et V2 par [`../../docs/formats/KSPWALLET_V2.md`](../../docs/formats/KSPWALLET_V2.md).
|
||||
|
||||
Les exemples utilisent des chemins explicites : Wallet ne lit ni Config ni environnement pour découvrir un répertoire.
|
||||
|
||||
@@ -11,13 +11,13 @@ Les exemples utilisent des chemins explicites : Wallet ne lit ni Config ni envir
|
||||
|
||||
```rust
|
||||
async fn create_example() -> ksp_core_lib::Result<()> {
|
||||
let metadata = ksp_wallet_lib::WalletCreateMetadataV1::new(
|
||||
let metadata = ksp_wallet_lib::WalletCreateMetadata::new(
|
||||
Some(std::string::String::from("devnet-main")),
|
||||
vec![std::string::String::from("wallet de test")],
|
||||
);
|
||||
let owner_password = ksp_wallet_lib::OwnerPassword::new(std::string::String::from("OWNER-PASSWORD"));
|
||||
let view_password = ksp_wallet_lib::ViewPassword::new(std::string::String::from("VIEW-PASSWORD"));
|
||||
let created = ksp_wallet_lib::create_wallet_file_v1(
|
||||
let created = ksp_wallet_lib::create_wallet_file(
|
||||
"wallets/devnet-main.kspwallet",
|
||||
owner_password,
|
||||
Some(view_password),
|
||||
@@ -35,13 +35,13 @@ async fn create_example() -> ksp_core_lib::Result<()> {
|
||||
|
||||
La destination doit avoir un parent existant. Une destination existante n'est jamais remplacée par une création.
|
||||
|
||||
Pour créer uniquement en mémoire, utiliser `create_wallet_v1` puis `WalletOwner::to_json_bytes()` si le caller possède lui-même une autre boundary de stockage.
|
||||
Pour créer uniquement en mémoire avec le default, utiliser `create_wallet`. `WalletOwner::to_native_bytes()` restitue ensuite le wire natif courant. Les APIs `_v1` et `_v2` restent disponibles lorsqu’un caller doit forcer une version précise.
|
||||
|
||||
## 2. Inspecter un wallet verrouillé
|
||||
|
||||
```rust
|
||||
async fn inspect_example() -> ksp_core_lib::Result<()> {
|
||||
let inspected = ksp_wallet_lib::inspect_locked_wallet_file_v1("wallets/devnet-main.kspwallet").await;
|
||||
let inspected = ksp_wallet_lib::inspect_locked_wallet_file("wallets/devnet-main.kspwallet").await;
|
||||
let locked = match inspected {
|
||||
Ok(value) => value,
|
||||
Err(error) => return Err(error),
|
||||
@@ -59,7 +59,7 @@ Cette projection ne contient volontairement ni Pubkey, ni alias, ni notes.
|
||||
```rust
|
||||
async fn open_view_example() -> ksp_core_lib::Result<()> {
|
||||
let password = ksp_wallet_lib::ViewPassword::new(std::string::String::from("VIEW-PASSWORD"));
|
||||
let opened = ksp_wallet_lib::open_wallet_view_file_v1("wallets/devnet-main.kspwallet", password).await;
|
||||
let opened = ksp_wallet_lib::open_wallet_view_file("wallets/devnet-main.kspwallet", password).await;
|
||||
let mut view = match opened {
|
||||
Ok(value) => value,
|
||||
Err(error) => return Err(error),
|
||||
@@ -89,7 +89,7 @@ VIEW ne possède aucune API `sign`, `export_transfer`, `update_alias`, `add_note
|
||||
```rust
|
||||
async fn sign_example(message: &[u8]) -> ksp_core_lib::Result<[u8; ksp_wallet_lib::KSPWALLET_SOLANA_SIGNATURE_BYTES]> {
|
||||
let password = ksp_wallet_lib::OwnerPassword::new(std::string::String::from("OWNER-PASSWORD"));
|
||||
let opened = ksp_wallet_lib::open_wallet_owner_file_v1("wallets/devnet-main.kspwallet", password).await;
|
||||
let opened = ksp_wallet_lib::open_wallet_owner_file("wallets/devnet-main.kspwallet", password).await;
|
||||
let owner = match opened {
|
||||
Ok(value) => value,
|
||||
Err(error) => return Err(error),
|
||||
@@ -105,7 +105,7 @@ La signature retournée contient 64 octets Ed25519. Aucun getter public ne retou
|
||||
```rust
|
||||
async fn metadata_example() -> ksp_core_lib::Result<()> {
|
||||
let password = ksp_wallet_lib::OwnerPassword::new(std::string::String::from("OWNER-PASSWORD"));
|
||||
let opened = ksp_wallet_lib::open_wallet_owner_file_v1("wallets/devnet-main.kspwallet", password).await;
|
||||
let opened = ksp_wallet_lib::open_wallet_owner_file("wallets/devnet-main.kspwallet", password).await;
|
||||
let mut owner = match opened {
|
||||
Ok(value) => value,
|
||||
Err(error) => return Err(error),
|
||||
@@ -207,13 +207,13 @@ async fn inspect_transfer_example(source: &[u8]) -> ksp_core_lib::Result<()> {
|
||||
Import fichier vers un nouveau `.kspwallet` :
|
||||
|
||||
```rust
|
||||
let imported = ksp_wallet_lib::import_wallet_transfer_file_v1(
|
||||
let imported = ksp_wallet_lib::import_wallet_transfer_file(
|
||||
"wallets/imported.kspwallet",
|
||||
"wallets/legacy-id.json",
|
||||
ksp_wallet_lib::WalletTransferFormat::SolanaCliJson,
|
||||
ksp_wallet_lib::OwnerPassword::new(std::string::String::from("OWNER-PASSWORD")),
|
||||
None,
|
||||
ksp_wallet_lib::WalletCreateMetadataV1::new(Some(std::string::String::from("imported")), vec![]),
|
||||
ksp_wallet_lib::WalletCreateMetadata::new(Some(std::string::String::from("imported")), vec![]),
|
||||
)
|
||||
.await;
|
||||
```
|
||||
@@ -246,14 +246,16 @@ Les octets retournés par `export_transfer` contiennent volontairement le secret
|
||||
Les équivalents sans I/O filesystem sont :
|
||||
|
||||
```text
|
||||
create_wallet_v1
|
||||
open_wallet_view_v1
|
||||
open_wallet_owner_v1
|
||||
inspect_locked_wallet_v1
|
||||
inspect_wallet_transfer
|
||||
create_wallet -> default V2
|
||||
create_wallet_v1 / _v2 -> version forcée
|
||||
open_wallet_view -> détection V1/V2
|
||||
open_wallet_owner -> détection V1/V2
|
||||
inspect_locked_wallet -> détection V1/V2
|
||||
open/inspect *_v1 / *_v2 -> version forcée
|
||||
inspect_wallet_transfer -> format transfer explicite
|
||||
```
|
||||
|
||||
Les handles `WalletOwner` et `WalletView` peuvent être sérialisés vers le document natif courant avec `to_json_bytes()`. Ces bytes restent un `.kspwallet` chiffré, pas un export de la keypair.
|
||||
Les handles `WalletOwner` et `WalletView` sérialisent leur document courant avec `to_native_bytes()`. `to_json_bytes()` est conservé comme compatibilité V1 et renvoie une erreur de format pour un handle V2 au lieu de transcoder implicitement.
|
||||
|
||||
## 11. Erreurs et diagnostics
|
||||
|
||||
@@ -278,13 +280,24 @@ ksp-onchain-transport-lib
|
||||
|
||||
Cette composition est le rôle de `0.2.6 — ksp-app-wallet-desk`, pas de `ksp-wallet-lib`.
|
||||
|
||||
## Wire V2 (`0.2.6-pre.015`)
|
||||
## Wire/runtime V2 (`0.2.6-pre.015` / `pre.016`)
|
||||
|
||||
Le codec structurel V2 peut être utilisé pour analyser une fixture/document V2 déjà produit :
|
||||
Le codec structurel V2 reste disponible directement pour les outils qui travaillent explicitement au niveau wire :
|
||||
|
||||
```rust
|
||||
let envelope = ksp_wallet_lib::KspWalletEnvelopeV2::parse_binary(bytes)?;
|
||||
let canonical = envelope.to_binary_bytes()?;
|
||||
```
|
||||
|
||||
La persistence applicative ne doit pas encore appeler ce codec directement pour créer un wallet : `pre.016` introduit les APIs génériques/versionnées et le default V2.
|
||||
Une application normale doit préférer les façades Wallet :
|
||||
|
||||
```text
|
||||
create_wallet_file(...) default V2
|
||||
create_wallet_file_v1(...) V1 forcé
|
||||
create_wallet_file_v2(...) V2 forcé
|
||||
open_wallet_*_file(...) auto-détection V1/V2
|
||||
open_wallet_*_file_v1/_v2 version forcée
|
||||
inspect_locked_wallet_file(...) auto-détection V1/V2
|
||||
```
|
||||
|
||||
`DEFAULT_WALLET_FORMAT` et `LATEST_SUPPORTED_WALLET_FORMAT` sont intentionnellement indépendants. L'arrivée d'un futur V3 ne changera pas automatiquement le default V2.
|
||||
|
||||
Reference in New Issue
Block a user