@@ -19,13 +19,15 @@ var HASH_SIZE = constants.SHA256_HASH_SIZE;
19
19
* @property {number } version
20
20
* @property {number } height
21
21
* @property {string } merkleRootMNList
22
+ * @property {string } merkleRootQuorums
22
23
*/
23
24
24
25
/**
25
26
* @class CoinbasePayload
26
27
* @property {number } version
27
28
* @property {number } height
28
29
* @property {string } merkleRootMNList
30
+ * @property {string } merkleRootQuorums
29
31
*/
30
32
function CoinbasePayload ( ) {
31
33
AbstractPayload . call ( this ) ;
@@ -48,6 +50,9 @@ CoinbasePayload.fromBuffer = function (rawPayload) {
48
50
payload . version = payloadBufferReader . readUInt16LE ( ) ;
49
51
payload . height = payloadBufferReader . readUInt32LE ( ) ;
50
52
payload . merkleRootMNList = payloadBufferReader . read ( HASH_SIZE ) . reverse ( ) . toString ( 'hex' ) ;
53
+ if ( payload . version >= 2 ) {
54
+ payload . merkleRootQuorums = payloadBufferReader . read ( HASH_SIZE ) . reverse ( ) . toString ( 'hex' ) ;
55
+ }
51
56
52
57
if ( ! payloadBufferReader . finished ( ) ) {
53
58
throw new Error ( 'Failed to parse payload: raw payload is bigger than expected.' ) ;
@@ -67,6 +72,9 @@ CoinbasePayload.fromJSON = function fromJSON(payloadJson) {
67
72
payload . version = payloadJson . version ;
68
73
payload . height = payloadJson . height ;
69
74
payload . merkleRootMNList = payloadJson . merkleRootMNList ;
75
+ if ( payload . version >= 2 ) {
76
+ payload . merkleRootQuorums = payloadJson . merkleRootQuorums ;
77
+ }
70
78
71
79
payload . validate ( ) ;
72
80
return payload ;
@@ -83,6 +91,10 @@ CoinbasePayload.prototype.validate = function() {
83
91
Preconditions . checkArgument ( isUnsignedInteger ( this . height ) , 'Expect height to be an unsigned integer' ) ;
84
92
Preconditions . checkArgument ( isHexString ( this . merkleRootMNList ) , 'expect merkleRootMNList to be a hex string but got ' + typeof this . merkleRootMNList ) ;
85
93
Preconditions . checkArgument ( this . merkleRootMNList . length === constants . SHA256_HASH_SIZE * 2 , 'Invalid merkleRootMNList size' ) ;
94
+ if ( this . version >= 2 ) {
95
+ Preconditions . checkArgument ( isHexString ( this . merkleRootQuorums ) , 'expect merkleRootQuorums to be a hex string but got ' + typeof this . merkleRootQuorums ) ;
96
+ Preconditions . checkArgument ( this . merkleRootQuorums . length === constants . SHA256_HASH_SIZE * 2 , 'Invalid merkleRootQuorums size' ) ;
97
+ }
86
98
return true ;
87
99
} ;
88
100
@@ -92,11 +104,15 @@ CoinbasePayload.prototype.validate = function() {
92
104
*/
93
105
CoinbasePayload . prototype . toJSON = function toJSON ( ) {
94
106
this . validate ( ) ;
95
- return {
107
+ const json = {
96
108
version : this . version ,
97
109
height : this . height ,
98
- merkleRootMNList : this . merkleRootMNList
110
+ merkleRootMNList : this . merkleRootMNList ,
99
111
} ;
112
+ if ( this . version >= 2 ) {
113
+ json . merkleRootQuorums = this . merkleRootQuorums
114
+ }
115
+ return json ;
100
116
} ;
101
117
102
118
/**
@@ -112,6 +128,10 @@ CoinbasePayload.prototype.toBuffer = function toBuffer() {
112
128
. writeUInt32LE ( this . height )
113
129
. write ( Buffer . from ( this . merkleRootMNList , 'hex' ) . reverse ( ) ) ;
114
130
131
+ if ( this . version >= 2 ) {
132
+ payloadBufferWriter . write ( Buffer . from ( this . merkleRootQuorums , 'hex' ) . reverse ( ) ) ;
133
+ }
134
+
115
135
return payloadBufferWriter . toBuffer ( ) ;
116
136
} ;
117
137
0 commit comments