@@ -43,6 +43,7 @@ const {
43
43
* @class QuorumEntry
44
44
* @param {string|Object|Buffer } [arg] - A Buffer, JSON string,
45
45
* or Object representing a SMLQuorumEntry
46
+ * @param {Object } [llmqParamsOverride] - LLMQ type override
46
47
* @constructor
47
48
* @property {number } version
48
49
* @property {number } llmqType
@@ -57,26 +58,26 @@ const {
57
58
* @property {string } quorumSig
58
59
* @property {string } membersSig
59
60
*/
60
- function QuorumEntry ( arg ) {
61
+ function QuorumEntry ( arg , llmqParamsOverride = { } ) {
61
62
if ( arg ) {
62
63
if ( arg instanceof QuorumEntry ) {
63
64
return arg . copy ( ) ;
64
65
}
65
66
66
67
if ( BufferUtil . isBuffer ( arg ) ) {
67
- return QuorumEntry . fromBuffer ( arg ) ;
68
+ return QuorumEntry . fromBuffer ( arg , llmqParamsOverride ) ;
68
69
}
69
70
70
71
if ( _ . isObject ( arg ) ) {
71
- return QuorumEntry . fromObject ( arg ) ;
72
+ return QuorumEntry . fromObject ( arg , llmqParamsOverride ) ;
72
73
}
73
74
74
75
if ( arg instanceof QuorumEntry ) {
75
76
return arg . copy ( ) ;
76
77
}
77
78
78
79
if ( isHexString ( arg ) ) {
79
- return QuorumEntry . fromHexString ( arg ) ;
80
+ return QuorumEntry . fromHexString ( arg , llmqParamsOverride ) ;
80
81
}
81
82
throw new TypeError ( 'Unrecognized argument for QuorumEntry' ) ;
82
83
}
@@ -85,11 +86,13 @@ function QuorumEntry(arg) {
85
86
/**
86
87
* Parse buffer and returns QuorumEntry
87
88
* @param {Buffer } buffer
89
+ * @param {Object } [llmqParamsOverride]
88
90
* @return {QuorumEntry }
89
91
*/
90
- QuorumEntry . fromBuffer = function fromBuffer ( buffer ) {
92
+ QuorumEntry . fromBuffer = function fromBuffer ( buffer , llmqParamsOverride = { } ) {
91
93
const bufferReader = new BufferReader ( buffer ) ;
92
94
const SMLQuorumEntry = new QuorumEntry ( ) ;
95
+ SMLQuorumEntry . llmqParamsOverride = llmqParamsOverride ;
93
96
SMLQuorumEntry . isVerified = false ;
94
97
if ( buffer . length < 100 ) {
95
98
SMLQuorumEntry . isOutdatedRPC = true ;
@@ -159,10 +162,11 @@ QuorumEntry.fromBuffer = function fromBuffer(buffer) {
159
162
160
163
/**
161
164
* @param {string } string
165
+ * @param {Object } llmqParamsOverride
162
166
* @return {QuorumEntry }
163
167
*/
164
- QuorumEntry . fromHexString = function fromString ( string ) {
165
- return QuorumEntry . fromBuffer ( Buffer . from ( string , 'hex' ) ) ;
168
+ QuorumEntry . fromHexString = function fromString ( string , llmqParamsOverride = { } ) {
169
+ return QuorumEntry . fromBuffer ( Buffer . from ( string , 'hex' ) , llmqParamsOverride ) ;
166
170
} ;
167
171
168
172
/**
@@ -232,9 +236,10 @@ QuorumEntry.prototype.toBufferForHashing = function toBufferForHashing() {
232
236
/**
233
237
* Create SMLQuorumEntry from an object
234
238
* @param {SMLQuorumEntry } obj
239
+ * @param {Object } llmqParamsOverride
235
240
* @return {QuorumEntry }
236
241
*/
237
- QuorumEntry . fromObject = function fromObject ( obj ) {
242
+ QuorumEntry . fromObject = function fromObject ( obj , llmqParamsOverride = { } ) {
238
243
const SMLQuorumEntry = new QuorumEntry ( ) ;
239
244
SMLQuorumEntry . isVerified = false ;
240
245
SMLQuorumEntry . isOutdatedRPC = false ;
@@ -250,6 +255,9 @@ QuorumEntry.fromObject = function fromObject(obj) {
250
255
SMLQuorumEntry . quorumVvecHash = obj . quorumVvecHash ;
251
256
SMLQuorumEntry . quorumSig = obj . quorumSig ;
252
257
SMLQuorumEntry . membersSig = obj . membersSig ;
258
+
259
+ SMLQuorumEntry . llmqParamsOverride = llmqParamsOverride ;
260
+
253
261
if ( SMLQuorumEntry . signers === undefined ) {
254
262
SMLQuorumEntry . isOutdatedRPC = true ;
255
263
}
@@ -334,88 +342,24 @@ QuorumEntry.prototype.toObject = function toObject() {
334
342
return result ;
335
343
} ;
336
344
337
- QuorumEntry . getParams = function getParams ( llmqType ) {
338
- const params = { } ;
339
- switch ( llmqType ) {
340
- case constants . LLMQ_TYPES . LLMQ_TYPE_50_60 :
341
- params . size = 50 ;
342
- params . threshold = 30 ;
343
- params . maximumActiveQuorumsCount = 24 ;
344
- return params ;
345
- case constants . LLMQ_TYPES . LLMQ_TYPE_60_75 :
346
- params . size = 60 ;
347
- params . threshold = 45 ;
348
- params . maximumActiveQuorumsCount = 32 ;
349
- return params ;
350
- case constants . LLMQ_TYPES . LLMQ_TYPE_400_60 :
351
- params . size = 400 ;
352
- params . threshold = 240 ;
353
- params . maximumActiveQuorumsCount = 4 ;
354
- return params ;
355
- case constants . LLMQ_TYPES . LLMQ_TYPE_400_85 :
356
- params . size = 400 ;
357
- params . threshold = 340 ;
358
- params . maximumActiveQuorumsCount = 4 ;
359
- return params ;
360
- case constants . LLMQ_TYPES . LLMQ_TYPE_100_67 :
361
- params . size = 100 ;
362
- params . threshold = 67 ;
363
- params . maximumActiveQuorumsCount = 24 ;
364
- return params ;
365
- case constants . LLMQ_TYPES . LLMQ_TYPE_25_67 :
366
- params . size = 25 ;
367
- params . threshold = 67 ;
368
- params . maximumActiveQuorumsCount = 24 ;
369
- return params ;
370
- case constants . LLMQ_TYPES . LLMQ_TYPE_LLMQ_TEST :
371
- params . size = 3 ;
372
- params . threshold = 2 ;
373
- params . maximumActiveQuorumsCount = 2 ;
374
- return params ;
375
- case constants . LLMQ_TYPES . LLMQ_TYPE_LLMQ_DEVNET :
376
- params . size = 12 ;
377
- params . threshold = 6 ;
378
- params . maximumActiveQuorumsCount = 4 ;
379
- return params ;
380
- case constants . LLMQ_TYPES . LLMQ_TYPE_TEST_V17 :
381
- params . size = 3 ;
382
- params . threshold = 2 ;
383
- params . maximumActiveQuorumsCount = 2 ;
384
- return params ;
385
- case constants . LLMQ_TYPES . LLMQ_TYPE_TEST_DIP0024 :
386
- params . size = 4 ;
387
- params . threshold = 2 ;
388
- params . maximumActiveQuorumsCount = 2 ;
389
- return params ;
390
- case constants . LLMQ_TYPES . LLMQ_TYPE_TEST_INSTANTSEND :
391
- params . size = 3 ;
392
- params . threshold = 2 ;
393
- params . maximumActiveQuorumsCount = 2 ;
394
- return params ;
395
- case constants . LLMQ_TYPES . LLMQ_DEVNET_DIP0024 :
396
- params . size = 8 ;
397
- params . threshold = 4 ;
398
- params . maximumActiveQuorumsCount = 2 ;
399
- return params ;
400
- case constants . LLMQ_TYPES . LLMQ_TEST_PLATFORM :
401
- params . size = 3 ;
402
- params . threshold = 2 ;
403
- params . maximumActiveQuorumsCount = 2 ;
404
- return params ;
405
- case constants . LLMQ_TYPES . LLMQ_DEVNET_PLATFORM :
406
- params . size = 12 ;
407
- params . threshold = 8 ;
408
- params . maximumActiveQuorumsCount = 4 ;
409
- return params ;
410
- default :
411
- throw new Error ( `Invalid llmq type ${ llmqType } ` ) ;
345
+ QuorumEntry . getParams = function getParams ( llmqType , llmqParamsOverride = { } ) {
346
+ let llmqParams = constants . LLMQ_TYPE_PARAMS ;
347
+ if ( Object . keys ( llmqParamsOverride ) . length > 0 ) {
348
+ llmqParams = _ . merge ( { } , constants . LLMQ_TYPE_PARAMS , llmqParamsOverride ) ;
349
+ }
350
+
351
+ if ( ! llmqParams [ llmqType ] ) {
352
+ throw new Error ( `Invalid llmq type ${ llmqType } ` ) ;
412
353
}
354
+
355
+ return llmqParams [ llmqType ] ;
413
356
} ;
357
+
414
358
/**
415
359
* @return {number }
416
360
*/
417
361
QuorumEntry . prototype . getParams = function getParams ( ) {
418
- return QuorumEntry . getParams ( this . llmqType ) ;
362
+ return QuorumEntry . getParams ( this . llmqType , this . llmqParamsOverride ) ;
419
363
} ;
420
364
421
365
/**
0 commit comments