crypto-ducatus-wallet-core
Version:
A multi-currency support library for address derivation, private key creation, and transaction creation
56 lines (46 loc) • 1.54 kB
text/typescript
import { BchDeriver } from './bch';
import { BtcDeriver } from './btc';
import { DucDeriver } from './duc';
import { DucXDeriver } from './ducx';
import { EthDeriver } from './eth';
import { Paths } from './paths';
import { XrpDeriver } from './xrp';
export interface Key {
address: string;
privKey?: string;
pubKey?: string;
}
export interface IDeriver {
deriveAddress(network: string, xPub: string, addressIndex: number, isChange: boolean): string;
derivePrivateKey(network: string, xPriv: string, addressIndex: number, isChange: boolean): Key;
}
const derivers: { [chain: string]: IDeriver } = {
BTC: new BtcDeriver(),
BCH: new BchDeriver(),
DUC: new DucDeriver(),
ETH: new EthDeriver(),
DUCX: new DucXDeriver(),
XRP: new XrpDeriver()
};
export class DeriverProxy {
get(chain) {
return derivers[chain];
}
deriveAddress(chain, network, xpubKey, addressIndex, isChange) {
return this.get(chain).deriveAddress(network, xpubKey, addressIndex, isChange);
}
derivePrivateKey(chain, network, privKey, addressIndex, isChange) {
return this.get(chain).derivePrivateKey(network, privKey, addressIndex, isChange);
}
pathFor(chain, network, account = 0) {
const normalizedChain = chain.toUpperCase();
const accountStr = `${account}'`;
const chainConfig = Paths[normalizedChain];
if (chainConfig && chainConfig[network]) {
return chainConfig[network] + accountStr;
} else {
return Paths.default.testnet + accountStr;
}
}
}
export default new DeriverProxy();