UNPKG

bbqpool-stratum

Version:

High performance Stratum poolserver in Node.js. Optimized to build with GCC 10 and O3 / bugfixes

348 lines (310 loc) 24.7 kB
/* * * Transactions (Updated) * */ const Merkle = require('../main/merkle'); const Transactions = require('../main/transactions'); const rpcData = { 'capabilities': [ 'proposal' ], 'version': 536870912, 'rules': [], 'vbavailable': {}, 'vbrequired': 0, 'previousblockhash': '9719aefb83ef6583bd4c808bbe7d49b629a60b375fc6e36bee039530bc7727e2', 'transactions': [], 'coinbaseaux': { 'flags': '' }, 'coinbasevalue': 5000000000, 'longpollid': '9719aefb83ef6583bd4c808bbe7d49b629a60b375fc6e36bee039530bc7727e22', 'target': '00000ffff0000000000000000000000000000000000000000000000000000000', 'mintime': 1614044921, 'mutable': [ 'time', 'transactions', 'prevblock' ], 'noncerange': '00000000ffffffff', 'sigoplimit': 20000, 'sizelimit': 1000000, 'curtime': 1614201893, 'bits': '1e0ffff0', 'height': 1, 'default_witness_commitment': '6a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf9' }; const poolConfig = { 'settings': { 'testnet': false, }, 'primary': { 'address': 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', 'coin': { 'version': 1, 'rewards': {}, 'algorithms': { 'mining': 'scrypt', 'block': 'sha256d', 'coinbase': 'sha256d', }, 'mainnet': { 'bech32': 'bc', 'bip32': { 'public': 0x0488b21e, 'private': 0x0488ade4, }, 'pubKeyHash': 0x00, 'scriptHash': 0x05, 'wif': 0x80, 'coin': 'btc', }, 'testnet': { 'bech32': 'tbc', 'bip32': { 'public': 0x0488b21e, 'private': 0x0488ade4, }, 'pubKeyHash': 0x00, 'scriptHash': 0x05, 'wif': 0x80, 'coin': 'btc', }, }, 'recipients': [], }, 'auxiliary': { 'enabled': false, 'coin': { 'header': 'fabe6d6d', } } }; const merkleData = [ null, Buffer.from('17a35a38e70cd01488e0d5ece6ded04a9bc8125865471d36b9d5c47a08a5907c', 'hex'), ]; const auxMerkle = new Merkle(merkleData); const extraNonce = Buffer.from('f000000ff111111f', 'hex'); const transactions = new Transactions(); //////////////////////////////////////////////////////////////////////////////// describe('Test transactions functionality', () => { let poolConfigCopy, rpcDataCopy; beforeEach(() => { poolConfigCopy = JSON.parse(JSON.stringify(poolConfig)); rpcDataCopy = JSON.parse(JSON.stringify(rpcData)); }); test('Test bitcoin transaction builder [1]', () => { const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000200f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [2]', () => { poolConfigCopy.primary.coin.version = 3; rpcDataCopy.coinbase_payload = 'example coinbase payload'; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000200f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90000000000', 'hex')); }); test('Test bitcoin transaction builder [3]', () => { rpcDataCopy.coinbasetxn = {}; rpcDataCopy.coinbasetxn.data = '0400008085202'; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('04000080010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000200f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [4]', () => { rpcDataCopy.masternode = {}; rpcDataCopy.masternode.payee = 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'; rpcDataCopy.masternode.amount = 194005101; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000393a9751e01000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [5]', () => { rpcDataCopy.masternode = []; rpcDataCopy.masternode.push({ payee: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', amount: 194005101 }); rpcDataCopy.masternode.push({ payee: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', amount: 194005102 }); const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('00000000042561e51201000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c426e48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [6]', () => { rpcDataCopy.masternode = []; rpcDataCopy.masternode.push({ script: '0014e8df018c7e326cc253faac7e46cdc51e68542c42', amount: 194005101 }); rpcDataCopy.masternode.push({ script: '0014e8df018c7e326cc253faac7e46cdc51e68542c42', amount: 194005102 }); const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('00000000042561e51201000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c426e48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [7]', () => { rpcDataCopy.masternode = []; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000200f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [8]', () => { rpcDataCopy.smartnode = {}; rpcDataCopy.smartnode.payee = 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'; rpcDataCopy.smartnode.amount = 194005101; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000393a9751e01000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [9]', () => { rpcDataCopy.smartnode = []; rpcDataCopy.smartnode.push({ payee: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', amount: 194005101 }); rpcDataCopy.smartnode.push({ payee: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', amount: 194005102 }); const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('00000000042561e51201000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c426e48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [10]', () => { rpcDataCopy.smartnode = []; rpcDataCopy.smartnode.push({ script: '0014e8df018c7e326cc253faac7e46cdc51e68542c42', amount: 194005101 }); rpcDataCopy.smartnode.push({ script: '0014e8df018c7e326cc253faac7e46cdc51e68542c42', amount: 194005102 }); const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('00000000042561e51201000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c426e48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [11]', () => { rpcDataCopy.smartnode = []; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000200f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [12]', () => { rpcDataCopy.superblock = []; rpcDataCopy.superblock.push({ payee: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', amount: 194005101 }); rpcDataCopy.superblock.push({ payee: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', amount: 194005102 }); const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('00000000042561e51201000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c426e48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [13]', () => { rpcDataCopy.superblock = []; rpcDataCopy.superblock.push({ script: '0014e8df018c7e326cc253faac7e46cdc51e68542c42', amount: 194005101 }); rpcDataCopy.superblock.push({ script: '0014e8df018c7e326cc253faac7e46cdc51e68542c42', amount: 194005102 }); const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('00000000042561e51201000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c426e48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [14]', () => { rpcDataCopy.payee = 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'; rpcDataCopy.payee_amount = 194005101; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000393a9751e01000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [15]', () => { poolConfigCopy.primary.coin.rewards = {}; poolConfigCopy.primary.coin.rewards.type = 'raptoreum'; rpcDataCopy.founder_payments_started = true; rpcDataCopy.founder = {}; rpcDataCopy.founder.payee = 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'; rpcDataCopy.founder.amount = 194005101; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000393a9751e01000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [16]', () => { poolConfigCopy.primary.coin.rewards = {}; poolConfigCopy.primary.coin.rewards.type = 'raptoreum'; rpcDataCopy.founder_payments_started = false; rpcDataCopy.founder = {}; rpcDataCopy.founder.payee = 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'; rpcDataCopy.founder.amount = 194005101; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000200f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [17]', () => { poolConfigCopy.primary.coin.rewards = {}; poolConfigCopy.primary.coin.rewards.type = 'hivecoin'; rpcDataCopy.CommunityAutonomousAddress = 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'; rpcDataCopy.CommunityAutonomousValue = 194005101; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000300f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [18]', () => { poolConfigCopy.primary.recipients.push({ address: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', percentage: 0.05 }); const transaction = transactions.default(poolConfigCopy, rpcData, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('0000000003803f1f1b01000000160014e8df018c7e326cc253faac7e46cdc51e68542c4280b2e60e00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [19]', () => { poolConfigCopy.primary.recipients.push({ address: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', percentage: 0.05 }); poolConfigCopy.primary.recipients.push({ address: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', percentage: 0.05 }); const transaction = transactions.default(poolConfigCopy, rpcData, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('0000000004008d380c01000000160014e8df018c7e326cc253faac7e46cdc51e68542c4280b2e60e00000000160014e8df018c7e326cc253faac7e46cdc51e68542c4280b2e60e00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [20]', () => { rpcDataCopy.coinbaseaux.flags = 'test'; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000200f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [21]', () => { rpcDataCopy.masternode = {}; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000200f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [22]', () => { rpcDataCopy.payee = 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000300286bee00000000160014e8df018c7e326cc253faac7e46cdc51e68542c4200ca9a3b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [23]', () => { delete rpcDataCopy.default_witness_commitment; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000100f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c4200000000', 'hex')); }); test('Test bitcoin transaction builder [24]', () => { poolConfigCopy.auxiliary.enabled = true; const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, auxMerkle); expect(transaction[0].slice(0, 44)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff3b5104', 'hex')); expect(transaction[0].slice(49, 53)).toStrictEqual(Buffer.from('fabe6d6d', 'hex')); expect(transaction[0].slice(53)).toStrictEqual(Buffer.from('7c90a5087ac4d5b9361d47655812c89b4ad0dee6ecd5e08814d00ce7385aa3170200000000000000', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000200f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [25]', () => { const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, auxMerkle); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000200f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [26]', () => { rpcDataCopy.znode_payments_started = true; rpcDataCopy.znode_payments_enforced = true; rpcDataCopy.znode = []; rpcDataCopy.znode.push({ payee: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', amount: 194005101 }); rpcDataCopy.znode.push({ payee: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', amount: 194005102 }); const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000400f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c426e48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [27]', () => { rpcDataCopy.znode_payments_started = true; rpcDataCopy.znode_payments_enforced = true; rpcDataCopy.znode = []; rpcDataCopy.znode.push({ script: '0014e8df018c7e326cc253faac7e46cdc51e68542c42', amount: 194005101 }); rpcDataCopy.znode.push({ script: '0014e8df018c7e326cc253faac7e46cdc51e68542c42', amount: 194005102 }); const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000400f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c426d48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c426e48900b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); test('Test bitcoin transaction builder [28]', () => { poolConfigCopy.primary.coin.rewards = {}; poolConfigCopy.primary.coin.rewards.type = 'firocoin'; poolConfigCopy.primary.coin.rewards.addresses = []; poolConfigCopy.primary.coin.rewards.addresses.push({ address: 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', amount: 187500000 }); const transaction = transactions.default(poolConfigCopy, rpcDataCopy, extraNonce, null); expect(transaction[0].slice(0, -5)).toStrictEqual(Buffer.from('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f5104', 'hex')); expect(transaction[1]).toStrictEqual(Buffer.from('000000000300f2052a01000000160014e8df018c7e326cc253faac7e46cdc51e68542c42e0052d0b00000000160014e8df018c7e326cc253faac7e46cdc51e68542c420000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000', 'hex')); }); });