Repository navigation
refactor(chain): unify chain derivation to single truth - #168
Merged
Merged
Conversation
…dapter BREAKING CHANGE: ChainKind 'custom' is removed. All chains must use one of: 'bioforest', 'evm', 'bitcoin', 'tron'. Changes: - Remove 'custom' from ChainKindSchema, strict validation rejects unknown kinds - Remove normalizeUnknownType/normalizeUnknownKind fallback logic - Update testnet-chains.json to use proper chainKind values - Implement EVM/Tron/Bitcoin identity services using unified deriveKey - Identity services now expect UTF-8 encoded mnemonic as seed input - Export deriveBitcoinKey and BitcoinPurpose from @/lib/crypto - Update address-derivation.ts to handle tron separately from bitcoin - Fix all tests to use valid chainKind values
- Update bitcoin-strategy to use BIP84 Native SegWit (bc1q...) instead of Legacy P2PKH - Update key-material-provider to derive Bitcoin keys using BIP84 path (m/84'/0'/...) - Remove 'custom' chainKind handling from build-wallet-chain-addresses - Replace ChainConfigType with ChainKind across all adapters - Fix bitcoin/adapter.ts chainType from 'bip39' to 'bitcoin' - Update tests to expect bc1q... address format
Bitcoin and Tron now have their own dedicated adapters. The shared bip39 adapter is no longer needed.
- Update ChainConfigType to ChainKind with strict enum - Document Bitcoin BIP84 Native SegWit path (m/84'/0'/...) - Add Tron derivation path documentation - Remove deprecated custom/bip39 type references - Add strict type validation section
…derivation - Add derive-wallet-chain-addresses.ts helper to chain-adapter - Update create.tsx, recover.tsx, wallet.ts to use chain-adapter for derivation - Remove lib/crypto/address-derivation.ts (bypass code) - Remove services/wallet/chain-derivation directory (bypass code) This ensures all address derivation flows through chain-adapter's identity services, eliminating inconsistent derivation logic across the codebase.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes chain settings not persisting by unifying all derivation paths through chain-adapter as single source of truth.
Changes
Phase 1: Strict ChainKind enum
customfromChainKindSchema→ strictbioforest | evm | bitcoin | tronnormalizeUnknownType/normalizeUnknownKindfallback logictestnet-chains.jsonto use properchainKindvaluesPhase 2: Unified derivation in chain-adapter
deriveAddress/deriveAddressesin EVM/Tron/Bitcoin identity servicesderiveKey/deriveBitcoinKeyfrom@/lib/cryptoseed = TextEncoder().encode(mnemonic)(UTF-8 encoded mnemonic)Phase 3: BIP84 Native SegWit for Bitcoin
bitcoin-strategyto use BIP84 pathm/84'/0'/account'/0/indexbc1q...)Cleanup
bip39/adapter directoryChainConfigTypewithChainKindacross all adaptersTesting
bc1q...address formatBreaking Changes
ChainKindno longer acceptscustomorbip391...) to Native SegWit (bc1q...)