Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 55 additions & 20 deletions lib/api_client.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,28 @@ var _ = require('lodash'),

var useWebWorker = require('./use-webworker')();

var regtest = {
magicPrefix: '\x18Bitcoin Signed Message:\n',
bip32: {
public: 0x043587cf,
private: 0x04358394
},
pubKeyHash: 0x6f,
scriptHash: 0xc4,
wif: 0xef,
dustThreshold: 546,
feePerKb: 10000
};

/**
* Bindings to conssume the BlockTrail API
*
* @param options object{
* apiKey: 'API_KEY',
* apiSecret: 'API_SECRET',
* host: 'defaults to api.blocktrail.com',
* network: 'BTC|LTC',
* testnet: true|false
* network: 'BTC|TBTC|RBTC', // specific network
* testnet: true|false // assumes network == 'btc'
* }
* @constructor
*/
Expand Down Expand Up @@ -58,21 +71,16 @@ var APIClient = function(options) {
options.host = 'api.blocktrail.com';
}

self.initNetwork(options);

if (!options.port) {
options.port = options.https ? 443 : 80;
}

self.testnet = options.testnet = options.testnet || false;
if (self.testnet) {
self.network = bitcoin.networks.testnet;
} else {
self.network = bitcoin.networks.bitcoin;
}

self.bitcoinCash = options.network && options.network === "BCC";

if (!options.endpoint) {
options.endpoint = "/" + (options.apiVersion || "v1") + "/" + (self.testnet ? "t" : "") + (options.network || 'BTC').toUpperCase();
options.endpoint = "/" + (options.apiVersion || "v1") + "/" + (options.network || 'BTC').toUpperCase();
}

