diff --git a/lib/transactions.js b/lib/transactions.js index dd952aed..04ac236d 100644 --- a/lib/transactions.js +++ b/lib/transactions.js @@ -131,31 +131,62 @@ var generateOutputTransactions = function(poolRecipient, recipients, rpcData){ var txOutputBuffers = []; + /* Dash 0.12.1/0.13 */ + if (rpcData.masternode) { + if (rpcData.masternode.payee) { + var payeeReward = 0; -/* Dash 12.1 */ -if (rpcData.masternode && rpcData.superblock) { - if (rpcData.masternode.payee) { - var payeeReward = 0; + payeeReward = rpcData.masternode.amount; + reward -= payeeReward; + rewardToPool -= payeeReward; - payeeReward = rpcData.masternode.amount; - reward -= payeeReward; - rewardToPool -= payeeReward; + var payeeScript = util.addressToScript(rpcData.masternode.payee); + txOutputBuffers.push(Buffer.concat([ + util.packInt64LE(payeeReward), + util.varIntBuffer(payeeScript.length), + payeeScript + ])); + } else if (rpcData.masternode.length > 0) { + for (var i = 0; i < rpcData.masternode.length; i++) { + var payeeReward = 0; + + payeeReward = rpcData.masternode[i].amount; + reward -= payeeReward; + rewardToPool -= payeeReward; + + var payeeScript; + + if (rpcData.masternode[i].script) { + payeeScript = new Buffer(rpcData.masternode[i].script, 'hex'); + } else { + payeeScript = util.addressToScript(rpcData.masternode[i].payee); + } + + txOutputBuffers.push(Buffer.concat([ + util.packInt64LE(payeeReward), + util.varIntBuffer(payeeScript.length), + payeeScript + ])); + } + } + } - var payeeScript = util.addressToScript(rpcData.masternode.payee); - txOutputBuffers.push(Buffer.concat([ - util.packInt64LE(payeeReward), - util.varIntBuffer(payeeScript.length), - payeeScript - ])); - } else if (rpcData.superblock.length > 0) { - for(var i in rpcData.superblock){ + if (rpcData.superblock && rpcData.superblock.length > 0) { + for (var i = 0; i < rpcData.superblock.length; i++) { var payeeReward = 0; payeeReward = rpcData.superblock[i].amount; reward -= payeeReward; rewardToPool -= payeeReward; - var payeeScript = util.addressToScript(rpcData.superblock[i].payee); + var payeeScript; + + if (rpcData.superblock[i].script) { + payeeScript = new Buffer(rpcData.superblock[i].script, 'hex'); + } else { + payeeScript = util.addressToScript(rpcData.superblock[i].payee); + } + txOutputBuffers.push(Buffer.concat([ util.packInt64LE(payeeReward), util.varIntBuffer(payeeScript.length), @@ -163,16 +194,16 @@ if (rpcData.masternode && rpcData.superblock) { ])); } } -} + /* End Dash 0.12.1/0.13 */ -if (rpcData.payee) { - var payeeReward = 0; + if (rpcData.payee) { + var payeeReward = 0; - if (rpcData.payee_amount) { - payeeReward = rpcData.payee_amount; - } else { - payeeReward = Math.ceil(reward / 5); - } + if (rpcData.payee_amount) { + payeeReward = rpcData.payee_amount; + } else { + payeeReward = Math.ceil(reward / 5); + } reward -= payeeReward; rewardToPool -= payeeReward; @@ -227,8 +258,18 @@ exports.CreateGeneration = function(rpcData, publicKey, extraNoncePlaceholder, r var txInputsCount = 1; var txOutputsCount = 1; var txVersion = txMessages === true ? 2 : 1; + var txType = 0; + var txExtraPayload; var txLockTime = 0; + if (rpcData.coinbase_payload && rpcData.coinbase_payload.length > 0) { + txVersion = 3; + txType = 5; + txExtraPayload = new Buffer(rpcData.coinbase_payload, 'hex'); + } + + txVersion = txVersion + (txType << 16); + var txInPrevOutHash = ""; var txInPrevOutIndex = Math.pow(2, 32) - 1; var txInSequence = 0; @@ -287,6 +328,14 @@ exports.CreateGeneration = function(rpcData, publicKey, extraNoncePlaceholder, r txComment ]); + if (txExtraPayload !== undefined) { + var p2 = Buffer.concat([ + p2, + util.varIntBuffer(txExtraPayload.length), + txExtraPayload + ]); + } + return [p1, p2]; };