@abcpros/bitcore-wallet-service
Version:
A service for Mutisig HD Bitcoin Wallets
217 lines (182 loc) • 6.71 kB
text/typescript
import { ITxProposal, IWallet, TxProposal } from '../model';
import { WalletService } from '../server';
import { BchChain } from './bch';
import { BtcChain } from './btc';
import { DogeChain } from './doge';
import { EthChain } from './eth';
import { LtcChain } from './ltc';
import { XecChain } from './xec';
import { XpiChain } from './xpi';
import { XrpChain } from './xrp';
const Common = require('../common');
const Constants = Common.Constants;
export interface INotificationData {
out: {
address: any;
amount: any;
tokenAddress?: any;
};
txid: any;
}
export interface IChain {
getWalletBalance(server: WalletService, wallet: IWallet, opts: { coin: string; addresses: string[] } & any, cb);
getWalletSendMaxInfo(
server: WalletService,
wallet: IWallet,
opts: {
excludeUnconfirmedUtxos: string;
returnInputs: string;
from: string;
feePerKb: number;
useProUrl: boolean;
} & any,
cb
);
getInputSizeSafetyMargin(opts: any): number;
getSizeSafetyMargin(opts: any): number;
getDustAmountValue();
getTransactionCount(server: WalletService, wallet: IWallet, from: string);
getChangeAddress(server: WalletService, wallet: IWallet, opts: { changeAddress: string } & any);
checkDust(output: { amount: number; toAddress: string; valid: boolean }, opts: { outputs: any[] } & any);
getFee(server: WalletService, wallet: IWallet, opts: { fee: number; feePerKb: number } & any);
getBitcoreTx(txp: TxProposal, opts: { signed: boolean });
convertFeePerKb(p: number, feePerKb: number);
convertAddressToScriptPayload(address: string);
sendToken(wallet, mnemonic, tokenId, token, TOKENQTY, etokenAddress);
burnToken(wallet, mnemonic, tokenId, TOKENQTY, splitTxId);
getChronikClient();
getTokenInfo(tokenId);
checkTx(server: WalletService, txp: ITxProposal);
checkTxUTXOs(server: WalletService, txp: ITxProposal, opts: { noCashAddr: boolean } & any, cb);
selectTxInputs(server: WalletService, txp: ITxProposal, wallet: IWallet, opts: { utxosToExclude: any[] } & any, cb);
checkUtxos(opts: { fee: number; inputs: any[] });
checkValidTxAmount(output): boolean;
isUTXOCoin(): boolean;
isSingleAddress(): boolean;
supportsMultisig(): boolean;
notifyConfirmations(network: string): boolean;
addSignaturesToBitcoreTx(
tx: string,
inputs: any[],
inputPaths: any[],
signatures: any[],
xpub: string,
signingMethod?: string
);
addressToStorageTransform(network: string, address: {}): void;
addressFromStorageTransform(network: string, address: {}): void;
validateAddress(wallet: IWallet, inaddr: string, opts: { noCashAddr: boolean } & any);
onCoin(coin: any): INotificationData | null;
onTx(tx: any): INotificationData | null;
}
const chain: { [chain: string]: IChain } = {
BTC: new BtcChain(),
BCH: new BchChain(),
XEC: new XecChain(),
ETH: new EthChain(),
XRP: new XrpChain(),
DOGE: new DogeChain(),
XPI: new XpiChain(),
LTC: new LtcChain()
};
class ChainProxy {
get(coin: string) {
const normalizedChain = this.getChain(coin);
return chain[normalizedChain];
}
getChain(coin: string): string {
let normalizedChain = coin.toUpperCase();
if (Constants.ERC20[normalizedChain]) {
normalizedChain = 'ETH';
}
return normalizedChain;
}
getChronikClient(coin) {
return this.get(coin).getChronikClient();
}
getWalletBalance(server, wallet, opts, cb) {
return this.get(wallet.coin).getWalletBalance(server, wallet, opts, cb);
}
getWalletSendMaxInfo(server, wallet, opts, cb) {
return this.get(wallet.coin).getWalletSendMaxInfo(server, wallet, opts, cb);
}
getDustAmountValue(coin) {
return this.get(coin).getDustAmountValue();
}
getTransactionCount(server, wallet, from) {
return this.get(wallet.coin).getTransactionCount(server, wallet, from);
}
getChangeAddress(server, wallet, opts) {
return this.get(wallet.coin).getChangeAddress(server, wallet, opts);
}
checkDust(coin, output, opts) {
return this.get(coin).checkDust(output, opts);
}
getFee(server, wallet, opts) {
return this.get(wallet.coin).getFee(server, wallet, opts);
}
getBitcoreTx(txp: TxProposal, opts = { signed: true }) {
return this.get(txp.chain).getBitcoreTx(txp, { signed: opts.signed });
}
convertFeePerKb(coin, p, feePerKb) {
return this.get(coin).convertFeePerKb(p, feePerKb);
}
convertAddressToScriptPayload(coin, address) {
return this.get(coin).convertAddressToScriptPayload(address);
}
async sendToken(coin, wallet, mnemonic, tokenId, token, TOKENQTY, etokenAddress) {
return await this.get(coin).sendToken(wallet, mnemonic, tokenId, token, TOKENQTY, etokenAddress);
}
async burnToken(coin, wallet, mnemonic, tokenId, TOKENQTY, splitTxId) {
return await this.get(coin).burnToken(wallet, mnemonic, tokenId, TOKENQTY, splitTxId);
}
async getTokenInfo(coin, tokenId) {
return await this.get(coin).getTokenInfo(tokenId);
}
addressToStorageTransform(coin, network, address) {
return this.get(coin).addressToStorageTransform(network, address);
}
addressFromStorageTransform(coin, network, address) {
return this.get(coin).addressFromStorageTransform(network, address);
}
checkTx(server, txp) {
return this.get(txp.chain).checkTx(server, txp);
}
checkTxUTXOs(server, txp, opts, cb) {
return this.get(txp.chain).checkTxUTXOs(server, txp, opts, cb);
}
selectTxInputs(server, txp, wallet, opts, cb) {
return this.get(txp.chain).selectTxInputs(server, txp, wallet, opts, cb);
}
checkUtxos(coin, opts) {
return this.get(coin).checkUtxos(opts);
}
checkValidTxAmount(coin: string, output): boolean {
return this.get(coin).checkValidTxAmount(output);
}
isUTXOCoin(coin: string): boolean {
return this.get(coin).isUTXOCoin();
}
isSingleAddress(coin: string): boolean {
return this.get(coin).isSingleAddress();
}
notifyConfirmations(coin: string, network: string): boolean {
return this.get(coin).notifyConfirmations(network);
}
supportsMultisig(coin: string): boolean {
return this.get(coin).supportsMultisig();
}
addSignaturesToBitcoreTx(chain, tx, inputs, inputPaths, signatures, xpub, signingMethod) {
this.get(chain).addSignaturesToBitcoreTx(tx, inputs, inputPaths, signatures, xpub, signingMethod);
}
validateAddress(wallet, inaddr, opts) {
return this.get(wallet.coin).validateAddress(wallet, inaddr, opts);
}
onCoin(coin: string, coinData: any) {
return this.get(coin).onCoin(coinData);
}
onTx(coin: string, tx: any) {
return this.get(coin).onTx(tx);
}
}
export let ChainService = new ChainProxy();