refactor network.
This commit is contained in:
parent
4960e48b48
commit
69436cfd16
@ -530,7 +530,7 @@ Chain.prototype._verify = function _verify(block, prev, callback) {
|
||||
|
||||
// Only allow version 5 blocks (segwit)
|
||||
// once the majority of blocks are using it.
|
||||
if (network.type === 'segnet3' && height >= network.segwitHeight) {
|
||||
if (network.segwitHeight !== -1 && height >= network.segwitHeight) {
|
||||
if (block.version < 5 && prev.isOutdated(5))
|
||||
return done(new VerifyError(block, 'obsolete', 'bad-version', 0));
|
||||
}
|
||||
@ -554,8 +554,8 @@ Chain.prototype._verify = function _verify(block, prev, callback) {
|
||||
if (block.version >= 4 && prev.isUpgraded(4))
|
||||
flags |= constants.flags.VERIFY_CHECKLOCKTIMEVERIFY;
|
||||
|
||||
// Segregrated witness is now usable
|
||||
if (network.type === 'segnet3' && height >= network.segwitHeight) {
|
||||
// Segregrated witness is now usable (bip141 - segnet3)
|
||||
if (network.segwitHeight !== -1 && height >= network.segwitHeight) {
|
||||
if (block.version >= 5) {
|
||||
if (prev.isUpgraded(5)) {
|
||||
flags |= constants.flags.VERIFY_WITNESS;
|
||||
@ -567,11 +567,8 @@ Chain.prototype._verify = function _verify(block, prev, callback) {
|
||||
}
|
||||
}
|
||||
|
||||
// Locktime median time past is now enforced.
|
||||
// if (block.version >= 8 && prev.isUpgraded(8))
|
||||
// lockFlags |= constants.flags.MEDIAN_TIME_PAST;
|
||||
|
||||
if (network.type === 'segnet4') {
|
||||
// Segregrated witness is now usable (bip141 - segnet4)
|
||||
if (network.deployments.witness) {
|
||||
self.getState(prev, 'witness', function(err, state) {
|
||||
if (err)
|
||||
return callback(err);
|
||||
|
||||
@ -477,10 +477,19 @@ HDPrivateKey.prototype.isAccount44 = function isAccount44() {
|
||||
*/
|
||||
|
||||
HDPrivateKey.isExtended = function isExtended(data) {
|
||||
var i, type, prefix;
|
||||
|
||||
if (typeof data !== 'string')
|
||||
return false;
|
||||
|
||||
return network.xprivkeys[data.slice(0, 4)];
|
||||
for (i = 0; i < network.types.length; i++) {
|
||||
type = network.types[i];
|
||||
prefix = network[type].prefixes.xprivkey58;
|
||||
if (data.indexOf(prefix) === 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1111,10 +1120,19 @@ HDPublicKey.fromJSON = HDPrivateKey.fromJSON;
|
||||
*/
|
||||
|
||||
HDPublicKey.isExtended = function isExtended(data) {
|
||||
var i, type, prefix;
|
||||
|
||||
if (typeof data !== 'string')
|
||||
return false;
|
||||
|
||||
return network.xpubkeys[data.slice(0, 4)];
|
||||
for (i = 0; i < network.types.length; i++) {
|
||||
type = network.types[i];
|
||||
prefix = network[type].prefixes.xpubkey58;
|
||||
if (data.indexOf(prefix) === 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -46,62 +46,6 @@ network.get = function get(type) {
|
||||
|
||||
main = network.main = {};
|
||||
|
||||
/**
|
||||
* Key prefixes.
|
||||
* @enum {Number}
|
||||
* @default
|
||||
*/
|
||||
|
||||
main.prefixes = {
|
||||
privkey: 128,
|
||||
xpubkey: 0x0488b21e,
|
||||
xprivkey: 0x0488ade4
|
||||
};
|
||||
|
||||
/**
|
||||
* {@link Base58Address} constants.
|
||||
* @const {Object}
|
||||
*/
|
||||
|
||||
main.address = {
|
||||
/**
|
||||
* {@link Base58Address} prefixes.
|
||||
* @enum {Number}
|
||||
* @default
|
||||
*/
|
||||
prefixes: {
|
||||
pubkeyhash: 0,
|
||||
scripthash: 5,
|
||||
witnesspubkeyhash: 6,
|
||||
witnessscripthash: 10
|
||||
},
|
||||
/**
|
||||
* {@link Base58Address} versions.
|
||||
* @enum {Number}
|
||||
* @default
|
||||
*/
|
||||
versions: {
|
||||
witnesspubkeyhash: 0,
|
||||
witnessscripthash: 0
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* {@link Base58Address} prefixes by value.
|
||||
* @type {RevMap}
|
||||
* @default
|
||||
*/
|
||||
|
||||
main.address.prefixesByVal = utils.revMap(main.address.prefixes);
|
||||
|
||||
/**
|
||||
* {@link Base58Address} versions by value.
|
||||
* @type {RevMap}
|
||||
* @default
|
||||
*/
|
||||
|
||||
main.address.versionsByVal = utils.revMap(main.address.versions);
|
||||
|
||||
/**
|
||||
* Symbolic network type.
|
||||
* @const {String}
|
||||
@ -110,6 +54,14 @@ main.address.versionsByVal = utils.revMap(main.address.versions);
|
||||
|
||||
main.type = 'main';
|
||||
|
||||
/**
|
||||
* Expose the network height (will be updated the Chain).
|
||||
* The only global variable currently in BCoin.
|
||||
* @const {Number}
|
||||
*/
|
||||
|
||||
main.height = -1;
|
||||
|
||||
/**
|
||||
* Default seeds.
|
||||
* @const {String[]}
|
||||
@ -125,6 +77,14 @@ main.seeds = [
|
||||
'seed.bitcoin.jonasschnelli.ch' // Jonas Schnelli
|
||||
];
|
||||
|
||||
/**
|
||||
* Packet magic number.
|
||||
* @const {Number}
|
||||
* @default
|
||||
*/
|
||||
|
||||
main.magic = 0xd9b4bef9;
|
||||
|
||||
/**
|
||||
* Default network port.
|
||||
* @const {Number}
|
||||
@ -203,12 +163,11 @@ main.genesis = {
|
||||
};
|
||||
|
||||
/**
|
||||
* Packet magic number.
|
||||
* @const {Number}
|
||||
* @default
|
||||
* The network's genesis block in a hex string.
|
||||
* @const {String}
|
||||
*/
|
||||
|
||||
main.magic = 0xd9b4bef9;
|
||||
main.genesisBlock = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000';
|
||||
|
||||
main.pow = {};
|
||||
|
||||
@ -273,6 +232,14 @@ main.block = {
|
||||
bip34height: 227931
|
||||
};
|
||||
|
||||
/**
|
||||
* Whether this is a segwit-enabled network.
|
||||
* @const {Boolean}
|
||||
* @default
|
||||
*/
|
||||
|
||||
main.witness = false;
|
||||
|
||||
/**
|
||||
* Height at which segwit is activated (segnet3).
|
||||
* @const {Number}
|
||||
@ -281,13 +248,6 @@ main.block = {
|
||||
|
||||
main.segwitHeight = 2000000000;
|
||||
|
||||
/**
|
||||
* The network's genesis block in a hex string.
|
||||
* @const {String}
|
||||
*/
|
||||
|
||||
main.genesisBlock = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000';
|
||||
|
||||
/**
|
||||
* For versionbits.
|
||||
* @const {Number}
|
||||
@ -324,12 +284,62 @@ main.deployments = {
|
||||
};
|
||||
|
||||
/**
|
||||
* Expose the network height (will be updated the Chain).
|
||||
* The only global variable currently in BCoin.
|
||||
* @const {Number}
|
||||
* Key prefixes.
|
||||
* @enum {Number}
|
||||
* @default
|
||||
*/
|
||||
|
||||
main.height = -1;
|
||||
main.prefixes = {
|
||||
privkey: 128,
|
||||
xpubkey: 0x0488b21e,
|
||||
xprivkey: 0x0488ade4,
|
||||
xprivkey58: 'xprv',
|
||||
xpubkey58: 'xpub'
|
||||
};
|
||||
|
||||
/**
|
||||
* {@link Base58Address} constants.
|
||||
* @const {Object}
|
||||
*/
|
||||
|
||||
main.address = {
|
||||
/**
|
||||
* {@link Base58Address} prefixes.
|
||||
* @enum {Number}
|
||||
* @default
|
||||
*/
|
||||
prefixes: {
|
||||
pubkeyhash: 0,
|
||||
scripthash: 5,
|
||||
witnesspubkeyhash: 6,
|
||||
witnessscripthash: 10
|
||||
},
|
||||
/**
|
||||
* {@link Base58Address} versions.
|
||||
* @enum {Number}
|
||||
* @default
|
||||
*/
|
||||
versions: {
|
||||
witnesspubkeyhash: 0,
|
||||
witnessscripthash: 0
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* {@link Base58Address} prefixes by value.
|
||||
* @type {RevMap}
|
||||
* @default
|
||||
*/
|
||||
|
||||
main.address.prefixesByVal = utils.revMap(main.address.prefixes);
|
||||
|
||||
/**
|
||||
* {@link Base58Address} versions by value.
|
||||
* @type {RevMap}
|
||||
* @default
|
||||
*/
|
||||
|
||||
main.address.versionsByVal = utils.revMap(main.address.versions);
|
||||
|
||||
/*
|
||||
* Testnet (v3)
|
||||
@ -340,27 +350,7 @@ testnet = network.testnet = {};
|
||||
|
||||
testnet.type = 'testnet';
|
||||
|
||||
testnet.prefixes = {
|
||||
privkey: 239,
|
||||
xpubkey: 0x043587cf,
|
||||
xprivkey: 0x04358394
|
||||
};
|
||||
|
||||
testnet.address = {
|
||||
prefixes: {
|
||||
pubkeyhash: 111,
|
||||
scripthash: 196,
|
||||
witnesspubkeyhash: 3,
|
||||
witnessscripthash: 40
|
||||
},
|
||||
versions: {
|
||||
witnesspubkeyhash: 0,
|
||||
witnessscripthash: 0
|
||||
}
|
||||
};
|
||||
|
||||
testnet.address.prefixesByVal = utils.revMap(testnet.address.prefixes);
|
||||
testnet.address.versionsByVal = utils.revMap(testnet.address.versions);
|
||||
testnet.height = -1;
|
||||
|
||||
testnet.seeds = [
|
||||
'testnet-seed.alexykot.me',
|
||||
@ -369,6 +359,8 @@ testnet.seeds = [
|
||||
'testnet-seed.bitcoin.schildbach.de'
|
||||
];
|
||||
|
||||
testnet.magic = 0x0709110b;
|
||||
|
||||
testnet.port = 18333;
|
||||
|
||||
testnet.alertKey = new Buffer(''
|
||||
@ -394,8 +386,6 @@ testnet.checkpoints.lastHeight = 546;
|
||||
|
||||
testnet.halvingInterval = 210000;
|
||||
|
||||
// http://blockexplorer.com/testnet/b/0
|
||||
// http://blockexplorer.com/testnet/rawblock/000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943
|
||||
testnet.genesis = {
|
||||
version: 1,
|
||||
hash: utils.revHex(
|
||||
@ -410,7 +400,7 @@ testnet.genesis = {
|
||||
nonce: 414098458
|
||||
};
|
||||
|
||||
testnet.magic = 0x0709110b;
|
||||
testnet.genesisBlock = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000';
|
||||
|
||||
testnet.pow = {};
|
||||
|
||||
@ -431,9 +421,9 @@ testnet.block = {
|
||||
bip34height: 21111
|
||||
};
|
||||
|
||||
testnet.segwitHeight = 2000000000;
|
||||
testnet.witness = false;
|
||||
|
||||
testnet.genesisBlock = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000';
|
||||
testnet.segwitHeight = 2000000000;
|
||||
|
||||
testnet.ruleChangeActivationThreshold = 1512; // 75% for testchains
|
||||
testnet.minerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing
|
||||
@ -445,23 +435,15 @@ testnet.deployments = {
|
||||
}
|
||||
};
|
||||
|
||||
testnet.height = -1;
|
||||
|
||||
/*
|
||||
* Regtest
|
||||
*/
|
||||
|
||||
regtest = network.regtest = {};
|
||||
|
||||
regtest.type = 'regtest';
|
||||
|
||||
regtest.prefixes = {
|
||||
testnet.prefixes = {
|
||||
privkey: 239,
|
||||
xpubkey: 0x043587cf,
|
||||
xprivkey: 0x04358394
|
||||
xprivkey: 0x04358394,
|
||||
xprivkey58: 'tprv',
|
||||
xpubkey58: 'tpub'
|
||||
};
|
||||
|
||||
regtest.address = {
|
||||
testnet.address = {
|
||||
prefixes: {
|
||||
pubkeyhash: 111,
|
||||
scripthash: 196,
|
||||
@ -474,17 +456,33 @@ regtest.address = {
|
||||
}
|
||||
};
|
||||
|
||||
regtest.address.prefixesByVal = utils.revMap(regtest.address.prefixes);
|
||||
regtest.address.versionsByVal = utils.revMap(regtest.address.versions);
|
||||
testnet.address.prefixesByVal = utils.revMap(testnet.address.prefixes);
|
||||
testnet.address.versionsByVal = utils.revMap(testnet.address.versions);
|
||||
|
||||
/*
|
||||
* Regtest
|
||||
*/
|
||||
|
||||
regtest = network.regtest = {};
|
||||
|
||||
regtest.type = 'regtest';
|
||||
|
||||
regtest.height = -1;
|
||||
|
||||
regtest.seeds = [
|
||||
'127.0.0.1'
|
||||
];
|
||||
|
||||
regtest.magic = 0xdab5bffa;
|
||||
|
||||
regtest.port = 18444;
|
||||
|
||||
// regtest._alertKey = bcoin.ec.generate();
|
||||
// regtest.alertKey = regtest._alertKey.getPublic(true, 'array');
|
||||
regtest.alertPrivateKey = new Buffer(
|
||||
'b866c595a088e2d9ea87ff4df173dd5990b1331fa9acff6aa82cc04162a63f91',
|
||||
'hex');
|
||||
|
||||
regtest.alertKey = new Buffer(
|
||||
'032b7c336bc802421f38063251a6230cc3cd3a9c4282d1673fbb037a4fd4f7408c', 'hex');
|
||||
|
||||
regtest.checkpoints = {};
|
||||
regtest.checkpoints.tsLastCheckpoint = 0;
|
||||
@ -508,7 +506,7 @@ regtest.genesis = {
|
||||
nonce: 2
|
||||
};
|
||||
|
||||
regtest.magic = 0xdab5bffa;
|
||||
regtest.genesisBlock = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff7f20020000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000';
|
||||
|
||||
regtest.pow = {};
|
||||
|
||||
@ -529,9 +527,9 @@ regtest.block = {
|
||||
bip34height: -1
|
||||
};
|
||||
|
||||
regtest.segwitHeight = 0;
|
||||
regtest.witness = false;
|
||||
|
||||
regtest.genesisBlock = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff7f20020000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000';
|
||||
regtest.segwitHeight = -1;
|
||||
|
||||
regtest.ruleChangeActivationThreshold = 108; // 75% for testchains
|
||||
regtest.minerConfirmationWindow = 144; // Faster than normal for regtest (144 instead of 2016)
|
||||
@ -543,26 +541,18 @@ regtest.deployments = {
|
||||
}
|
||||
};
|
||||
|
||||
regtest.height = -1;
|
||||
|
||||
/*
|
||||
* segnet3
|
||||
*/
|
||||
|
||||
segnet3 = network.segnet3 = {};
|
||||
|
||||
segnet3.type = 'segnet3';
|
||||
|
||||
segnet3.prefixes = {
|
||||
privkey: 158,
|
||||
xpubkey: 0x053587cf,
|
||||
xprivkey: 0x05358394
|
||||
regtest.prefixes = {
|
||||
privkey: 239,
|
||||
xpubkey: 0x043587cf,
|
||||
xprivkey: 0x04358394,
|
||||
xprivkey58: 'tprv',
|
||||
xpubkey58: 'tpub'
|
||||
};
|
||||
|
||||
segnet3.address = {
|
||||
regtest.address = {
|
||||
prefixes: {
|
||||
pubkeyhash: 30,
|
||||
scripthash: 50,
|
||||
pubkeyhash: 111,
|
||||
scripthash: 196,
|
||||
witnesspubkeyhash: 3,
|
||||
witnessscripthash: 40
|
||||
},
|
||||
@ -572,8 +562,18 @@ segnet3.address = {
|
||||
}
|
||||
};
|
||||
|
||||
segnet3.address.prefixesByVal = utils.revMap(segnet3.address.prefixes);
|
||||
segnet3.address.versionsByVal = utils.revMap(segnet3.address.versions);
|
||||
regtest.address.prefixesByVal = utils.revMap(regtest.address.prefixes);
|
||||
regtest.address.versionsByVal = utils.revMap(regtest.address.versions);
|
||||
|
||||
/*
|
||||
* segnet3
|
||||
*/
|
||||
|
||||
segnet3 = network.segnet3 = {};
|
||||
|
||||
segnet3.type = 'segnet3';
|
||||
|
||||
segnet3.height = -1;
|
||||
|
||||
segnet3.seeds = [
|
||||
'104.243.38.34',
|
||||
@ -582,6 +582,8 @@ segnet3.seeds = [
|
||||
'46.101.235.82'
|
||||
];
|
||||
|
||||
segnet3.magic = 0xcaea962e;
|
||||
|
||||
segnet3.port = 28333;
|
||||
|
||||
segnet3.alertKey = new Buffer(''
|
||||
@ -619,7 +621,7 @@ segnet3.genesis = {
|
||||
nonce: 0
|
||||
};
|
||||
|
||||
segnet3.magic = 0xcaea962e;
|
||||
segnet3.genesisBlock = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a7d719856ffff001d000000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000';
|
||||
|
||||
segnet3.pow = {};
|
||||
|
||||
@ -640,51 +642,76 @@ segnet3.block = {
|
||||
bip34height: -1
|
||||
};
|
||||
|
||||
segnet3.segwitHeight = 0;
|
||||
segnet3.witness = true;
|
||||
|
||||
segnet3.genesisBlock = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a7d719856ffff001d000000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000';
|
||||
segnet3.segwitHeight = 0;
|
||||
|
||||
segnet3.ruleChangeActivationThreshold = 108;
|
||||
segnet3.minerConfirmationWindow = 144;
|
||||
segnet3.deployments = {};
|
||||
|
||||
segnet3.height = -1;
|
||||
segnet3.witness = true;
|
||||
segnet3.prefixes = {
|
||||
privkey: 158,
|
||||
xpubkey: 0x053587cf,
|
||||
xprivkey: 0x05358394,
|
||||
xprivkey58: '2791',
|
||||
xpubkey58: '2793'
|
||||
};
|
||||
|
||||
segnet3.address = {
|
||||
prefixes: {
|
||||
pubkeyhash: 30,
|
||||
scripthash: 50,
|
||||
witnesspubkeyhash: 3,
|
||||
witnessscripthash: 40
|
||||
},
|
||||
versions: {
|
||||
witnesspubkeyhash: 0,
|
||||
witnessscripthash: 0
|
||||
}
|
||||
};
|
||||
|
||||
segnet3.address.prefixesByVal = utils.revMap(segnet3.address.prefixes);
|
||||
segnet3.address.versionsByVal = utils.revMap(segnet3.address.versions);
|
||||
|
||||
/*
|
||||
* segnet4
|
||||
*/
|
||||
|
||||
segnet4 = network.segnet4 = {};
|
||||
|
||||
utils.merge(segnet4, segnet3);
|
||||
|
||||
segnet4.type = 'segnet4';
|
||||
|
||||
segnet4.height = -1;
|
||||
|
||||
segnet4.seeds = [
|
||||
'37.34.48.17'
|
||||
];
|
||||
|
||||
segnet4.port = 28901;
|
||||
segnet4.segwitHeight = -1;
|
||||
segnet4.magic = 0xc4a1abdc;
|
||||
|
||||
segnet4.pow = utils.merge({}, segnet3.pow);
|
||||
segnet4.port = 28901;
|
||||
|
||||
segnet4.pow.limit = new bn(
|
||||
// 512x lower min difficulty than mainnet
|
||||
'000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
|
||||
'hex'
|
||||
);
|
||||
segnet4.alertKey = new Buffer(''
|
||||
+ '04302390343f91cc401d56d68b123028bf52e5f'
|
||||
+ 'ca1939df127f63c6467cdf9c8e2c14b61104cf8'
|
||||
+ '17d0b780da337893ecc4aaff1309e536162dabb'
|
||||
+ 'db45200ca2b0a',
|
||||
'hex');
|
||||
|
||||
segnet4.deployments = utils.merge({}, main.deployments, {
|
||||
witness: {
|
||||
bit: 1,
|
||||
startTime: 0,
|
||||
timeout: 999999999999
|
||||
}
|
||||
// bip109: {
|
||||
// bit: 4,
|
||||
// startTime: 1453939200, // Jan 28th, 2016
|
||||
// timeout: 1514764800 // Jan 1st, 2018
|
||||
// }
|
||||
});
|
||||
segnet4.checkpoints = [];
|
||||
|
||||
segnet4.checkpoints = segnet4.checkpoints.reduce(function(out, block) {
|
||||
out[block.height] = utils.revHex(block.hash);
|
||||
return block;
|
||||
}, {});
|
||||
|
||||
segnet4.checkpoints.tsLastCheckpoint = 0;
|
||||
segnet4.checkpoints.txsLastCheckpoint = 0;
|
||||
segnet4.checkpoints.txsPerDay = 300;
|
||||
segnet4.checkpoints.lastHeight = 0;
|
||||
|
||||
segnet4.halvingInterval = 210000;
|
||||
|
||||
segnet4.genesis = {
|
||||
version: 1,
|
||||
@ -700,26 +727,70 @@ segnet4.genesis = {
|
||||
|
||||
segnet4.genesisBlock = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a7d719856ffff011e000000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000';
|
||||
|
||||
/*
|
||||
* Global
|
||||
*/
|
||||
segnet4.pow = {};
|
||||
|
||||
network.xprivkeys = {
|
||||
'76066276': 'main',
|
||||
'70615956': 'testnet',
|
||||
'87393172': 'segnet3',
|
||||
'xprv': 'main',
|
||||
'tprv': 'testnet',
|
||||
'2791': 'segnet3',
|
||||
'2791': 'segnet4'
|
||||
segnet4.pow.limit = new bn(
|
||||
// 512x lower min difficulty than mainnet
|
||||
'000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
|
||||
'hex'
|
||||
);
|
||||
segnet4.pow.targetTimespan = 14 * 24 * 60 * 60; // two weeks
|
||||
segnet4.pow.targetSpacing = 10 * 60;
|
||||
segnet4.pow.diffInterval = segnet4.pow.targetTimespan / segnet4.pow.targetSpacing | 0;
|
||||
segnet4.pow.allowMinDifficultyBlocks = true;
|
||||
segnet4.pow.noRetargeting = false;
|
||||
|
||||
segnet4.block = {
|
||||
majorityEnforceUpgrade: 7,
|
||||
majorityRejectOutdated: 9,
|
||||
majorityWindow: 10,
|
||||
bip34height: -1
|
||||
};
|
||||
|
||||
network.xpubkeys = {
|
||||
'76067358': 'main',
|
||||
'70617039': 'testnet',
|
||||
'87394255': 'segnet3',
|
||||
'xpub': 'main',
|
||||
'tpub': 'testnet',
|
||||
'2793': 'segnet3',
|
||||
'2793': 'segnet4'
|
||||
segnet4.witness = true;
|
||||
|
||||
segnet4.segwitHeight = -1;
|
||||
|
||||
segnet4.ruleChangeActivationThreshold = 108;
|
||||
segnet4.minerConfirmationWindow = 144;
|
||||
segnet4.deployments = {
|
||||
csv: {
|
||||
bit: 0,
|
||||
startTime: 1459468800, // April 1st, 2016
|
||||
timeout: 1491004800 // April 1st, 2017
|
||||
},
|
||||
witness: {
|
||||
bit: 1,
|
||||
startTime: 0,
|
||||
timeout: 999999999999
|
||||
}
|
||||
// bip109: {
|
||||
// bit: 4,
|
||||
// startTime: 1453939200, // Jan 28th, 2016
|
||||
// timeout: 1514764800 // Jan 1st, 2018
|
||||
// }
|
||||
};
|
||||
|
||||
segnet4.prefixes = {
|
||||
privkey: 158,
|
||||
xpubkey: 0x053587cf,
|
||||
xprivkey: 0x05358394,
|
||||
xprivkey58: '2791',
|
||||
xpubkey58: '2793'
|
||||
};
|
||||
|
||||
segnet4.address = {
|
||||
prefixes: {
|
||||
pubkeyhash: 30,
|
||||
scripthash: 50,
|
||||
witnesspubkeyhash: 3,
|
||||
witnessscripthash: 40
|
||||
},
|
||||
versions: {
|
||||
witnesspubkeyhash: 0,
|
||||
witnessscripthash: 0
|
||||
}
|
||||
};
|
||||
|
||||
segnet4.address.prefixesByVal = utils.revMap(segnet4.address.prefixes);
|
||||
segnet4.address.versionsByVal = utils.revMap(segnet4.address.versions);
|
||||
|
||||
@ -615,7 +615,7 @@ WalletDB.prototype.create = function create(id, options, callback) {
|
||||
if (json)
|
||||
return callback(new Error('`' + id + '` already exists.'), null, json);
|
||||
|
||||
if (network.type === 'segnet3' || network.type === 'segnet4')
|
||||
if (network.witness)
|
||||
options.witness = options.witness !== false;
|
||||
|
||||
options.provider = new Provider(self);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user