Multi asset cryptocurrency wallet library in JavaScript. Supported on 3 platforms: Node.js, Browser, Bare Runtime
Checkout the website here
π Non custodial: not your keys, not your coins.
𧩠Composable: Single facade to interact with multiple assets and wallets
π¦ Modular: All components are modular and can be used independently.
π οΈ Extensible: Easily add new asset, seed source, block source...etc
- Electrum block data source. Support for TCP and Websocket on browser.
- P2WPKH / BIP84 address support.
- Web3 and Indexer block data source.
- ERC20 support.
- BIP44 address generation.
Blockchain | Supported | Token Protocol |
---|---|---|
Bitcoin | β | - |
Ethereum | β | ERC20 |
Tron | β | TRC20 |
TON | β | Jettons |
Avalanche | β | C-Chain |
Solana | β | Solana Token |
Celo | β | ERC20 |
Liquid | β | Liquid Asset |
Tezos | β | Tezos Token |
Aptos | β | Fungible Asset |
Cosmos | β | ERC20 |
Near | β | Near Token |
Polkadot | β | AssetHub |
The library comes with all the components needed to build a wallet. You can also use these as an example to build your own components.
- BIP39 Seed: Generate BIP39 seed for all assets
- Key value store: Store transaction history and track state.
- Blockchain indexer: Remote blockchain data provider
- Test tools: Tools for development and testing
- Documentation: Guides, documentation.
- Bitcoin: Bitcoin asset integration.
- Ethereum/ERC20: Ethereum and ERC20 integration.
Checkout Quick start guide for more detailed guide.
const seed = await BIP39Seed.generate(/** seed phrase or leave empty to generate one */)
// Setup wallet store. Modular data store for writing data
const store = new WalletStoreHyperbee({
store_path: './wallet-store' // Leave empty to use in-memory store
})
// Setup Bitcoin asset
const btcPay = new BitcoinPay({
// Asset name is used to identify the asset in the wallet.
// You can have multiple assets of same currency
asset_name: 'btc',
// Bitcoin network you'll be using
network: 'regtest'
})
// Setup main wallet class
const wallet = new Wallet({
store,
seed,
// List of assets that the wallet will support
assets: [ btcPay ]
})
// Start wallet and initialize
// Connect to block source
// Add asset to wallet registry
await wallet.initialize()
// Traverse wallet history of all assets and sync them. This might take a while depending on wallet size
await wallet.syncHistory(opts)
// All payment features are namespaced under wallet.pay[asset_name][action](opts, ...args)
// Get a new bitcoin address using api below
const btcAddress = await wallet.pay.btc.getNewAddress()
// Get Tx history
await wallet.pay.btc.getTransactions({}, (tx) =>{
// do something here
}))
// Add Asset:
wallet.addAsset()
//done
new Wallet(config)
Creates a new Wallet instance.
config
(Object):store
(Object): Required. Storage interface for the walletseed
(Object): Required. Seed object for wallet initializationassets
(Array): Required. Array of asset objects to be managed by the wallet
WalletError
with code 'BAD_ARGS' if required config parameters are missing or invalid
await wallet.initialize()
Initializes the wallet and all its assets. Emits 'ready' event when complete.
await wallet.destroy()
Cleanly destroys the wallet instance, closing stores and network connections..
await wallet.addAsset(assetObj)
Adds a new asset to the wallet.
assetObj
(Object): Asset instance to add
await wallet.syncHistory({
asset : 'asset-name' // sync only this asset
})
await wallet.syncHistory() /// sync everything
Synchronizes transaction history for assets.
asset
(String): Optional. Sync specific asset nameall
(Boolean): Optional. If true, syncs all tokens for assets- Additional options are passed to asset.syncTransactions()
const seed = wallet.exportSeed()
Exports the wallet's seed data.
The wallet extends EventEmitter and emits the following events:
ready
: Emitted when wallet is fully initializednew-tx
: Emitted when a new transaction is detected- Arguments:
(assetName, ...transactionDetails)
- Arguments:
new-block
: Emitted when a new block is detected- Arguments:
(assetName, ...blockDetails)
- Arguments:
asset-synced
: Emitted when an asset completes synchronization- Arguments:
(assetName, [token])
- Arguments:
An AssetList instance containing all initialized assets. Available after initialization.
The best way to get started developing:
- Setup local development enviroment.
- Configure example apps to connect to your local blockchains.
- Start hacking on example apps. After you have example apps running:
- Fork/modify existing assets
- Build new assets.
There is a working example wallet that supports. This wallet can be used as an example for making your own integrations.
The wallet is designed to work with local test enviroments.
- See Wallet test tools repo to setup local enviroments
- Setup wallet indexer service
See guide for how to add new assets
- Brittle is used for testing
- Tests included in this repo cover
- Shared modules
- Integration of various blockchains
- Each asset has it's own tests included in it's repo.
For critical vulnerabilities and bug reports, please reach out to us at [email protected]. Your insights help us keep WDK by Tether secure and reliable!