Skip to content

Conversation

CharlVS
Copy link
Member

@CharlVS CharlVS commented Aug 21, 2025

TODO


Note

Migrates repo to a pub workspace with newer SDKs and tooling, adds seed-node/P2P configuration and Firebase hosting to the playground, and updates platform/project settings and plugins.

  • Workspace/Tooling:
    • Migrate to pub workspace with updated name komodo_defi_sdk_flutter_workspace; bump SDK constraints to Dart >=3.9 / Flutter >=3.35.
    • Upgrade melos and add bootstrap/generation scripts.
  • Playground:
    • Add seed-node/P2P configuration UI and persistence (disableP2p, iAmSeed, isBootstrapNode, seedNodes) and pass to KdfStartupConfig.
    • Add Firebase Hosting config (playground/firebase.json).
    • Implement empty dispose() overrides in server native/stub.
  • Platform/Build:
    • Update iOS/macOS project settings (team IDs) and raise macOS deployment target to 10.15; bump CocoaPods platform and adjust pods.
    • Update generated plugin registrants (macOS/Windows) to include secure storage and local auth; enable GPU validation in macOS scheme.
  • Products:
    • Bump dependencies and SDK constraints; update test/dev tooling; adjust plugin registrants as needed.

Written by Cursor Bugbot for commit 04e1587. This will update automatically on new commits. Configure here.

smk762 and others added 30 commits June 6, 2025 13:20
* update etherscan-proxy to v2

* add distinct token url paths
* fix(trezor,activation): add PrivateKeyPolicy to AuthOptions and beyond

* refactor(types): replace `.from` with `.of`

of has type annotations

Co-authored-by: Charl (Nitride) <77973576+CharlVS@users.noreply.github.com>

---------

Co-authored-by: Charl (Nitride) <77973576+CharlVS@users.noreply.github.com>
Co-authored-by: DeckerSU <deckersu@protonmail.com>
* feat: add custom seed nodes

- Add custom seed nodes to accommodate breaking KDF changes.
- Upgrade KDF for latest seed node changes.

* feat: add configurable seed node system with remote fetching

Implement a comprehensive seed node configuration system that fetches
seed nodes from the Komodo Platform repository with automatic fallback
to hardcoded defaults.

### New Features:
- Add SeedNode and SeedNodeContact types for type-safe configuration
- Implement SeedNodeUpdater for fetching remote seed nodes
- Add SeedNodeService with automatic fallback mechanism
- Add SeedNodeValidator with enhanced P2P configuration validation
- Export seed node service from komodo_defi_framework

### Configuration Updates:
- Update build_config.json to include seed-nodes.json mapping
- Add seed_nodes.json to gitignore for dynamic assets
- Change API branch from 'dev' to 'alt-main'
- Update all platform binary checksums and commit hashes

### Framework Integration:
- Add automatic seed node fetching to KdfStartupConfig
- Integrate SeedNodeService into auth service for wallet creation
- Fix trading protocol parameter name (trading_proto_v2 -> use_trading_proto_v2)
- Improve boolean validation in SeedNodeValidator

### Documentation:
- Add comprehensive SEED_NODES_GUIDE.md with usage examples
- Include example code for seed node functionality
- Add complete test coverage for new types and services

### Dependencies:
- Add komodo_coin_updates dependency to komodo_defi_framework
- Export seed node types from komodo_defi_types
- Update pubspec.lock files across packages

The seed node system ensures applications always have access to current
seed nodes while maintaining backwards compatibility through fallback
mechanisms. This addresses the upcoming requirement in v2.5.0-beta
where seed nodes will be mandatory unless P2P is disabled.

Breaking changes: None - all changes are additive with sensible defaults.

* chore: PR cleanup
* fix(kdf): enable p2p in noAuth mode

* refactor(kdf): use SeedNodeService to get seednodes for noAuth
If the KDF binaries were already renamed from `mm2` to `kdf`—i.e., if the target folder already contained `kdf.exe` or `libkdf.a` after the last successful rename from `*mm2*`—the warning `KDF not found at` would still appear, which was a bit confusing. Now, if the folder already contains the renamed binary, the warning no longer appears.
* Use AssetLogo in example and tweak imports

