Compare commits

...

5 Commits

Author SHA1 Message Date
MoneroOcean 9bc777cf7d Fixed RTM tx parsing 2022-03-11 00:52:39 +00:00
MoneroOcean 66fd45fd11 Fixed RTM tx parsing 2022-03-11 00:47:57 +00:00
MoneroOcean 6c09ba09fd Fixed RTM tx parsing 2022-03-11 00:47:54 +00:00
MoneroOcean 90aac49c77 Fixed RTM tx parsing' 2022-03-11 00:23:54 +00:00
MoneroOcean e6ebe4d355 Skip unsupported RTM tx 2022-03-08 23:41:36 +00:00
2 changed files with 25 additions and 6 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "cryptoforknote-util",
"version": "11.1.0",
"version": "11.2.3",
"main": "cryptoforknote-util",
"author": {
"name": "LucasJones",
+24 -5
View File
@@ -1,5 +1,6 @@
const bignum = require('bignum');
const base58 = require('base58-native');
const bignum = require('bignum');
const base58 = require('base58-native');
const bitcoin = require('bitcoinjs-lib');
const diff1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
@@ -253,15 +254,33 @@ module.exports.RtmBlockTemplate = function(rpcData, poolAddress) {
const curtime = packUInt32LE(rpcData.curtime).toString('hex');
let bits = Buffer.from(rpcData.bits, 'hex');
bits.writeUInt32LE(bits.readUInt32BE());
const txn = varIntBuffer(rpcData.transactions.length + 1);
let txs = [];
// skip version 1 transaction because they contain some OP_RETURN(0x6A) opcode in the beginning of
// tx input scripts instead of size of script part so not sure how to parse them
// just drop them for now
// example: https://explorer.raptoreum.com/tx/1461d70fa8362b0896e2e9be6312521f2684f22c9b0f9152695f33f67d9f9d3f
rpcData.transactions.forEach(function(tx) {
if (tx.version != 1) {
try {
bitcoin.Transaction.fromBuffer(Buffer.from(tx.data, 'hex'), false, false);
} catch(err) {
console.error("Skip RTM tx due to parse error: " + tx.data);
return; // skip transaction if it is not parsed OK (varint coding seems to be different for RTM)
}
txs.push(tx);
} else {
console.error("Skip RTM v1 tx: " + tx.data);
}
});
const txn = varIntBuffer(txs.length + 1);
return {
difficulty: parseFloat((diff1 / bignum(rpcData.target, 16).toNumber()).toFixed(9)),
height: rpcData.height,
prev_hash: prev_hash,
blocktemplate_blob: version + prev_hash + Buffer.alloc(32, 0).toString('hex') + curtime + bits.toString('hex') + Buffer.alloc(4, 0).toString('hex') +
txn.toString('hex') + blob1.toString('hex') + Buffer.alloc(extraNoncePlaceholderLength, 0xCC).toString('hex') + blob2.toString('hex') +
Buffer.concat(rpcData.transactions.map(function(tx) { return Buffer.from(tx.data, 'hex'); })).toString('hex'),
txn.toString('hex') + blob1.toString('hex') + Buffer.alloc(extraNoncePlaceholderLength, 0xCC).toString('hex') + blob2.toString('hex') +
Buffer.concat(txs.map(function(tx) { return Buffer.from(tx.data, 'hex'); })).toString('hex'),
reserved_offset: 80 + txn.length + blob1.length
}
}