/**
Expand All @@ -81,6 +89,33 @@ var APIClient = function(options) {
self.client = new RestClient(options);
};

APIClient.prototype.initNetwork = function(options) {
if (options.network) {
var upper = options.network.toUpperCase();
if (upper === 'RBTC') {
options.network = 'rBTC';
this.network = regtest;
this.testnet = false;
return;
} else if (upper === 'TBTC') {
options.network = 'tBTC';
this.network = bitcoin.networks.testnet;
this.testnet = true;
return;
}
}

if (options.testnet) {
options.network = 'tBTC';
this.network = bitcoin.networks.testnet;
this.testnet = true;
} else {
options.network = 'BTC';
this.network = bitcoin.networks.bitcoin;
this.testnet = false;
}
};

var determineDataStorageV2_3 = function(options) {
return q.when(options)
.then(function(options) {
Expand Down Expand Up @@ -272,7 +307,7 @@ APIClient.prototype.mnemonicToPrivateKey = function(mnemonic, passphrase, cb) {
var deferred = q.defer();
deferred.promise.spreadNodeify(cb);

var network = self.testnet ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
var network = self.network;

deferred.resolve(q.fcall(function() {
return self.mnemonicToSeedHex(mnemonic, passphrase).then(function(seedHex) {
Expand Down Expand Up @@ -308,7 +343,7 @@ APIClient.prototype.resolvePrimaryPrivateKeyFromOptions = function(options, cb)
var deferred = q.defer();
deferred.promise.nodeify(cb);

var network = self.testnet ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
var network = self.network;

try {
// avoid conflicting options
Expand Down Expand Up @@ -369,7 +404,7 @@ APIClient.prototype.resolveBackupPublicKeyFromOptions = function(options, cb) {
var deferred = q.defer();
deferred.promise.nodeify(cb);

var network = self.testnet ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
var network = self.network;

try {
// avoid conflicting options
Expand Down Expand Up @@ -869,7 +904,7 @@ APIClient.prototype.initWallet = function(options, cb) {
var deferred = q.defer();
deferred.promise.spreadNodeify(cb);

var network = self.testnet ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
var network = self.network;

var identifier = options.identifier;

Expand Down Expand Up @@ -904,7 +939,7 @@ APIClient.prototype.initWallet = function(options, cb) {
blocktrailPublicKeys,
keyIndex,
result.chain || 0,
self.testnet,
self.network,
result.checksum,
result.upgrade_key_index,
options.bypassNewAddressCheck
Expand Down Expand Up @@ -1087,7 +1122,7 @@ APIClient.prototype._createNewWalletV1 = function(options) {
blocktrailPublicKeys,
keyIndex,
result.chain || 0,
self.testnet,
self.network,
checksum,
result.upgrade_key_index,
options.bypassNewAddressCheck
Expand Down Expand Up @@ -1136,7 +1171,7 @@ APIClient.prototype._createNewWalletV2 = function(options) {
// avoid modifying passed options
options = _.merge({}, options);

var network = self.testnet ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
var network = self.network;

determineDataStorageV2_3(options)
.then(function(options) {
Expand Down Expand Up @@ -1196,7 +1231,7 @@ APIClient.prototype._createNewWalletV2 = function(options) {
blocktrailPublicKeys,
keyIndex,
result.chain || 0,
self.testnet,
self.network,
checksum,
result.upgrade_key_index,
options.bypassNewAddressCheck
Expand Down Expand Up @@ -1244,7 +1279,7 @@ APIClient.prototype._createNewWalletV3 = function(options) {
// avoid modifying passed options
options = _.merge({}, options);

var network = self.testnet ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
var network = self.network;

determineDataStorageV2_3(options)
.then(function(options) {
Expand Down Expand Up @@ -1306,7 +1341,7 @@ APIClient.prototype._createNewWalletV3 = function(options) {
blocktrailPublicKeys,
keyIndex,
result.chain || 0,
self.testnet,
self.network,
checksum,
result.upgrade_key_index,
options.bypassNewAddressCheck
Expand Down
2 changes: 1 addition & 1 deletion lib/backup_generator-browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ BackupGenerator.prototype.generatePDF = function(callback) {
function(callback) {
if (self.options.page1) {
pdf.FONT_SIZE_HEADER(function() {
pdf.TEXT(self.network + "Wallet Recovery Data Sheet");
pdf.TEXT(self.network + " Wallet Recovery Data Sheet");
});

pdf.TEXT(
Expand Down
3 changes: 3 additions & 0 deletions lib/services/blocktrail_bitcoin_service.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ BlocktrailBitcoinService.prototype.normaliseNetwork = function(network, testnet
case 'tbtc':
case 'bitcoin-testnet':
return {network: "BTC", testnet: true};
case 'rbtc':
case 'bitcoin-regtest':
return {network: "rBTC", testnet: false};
default:
throw new Error("Unknown network " + network);
}
Expand Down
11 changes: 3 additions & 8 deletions lib/wallet.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ var SignMode = {
* @param blocktrailPublicKeys array list of blocktrail pubKeys indexed by keyIndex
* @param keyIndex int key index to use
* @param chain int chain to use
* @param testnet bool testnet
* @param network object network
* @param checksum string
* @param upgradeToKeyIndex int
* @param bypassNewAddressCheck bool flag to indicate if wallet should/shouldn't derive new address locally to verify api
Expand All @@ -47,7 +47,7 @@ var Wallet = function(
blocktrailPublicKeys,
keyIndex,
chain,
testnet,
network,
checksum,
upgradeToKeyIndex,
bypassNewAddressCheck
Expand All @@ -62,12 +62,7 @@ var Wallet = function(
self.bypassNewAddressCheck = !!bypassNewAddressCheck;
self.bitcoinCash = self.sdk.bitcoinCash;

self.testnet = testnet;
if (self.testnet) {
self.network = bitcoin.networks.testnet;
} else {
self.network = bitcoin.networks.bitcoin;
}
self.network = network;

assert(backupPublicKey instanceof bitcoin.HDNode);
assert(_.every(primaryPublicKeys, function(primaryPublicKey) { return primaryPublicKey instanceof bitcoin.HDNode; }));
Expand Down
4 changes: 2 additions & 2 deletions test/wallet.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ var TRANSACTION_TEST_WALLET_PRIMARY_MNEMONIC = "give pause forget seed dance cra

var _createTestWallet = function(identifier, passphrase, primaryMnemonic, backupMnemonic, cb) {
var keyIndex = 9999;
var network = client.testnet ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
var network = client.network;

var primarySeed = bip39.mnemonicToSeed(primaryMnemonic, passphrase);
var primaryPrivateKey = bitcoin.HDNode.fromSeedBuffer(primarySeed, network);
Expand Down Expand Up @@ -63,7 +63,7 @@ var _createTestWallet = function(identifier, passphrase, primaryMnemonic, backup
blocktrailPublicKeys,
keyIndex,
0,
client.testnet,
client.network,
checksum
);

Expand Down