@waku/rln 0.1.5-1e590d7.0 → 0.1.5-3038c48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/_virtual/__node-resolve_empty.js +6 -0
- package/bundle/_virtual/_node-resolve_empty.js +3 -0
- package/bundle/_virtual/bn.js +3 -0
- package/bundle/_virtual/common.js +3 -0
- package/bundle/_virtual/common2.js +3 -0
- package/bundle/_virtual/hash.js +3 -0
- package/bundle/_virtual/inherits_browser.js +3 -0
- package/bundle/_virtual/ripemd.js +3 -0
- package/bundle/_virtual/sha.js +3 -0
- package/bundle/_virtual/sha3.js +3 -0
- package/bundle/_virtual/utils3.js +3 -0
- package/bundle/index.js +1 -2
- package/bundle/node_modules/@ethersproject/abi/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/abi-coder.js +96 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/abstract-coder.js +148 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/address.js +26 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/anonymous.js +20 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/array.js +210 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/boolean.js +18 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/bytes.js +30 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/fixed-bytes.js +26 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/null.js +22 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/number.js +43 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/string.js +19 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/tuple.js +58 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/fragments.js +854 -0
- package/bundle/node_modules/@ethersproject/abi/lib.esm/interface.js +609 -0
- package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/index.js +66 -0
- package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/index.js +302 -0
- package/bundle/node_modules/@ethersproject/address/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/address/lib.esm/index.js +110 -0
- package/bundle/node_modules/@ethersproject/base64/lib.esm/base64.js +20 -0
- package/bundle/node_modules/@ethersproject/basex/lib.esm/index.js +120 -0
- package/bundle/node_modules/@ethersproject/bignumber/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/bignumber/lib.esm/bignumber.js +287 -0
- package/bundle/node_modules/@ethersproject/bytes/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/bytes/lib.esm/index.js +402 -0
- package/bundle/node_modules/@ethersproject/constants/lib.esm/addresses.js +3 -0
- package/bundle/node_modules/@ethersproject/constants/lib.esm/bignumbers.js +8 -0
- package/bundle/node_modules/@ethersproject/constants/lib.esm/hashes.js +3 -0
- package/bundle/node_modules/@ethersproject/contracts/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/contracts/lib.esm/index.js +893 -0
- package/bundle/node_modules/@ethersproject/hash/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/decoder.js +256 -0
- package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/include.js +36 -0
- package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/lib.js +135 -0
- package/bundle/node_modules/@ethersproject/hash/lib.esm/id.js +8 -0
- package/bundle/node_modules/@ethersproject/hash/lib.esm/namehash.js +64 -0
- package/bundle/node_modules/@ethersproject/hash/lib.esm/typed-data.js +443 -0
- package/bundle/node_modules/@ethersproject/keccak256/lib.esm/index.js +8 -0
- package/bundle/node_modules/@ethersproject/keccak256/node_modules/js-sha3/src/sha3.js +660 -0
- package/bundle/node_modules/@ethersproject/logger/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/logger/lib.esm/index.js +352 -0
- package/bundle/node_modules/@ethersproject/networks/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/networks/lib.esm/index.js +248 -0
- package/bundle/node_modules/@ethersproject/properties/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/properties/lib.esm/index.js +127 -0
- package/bundle/node_modules/@ethersproject/providers/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/providers/lib.esm/base-provider.js +2007 -0
- package/bundle/node_modules/@ethersproject/providers/lib.esm/formatter.js +422 -0
- package/bundle/node_modules/@ethersproject/providers/lib.esm/json-rpc-provider.js +674 -0
- package/bundle/node_modules/@ethersproject/providers/lib.esm/web3-provider.js +132 -0
- package/bundle/node_modules/@ethersproject/rlp/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/rlp/lib.esm/index.js +120 -0
- package/bundle/node_modules/@ethersproject/sha2/lib.esm/sha2.js +8 -0
- package/bundle/node_modules/@ethersproject/signing-key/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/signing-key/lib.esm/elliptic.js +2430 -0
- package/bundle/node_modules/@ethersproject/signing-key/lib.esm/index.js +76 -0
- package/bundle/node_modules/@ethersproject/strings/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/strings/lib.esm/utf8.js +219 -0
- package/bundle/node_modules/@ethersproject/transactions/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/transactions/lib.esm/index.js +279 -0
- package/bundle/node_modules/@ethersproject/web/lib.esm/_version.js +3 -0
- package/bundle/node_modules/@ethersproject/web/lib.esm/geturl.js +69 -0
- package/bundle/node_modules/@ethersproject/web/lib.esm/index.js +404 -0
- package/bundle/node_modules/bech32/index.js +187 -0
- package/bundle/node_modules/bn.js/lib/bn.js +3361 -0
- package/bundle/node_modules/hash.js/lib/hash/common.js +97 -0
- package/bundle/node_modules/hash.js/lib/hash/hmac.js +51 -0
- package/bundle/node_modules/hash.js/lib/hash/ripemd.js +152 -0
- package/bundle/node_modules/hash.js/lib/hash/sha/1.js +81 -0
- package/bundle/node_modules/hash.js/lib/hash/sha/224.js +33 -0
- package/bundle/node_modules/hash.js/lib/hash/sha/256.js +113 -0
- package/bundle/node_modules/hash.js/lib/hash/sha/384.js +39 -0
- package/bundle/node_modules/hash.js/lib/hash/sha/512.js +336 -0
- package/bundle/node_modules/hash.js/lib/hash/sha/common.js +53 -0
- package/bundle/node_modules/hash.js/lib/hash/sha.js +14 -0
- package/bundle/node_modules/hash.js/lib/hash/utils.js +282 -0
- package/bundle/node_modules/hash.js/lib/hash.js +33 -0
- package/bundle/node_modules/inherits/inherits_browser.js +33 -0
- package/bundle/node_modules/minimalistic-assert/index.js +13 -0
- package/bundle/packages/rln/dist/contract/constants.js +0 -1
- package/bundle/packages/rln/dist/contract/rln_base_contract.js +61 -66
- package/bundle/packages/rln/dist/contract/rln_contract.js +1 -1
- package/bundle/packages/rln/dist/utils/bytes.js +2 -8
- package/bundle/packages/rln/dist/utils/metamask.js +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/contract/index.d.ts +0 -1
- package/dist/contract/index.js +0 -1
- package/dist/contract/index.js.map +1 -1
- package/dist/contract/rln_base_contract.d.ts +11 -5
- package/dist/contract/rln_base_contract.js +59 -64
- package/dist/contract/rln_base_contract.js.map +1 -1
- package/dist/contract/types.d.ts +0 -5
- package/dist/contract/types.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/keystore/keystore.js.map +1 -1
- package/dist/keystore/types.d.ts +2 -2
- package/dist/utils/bytes.js +2 -8
- package/dist/utils/bytes.js.map +1 -1
- package/package.json +1 -1
- package/src/contract/index.ts +0 -1
- package/src/contract/rln_base_contract.ts +89 -96
- package/src/contract/types.ts +0 -5
- package/src/index.ts +1 -3
- package/src/keystore/keystore.ts +2 -4
- package/src/keystore/types.ts +2 -2
- package/src/utils/bytes.ts +2 -10
@@ -33,6 +33,15 @@ export class RLNBaseContract {
|
|
33
33
|
* Allows injecting a mocked contract for testing purposes.
|
34
34
|
*/
|
35
35
|
public constructor(options: RLNContractInitOptions) {
|
36
|
+
// Initialize members and subscriptions
|
37
|
+
this.fetchMembers()
|
38
|
+
.then(() => {
|
39
|
+
this.subscribeToMembers();
|
40
|
+
})
|
41
|
+
.catch((error) => {
|
42
|
+
log.error("Failed to initialize members", { error });
|
43
|
+
});
|
44
|
+
|
36
45
|
const {
|
37
46
|
address,
|
38
47
|
signer,
|
@@ -40,38 +49,15 @@ export class RLNBaseContract {
|
|
40
49
|
contract
|
41
50
|
} = options;
|
42
51
|
|
43
|
-
|
52
|
+
this.validateRateLimit(rateLimit);
|
44
53
|
|
45
54
|
this.contract = contract || new ethers.Contract(address, RLN_ABI, signer);
|
46
55
|
this.rateLimit = rateLimit;
|
47
56
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
this._membershipErasedFilter = this.contract.filters.MembershipErased();
|
53
|
-
this._membersExpiredFilter = this.contract.filters.MembershipExpired();
|
54
|
-
log.info("Event filters initialized successfully");
|
55
|
-
} catch (error) {
|
56
|
-
log.error("Failed to initialize event filters", { error });
|
57
|
-
throw new Error(
|
58
|
-
"Failed to initialize event filters: " + (error as Error).message
|
59
|
-
);
|
60
|
-
}
|
61
|
-
|
62
|
-
// Initialize members and subscriptions
|
63
|
-
this.fetchMembers()
|
64
|
-
.then(() => {
|
65
|
-
this.subscribeToMembers();
|
66
|
-
})
|
67
|
-
.catch((error) => {
|
68
|
-
log.error("Failed to initialize members", { error });
|
69
|
-
});
|
70
|
-
|
71
|
-
// Validate rate limit asynchronously
|
72
|
-
this.validateRateLimit(rateLimit).catch((error) => {
|
73
|
-
log.error("Failed to validate initial rate limit", { error });
|
74
|
-
});
|
57
|
+
// Initialize event filters
|
58
|
+
this._membersFilter = this.contract.filters.MembershipRegistered();
|
59
|
+
this._membershipErasedFilter = this.contract.filters.MembershipErased();
|
60
|
+
this._membersExpiredFilter = this.contract.filters.MembershipExpired();
|
75
61
|
}
|
76
62
|
|
77
63
|
/**
|
@@ -148,7 +134,7 @@ export class RLNBaseContract {
|
|
148
134
|
* @param newRateLimit The new rate limit to use
|
149
135
|
*/
|
150
136
|
public async setRateLimit(newRateLimit: number): Promise<void> {
|
151
|
-
|
137
|
+
this.validateRateLimit(newRateLimit);
|
152
138
|
this.rateLimit = newRateLimit;
|
153
139
|
}
|
154
140
|
|
@@ -338,7 +324,7 @@ export class RLNBaseContract {
|
|
338
324
|
this.contract.on(
|
339
325
|
this.membersFilter,
|
340
326
|
(
|
341
|
-
_idCommitment:
|
327
|
+
_idCommitment: string,
|
342
328
|
_membershipRateLimit: ethers.BigNumber,
|
343
329
|
_index: ethers.BigNumber,
|
344
330
|
event: ethers.Event
|
@@ -350,7 +336,7 @@ export class RLNBaseContract {
|
|
350
336
|
this.contract.on(
|
351
337
|
this.membershipErasedFilter,
|
352
338
|
(
|
353
|
-
_idCommitment:
|
339
|
+
_idCommitment: string,
|
354
340
|
_membershipRateLimit: ethers.BigNumber,
|
355
341
|
_index: ethers.BigNumber,
|
356
342
|
event: ethers.Event
|
@@ -362,7 +348,7 @@ export class RLNBaseContract {
|
|
362
348
|
this.contract.on(
|
363
349
|
this.membersExpiredFilter,
|
364
350
|
(
|
365
|
-
_idCommitment:
|
351
|
+
_idCommitment: string,
|
366
352
|
_membershipRateLimit: ethers.BigNumber,
|
367
353
|
_index: ethers.BigNumber,
|
368
354
|
event: ethers.Event
|
@@ -372,82 +358,94 @@ export class RLNBaseContract {
|
|
372
358
|
);
|
373
359
|
}
|
374
360
|
|
361
|
+
/**
|
362
|
+
* Helper method to get remaining messages in current epoch
|
363
|
+
* @param membershipId The ID of the membership to check
|
364
|
+
* @returns number of remaining messages allowed in current epoch
|
365
|
+
*/
|
366
|
+
public async getRemainingMessages(membershipId: number): Promise<number> {
|
367
|
+
try {
|
368
|
+
const [startTime, , rateLimit] =
|
369
|
+
await this.contract.getMembershipInfo(membershipId);
|
370
|
+
|
371
|
+
// Calculate current epoch
|
372
|
+
const currentTime = Math.floor(Date.now() / 1000);
|
373
|
+
const epochsPassed = Math.floor(
|
374
|
+
(currentTime - startTime) / RATE_LIMIT_PARAMS.EPOCH_LENGTH
|
375
|
+
);
|
376
|
+
const currentEpochStart =
|
377
|
+
startTime + epochsPassed * RATE_LIMIT_PARAMS.EPOCH_LENGTH;
|
378
|
+
|
379
|
+
// Get message count in current epoch using contract's function
|
380
|
+
const messageCount = await this.contract.getMessageCount(
|
381
|
+
membershipId,
|
382
|
+
currentEpochStart
|
383
|
+
);
|
384
|
+
return Math.max(
|
385
|
+
0,
|
386
|
+
ethers.BigNumber.from(rateLimit)
|
387
|
+
.sub(ethers.BigNumber.from(messageCount))
|
388
|
+
.toNumber()
|
389
|
+
);
|
390
|
+
} catch (error) {
|
391
|
+
log.error(
|
392
|
+
`Error getting remaining messages: ${(error as Error).message}`
|
393
|
+
);
|
394
|
+
return 0; // Fail safe: assume no messages remaining on error
|
395
|
+
}
|
396
|
+
}
|
397
|
+
|
375
398
|
public async getMembershipInfo(
|
376
|
-
|
399
|
+
idCommitment: string
|
377
400
|
): Promise<MembershipInfo | undefined> {
|
378
401
|
try {
|
379
|
-
const
|
380
|
-
await this.contract.
|
402
|
+
const [startBlock, endBlock, rateLimit] =
|
403
|
+
await this.contract.getMembershipInfo(idCommitment);
|
381
404
|
const currentBlock = await this.contract.provider.getBlockNumber();
|
382
|
-
const [
|
383
|
-
depositAmount,
|
384
|
-
activeDuration,
|
385
|
-
gracePeriodStartTimestamp,
|
386
|
-
gracePeriodDuration,
|
387
|
-
rateLimit,
|
388
|
-
index,
|
389
|
-
holder,
|
390
|
-
token
|
391
|
-
] = membershipData;
|
392
|
-
|
393
|
-
const gracePeriodEnd = gracePeriodStartTimestamp.add(gracePeriodDuration);
|
394
405
|
|
395
406
|
let state: MembershipState;
|
396
|
-
if (currentBlock <
|
407
|
+
if (currentBlock < startBlock) {
|
397
408
|
state = MembershipState.Active;
|
398
|
-
} else if (currentBlock <
|
409
|
+
} else if (currentBlock < endBlock) {
|
399
410
|
state = MembershipState.GracePeriod;
|
400
411
|
} else {
|
401
412
|
state = MembershipState.Expired;
|
402
413
|
}
|
403
414
|
|
415
|
+
const index = await this.getMemberIndex(idCommitment);
|
416
|
+
if (!index) return undefined;
|
417
|
+
|
404
418
|
return {
|
405
419
|
index,
|
406
|
-
idCommitment
|
407
|
-
rateLimit:
|
408
|
-
startBlock:
|
409
|
-
endBlock:
|
410
|
-
state
|
411
|
-
depositAmount,
|
412
|
-
activeDuration,
|
413
|
-
gracePeriodDuration,
|
414
|
-
holder,
|
415
|
-
token
|
420
|
+
idCommitment,
|
421
|
+
rateLimit: rateLimit.toNumber(),
|
422
|
+
startBlock: startBlock.toNumber(),
|
423
|
+
endBlock: endBlock.toNumber(),
|
424
|
+
state
|
416
425
|
};
|
417
426
|
} catch (error) {
|
418
|
-
log.error("Error in getMembershipInfo:", error);
|
419
427
|
return undefined;
|
420
428
|
}
|
421
429
|
}
|
422
430
|
|
423
431
|
public async extendMembership(
|
424
|
-
|
432
|
+
idCommitment: string
|
425
433
|
): Promise<ethers.ContractTransaction> {
|
426
|
-
|
427
|
-
await tx.wait();
|
428
|
-
return tx;
|
434
|
+
return this.contract.extendMemberships([idCommitment]);
|
429
435
|
}
|
430
436
|
|
431
437
|
public async eraseMembership(
|
432
|
-
|
438
|
+
idCommitment: string,
|
433
439
|
eraseFromMembershipSet: boolean = true
|
434
440
|
): Promise<ethers.ContractTransaction> {
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
const gasLimit = estimatedGas.add(10000);
|
439
|
-
|
440
|
-
const tx = await this.contract["eraseMemberships(uint256[],bool)"](
|
441
|
-
[idCommitmentBigInt],
|
442
|
-
eraseFromMembershipSet,
|
443
|
-
{ gasLimit }
|
441
|
+
return this.contract.eraseMemberships(
|
442
|
+
[idCommitment],
|
443
|
+
eraseFromMembershipSet
|
444
444
|
);
|
445
|
-
await tx.wait();
|
446
|
-
return tx;
|
447
445
|
}
|
448
446
|
|
449
447
|
public async registerMembership(
|
450
|
-
|
448
|
+
idCommitment: string,
|
451
449
|
rateLimit: number = DEFAULT_RATE_LIMIT
|
452
450
|
): Promise<ethers.ContractTransaction> {
|
453
451
|
if (
|
@@ -458,12 +456,12 @@ export class RLNBaseContract {
|
|
458
456
|
`Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE}`
|
459
457
|
);
|
460
458
|
}
|
461
|
-
return this.contract.register(
|
459
|
+
return this.contract.register(idCommitment, rateLimit, []);
|
462
460
|
}
|
463
461
|
|
464
|
-
public async withdraw(token: string,
|
462
|
+
public async withdraw(token: string, holder: string): Promise<void> {
|
465
463
|
try {
|
466
|
-
const tx = await this.contract.withdraw(token, from);
|
464
|
+
const tx = await this.contract.withdraw(token, { from: holder });
|
467
465
|
await tx.wait();
|
468
466
|
} catch (error) {
|
469
467
|
log.error(`Error in withdraw: ${(error as Error).message}`);
|
@@ -480,7 +478,7 @@ export class RLNBaseContract {
|
|
480
478
|
|
481
479
|
// Check if the ID commitment is already registered
|
482
480
|
const existingIndex = await this.getMemberIndex(
|
483
|
-
identity.IDCommitmentBigInt
|
481
|
+
identity.IDCommitmentBigInt.toString()
|
484
482
|
);
|
485
483
|
if (existingIndex) {
|
486
484
|
throw new Error(
|
@@ -518,7 +516,7 @@ export class RLNBaseContract {
|
|
518
516
|
}
|
519
517
|
|
520
518
|
const memberRegistered = txRegisterReceipt.events?.find(
|
521
|
-
(event
|
519
|
+
(event) => event.event === "MembershipRegistered"
|
522
520
|
);
|
523
521
|
|
524
522
|
if (!memberRegistered || !memberRegistered.args) {
|
@@ -612,7 +610,7 @@ export class RLNBaseContract {
|
|
612
610
|
const txRegisterReceipt = await txRegisterResponse.wait();
|
613
611
|
|
614
612
|
const memberRegistered = txRegisterReceipt.events?.find(
|
615
|
-
(event
|
613
|
+
(event) => event.event === "MembershipRegistered"
|
616
614
|
);
|
617
615
|
|
618
616
|
if (!memberRegistered || !memberRegistered.args) {
|
@@ -658,18 +656,13 @@ export class RLNBaseContract {
|
|
658
656
|
* Validates that the rate limit is within the allowed range
|
659
657
|
* @throws Error if the rate limit is outside the allowed range
|
660
658
|
*/
|
661
|
-
private
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
const minRateNum = ethers.BigNumber.from(minRate).toNumber();
|
668
|
-
const maxRateNum = ethers.BigNumber.from(maxRate).toNumber();
|
669
|
-
|
670
|
-
if (rateLimit < minRateNum || rateLimit > maxRateNum) {
|
659
|
+
private validateRateLimit(rateLimit: number): void {
|
660
|
+
if (
|
661
|
+
rateLimit < RATE_LIMIT_PARAMS.MIN_RATE ||
|
662
|
+
rateLimit > RATE_LIMIT_PARAMS.MAX_RATE
|
663
|
+
) {
|
671
664
|
throw new Error(
|
672
|
-
`Rate limit must be between ${
|
665
|
+
`Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE} messages per epoch`
|
673
666
|
);
|
674
667
|
}
|
675
668
|
}
|
@@ -696,11 +689,11 @@ export class RLNBaseContract {
|
|
696
689
|
}
|
697
690
|
|
698
691
|
private async getMemberIndex(
|
699
|
-
|
692
|
+
idCommitment: string
|
700
693
|
): Promise<ethers.BigNumber | undefined> {
|
701
694
|
try {
|
702
695
|
const events = await this.contract.queryFilter(
|
703
|
-
this.contract.filters.MembershipRegistered(
|
696
|
+
this.contract.filters.MembershipRegistered(idCommitment)
|
704
697
|
);
|
705
698
|
if (events.length === 0) return undefined;
|
706
699
|
|
package/src/contract/types.ts
CHANGED
@@ -38,11 +38,6 @@ export interface MembershipInfo {
|
|
38
38
|
startBlock: number;
|
39
39
|
endBlock: number;
|
40
40
|
state: MembershipState;
|
41
|
-
depositAmount: ethers.BigNumber;
|
42
|
-
activeDuration: number;
|
43
|
-
gracePeriodDuration: number;
|
44
|
-
holder: string;
|
45
|
-
token: string;
|
46
41
|
}
|
47
42
|
|
48
43
|
export enum MembershipState {
|
package/src/index.ts
CHANGED
package/src/keystore/keystore.ts
CHANGED
@@ -21,8 +21,8 @@ import { isCredentialValid, isKeystoreValid } from "./schema_validator.js";
|
|
21
21
|
import type {
|
22
22
|
Keccak256Hash,
|
23
23
|
KeystoreEntity,
|
24
|
-
KeystoreMembershipInfo,
|
25
24
|
MembershipHash,
|
25
|
+
MembershipInfo,
|
26
26
|
Password,
|
27
27
|
Sha256Hash
|
28
28
|
} from "./types.js";
|
@@ -310,9 +310,7 @@ export class Keystore {
|
|
310
310
|
|
311
311
|
// follows nwaku implementation
|
312
312
|
// https://github.com/waku-org/nwaku/blob/f05528d4be3d3c876a8b07f9bb7dfaae8aa8ec6e/waku/waku_keystore/protocol_types.nim#L111
|
313
|
-
private static computeMembershipHash(
|
314
|
-
info: KeystoreMembershipInfo
|
315
|
-
): MembershipHash {
|
313
|
+
private static computeMembershipHash(info: MembershipInfo): MembershipHash {
|
316
314
|
return bytesToHex(
|
317
315
|
sha256(utf8ToBytes(`${info.chainId}${info.address}${info.treeIndex}`))
|
318
316
|
).toUpperCase();
|
package/src/keystore/types.ts
CHANGED
@@ -7,7 +7,7 @@ export type Password = string | Uint8Array;
|
|
7
7
|
|
8
8
|
// see reference
|
9
9
|
// https://github.com/waku-org/nwaku/blob/f05528d4be3d3c876a8b07f9bb7dfaae8aa8ec6e/waku/waku_keystore/protocol_types.nim#L111
|
10
|
-
export type
|
10
|
+
export type MembershipInfo = {
|
11
11
|
chainId: string;
|
12
12
|
address: string;
|
13
13
|
treeIndex: number;
|
@@ -16,7 +16,7 @@ export type KeystoreMembershipInfo = {
|
|
16
16
|
|
17
17
|
export type KeystoreEntity = {
|
18
18
|
identity: IdentityCredential;
|
19
|
-
membership:
|
19
|
+
membership: MembershipInfo;
|
20
20
|
};
|
21
21
|
|
22
22
|
export type DecryptedCredentials = KeystoreEntity;
|
package/src/utils/bytes.ts
CHANGED
@@ -65,16 +65,8 @@ export function buildBigIntFromUint8Array(
|
|
65
65
|
array: Uint8Array,
|
66
66
|
byteOffset: number = 0
|
67
67
|
): bigint {
|
68
|
-
|
69
|
-
|
70
|
-
// Process all 32 bytes (or the available bytes if less)
|
71
|
-
const length = Math.min(array.length - byteOffset, 32);
|
72
|
-
|
73
|
-
for (let i = 0; i < length; i++) {
|
74
|
-
result = (result << 8n) | BigInt(array[byteOffset + i]);
|
75
|
-
}
|
76
|
-
|
77
|
-
return result;
|
68
|
+
const dataView = new DataView(array.buffer);
|
69
|
+
return dataView.getBigUint64(byteOffset, true);
|
78
70
|
}
|
79
71
|
|
80
72
|
/**
|