@@ -6,28 +6,32 @@ var sinon = require('sinon');
6
6
7
7
var DashcoreLib = require ( '../../../index' ) ;
8
8
9
+ var BN = require ( '../../../lib/crypto/bn' ) ;
10
+
9
11
var CoinbasePayload = DashcoreLib . Transaction . Payload . CoinbasePayload ;
10
12
11
13
var merkleRootMNList =
12
14
'a1d4f77f5c85a9d56293878edda45ba6fb3e433e6b9bc278c0f4c5799748b975' ;
13
15
var merkleRootQuorums =
14
16
'9491099bb93b789d8628acce8f8a84c0f4af8196d3dd6c2427aca0ee702fcc90' ;
17
+ var bestCLHeight = 42 ;
18
+ var bestCLSignature = Buffer . alloc ( 96 , 1 ) ;
19
+ var assetLockedAmount = new BN ( 1000 ) ;
15
20
16
21
var validCoinbasePayloadJSON = {
17
- version : 2 ,
22
+ version : 3 ,
18
23
height : 80672 ,
19
24
merkleRootMNList : merkleRootMNList ,
20
25
merkleRootQuorums : merkleRootQuorums ,
26
+ bestCLHeight : bestCLHeight ,
27
+ bestCLSignature : bestCLSignature ,
28
+ assetLockedAmount : assetLockedAmount ,
21
29
} ;
22
30
// Contains same data as JSON above
23
31
// 0200 is 16-bit unsigned 2, 203b0100 is 32 bit unsigned 80672, everything else is a hash.
24
- var validCoinbasePayloadHexString =
25
- '0200203b010075b9489779c5f4c078c29b6b3e433efba65ba4dd8e879362d5a9855c7ff7d4a190cc2f70eea0ac27246cddd39681aff4c0848a8fceac28869d783bb99b099194' ;
26
- var validCoinbasePayloadBuffer = Buffer . from (
27
- validCoinbasePayloadHexString ,
28
- 'hex'
29
- ) ;
30
32
var validCoinbasePayload = CoinbasePayload . fromJSON ( validCoinbasePayloadJSON ) ;
33
+ var validCoinbasePayloadBuffer = validCoinbasePayload . toBuffer ( ) ;
34
+ var validCoinbasePayloadHexString = validCoinbasePayloadBuffer . toString ( 'hex' ) ;
31
35
32
36
describe ( 'CoinbasePayload' , function ( ) {
33
37
describe ( '.fromBuffer' , function ( ) {
@@ -43,10 +47,13 @@ describe('CoinbasePayload', function () {
43
47
var payload = CoinbasePayload . fromBuffer ( validCoinbasePayloadBuffer ) ;
44
48
45
49
expect ( payload ) . to . be . an . instanceOf ( CoinbasePayload ) ;
46
- expect ( payload . version ) . to . be . equal ( 2 ) ;
50
+ expect ( payload . version ) . to . be . equal ( 3 ) ;
47
51
expect ( payload . height ) . to . be . equal ( 80672 ) ;
48
52
expect ( payload . merkleRootMNList ) . to . be . equal ( merkleRootMNList ) ;
49
53
expect ( payload . merkleRootQuorums ) . to . be . equal ( merkleRootQuorums ) ;
54
+ expect ( payload . bestCLHeight ) . to . be . equal ( bestCLHeight ) ;
55
+ expect ( payload . bestCLSignature ) . to . be . deep . equal ( bestCLSignature ) ;
56
+ expect ( payload . assetLockedAmount ) . to . be . deep . equal ( assetLockedAmount ) ;
50
57
expect ( payload . validate . callCount ) . to . be . equal ( 1 ) ;
51
58
} ) ;
52
59
@@ -73,9 +80,12 @@ describe('CoinbasePayload', function () {
73
80
var payload = CoinbasePayload . fromJSON ( validCoinbasePayloadJSON ) ;
74
81
75
82
expect ( payload ) . to . be . an . instanceOf ( CoinbasePayload ) ;
76
- expect ( payload . version ) . to . be . equal ( 2 ) ;
83
+ expect ( payload . version ) . to . be . equal ( 3 ) ;
77
84
expect ( payload . height ) . to . be . equal ( 80672 ) ;
78
85
expect ( payload . merkleRootMNList ) . to . be . equal ( merkleRootMNList ) ;
86
+ expect ( payload . bestCLHeight ) . to . be . equal ( bestCLHeight ) ;
87
+ expect ( payload . bestCLSignature ) . to . be . deep . equal ( bestCLSignature ) ;
88
+ expect ( payload . assetLockedAmount ) . to . be . deep . equal ( assetLockedAmount ) ;
79
89
expect ( payload . validate . callCount ) . to . be . equal ( 1 ) ;
80
90
} ) ;
81
91
@@ -231,6 +241,42 @@ describe('CoinbasePayload', function () {
231
241
} ) . not . to . throw ;
232
242
}
233
243
} ) ;
244
+ it ( 'Should allow only unsigned integer as bestCLHeight' , function ( ) {
245
+ var payload = validCoinbasePayload . copy ( ) ;
246
+
247
+ payload . bestCLHeight = - 10 ;
248
+
249
+ expect ( function ( ) {
250
+ payload . validate ( ) ;
251
+ } ) . to . throw ( 'Invalid Argument: Expect bestCLHeight to be an unsigned integer' ) ;
252
+ } ) ;
253
+ it ( 'Should allow only 96 bytes as bestCLSignature' , function ( ) {
254
+ var payload = validCoinbasePayload . copy ( ) ;
255
+
256
+ payload . bestCLSignature = Buffer . alloc ( 95 , 1 ) ;
257
+
258
+ expect ( function ( ) {
259
+ payload . validate ( ) ;
260
+ } ) . to . throw ( 'Invalid Argument: Invalid bestCLSignature size' ) ;
261
+ } ) ;
262
+ it ( 'Should allow only BN as assetLockedAmount' , function ( ) {
263
+ var payload = validCoinbasePayload . copy ( ) ;
264
+
265
+ payload . assetLockedAmount = 10 ;
266
+
267
+ expect ( function ( ) {
268
+ payload . validate ( ) ;
269
+ } ) . to . throw ( 'Invalid Argument: Expect assetLockedAmount to be an instance of BN' ) ;
270
+ } ) ;
271
+ it ( 'Should allow only unsigned integer as assetLockedAmount' , function ( ) {
272
+ var payload = validCoinbasePayload . copy ( ) ;
273
+
274
+ payload . assetLockedAmount = new BN ( - 10 ) ;
275
+
276
+ expect ( function ( ) {
277
+ payload . validate ( ) ;
278
+ } ) . to . throw ( 'Invalid Argument: Expect assetLockedAmount to be an unsigned integer' ) ;
279
+ } ) ;
234
280
} ) ;
235
281
236
282
describe ( '#toJSON' , function ( ) {
@@ -252,6 +298,11 @@ describe('CoinbasePayload', function () {
252
298
expect ( payloadJSON . merkleRootMNList ) . to . be . equal (
253
299
payload . merkleRootMNList
254
300
) ;
301
+ expect ( payloadJSON . bestCLHeight ) . to . be . equal ( payload . bestCLHeight ) ;
302
+ expect ( payloadJSON . bestCLSignature ) . to . be . equal ( payload . bestCLSignature . toString ( 'hex' ) ) ;
303
+ expect ( payloadJSON . assetLockedAmount ) . to . be . deep . equal (
304
+ payload . assetLockedAmount
305
+ ) ;
255
306
} ) ;
256
307
it ( 'Should call #validate' , function ( ) {
257
308
var payload = CoinbasePayload . fromJSON ( validCoinbasePayloadJSON ) ;
@@ -281,6 +332,13 @@ describe('CoinbasePayload', function () {
281
332
expect ( restoredPayload . merkleRootMNList ) . to . be . equal (
282
333
payload . merkleRootMNList
283
334
) ;
335
+ expect ( restoredPayload . bestCLHeight ) . to . be . equal ( payload . bestCLHeight ) ;
336
+ expect ( restoredPayload . bestCLSignature ) . to . be . deep . equal (
337
+ payload . bestCLSignature
338
+ ) ;
339
+ expect ( restoredPayload . assetLockedAmount ) . to . be . deep . equal (
340
+ payload . assetLockedAmount
341
+ ) ;
284
342
} ) ;
285
343
it ( 'Should call #validate' , function ( ) {
286
344
var payload = CoinbasePayload . fromJSON ( validCoinbasePayloadJSON ) ;
0 commit comments