Overview
The@subwallet/extension-chains package manages chain metadata, type registries, and chain definitions for all networks supported by SubWallet Extension. It provides utilities for expanding metadata definitions and managing chain-specific configurations.
Purpose and Responsibilities
- Metadata Management: Stores and manages chain metadata definitions
- Type Registry: Creates and configures Polkadot.js type registries for each chain
- Chain Properties: Manages SS58 format, token decimals, and token symbols
- Metadata Expansion: Converts compact metadata definitions into full Chain objects
- Chain Discovery: Finds chains by genesis hash
Key Exports
Fromsrc/bundle.ts:
Core Functions
metadataExpand
Expands a compact metadata definition into a full Chain object with type registry:Chain object with:
- Configured TypeRegistry
- Metadata instance (if
metaCallsprovided) - Chain properties
- Token information
findChain
Finds a chain definition by genesis hash:addMetadata
Adds a new metadata definition to the known chains registry:knownMetadata
Returns all registered metadata definitions:Type Definitions
Fromsrc/types.ts:
MetadataDef interface is imported from @subwallet/extension-inject/types.
Directory Structure
Dependencies
- @polkadot/networks: Network definitions and SS58 registry
- @polkadot/util: Utility functions
- @polkadot/util-crypto: Cryptographic utilities (base64 decoding)
- @polkadot/api: Type registry and metadata (peer dependency)
- @polkadot/types: Type system (peer dependency)
- @subwallet/extension-inject: Type definitions for metadata
Integration in Architecture
Theextension-chains package:
- Provides type registries for Substrate chain interactions
- Used by
extension-basefor chain-specific type handling - Manages metadata updates when connecting to new chains
- Caches expanded chain definitions for performance
Metadata Flow
- Definition Storage: Metadata definitions are registered via
addMetadata() - Expansion: When needed, definitions are expanded via
metadataExpand() - Caching: Expanded chains are cached by genesis hash
- Registry Creation: Each expansion creates a configured TypeRegistry
- Metadata Loading: If
metaCallsis present, metadata is decoded and registered
Usage Examples
Basic Chain Lookup
Adding Custom Chain
Type Registry Usage
Caching Behavior
The package implements an internal cache:- Chains are cached by genesis hash
- Cache is checked on each
metadataExpand()call - Cached chains are returned if spec version matches
- Partial expansions (without metadata) are not cached
Related Packages
- extension-base - Consumes chain metadata for API interactions
- extension-inject - Provides MetadataDef type definition
- extension-koni-ui - Uses chain information for display