115 lines
3.0 KiB
JavaScript
115 lines
3.0 KiB
JavaScript
'use strict';
|
||
|
||
const util = require('../lib/utils/util');
|
||
const consensus = require('../lib/protocol/consensus');
|
||
const encoding = require('../lib/utils/encoding');
|
||
const TX = require('../lib/primitives/tx');
|
||
const Block = require('../lib/primitives/block');
|
||
const Script = require('../lib/script/script');
|
||
|
||
function createGenesisBlock(options) {
|
||
let flags = options.flags;
|
||
let key = options.key;
|
||
let reward = options.reward;
|
||
|
||
if (!flags) {
|
||
flags = Buffer.from(
|
||
'The Times 03/Jan/2009 Chancellor on brink of second bailout for banks',
|
||
'ascii');
|
||
}
|
||
|
||
if (!key) {
|
||
key = Buffer.from(''
|
||
+ '04678afdb0fe5548271967f1a67130b7105cd6a828e039'
|
||
+ '09a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c3'
|
||
+ '84df7ba0b8d578a4c702b6bf11d5f', 'hex');
|
||
}
|
||
|
||
if (!reward)
|
||
reward = 50 * consensus.COIN;
|
||
|
||
const tx = new TX({
|
||
version: 1,
|
||
inputs: [{
|
||
prevout: {
|
||
hash: encoding.NULL_HASH,
|
||
index: 0xffffffff
|
||
},
|
||
script: Script()
|
||
.pushInt(486604799)
|
||
.pushPush(Buffer.from([4]))
|
||
.pushData(flags)
|
||
.compile(),
|
||
sequence: 0xffffffff
|
||
}],
|
||
outputs: [{
|
||
value: reward,
|
||
script: Script.fromPubkey(key)
|
||
}],
|
||
locktime: 0
|
||
});
|
||
|
||
const block = new Block({
|
||
version: options.version,
|
||
prevBlock: encoding.NULL_HASH,
|
||
merkleRoot: tx.hash('hex'),
|
||
time: options.time,
|
||
bits: options.bits,
|
||
nonce: options.nonce,
|
||
height: 0
|
||
});
|
||
|
||
block.txs.push(tx);
|
||
|
||
return block;
|
||
}
|
||
|
||
const main = createGenesisBlock({
|
||
version: 1,
|
||
time: 1317972665,
|
||
bits: 504365040,
|
||
nonce: 2084524493,
|
||
flags: Buffer.from(
|
||
'NY Times 05/Oct/2011 Steve Jobs, Apple’s Visionary, Dies at 56',
|
||
'ascii'),
|
||
key: Buffer.from('040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9', 'hex')
|
||
});
|
||
|
||
const testnet = createGenesisBlock({
|
||
version: 1,
|
||
time: 1486949366,
|
||
bits: 0x1e0ffff0,
|
||
nonce: 293345,
|
||
flags: Buffer.from(
|
||
'NY Times 05/Oct/2011 Steve Jobs, Apple’s Visionary, Dies at 56',
|
||
'ascii'),
|
||
key: Buffer.from('040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9', 'hex')
|
||
});
|
||
|
||
const regtest = createGenesisBlock({
|
||
version: 1,
|
||
time: 1296688602,
|
||
bits: 0x207fffff,
|
||
nonce: 0,
|
||
flags: Buffer.from(
|
||
'NY Times 05/Oct/2011 Steve Jobs, Apple’s Visionary, Dies at 56',
|
||
'ascii'),
|
||
key: Buffer.from('040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9', 'hex')
|
||
});
|
||
|
||
util.log(main);
|
||
util.log('');
|
||
util.log(testnet);
|
||
util.log('');
|
||
util.log(regtest);
|
||
util.log('');
|
||
util.log('main hash: %s', main.rhash());
|
||
util.log('main raw: %s', main.toRaw().toString('hex'));
|
||
util.log('');
|
||
util.log('testnet hash: %s', testnet.rhash());
|
||
util.log('testnet raw: %s', testnet.toRaw().toString('hex'));
|
||
util.log('');
|
||
util.log('regtest hash: %s', regtest.rhash());
|
||
util.log('regtest raw: %s', regtest.toRaw().toString('hex'));
|
||
util.log('');
|