-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpegout-waiting-signature.js
More file actions
37 lines (28 loc) · 1.36 KB
/
pegout-waiting-signature.js
File metadata and controls
37 lines (28 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
const ethUtils = require('ethereumjs-util');
const RLP = ethUtils.rlp;
class PegoutWaitingSignature {
constructor(rskTxHash, btcRawTx) {
this.rskTxHash = rskTxHash;
this.btcRawTx = btcRawTx;
}
}
function validatePegoutWaitingSignatureBufferFields(rskTxHashBuffer, amountInSatoshisBuffer) {
return rskTxHashBuffer.length === 32 && amountInSatoshisBuffer !== undefined;
}
const parseRLPToPegoutWaitingSignatures = rlpData => {
const rlpRskTxsWaitingForSignatures = RLP.decode(rlpData);
const rskTxsWaitingForSignatures = [];
if (rlpRskTxsWaitingForSignatures.length % 2 !== 0) return rskTxsWaitingForSignatures;
for (let i = 0; i < rlpRskTxsWaitingForSignatures.length / 2; i++) {
const rskTxHashBuffer = rlpRskTxsWaitingForSignatures[i * 2];
const btcRawTxBuffer = rlpRskTxsWaitingForSignatures[i * 2 + 1];
if (!validatePegoutWaitingSignatureBufferFields(rskTxHashBuffer, btcRawTxBuffer)) {
return rskTxsWaitingForSignatures;
}
const rskTxHash = rskTxHashBuffer.toString('hex');
const btcTransactionSerialized = btcRawTxBuffer.toString('hex');
rskTxsWaitingForSignatures.push(new PegoutWaitingSignature(rskTxHash, btcTransactionSerialized));
}
return rskTxsWaitingForSignatures;
};
exports.parseRLPToPegoutWaitingSignatures = parseRLPToPegoutWaitingSignatures;