You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doc/API_COMPATIBILITY_AND_DIVERGENCE.md
+5-1Lines changed: 5 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -31,6 +31,7 @@ ship.
31
31
|`createBackup` / `rlnBackup`| Native artifact owner plus Flutter maintainer |`API-019`, `G-11`| Keep native-blocked and fail before claiming recovery support. |`test/utexo_wallet_test.dart::keeps local backup explicitly native-blocked`; Android/iOS native backup-blocked bridge cases. | Pinned native RLN exposes a working backup/recovery implementation and cross-platform funded recovery tests pass. |
32
32
|`sendRgb(skipSync: true)`| Flutter maintainer |`API-006`| Fail fast instead of accepting and silently discarding the value. |`test/rln_client_contract_test.dart::sendRgb rejects skipSync true before native call`; Android/iOS native skip-sync rejection cases. | Pinned native RLN exposes a real skip-sync request field and RN/core define semantics. |
33
33
|`gossipRgsServerUrl` unlock field | Flutter maintainer |`API-030`| Reject non-empty values because native signer unlock currently ignores the field. |`test/utexo_wallet_test.dart::rejects no-op gossip RGS unlock configuration`. | Pinned native RLN signer unlock consumes the field end to end. |
34
+
| Fractional native fee rates | Flutter maintainer |`MODEL-014`| Require integer-equivalent sats/vbyte and reject fractional values before native execution. RN currently defaults some calls to `1.5`, then truncates through the UInt64 bridge; Flutter does not reproduce that data-loss bug. | Dart wallet validation plus mirrored Android/iOS bridge numeric vectors. | Native/core adopt an exact fractional fee-rate representation end to end. |
34
35
| High-level CFA/UDA issuance | Flutter maintainer |`API-017`| Expose only through low-level RN-parity `RlnClient`/`RLNBinding`, not the stable wallet facade. | Wallet matrix excludes `issueAssetCfa`/`issueAssetUda`; low-level matrix keeps the RN methods. | RN adds wallet-level CFA/UDA methods or product approves a Flutter-only extension library. |
35
36
| Standalone account-key Schnorr signing default | Flutter maintainer plus release security owner |`SEC-007`| Fail closed by default and require `SchnorrSigningMode.experimentalDart` for the pure-Dart signer, even though RN's top-level core `signMessage` is callable by default. Wallet/node-key signing remains native RLN-backed and RN-aligned. |`test/crypto_bip340_vectors_test.dart::standalone Schnorr signing fails closed without explicit opt in`; `test/utexo_wallet_test.dart::signs and verifies RN-core compatible Schnorr messages`; `tool/validate_codebase_hardening.dart`. | Replace the pure-Dart implementation with a vetted/native signing primitive or complete a formal crypto review proving production suitability, then update public docs and parity tests before changing the default. |
36
37
| Durable credential storage | Consuming app owner plus Flutter maintainer |`SEC-009`| App-owned storage boundary; SDK owns only in-memory minimization and diagnostics. |`doc/INTEGRATION_SECURITY_AND_RELEASE.md`; release package validation requires `SECURITY.md`. | SDK product scope expands to include a native secure-storage subsystem. |
@@ -48,7 +49,7 @@ carrier. Raw RN/native parity symbols must live behind
48
49
| --- | --- | --- | --- |
49
50
| Stable facade | App-facing APIs intended to survive release. |`RgbSdkFlutter`, `UtexoWallet`, signer config, domain wallet DTOs. | Breaking changes require a tracker row, migration note, API snapshot update, and semver plan. |
50
51
| Advanced parity | RN/native-shaped APIs for parity testing, diagnostics, migration tooling, and explicit escape hatches. |`RlnClient`, `RLNBinding`, `RLNManager`, `IRLN*`, raw `Rln*` models, native bridge mapper. | Can change when RN/native changes, but changes must cite the RN baseline and update parity tests. |
51
-
| Compatibility shim |Legacy or transitional exports kept to avoid abrupt local breakage. |Old aliases, core-shaped helpers, raw status helpers. | Must be deprecated or quarantined before production release. |
52
+
| Compatibility shim |A narrowly documented RN spelling kept outside the stable root. |Advanced `decodeRGBInvoice`. | Must remain advanced-only and is removable when migration consumers no longer need it. |
52
53
| Unsupported/native-blocked | Public names that exist only to fail honestly. |`createBackup` while native backup is blocked. | Must fail before native side effects and must be documented as not release-ready. |
53
54
| Internal | Implementation details. | Native stores, bridge error mapper internals, LSP implementation helpers. | Must not be exported from the stable facade once `CODE-001` is closed. |
54
55
@@ -93,6 +94,9 @@ semantics and the adaptation is tested.
93
94
| On-chain receive/send requests | Core uses domain request/response models; RN often passes object literals. | Flutter uses typed request classes. | Typed request classes are allowed if units, optionality, defaults, and native field names are documented. |`MODEL-016`, `API-014`, and `test/utexo_wallet_test.dart::documents and preserves timestamp and amount units at model boundaries`. |
94
95
| Raw request DTOs | RN/native bridge sends loose JS objects and maps. | Low-level `RlnClient` still exposes raw maps through `rgb_sdk_flutter_advanced.dart`. | Raw map APIs stay advanced-only; stable facade must return domain models. |`CODE-001`, `CODE-005`, and API snapshot gate. |
95
96
| Wallet facade return shapes | RN/native names may surface bridge DTOs. | Canonical `UtexoWallet` methods return stable domain DTOs; native `Rln*` models are reachable through explicit `Raw` methods. | Flutter app code should not consume bridge wire shapes by default. Raw access remains available for parity debugging and advanced native integration. |`API-007`, `API-010`, `test/utexo_wallet_test.dart::maps Bitcoin list methods to domain DTOs and raw escape hatches`, `test/utexo_wallet_test.dart::maps Lightning, peer, and channel methods to stable DTOs`. |
97
+
| Lightning payment and status DTOs | Core beta.7 defines `LightningPayment`, `LightningSendRequest`, `ListLightningPaymentsResponse`, `SendPaymentResult`, and canonical string statuses. | Flutter exposes the same domain fields with Dart nullability, immutable list wrappers, and `Rln*StatusValue` string aliases. | Stable methods normalize statuses to PascalCase, preserve optional list status/consignment fields, derive `inbound`, and fail closed when required native payment identifiers are absent. Raw bridge responses remain advanced-only. |`API-037`, `CODE-017`, wallet malformed-success and Lightning mapping tests, and the complete wallet return-shape parity gate. |
98
+
| Wallet facade input shapes | RN uses request objects for many operations and hides low-level sync/filter controls from canonical reads. | Dart uses typed request DTOs or named parameters with the same units, optionality, defaults, and domain names. | Stable methods do not expose raw bridge-only controls or duplicate sats/msats aliases. Advanced `Raw` methods retain native controls. Channel inputs use core names, and `RgbInvoiceRequest.witness` preserves RN on-chain receive behavior. |`API-038`, stable-wallet API snapshot, high-risk input-contract parity checks, wallet tests, and integration smokes. |
99
+
| VSS fence recovery lifecycle | RN documents `vssClearFence` for a locked node before unlock. | Flutter requires `init()` and deliberately does not require `unlock()`. | This is the same lifecycle point expressed through Flutter's explicit state machine. Calling before init or after disposal fails with the SDK taxonomy. |`LIFE-016`, `test/utexo_wallet_test.dart::clears a stale VSS fence after init and before unlock`. |
Copy file name to clipboardExpand all lines: doc/PUBLIC_API_REFERENCE.md
+57-15Lines changed: 57 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,17 +10,51 @@ The release verdict remains controlled by
10
10
| Tier | Symbols | Contract |
11
11
| --- | --- | --- |
12
12
| Stable wallet facade |`package:rgb_sdk_flutter/rgb_sdk_flutter.dart`: `RgbSdkFlutter`, `UtexoWallet`, wallet config/request/response types, signer strategies, domain DTOs, public wallet errors | Intended for app code, subject to documented breaking-change policy. |
13
-
| Advanced/native bridge |`package:rgb_sdk_flutter/rgb_sdk_flutter_advanced.dart`: `RlnClient`, `RLNBinding`, `RLNManager`, `IRLN*`, raw `Rln*` native models, native bridge error mapper, logger, and RN compatibility extensions | Available for RN/native parity, diagnostics, migration tools, and explicit escape hatches; shape follows the pinned RN/native baseline. |
13
+
| Advanced/native bridge |`package:rgb_sdk_flutter/rgb_sdk_flutter_advanced.dart`: `RlnClient`, `RLNBinding`, `RLNManager`, `IRLN*`, raw `Rln*` native models, `createAdvancedUtexoWallet`, native bridge error mapper, logger, and RN/raw compatibility extensions | Available for RN/native parity, diagnostics, migration tools, and explicit escape hatches; shape follows the pinned RN/native baseline. |
14
14
| Core/domain adapters | Stable domain `Core*`/`Lightning*` DTOs are root-exported; raw mapper extensions remain advanced-only | Flutter domain adaptation of current RN/core concepts. |
15
-
|Compatibility stubs |PSBTand backup/recovery-related symbols | Present for compatibility only when the tracker marks the feature unsupported or native-blocked. |
15
+
|Capability and blocked boundaries | Absent PSBT/begin-end carriers and native-blocked backup/recovery| Optional carriers are `null`; backup fails explicitly while the tracker marks it native-blocked. |
16
16
17
17
Canonical `UtexoWallet` methods return stable wallet/domain DTOs, not raw
18
18
native wire DTOs. Advanced callers that need the pinned native shape for parity
19
19
debugging must use the matching explicit `Raw` method, for example
20
20
`listChannelsRaw()`, `getBtcBalanceRaw()`, `decodeLnInvoiceRaw()`, or
21
-
`listTransfersRaw()`. Import `rgb_sdk_flutter_advanced.dart` for raw bridge
22
-
classes, RN-uppercase compatibility spellings such as `decodeRGBInvoice`, or
23
-
RN-style managers. The root import intentionally does not export those names.
21
+
`listTransfersRaw()`. Those methods are members of the advanced-only
22
+
`UtexoWalletRawApi` extension; importing the stable root alone cannot resolve
23
+
them. Import `rgb_sdk_flutter_advanced.dart` for raw bridge classes,
24
+
dependency-injected test wallets, RN-uppercase compatibility spellings such as
25
+
`decodeRGBInvoice`, or RN-style managers. The root import intentionally does
26
+
not export those names or expose `RlnClient`/`RLNBinding` in the stable wallet
27
+
constructor.
28
+
29
+
Custom signer strategies implement `RlnSigner` against the stable
30
+
`RlnSignerHost` protocol. The wallet supplies that host and retains native
31
+
client ownership; signer implementations must not retain it after an
32
+
operation. `IUtexoLspClient` is likewise a stable transport protocol because
33
+
RN exports that contract and `UtexoLsp` accepts injected implementations. The
34
+
concrete HTTP client and raw native client remain advanced-only.
0 commit comments