Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8e2572248d | |||
| 0fc0e0ac9f | |||
| e4d961cd99 | |||
| 18eedca1e9 | |||
| a697f0fa32 | |||
| bc501fcb4d | |||
| fb0443bb96 |
@@ -62,12 +62,14 @@ const diff1 = 0x00000000ff000000000000000000000000000000000000000000000000000000
|
||||
|
||||
module.exports.RavenBlockTemplate = function(rpcData, poolAddress) {
|
||||
const poolAddrHash = bitcoin.address.fromBase58Check(poolAddress).hash;
|
||||
|
||||
let txCoinbase = new bitcoin.Transaction();
|
||||
let bytesHeight;
|
||||
{ // input for coinbase tx
|
||||
let blockHeightSerial = rpcData.height.toString(16).length % 2 === 0 ?
|
||||
rpcData.height.toString(16) :
|
||||
rpcData.height.toString(16) :
|
||||
'0' + rpcData.height.toString(16);
|
||||
const bytesHeight = Math.ceil((rpcData.height << 1).toString(2).length / 8);
|
||||
bytesHeight = Math.ceil((rpcData.height << 1).toString(2).length / 8);
|
||||
const lengthDiff = blockHeightSerial.length/2 - bytesHeight;
|
||||
for (let i = 0; i < lengthDiff; i++) blockHeightSerial = blockHeightSerial + '00';
|
||||
const serializedBlockHeight = new Buffer.concat([
|
||||
@@ -80,7 +82,7 @@ module.exports.RavenBlockTemplate = function(rpcData, poolAddress) {
|
||||
// will be used for our reserved_offset extra_nonce
|
||||
new Buffer('0000000000000000000000000000000000000000000000000000000000000000', 'hex'),
|
||||
0xFFFFFFFF, 0xFFFFFFFF,
|
||||
new Buffer.concat([serializedBlockHeight, Buffer('6b6177706f77', 'hex')])
|
||||
new Buffer.concat([serializedBlockHeight, Buffer('CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'hex')]) // 17 bytes
|
||||
);
|
||||
|
||||
txCoinbase.addOutput(scriptCompile(poolAddrHash), Math.floor(rpcData.coinbasevalue));
|
||||
@@ -104,8 +106,8 @@ module.exports.RavenBlockTemplate = function(rpcData, poolAddress) {
|
||||
|
||||
let blob = new Buffer.concat([
|
||||
header, // 80 bytes
|
||||
new Buffer('EEEEEEEEEEEEEEEE', 'hex'), // 8 bytes
|
||||
new Buffer('EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'hex'), // 32 bytes
|
||||
new Buffer('AAAAAAAAAAAAAAAA', 'hex'), // 8 bytes
|
||||
new Buffer('BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'hex'), // 32 bytes
|
||||
varuint.encode(rpcData.transactions.length + 1, new Buffer(varuint.encodingLength(rpcData.transactions.length + 1)), 0)
|
||||
]);
|
||||
const offset1 = blob.length;
|
||||
@@ -135,7 +137,9 @@ module.exports.RavenBlockTemplate = function(rpcData, poolAddress) {
|
||||
|
||||
return {
|
||||
blocktemplate_blob: blob.toString('hex'),
|
||||
reserved_offset: offset1 + 4 /* txCoinbase.version */ + 1 /* txCoinbase.vinLen */,
|
||||
// reserved_offset to CCCCCC....
|
||||
reserved_offset: offset1 + 4 /* txCoinbase.version */ + 1 /* vinLen */ + 32 /* hash */ + 4 /* index */ +
|
||||
1 /* vScript len */ + 1 /* coinbase height len */ + bytesHeight + 1 /* trailing zero byte */,
|
||||
seed_hash: last_seed_hash.toString('hex'),
|
||||
difficulty: difficulty,
|
||||
height: rpcData.height,
|
||||
@@ -143,22 +147,28 @@ module.exports.RavenBlockTemplate = function(rpcData, poolAddress) {
|
||||
};
|
||||
};
|
||||
|
||||
module.exports.convertRavenBlob = function(blobBuffer) {
|
||||
let header = blobBuffer.slice(0, 80); // header
|
||||
function update_merkle_root_hash(blob_in, blob_out) {
|
||||
let offset = 80 + 8 + 32;
|
||||
const nTransactions = varuint.decode(blobBuffer, offset);
|
||||
const nTransactions = varuint.decode(blob_in, offset);
|
||||
offset += varuint.decode.bytes;
|
||||
let transactions = [];
|
||||
for (let i = 0; i < nTransactions; ++i) {
|
||||
const tx = bitcoin.Transaction.fromBuffer(blobBuffer.slice(offset), true);
|
||||
const tx = bitcoin.Transaction.fromBuffer(blob_in.slice(offset), true);
|
||||
transactions.push(tx);
|
||||
offset += tx.byteLength();
|
||||
}
|
||||
getMerkleRoot2(transactions).copy(header, 4 + 32);
|
||||
const rpcData = { transactions: transactions.slice(1) };
|
||||
reverseBuffer(getMerkleRoot(rpcData, transactions[0].getHash().toString('hex'))).copy(blob_out, 4 + 32);
|
||||
};
|
||||
|
||||
module.exports.convertRavenBlob = function(blobBuffer) {
|
||||
let header = blobBuffer.slice(0, 80);
|
||||
update_merkle_root_hash(blobBuffer, header);
|
||||
return reverseBuffer(crypto.createHash('sha256').update(header).digest());
|
||||
};
|
||||
|
||||
module.exports.constructNewRavenBlob = function(blockTemplate, nonceBuff, mixhashBuff) {
|
||||
update_merkle_root_hash(blockTemplate, blockTemplate);
|
||||
nonceBuff.copy (blockTemplate, 80, 0, 8);
|
||||
mixhashBuff.copy(blockTemplate, 88, 0, 32);
|
||||
return blockTemplate;
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cryptoforknote-util",
|
||||
"version": "9.0.1",
|
||||
"version": "9.0.7",
|
||||
"main": "cryptoforknote-util",
|
||||
"author": {
|
||||
"name": "LucasJones",
|
||||
@@ -18,7 +18,7 @@
|
||||
"sha3": "*",
|
||||
"varuint-bitcoin": "^1.0.4",
|
||||
"bitcoinjs-lib": "git+https://github.com/bitcoinjs/bitcoinjs-lib.git#533d6c2e6d0aa4111f7948b1c12003cf6ef83137",
|
||||
"merkle-bitcoin": "git+https://github.com/joshuayabut/merkle-bitcoin.git#ec00ae20ba60d444e150ead03c747695ddaa83a1"
|
||||
"merkle-bitcoin": "git+https://github.com/CloudMining/merkle-bitcoin.git#ec00ae20ba60d444e150ead03c747695ddaa83a1"
|
||||
},
|
||||
"keywords": [
|
||||
"cryptonight",
|
||||
|
||||
Reference in New Issue
Block a user