* style: match the styling with the existing komodo-wallet implementation
Remove ETH coins config transformer which was temporarily required because of a breaking ETH change in KDF.
* fix(trezor,activation): add PrivateKeyPolicy to AuthOptions and beyond

* feat(rpc): add trezor init task RPCs

* feat(sdk): trezor manager for init and user input requests

* feat(rpc): add task-based address generation RPCs

* feat(rpc): add trezor pubkey strategy with task-based address creation

* WIP: trezor login option in SDK example

* refactor(example): trezor auth mixin and remove previous trezor ui code

* fix(trezor): device info parsing and example auth state transitions

* refactor(trezor): add auth listener & implement coderabbitai suggestions

* fix(example): auth restoration and listener order

* fix(trezor): workaround for trezor-specifc scan issue

funded addresses not being scanned for fresh trezor logins (maybe not believed to be a "fresh" wallet)?

* fix(rpc): get new address task status response parsing

* refactor(trezor): move authentication and initialization logic to SDK (#81)

This is a concept solution that moves the Trezor initialization and authentication flow from the example BLoC to the SDK KomodoDefiAuth class & package.

Two issues that make integrating the trezor login flow with the current SDK difficult:

- Trezor login is a multi-step process that uses task-based RPCs, so Stream-based versions of the signin and register methods are required.
- Async user inputs (i.e. passphrase or pin) need to be sent to trezor as part of login process.

Solution implemented in this PR:

- Add stream-based signInStream and registerStream functions to KomodoDefiAuth with a new Authentication state/status class.
  - Alternative (breaking): modify the existing functions to return Stream
- Add input methods for passphrase and pin to KomodoDefiAuth
  - Alternative 1: Ask user for passphrase before starting trezor sign-in and pass it through the existing wallet password field.
  - Alternative 2: SDK consumers use device-specific managers (e.g. sdk.trezor.sendPassphrase).

Commits:

* Use TrezorWalletManager in example bloc

* refactor(trezor,auth): move trezor auth into komodo_defi_local_auth

* refactor: implement coderabbitai suggestions

* refactor(trezor): migrate auth options and state models to freezed (#90)

* migrate models to freezed

* fix(types): revert changes to seed_node and auth_options
* fix(rpc,activation): breaking EVM private key policy enum change

* fix(activation-params): use pascal case for to and from json

* test(example): add asset activation integration test

* test(example): run in zone to catch microtask and uncaught exceptions

* fix(auth): merge issues and update privkeypolicy comparisons

* docs: expand doc comments and remove runzonedguarded
latest staging with hotfix for trezor coin activation
* feat(auth): add wallet deletion

* feat(example): add wallet deletion

* add: wallet deletion for Trezor wallets

* chore: re-generate melos

* refactor: fix flaw in response error parsing

Fix flaw in response error parsing where the custom error parser function would never be called because of the inheritence structure.

* feat(example): move delete wallet action (#104)
Disabled melos generation due to circular dependency issues caused by komodo_defi_rpc_methods and komodo_defi_types packages. This will be revisited in the.

The app should already have the necessary generated files committed to the repository. If this is not the case, we have bigger issues.
* chore(deps): bump logging version to 1.3.0 as in komodo-wallet

* fix(trezor): sign out of existing wallet if initialisation fails

fixes the following scenarios
- trezor device not found
- trezor device not selected

and other edge cases that may cause trezor init or auth to fail, ensuring that the user already exists error is not thrown

* feat(trezor): add priv_key_policy to tendermint, erc20, and zhtlc params

* fix(trezor): yield error states rather than exceptions in streams

* feat(activation,rpc): task-based eth activation

* feat(asset-manager): asset filter strategy based on current wallet (#107)

* feat(asset-manager): asset filter strategy based on current wallet

* featasset-manager): limit trezor asset filter to utxo and qtum only

* refactor: add error response check and evm subclasses set

coderabbitai suggestions

* feat: add name-based filter strategy (#108)

* refactor: update authOptions references to use walletId

* refactor(asset-filter): rename `name` to `strategyId`

* refactor: extract show details button

* Refactor error display components

* refactor: convert toggle to stateless widget

* feat(ui): add toggle for icon and expose breakpoint

* fix(ui): button interactivity no-op when showDetailsOverride is true

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* refactor: remove unnecessary spread operator

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* chore(deps): bump logging version to 1.3.0 as in komodo-wallet

* fix(trezor): sign out of existing wallet if initialisation fails

fixes the following scenarios
- trezor device not found
- trezor device not selected

and other edge cases that may cause trezor init or auth to fail, ensuring that the user already exists error is not thrown

* feat(trezor): add priv_key_policy to tendermint, erc20, and zhtlc params

* fix(trezor): yield error states rather than exceptions in streams

* feat(activation,rpc): task-based eth activation

* feat(asset-manager): asset filter strategy based on current wallet (#107)

* feat(asset-manager): asset filter strategy based on current wallet

* featasset-manager): limit trezor asset filter to utxo and qtum only

* refactor: add error response check and evm subclasses set

coderabbitai suggestions

* feat: add name-based filter strategy (#108)

* refactor: update authOptions references to use walletId

* refactor(asset-filter): rename `name` to `strategyId`

* ci(example): re-enable dry build run
Disable SIA as it is not yet supported. The SIA activation strategy will be merged soon, but this depends on a specific branch of KDF and will likely still be very long before it is available in a public release of KDF.
cursor[bot]

This comment was marked as outdated.

CharlVS and others added 19 commits August 25, 2025 16:06
…mprove logging

- Use stdout/stderr for CLI output to satisfy lints
- Add dart:io import where needed
- Route Logger output and usage text to stdout/stderr
 - komodo_defi_types@0.3.2+1
 - komodo_wallet_cli@0.4.0+1
 - komodo_ui@0.3.0+3
 - komodo_defi_sdk@0.4.0+3
 - komodo_defi_rpc_methods@0.3.1+1
 - komodo_defi_local_auth@0.3.1+2
 - komodo_defi_framework@0.3.1+2
 - komodo_coins@0.3.1+2
 - komodo_coin_updates@1.1.1
 - komodo_cex_market_data@0.0.3+1
…rences\n\n- Use assets/transformer_invoker.txt instead of dotfile\n- Update pubspec and READMEs\n- Remove special .gitignore unignore
- Add CoinSubClass.tokenStandardSuffix (exhaustive switch)

- Add AssetId.displayName (parent-only) using tokenStandardSuffix

- No suffix for child assets; no changes to ids or balances

Refs: KomodoPlatform/komodo-wallet#2988 (comment)
…ion (#215)

* feat(cex-market-data): add coinpaprika API fallback support

* feat(cex-market-data): integrate coinpaprika into sparklines & strategies

* refactor(cex-market-data): use index_generator for barrel files

* test(cex-market-data): refactor out fixtures and helpers

* refactor(cex-market-data): add doc comments, update tests, explicit utc
* fix(auth): store bip39 compatibility regardless of wallet type

previous behaviour of throwing if HD wallet seed is not bip39 compatible

* build(kdf): bump dev commit hash to ea91c0d

pre-emptive avoidance of build errors as dev builds are pruned regularly

* refactor(auth): simplify HD bip39 verification
…ase for custom token import (#220)

* fix(custom-token-import): add custom token refresh notifier

* fix(custom-token-import): use raw config instead of tojson methods

* fix(asset-icon): use lowercase for custom icon identifiers

* fix(custom-token-import): clear custom tokens on refresh, fix refresh filter check

* refactor(asset-manager): use .of for type safety

* fix(coin-subclasses): fallback to checking ticker and token suffix

Enum values are a mix of ticker, formatted, and token suffix values,
* use token contract, not swap contract

* convert to mixedcase before `get_token_info`

* fix(custom-token-import): build parent->child relationships when loading

* fix(etherscan-transaction-history): use ETH URL for tokens

token-specific URLs are returning 404s

* fix(runtime-coin-updates): build parent->child relationships from hive

* revert: etherscan transaction base endpoint change to ethUrl

* feat(refresh-notifier): add notify and wait function to interface

* fix(runtime-coin-updates): sort assets by coin before returning

some of the conversion operations likely change the order of the original list and keys, which caused a segfault on linux

---------

Co-authored-by: Francois <takenagain@users.noreply.github.com>
…of the global cache (#224)

* fix(binance-repo): use coin-specific fiat currency list for supports

* feat(binance-repo): add alternative USD stablecoin mappings

allows for binance requests for assets without explicit USDT support

* refactor(binance): remove unused fiat cache and address nitpicks
* perf(logs): reduce market metrics log verbosity and duplication

* refactor(market-metrics): add toUtc to startAt and remove duplicate log

* test(runtime-coin-updates): update coinsubclass to smarchain for KMD

* chore: resolve merge issue

* test(binance): remove legacy FRAX from the required USD mappings
)

* feat(coin-config): add custom token support to coin config manager

* fix(custom-token-storage): add recovery for closed box from startup

* fix(custom-token-storage): add no-op storage and set flag from storage

* refactor(review): rename interface, remove unnecessary async
* feat: Add external logger support to KomodoDefiSdk

This commit introduces the ability to pass an external logger function to the KomodoDefiSdk, allowing for custom logging of framework messages.

Co-authored-by: charl <charl@vanstaden.info>

* Refactor: Manage SDK logger subscription internally

Co-authored-by: charl <charl@vanstaden.info>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* Enhance ZHTLC activation with improved config parsing and RPC methods

Co-authored-by: charl <charl@vanstaden.info>

* feat(zhtlc): integrate ZHTLC types and task RPCs per KDF API

* dragon_logs: remove tracked ignored files and add .gitignore files

* Integrate and verify ZHTLC in komodo_defi_sdk (#196)

* Refactor ZHTLC activation strategy with stream-based task handling

Co-authored-by: charl <charl@vanstaden.info>

* Refactor activation steps to use strongly-typed ActivationStep enum

Co-authored-by: charl <charl@vanstaden.info>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* chore: run code generators

* chore(git): delete previously tracked igored files

* Fix ERC20 and ZHTLC activation params serialization and method calls (#212)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* fix: misc fixes

* docs(activation): add activation params refactoring plan

Clean base/subclass separation, canonical serialization + encoder strategy, user configuration + persistence, BLoC timeout, SDK integration via AssetId extension and resolveActivationParams, and migration steps. No backwards compatibility required.

* docs(sdk): activation refactoring v2

* feat(activation,zhtlc,sdk,rpc)!: extract ZHTLC fields to ZhtlcActivationParams; add ActivationConfigService; unify priv_key_policy serialization; normalize toRpcParams; formatting fixes

* Checkpoint before follow-up message

Co-authored-by: charl <charl@vanstaden.info>

* Fix: Remove unused import statement

Co-authored-by: charl <charl@vanstaden.info>

* feat: Add support for electrum_servers in Zhtlc activation

Co-authored-by: charl <charl@vanstaden.info>

* feat: initialize Firebase hosting for SDK example and playground

- Add Firebase hosting configuration for packages/komodo_defi_sdk/example
  - Configure to use kdf-sdk hosting site on komodo-defi-sdk project
  - Set up hosting target mapping
- Add Firebase hosting configuration for playground
  - Configure to use default hosting site on komodo-playground project
- Update GitHub Actions workflows to use target parameter for SDK example
- Update .gitignore to allow Firebase config files in example and playground

* fix: update z-coin activation strategy and example UI

- Update zhtlc_activation_strategy for improved activation handling
- Add activation config service enhancements
- Update logged_in_view_widget with improved UI for instance management
- Export additional SDK functionality in public API

* docs(firebase): reorganize Firebase deployment scripts and documentation

- Move Firebase scripts to .github/scripts/firebase/ directory
- Rename scripts for clarity:
  - setup-firebase-secrets.sh → setup-github-secrets.sh
  - verify-firebase-secrets.sh → verify-github-secrets.sh
- Move documentation to docs/firebase/ directory
- Rename documentation file to firebase-deployment-setup.md
- Update script paths in documentation
- Add README for scripts directory

* fix: remove global singleton registration of ActivationConfigService

- Remove global GetIt.I registration to prevent conflicts between multiple SDK instances
- Pass ActivationConfigService through constructor chain instead of global resolution
- Update ZhtlcActivationStrategy to accept service via constructor
- Update ActivationStrategyFactory and ActivationManager to propagate the service
- Prevent memory leaks and use-after-dispose issues when SDK instances are disposed

This ensures each SDK instance maintains its own isolated ActivationConfigService,
fixing issues where only the first SDK's service would be globally registered.

* fix(activation): register ActivationConfigService during bootstrap

- Ensure service is available before ActivationManager to fix ZHTLC/Z-coin activation flow\n- Remove duplicate registration from KomodoDefiSdk.init\n- Example: use instance sdk instead of context.read for ZHTLC prompt

* docs(tech-debt): add Activation & ZHTLC tech-debt report and refine sections

* feat(komodo_defi_sdk): add HiveActivationConfigRepository and integrate in activation flow; update bootstrap, activation service, and example widget

* fix: resolve external logging callback flaws and memory leak

- Fix native callback memory leak by disposing _kdfOperations in KomodoDefiFramework
- Remove debug-only conditional logging in bootstrap.dart
- Fix potential double subscription in komodo_defi_sdk.dart
- Add comprehensive error handling to log stream listeners
- Replace empty catch blocks with proper error handling
- Add safe logging helpers to prevent callback exceptions from crashing
- Ensure log streams continue operating even after callback errors

* refactor(withdrawals): inject LegacyWithdrawalManager and use for Tendermint flows

- add _legacyManager constructor param and field
- delegate Tendermint preview/withdraw to injected manager
- minor formatting and watch() simplifications

* fix(kdf-ops): use conditional imports for platform-specific imports

i.e. dart:ffi

* fix(activation-params): include other RPC server keys

* fix(activation-config-repository): register adapter type

* feat(zhtlc): add desktop zcash params downloader (#228)

* feat(sdk): add zhltc params file downloader

* feat(sdk-example): integrate zcash downloader for desktop

* chore: remove groth from default params download list

* test(komodo-defi-sdk): fix failing zcash unit tests

* refactor: clean up imports, tests, and dialog date conversion

* feat(zhtlc): add mobile config params downloader

* feat(zhtlc): web lightwallet server URLs workaround

* fix(zhtlc): align orderbook RPC with KDF schema, and add id pagination support (#229)

* feat(zhtlc-tx): add from_id pagination support from RPC docs

* fix(orderbook-v2): use v2 fields and types

* fix(source-address-field): use consistent text theme to fix visibility

* fix(order-address): change address data to optional for shielded ops

* fix(json-utils): convert int to string in traverse as it's lossless

* test(sdk): fix missing type in zcash mock classes

* fix(address-select-input): use consistent text theme to fix visibility

* feat(zhtlc): estimate activation percentage based on block height (#230)

* feat(zhtlc): estimate activation percentage based on block height

* refactor(review): remove unnecessary casts, states, and configurable polling

* fix(config-transform): only replace lightwalletservers if wss is not empty

* Fix ZHTLC activation issues and improve resilience

Co-authored-by: charl <charl@vanstaden.info>

---------

Co-authored-by: Charl (Nitride) <77973576+CharlVS@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: charl <charl@vanstaden.info>
Copy link
Contributor

github-actions bot commented Oct 2, 2025

Visit the preview URL for this PR (updated for commit 04e1587):

https://komodo-playground--pr205-dev-tccqs8xt.web.app

(expires Thu, 23 Oct 2025 15:55:30 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: 2bfedd77fdea45b25ba7c784416e81f177aa5c47

Copy link
Contributor

github-actions bot commented Oct 2, 2025

Visit the preview URL for this PR (updated for commit 04e1587):

https://kdf-sdk--pr205-dev-dwrknf2x.web.app

(expires Thu, 23 Oct 2025 15:55:02 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: 9c1b6e6c010cf0b965c455ba7a69c4aedafa8a1d

takenagain and others added 3 commits October 4, 2025 17:42
…#232)

* fix(sdk): close subscriptions on auth state changes

reactivating existing subscriptions causes a bunch of side effects alongside assets active in the background that are not always present in the currently signed in wallet (consuming unnecessary resources etc. alongside a memory leak possibility)

* test(sdk): update and expand pubkey and balance unit test coverage

* refactor(review): add custom exception, improve logging, and update docs

* chore: update generated indexes and freezed models
…/PubkeyInfo (#231)

* feat(message-signing): add AddressPath type and refactor to use Asset/PubkeyInfo

- Add AddressPath class for HD wallet address path handling
  - Supports both derivation path and component-based formats
  - Immutable with proper equality and JSON serialization
  - Documented with API reference links

- Refactor SignMessageRequest to use AddressPath
  - Simplified from 4 optional parameters to single AddressPath
  - Better type safety and API compliance
  - Maintains full HD and non-HD wallet support

- Update MessageSigningManager to use high-level types
  - Replace String coin parameter with Asset type
  - Replace individual derivation params with PubkeyInfo
  - Automatic conversion from PubkeyInfo to AddressPath
  - Use asset.id.id for correct coin identifier

- Update example and namespace implementations
  - Remove deprecated individual HD parameters
  - Add comprehensive documentation and examples
  - Ensure consistent API across RPC and SDK layers

This provides a cleaner, more type-safe API that better abstracts
the underlying RPC complexity while maintaining full compatibility
with the Komodo DeFi Framework message signing endpoints.

* refactor(coin-updates): remove unused interface and sort exports

- Remove custom_token_storage_interface.dart (unused)
- Alphabetically sort exports in _coins_config_index.dart

* refactor(address-path): migrate to freezed for better immutability

- Replace manual immutability implementation with freezed
- Use union types for derivationPath and components constructors
- Leverage freezed's when/maybeWhen for type-safe pattern matching
- Maintain custom fromJson/toJson for API compatibility
- Reduce boilerplate: ~40 lines vs ~135 lines manually
- Keep all existing APIs and behavior unchanged

Benefits:
- Automatic copyWith, equality, hashCode, toString generation
- Type-safe exhaustive pattern matching with when/maybeWhen
- Better maintainability and less error-prone
- Consistent with freezed usage across the codebase
- Updated branch from main to hotfix-remove-memorydb-size-metric
- Updated commit hash to 476262f0d3390e24cfe672d5e15a78a46397dbfa
- Updated checksums for all platform binaries (web, ios, macos, windows, android-armv7, android-aarch64, linux)
cursor[bot]

This comment was marked as outdated.

CharlVS and others added 4 commits October 9, 2025 19:52
…pport; update staging checksums (#237)

* extends upi config update to accomodate Decker's nebula

* Auto-commit pending changes before rebase - PR synchronize

* Update main branch, resolve short commit SHAs, and fix URL resolution

Co-authored-by: charl <charl@vanstaden.info>

* Resolve merge conflict: keep KDF staging commit and branch in build_config.json

* fix(build): fix incorrect source URL path

* komodo_wallet_cli: add default-on strict mode; enforce exact-commit artifacts; --[no-]strict flag; update usage examples

* cli/build: support branch-based Nebula mirror + robust href resolution

- update_api_config.dart: resolve mirror links using full href; inspect branch and base listings; normalize href path for pattern checks
- dev_builds_artefact_downloader: resolve links via href; search branch/base listings; ignore wallet artifacts; use Uri.path for matching
- build_config.json: update staging branch checksums after Nebula fetch
- docs: clarify Nebula usage and branch-based listings

Also includes minor logging improvements and no breaking refactors.

* macos: optionally thin universal KDF binaries to active arch in Release builds; re-sign artifacts

* chore(macos): commit native generated files

* chore: commit pending changes

---------

Co-authored-by: smk762 <smk@komodoplatform.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Update api_commit_hash to 4c4df1326bcad6aa25ab837cad4fc84147e15084 and refresh valid_zip_sha256_checksums for web, iOS, macOS, Windows, Android (armv7, aarch64), and Linux.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants