@bpanel/bpanel-utils
Version:
Utilities for bpanel
228 lines (187 loc) • 4.62 kB
JavaScript
'use strict';
exports.__esModule = true;
exports.primitives = undefined;
exports.toMTX = toMTX;
exports.toTX = toTX;
exports.toAddress = toAddress;
exports.toKeyRing = toKeyRing;
exports.toHDPublicKey = toHDPublicKey;
var _bsert = require('bsert');
var _bsert2 = _interopRequireDefault(_bsert);
var _bcoin = require('bcoin');
var _bcash = require('bcash');
var _hsd = require('hsd');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/*
* an object is created for each primitive
* that is keyed by the name of the blockchain
*/
var MTX = {
bitcoin: _bcoin.MTX,
bitcoincash: _bcash.MTX,
handshake: _hsd.MTX
};
/*
* manages mappings between primitives
* such that applications can live switch between
* different blockchains
*
*/
var TX = {
bitcoin: _bcoin.TX,
bitcoincash: _bcash.TX,
handshake: _hsd.TX
};
var Address = {
bitcoin: _bcoin.Address,
bitcoincash: _bcash.Address,
handshake: _hsd.Address
};
var KeyRing = {
bitcoin: _bcoin.KeyRing,
bitcoincash: _bcash.KeyRing,
handshake: _hsd.KeyRing
};
var HDPublicKey = {
bitcoin: _bcoin.HDPublicKey,
bitcoincash: _bcash.HDPublicKey,
handshake: _hsd.HDPublicKey
};
// export an object of all
// of the primities
var primitives = exports.primitives = {
HDPublicKey: HDPublicKey,
MTX: MTX,
TX: TX,
KeyRing: KeyRing,
Address: Address
};
/*
* create MTX object
* @param {Object} tx
* @param {Object} options
* @param {String} options.type
* select how to instantiate primitive
* ie, fromRaw, fromJSON etc
* @param {String} options.chain
* blockchain name
*/
function toMTX(tx, options) {
var type = options.type,
chain = options.chain;
(0, _bsert2.default)(type);
(0, _bsert2.default)(chain);
switch (type) {
case 'raw':
return MTX[chain].fromRaw(tx.hex, 'hex');
case 'json':
return MTX[chain].fromJSON(tx);
default:
return null;
}
}
/*
* create TX object
* @param {Object} tx
* @param {Object} options
* @param {String} options.type
* select how to instantiate primitive
* ie, fromRaw, fromJSON etc
* @param {String} options.chain
* blockchain name
*/
function toTX(tx, options) {
var type = options.type,
chain = options.chain;
(0, _bsert2.default)(type);
(0, _bsert2.default)(chain);
switch (type) {
case 'raw':
return TX[chain].fromRaw(tx.hex, 'hex');
case 'json':
return TX[chain].fromJSON(tx);
case 'options':
return TX[chain].fromOptions(tx);
default:
return null;
}
}
/*
* create Address object
* @param {string} address
* @param {Object} options
* @param {String} options.type
* select how to instantiate primitive
* ie fromRaw, fromJSON etc
* @param {String} options.chain
* blockchain name
* @param {String} options.network
* blockchain network
* ie main, testnet, regtest
*/
function toAddress(address, options) {
var type = options.type,
chain = options.chain,
network = options.network;
switch (type) {
case 'string':
return Address[chain].fromString(address, network);
case 'options':
return Address[chain].fromOptions(options);
default:
return null;
}
}
/*
* create Keyring object
* @param {string} key
* @param {Object} options
* @param {String} options.type
* select how to instantiate primitive
* ie fromRaw, fromJSON etc
* @param {String} options.chain
* blockchain name
* @param {String} options.network
* blockchain network
* ie main, testnet, regtest
*/
function toKeyRing(key, options) {
var type = options.type,
chain = options.chain,
network = options.network,
compress = options.compress;
switch (type) {
case 'public':
return KeyRing[chain].fromPublic(key, network);
case 'private':
return KeyRing[chain].fromPrivate(key, compress);
case 'options':
return KeyRing[chain].fromOptions(options);
default:
return null;
}
}
/*
* create HDPublicKey object
* @param {Object} options
* @param {String} options.type
* select how to instantiate primitive
* ie fromRaw, fromJSON etc
* @param {String} options.chain
* blockchain name
* @param {String} options.network
* blockchain network
* ie main, testnet, regtest
*/
function toHDPublicKey(options) {
var type = options.type,
chain = options.chain,
xpubkey = options.xpubkey,
network = options.network;
switch (type) {
case 'base58':
return HDPublicKey[chain].fromBase58(xpubkey, network);
default:
return null;
}
}