From 69436cfd1675df5f02cd3eb8fe1fe8ea45bc3697 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 17 Apr 2016 10:41:48 -0700 Subject: [PATCH] refactor network. --- lib/bcoin/chain.js | 13 +- lib/bcoin/hd.js | 22 +- lib/bcoin/protocol/network.js | 435 ++++++++++++++++++++-------------- lib/bcoin/walletdb.js | 2 +- 4 files changed, 279 insertions(+), 193 deletions(-) diff --git a/lib/bcoin/chain.js b/lib/bcoin/chain.js index 0b56c2bb..74fc2ffc 100644 --- a/lib/bcoin/chain.js +++ b/lib/bcoin/chain.js @@ -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); diff --git a/lib/bcoin/hd.js b/lib/bcoin/hd.js index 34748d38..f5fe5fb7 100644 --- a/lib/bcoin/hd.js +++ b/lib/bcoin/hd.js @@ -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; }; /** diff --git a/lib/bcoin/protocol/network.js b/lib/bcoin/protocol/network.js index fe32cc8c..676697ae 100644 --- a/lib/bcoin/protocol/network.js +++ b/lib/bcoin/protocol/network.js @@ -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); diff --git a/lib/bcoin/walletdb.js b/lib/bcoin/walletdb.js index 847e9cfc..946b4349 100644 --- a/lib/bcoin/walletdb.js +++ b/lib/bcoin/walletdb.js @@ -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);