866 lines
14 KiB
JavaScript
866 lines
14 KiB
JavaScript
/*!
|
|
* constants.js - bitcoin constants for bcoin
|
|
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
|
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
|
* https://github.com/bcoin-org/bcoin
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* @module constants
|
|
*/
|
|
|
|
var utils = require('../utils/utils');
|
|
|
|
/**
|
|
* Minimum protocol version we're willing to talk to.
|
|
* @const {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.MIN_VERSION = 70001;
|
|
|
|
/**
|
|
* BCoin's protocol version.
|
|
* @const {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.VERSION = 70014;
|
|
|
|
/**
|
|
* Max message size (~4mb with segwit, formerly 2mb)
|
|
* @const {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.MAX_MESSAGE = 4 * 1000 * 1000;
|
|
|
|
/**
|
|
* Service bits.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.services = {
|
|
/**
|
|
* Whether network services are enabled.
|
|
*/
|
|
|
|
NETWORK: (1 << 0),
|
|
|
|
/**
|
|
* Whether the peer supports the getutxos packet.
|
|
*/
|
|
|
|
GETUTXO: (1 << 1),
|
|
|
|
/**
|
|
* Whether the peer supports BIP37.
|
|
*/
|
|
|
|
BLOOM: (1 << 2),
|
|
|
|
/**
|
|
* Whether the peer supports segregated witness.
|
|
*/
|
|
|
|
WITNESS: (1 << 3)
|
|
};
|
|
|
|
/**
|
|
* BCoin's services (we support everything).
|
|
* @const {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.LOCAL_SERVICES = 0
|
|
| exports.services.NETWORK
|
|
| exports.services.GETUTXO
|
|
| exports.services.BLOOM
|
|
| exports.services.WITNESS;
|
|
|
|
/**
|
|
* Inv types.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.inv = {
|
|
ERROR: 0,
|
|
TX: 1,
|
|
BLOCK: 2,
|
|
FILTERED_BLOCK: 3,
|
|
WITNESS_TX: 1 | (1 << 30),
|
|
WITNESS_BLOCK: 2 | (1 << 30),
|
|
WITNESS_FILTERED_BLOCK: 3 | (1 << 30),
|
|
CMPCT_BLOCK: 4
|
|
};
|
|
|
|
/**
|
|
* Inv types by value.
|
|
* @const {RevMap}
|
|
*/
|
|
|
|
exports.invByVal = utils.revMap(exports.inv);
|
|
|
|
/**
|
|
* Witness mask for inv types.
|
|
* @const {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.WITNESS_MASK = 1 << 30;
|
|
|
|
/**
|
|
* Bloom filter update flags.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.filterFlags = {
|
|
/**
|
|
* Never update the filter with outpoints.
|
|
*/
|
|
|
|
NONE: 0,
|
|
|
|
/**
|
|
* Always update the filter with outpoints.
|
|
*/
|
|
|
|
ALL: 1,
|
|
|
|
/**
|
|
* Only update the filter with outpoints if it is
|
|
* "asymmetric" in terms of addresses (pubkey/multisig).
|
|
*/
|
|
|
|
PUBKEY_ONLY: 2
|
|
};
|
|
|
|
/**
|
|
* Bloom filter limits.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.bloom = {
|
|
MAX_BLOOM_FILTER_SIZE: 36000,
|
|
MAX_HASH_FUNCS: 50
|
|
};
|
|
|
|
/**
|
|
* Bloom filter update flags by value.
|
|
* @const {RevMap}
|
|
*/
|
|
|
|
exports.filterFlagsByVal = utils.revMap(exports.filterFlags);
|
|
|
|
/**
|
|
* Script opcodes.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.opcodes = {
|
|
OP_FALSE: 0x00,
|
|
OP_0: 0x00,
|
|
|
|
OP_PUSHDATA1: 0x4c,
|
|
OP_PUSHDATA2: 0x4d,
|
|
OP_PUSHDATA4: 0x4e,
|
|
|
|
OP_1NEGATE: 0x4f,
|
|
|
|
OP_RESERVED: 0x50,
|
|
|
|
OP_TRUE: 0x51,
|
|
OP_1: 0x51,
|
|
OP_2: 0x52,
|
|
OP_3: 0x53,
|
|
OP_4: 0x54,
|
|
OP_5: 0x55,
|
|
OP_6: 0x56,
|
|
OP_7: 0x57,
|
|
OP_8: 0x58,
|
|
OP_9: 0x59,
|
|
OP_10: 0x5a,
|
|
OP_11: 0x5b,
|
|
OP_12: 0x5c,
|
|
OP_13: 0x5d,
|
|
OP_14: 0x5e,
|
|
OP_15: 0x5f,
|
|
OP_16: 0x60,
|
|
|
|
OP_NOP: 0x61,
|
|
OP_VER: 0x62,
|
|
OP_IF: 0x63,
|
|
OP_NOTIF: 0x64,
|
|
OP_VERIF: 0x65,
|
|
OP_VERNOTIF: 0x66,
|
|
OP_ELSE: 0x67,
|
|
OP_ENDIF: 0x68,
|
|
OP_VERIFY: 0x69,
|
|
OP_RETURN: 0x6a,
|
|
|
|
OP_TOALTSTACK: 0x6b,
|
|
OP_FROMALTSTACK: 0x6c,
|
|
OP_2DROP: 0x6d,
|
|
OP_2DUP: 0x6e,
|
|
OP_3DUP: 0x6f,
|
|
OP_2OVER: 0x70,
|
|
OP_2ROT: 0x71,
|
|
OP_2SWAP: 0x72,
|
|
OP_IFDUP: 0x73,
|
|
OP_DEPTH: 0x74,
|
|
OP_DROP: 0x75,
|
|
OP_DUP: 0x76,
|
|
OP_NIP: 0x77,
|
|
OP_OVER: 0x78,
|
|
OP_PICK: 0x79,
|
|
OP_ROLL: 0x7a,
|
|
OP_ROT: 0x7b,
|
|
OP_SWAP: 0x7c,
|
|
OP_TUCK: 0x7d,
|
|
|
|
OP_CAT: 0x7e,
|
|
OP_SUBSTR: 0x7f,
|
|
OP_LEFT: 0x80,
|
|
OP_RIGHT: 0x81,
|
|
OP_SIZE: 0x82,
|
|
|
|
OP_INVERT: 0x83,
|
|
OP_AND: 0x84,
|
|
OP_OR: 0x85,
|
|
OP_XOR: 0x86,
|
|
OP_EQUAL: 0x87,
|
|
OP_EQUALVERIFY: 0x88,
|
|
|
|
OP_RESERVED1: 0x89,
|
|
OP_RESERVED2: 0x8a,
|
|
|
|
OP_1ADD: 0x8b,
|
|
OP_1SUB: 0x8c,
|
|
OP_2MUL: 0x8d,
|
|
OP_2DIV: 0x8e,
|
|
OP_NEGATE: 0x8f,
|
|
OP_ABS: 0x90,
|
|
OP_NOT: 0x91,
|
|
OP_0NOTEQUAL: 0x92,
|
|
OP_ADD: 0x93,
|
|
OP_SUB: 0x94,
|
|
OP_MUL: 0x95,
|
|
OP_DIV: 0x96,
|
|
OP_MOD: 0x97,
|
|
OP_LSHIFT: 0x98,
|
|
OP_RSHIFT: 0x99,
|
|
OP_BOOLAND: 0x9a,
|
|
OP_BOOLOR: 0x9b,
|
|
OP_NUMEQUAL: 0x9c,
|
|
OP_NUMEQUALVERIFY: 0x9d,
|
|
OP_NUMNOTEQUAL: 0x9e,
|
|
OP_LESSTHAN: 0x9f,
|
|
OP_GREATERTHAN: 0xa0,
|
|
OP_LESSTHANOREQUAL: 0xa1,
|
|
OP_GREATERTHANOREQUAL: 0xa2,
|
|
OP_MIN: 0xa3,
|
|
OP_MAX: 0xa4,
|
|
OP_WITHIN: 0xa5,
|
|
|
|
OP_RIPEMD160: 0xa6,
|
|
OP_SHA1: 0xa7,
|
|
OP_SHA256: 0xa8,
|
|
OP_HASH160: 0xa9,
|
|
OP_HASH256: 0xaa,
|
|
OP_CODESEPARATOR: 0xab,
|
|
OP_CHECKSIG: 0xac,
|
|
OP_CHECKSIGVERIFY: 0xad,
|
|
OP_CHECKMULTISIG: 0xae,
|
|
OP_CHECKMULTISIGVERIFY: 0xaf,
|
|
|
|
OP_EVAL: 0xb0,
|
|
OP_NOP1: 0xb0,
|
|
OP_NOP2: 0xb1,
|
|
OP_CHECKLOCKTIMEVERIFY: 0xb1,
|
|
OP_NOP3: 0xb2,
|
|
OP_CHECKSEQUENCEVERIFY: 0xb2,
|
|
OP_NOP4: 0xb3,
|
|
OP_NOP5: 0xb4,
|
|
OP_NOP6: 0xb5,
|
|
OP_NOP7: 0xb6,
|
|
OP_NOP8: 0xb7,
|
|
OP_NOP9: 0xb8,
|
|
OP_NOP10: 0xb9,
|
|
|
|
OP_PUBKEYHASH: 0xfd,
|
|
OP_PUBKEY: 0xfe,
|
|
OP_INVALIDOPCODE: 0xff
|
|
};
|
|
|
|
/**
|
|
* Opcodes by value.
|
|
* @const {RevMap}
|
|
*/
|
|
|
|
exports.opcodesByVal = utils.revMap(exports.opcodes);
|
|
|
|
/**
|
|
* One bitcoin in satoshis.
|
|
* @const {Amount}
|
|
* @default
|
|
*/
|
|
|
|
exports.COIN = 100000000;
|
|
|
|
/**
|
|
* One bitcoin / 100.
|
|
* @const {Amount}
|
|
* @default
|
|
*/
|
|
|
|
exports.CENT = 1000000;
|
|
|
|
/**
|
|
* Maximum amount of money in satoshis (1btc * 21million)
|
|
* @const {Amount}
|
|
* @default
|
|
*/
|
|
|
|
exports.MAX_MONEY = 21000000 * exports.COIN;
|
|
|
|
/**
|
|
* Sighash Types.
|
|
* @enum {SighashType}
|
|
* @default
|
|
*/
|
|
|
|
exports.hashType = {
|
|
/**
|
|
* Sign all outputs.
|
|
*/
|
|
|
|
ALL: 1,
|
|
|
|
/**
|
|
* Do not sign outputs (zero sequences).
|
|
*/
|
|
|
|
NONE: 2,
|
|
|
|
/**
|
|
* Sign output at the same index (zero sequences).
|
|
*/
|
|
|
|
SINGLE: 3,
|
|
|
|
/**
|
|
* Sign only the current input (mask).
|
|
*/
|
|
|
|
ANYONECANPAY: 0x80
|
|
};
|
|
|
|
/**
|
|
* Sighash types by value.
|
|
* @const {RevMap}
|
|
*/
|
|
|
|
exports.hashTypeByVal = utils.revMap(exports.hashType);
|
|
|
|
/**
|
|
* Amount to multiply base/non-witness sizes by.
|
|
* @const {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.WITNESS_SCALE_FACTOR = 4;
|
|
|
|
/**
|
|
* Block-related constants.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.block = {
|
|
MAX_SIZE: 1000000,
|
|
MAX_COST: 4000000,
|
|
MAX_SIGOPS: 1000000 / 50,
|
|
MAX_SIGOPS_COST: 80000,
|
|
MEDIAN_TIMESPAN: 11,
|
|
BIP16_TIME: 1333238400,
|
|
SIGHASH_LIMIT: 1300000000
|
|
};
|
|
|
|
/**
|
|
* Map of historical blocks which create duplicate transactions hashes.
|
|
* @see https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki
|
|
* @const {Object}
|
|
* @default
|
|
*/
|
|
|
|
exports.bip30 = {
|
|
91842: 'eccae000e3c8e4e093936360431f3b7603c563c1ff6181390a4d0a0000000000',
|
|
91880: '21d77ccb4c08386a04ac0196ae10f6a1d2c2a377558ca190f143070000000000'
|
|
};
|
|
|
|
/**
|
|
* TX-related constants.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.tx = {
|
|
MAX_VERSION: 2,
|
|
MAX_SIZE: 100000,
|
|
MAX_COST: 400000,
|
|
MIN_FEE: 10000,
|
|
MAX_FEE: exports.COIN / 10,
|
|
MIN_RELAY: 10000,
|
|
BARE_MULTISIG: true,
|
|
FREE_THRESHOLD: exports.COIN * 144 / 250,
|
|
MAX_SIGOPS: exports.block.MAX_SIGOPS / 5,
|
|
MAX_SIGOPS_COST: exports.block.MAX_SIGOPS_COST / 5,
|
|
COINBASE_MATURITY: 100
|
|
};
|
|
|
|
exports.tx.DUST_THRESHOLD = 182 * exports.tx.MIN_RELAY / 1000 * 3;
|
|
|
|
/**
|
|
* Script-related constants.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.script = {
|
|
MAX_SIZE: 10000,
|
|
MAX_STACK: 1000,
|
|
MAX_PUSH: 520,
|
|
MAX_OPS: 201,
|
|
MAX_MULTISIG_PUBKEYS: 20,
|
|
MAX_SCRIPTHASH_SIGOPS: 15,
|
|
MAX_OP_RETURN_BYTES: 83,
|
|
MAX_OP_RETURN: 80
|
|
};
|
|
|
|
/**
|
|
* Mempool-related constants.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.mempool = {
|
|
/**
|
|
* Ancestor limit.
|
|
*/
|
|
|
|
ANCESTOR_LIMIT: 25,
|
|
|
|
/**
|
|
* Maximum mempool size in bytes.
|
|
*/
|
|
|
|
MAX_MEMPOOL_SIZE: 100 * 1000000,
|
|
|
|
/**
|
|
* The time at which transactions
|
|
* fall out of the mempool.
|
|
*/
|
|
|
|
MEMPOOL_EXPIRY: 72 * 60 * 60,
|
|
|
|
/**
|
|
* Maximum number of orphan transactions.
|
|
*/
|
|
|
|
MAX_ORPHAN_TX: 100,
|
|
|
|
/**
|
|
* Decay of minimum fee rate.
|
|
*/
|
|
|
|
FEE_HALFLIFE: 60 * 60 * 12
|
|
};
|
|
|
|
/**
|
|
* Reject codes. Note that `internal` and higher
|
|
* are not meant for use on the p2p network.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.reject = {
|
|
MALFORMED: 0x01,
|
|
INVALID: 0x10,
|
|
OBSOLETE: 0x11,
|
|
DUPLICATE: 0x12,
|
|
NONSTANDARD: 0x40,
|
|
DUST: 0x41,
|
|
INSUFFICIENTFEE: 0x42,
|
|
CHECKPOINT: 0x43,
|
|
// Internal codes (NOT FOR USE ON NETWORK)
|
|
INTERNAL: 0x100,
|
|
HIGHFEE: 0x100,
|
|
ALREADYKNOWN: 0x101,
|
|
CONFLICT: 0x102
|
|
};
|
|
|
|
/**
|
|
* Reject codes by value.
|
|
* @const {RevMap}
|
|
*/
|
|
|
|
exports.rejectByVal = utils.revMap(exports.reject);
|
|
|
|
/**
|
|
* HD-related constants.
|
|
* @const {Object}
|
|
* @default
|
|
*/
|
|
|
|
exports.hd = {
|
|
HARDENED: 0x80000000,
|
|
MAX_INDEX: 0x100000000,
|
|
MIN_ENTROPY: 128,
|
|
MAX_ENTROPY: 512
|
|
};
|
|
|
|
/**
|
|
* nLockTime threshold for differentiating
|
|
* between height and time.
|
|
* Tue Nov 5 00:53:20 1985 UTC
|
|
* @const {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.LOCKTIME_THRESHOLD = 500000000;
|
|
|
|
/**
|
|
* Sequence locktime-related constants.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.sequence = {
|
|
/**
|
|
* Highest nSequence bit (disables sequence locktimes).
|
|
*/
|
|
|
|
DISABLE_FLAG: (1 << 31) >>> 0,
|
|
|
|
/**
|
|
* Type (height or time).
|
|
*/
|
|
|
|
TYPE_FLAG: 1 << 22,
|
|
|
|
/**
|
|
* Sequence granularity.
|
|
*/
|
|
|
|
GRANULARITY: 9,
|
|
|
|
/**
|
|
* Mask.
|
|
*/
|
|
|
|
MASK: 0x0000ffff
|
|
};
|
|
|
|
/**
|
|
* A hash of all zeroes with a `1` at the
|
|
* end (used for the SIGHASH_SINGLE bug).
|
|
* @const {Buffer}
|
|
* @default
|
|
*/
|
|
|
|
exports.ONE_HASH = new Buffer(
|
|
'0100000000000000000000000000000000000000000000000000000000000000',
|
|
'hex'
|
|
);
|
|
|
|
/**
|
|
* A hash of all zeroes.
|
|
* @const {Buffer}
|
|
* @default
|
|
*/
|
|
|
|
exports.ZERO_HASH = new Buffer(
|
|
'0000000000000000000000000000000000000000000000000000000000000000',
|
|
'hex'
|
|
);
|
|
|
|
/**
|
|
* A hash of all 0xff.
|
|
* @const {Buffer}
|
|
* @default
|
|
*/
|
|
|
|
exports.MAX_HASH = new Buffer(
|
|
'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
|
|
'hex'
|
|
);
|
|
|
|
/**
|
|
* A hash of all zeroes.
|
|
* @const {String}
|
|
* @default
|
|
*/
|
|
|
|
exports.NULL_HASH =
|
|
'0000000000000000000000000000000000000000000000000000000000000000';
|
|
|
|
/**
|
|
* A hash of all 0xff.
|
|
* @const {String}
|
|
* @default
|
|
*/
|
|
|
|
exports.HIGH_HASH =
|
|
'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff';
|
|
|
|
/**
|
|
* A hash of all zeroes.
|
|
* @const {Buffer}
|
|
* @default
|
|
*/
|
|
|
|
exports.ZERO_HASH160 = new Buffer(
|
|
'0000000000000000000000000000000000000000',
|
|
'hex'
|
|
);
|
|
|
|
/**
|
|
* A hash of all zeroes.
|
|
* @const {String}
|
|
* @default
|
|
*/
|
|
|
|
exports.NULL_HASH160 = '0000000000000000000000000000000000000000';
|
|
|
|
/**
|
|
* A compressed pubkey of all zeroes.
|
|
* @const {Buffer}
|
|
* @default
|
|
*/
|
|
|
|
exports.ZERO_KEY = new Buffer(
|
|
'000000000000000000000000000000000000000000000000000000000000000000',
|
|
'hex'
|
|
);
|
|
|
|
/**
|
|
* BCoin version.
|
|
* @const {String}
|
|
* @default
|
|
*/
|
|
|
|
exports.USER_VERSION = require('../../package.json').version;
|
|
|
|
/**
|
|
* BCoin user agent: `/bcoin:{version}/`.
|
|
* @const {String}
|
|
* @default
|
|
*/
|
|
|
|
exports.USER_AGENT = '/bcoin:' + exports.USER_VERSION + '/';
|
|
|
|
/**
|
|
* Amount of time to ban misbheaving peers.
|
|
* @const {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.BAN_TIME = 24 * 60 * 60;
|
|
|
|
/**
|
|
* Ban score threshold before ban is placed in effect.
|
|
* @const {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.BAN_SCORE = 100;
|
|
|
|
/**
|
|
* Output script types.
|
|
* @enum {Number}
|
|
*/
|
|
|
|
exports.scriptTypes = {
|
|
NONSTANDARD: 0,
|
|
PUBKEY: 1,
|
|
PUBKEYHASH: 2,
|
|
SCRIPTHASH: 3,
|
|
MULTISIG: 4,
|
|
NULLDATA: 5,
|
|
WITNESSMALFORMED: 0x80 | 0,
|
|
WITNESSSCRIPTHASH: 0x80 | 1,
|
|
WITNESSPUBKEYHASH: 0x80 | 2,
|
|
WITNESSMASTHASH: 0x80 | 3
|
|
};
|
|
|
|
/**
|
|
* Output script types by value.
|
|
* @const {RevMap}
|
|
*/
|
|
|
|
exports.scriptTypesByVal = utils.revMap(exports.scriptTypes);
|
|
|
|
/**
|
|
* Script and locktime flags. See {@link VerifyFlags}.
|
|
* @enum {Number}
|
|
*/
|
|
|
|
exports.flags = {
|
|
VERIFY_NONE: 0,
|
|
VERIFY_P2SH: (1 << 0),
|
|
VERIFY_STRICTENC: (1 << 1),
|
|
VERIFY_DERSIG: (1 << 2),
|
|
VERIFY_LOW_S: (1 << 3),
|
|
VERIFY_NULLDUMMY: (1 << 4),
|
|
VERIFY_SIGPUSHONLY: (1 << 5),
|
|
VERIFY_MINIMALDATA: (1 << 6),
|
|
VERIFY_DISCOURAGE_UPGRADABLE_NOPS: (1 << 7),
|
|
VERIFY_CLEANSTACK: (1 << 8),
|
|
VERIFY_CHECKLOCKTIMEVERIFY: (1 << 9),
|
|
VERIFY_CHECKSEQUENCEVERIFY: (1 << 10),
|
|
VERIFY_WITNESS: (1 << 11),
|
|
VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM: (1 << 12),
|
|
VERIFY_MAST: (1 << 13),
|
|
VERIFY_SEQUENCE: (1 << 0),
|
|
MEDIAN_TIME_PAST: (1 << 1)
|
|
};
|
|
|
|
/**
|
|
* Consensus verify flags (used for block validation).
|
|
* @const {VerifyFlags}
|
|
* @default
|
|
*/
|
|
|
|
exports.flags.MANDATORY_VERIFY_FLAGS = exports.flags.VERIFY_P2SH;
|
|
|
|
/**
|
|
* Standard verify flags (used for mempool validation).
|
|
* @const {VerifyFlags}
|
|
* @default
|
|
*/
|
|
|
|
exports.flags.STANDARD_VERIFY_FLAGS = 0
|
|
| exports.flags.MANDATORY_VERIFY_FLAGS
|
|
| exports.flags.VERIFY_DERSIG
|
|
| exports.flags.VERIFY_STRICTENC
|
|
| exports.flags.VERIFY_MINIMALDATA
|
|
| exports.flags.VERIFY_NULLDUMMY
|
|
| exports.flags.VERIFY_DISCOURAGE_UPGRADABLE_NOPS
|
|
| exports.flags.VERIFY_CLEANSTACK
|
|
| exports.flags.VERIFY_CHECKLOCKTIMEVERIFY
|
|
| exports.flags.VERIFY_LOW_S
|
|
| exports.flags.VERIFY_CHECKSEQUENCEVERIFY
|
|
| exports.flags.VERIFY_WITNESS
|
|
| exports.flags.VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM;
|
|
|
|
/**
|
|
* Consensus locktime flags (used for block validation).
|
|
* @const {LockFlags}
|
|
* @default
|
|
*/
|
|
|
|
exports.flags.MANDATORY_LOCKTIME_FLAGS = 0;
|
|
|
|
/**
|
|
* Standard locktime flags (used for mempool validation).
|
|
* @const {LockFlags}
|
|
* @default
|
|
*/
|
|
|
|
exports.flags.STANDARD_LOCKTIME_FLAGS = 0
|
|
| exports.flags.VERIFY_SEQUENCE
|
|
| exports.flags.MEDIAN_TIME_PAST;
|
|
|
|
/**
|
|
* Versionbits constants.
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.versionbits = {
|
|
/**
|
|
* What block version to use for new blocks (pre versionbits)
|
|
*/
|
|
|
|
LAST_OLD_BLOCK_VERSION: 4,
|
|
|
|
/**
|
|
* What bits to set in version for versionbits blocks
|
|
*/
|
|
|
|
TOP_BITS: 0x20000000,
|
|
|
|
/**
|
|
* What bitmask determines whether versionbits is in use
|
|
*/
|
|
|
|
TOP_MASK: 0xe0000000
|
|
};
|
|
|
|
/**
|
|
* Threshold states for versionbits
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.thresholdStates = {
|
|
DEFINED: 0,
|
|
STARTED: 1,
|
|
LOCKED_IN: 2,
|
|
ACTIVE: 3,
|
|
FAILED: 4
|
|
};
|
|
|
|
/**
|
|
* Bitcoinj-style confidence calculation
|
|
* @enum {Number}
|
|
* @default
|
|
*/
|
|
|
|
exports.confidence = {
|
|
/**
|
|
* Transaction is in the main chain.
|
|
*/
|
|
|
|
BUILDING: 1,
|
|
|
|
/**
|
|
* Transaction is valid and in the mempool.
|
|
*/
|
|
|
|
PENDING: 2,
|
|
|
|
/**
|
|
* Transaction is on a side chain.
|
|
*/
|
|
|
|
DEAD: 4,
|
|
|
|
/**
|
|
* Transaction is double-spent.
|
|
*/
|
|
|
|
INCONFLICT: 5,
|
|
|
|
/**
|
|
* Transaction is not in the mempool or chain.
|
|
*/
|
|
|
|
UNKNOWN: 0
|
|
};
|
|
|
|
/**
|
|
* The name of our currency.
|
|
* @const {String}
|
|
* @default
|
|
*/
|
|
|
|
exports.CURRENCY_UNIT = 'BTC';
|