@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.
Files changed (122) hide show
  1. package/bundle/_virtual/__node-resolve_empty.js +6 -0
  2. package/bundle/_virtual/_node-resolve_empty.js +3 -0
  3. package/bundle/_virtual/bn.js +3 -0
  4. package/bundle/_virtual/common.js +3 -0
  5. package/bundle/_virtual/common2.js +3 -0
  6. package/bundle/_virtual/hash.js +3 -0
  7. package/bundle/_virtual/inherits_browser.js +3 -0
  8. package/bundle/_virtual/ripemd.js +3 -0
  9. package/bundle/_virtual/sha.js +3 -0
  10. package/bundle/_virtual/sha3.js +3 -0
  11. package/bundle/_virtual/utils3.js +3 -0
  12. package/bundle/index.js +1 -2
  13. package/bundle/node_modules/@ethersproject/abi/lib.esm/_version.js +3 -0
  14. package/bundle/node_modules/@ethersproject/abi/lib.esm/abi-coder.js +96 -0
  15. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/abstract-coder.js +148 -0
  16. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/address.js +26 -0
  17. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/anonymous.js +20 -0
  18. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/array.js +210 -0
  19. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/boolean.js +18 -0
  20. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/bytes.js +30 -0
  21. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/fixed-bytes.js +26 -0
  22. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/null.js +22 -0
  23. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/number.js +43 -0
  24. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/string.js +19 -0
  25. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/tuple.js +58 -0
  26. package/bundle/node_modules/@ethersproject/abi/lib.esm/fragments.js +854 -0
  27. package/bundle/node_modules/@ethersproject/abi/lib.esm/interface.js +609 -0
  28. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/_version.js +3 -0
  29. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/index.js +66 -0
  30. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/_version.js +3 -0
  31. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/index.js +302 -0
  32. package/bundle/node_modules/@ethersproject/address/lib.esm/_version.js +3 -0
  33. package/bundle/node_modules/@ethersproject/address/lib.esm/index.js +110 -0
  34. package/bundle/node_modules/@ethersproject/base64/lib.esm/base64.js +20 -0
  35. package/bundle/node_modules/@ethersproject/basex/lib.esm/index.js +120 -0
  36. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/_version.js +3 -0
  37. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/bignumber.js +287 -0
  38. package/bundle/node_modules/@ethersproject/bytes/lib.esm/_version.js +3 -0
  39. package/bundle/node_modules/@ethersproject/bytes/lib.esm/index.js +402 -0
  40. package/bundle/node_modules/@ethersproject/constants/lib.esm/addresses.js +3 -0
  41. package/bundle/node_modules/@ethersproject/constants/lib.esm/bignumbers.js +8 -0
  42. package/bundle/node_modules/@ethersproject/constants/lib.esm/hashes.js +3 -0
  43. package/bundle/node_modules/@ethersproject/contracts/lib.esm/_version.js +3 -0
  44. package/bundle/node_modules/@ethersproject/contracts/lib.esm/index.js +893 -0
  45. package/bundle/node_modules/@ethersproject/hash/lib.esm/_version.js +3 -0
  46. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/decoder.js +256 -0
  47. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/include.js +36 -0
  48. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/lib.js +135 -0
  49. package/bundle/node_modules/@ethersproject/hash/lib.esm/id.js +8 -0
  50. package/bundle/node_modules/@ethersproject/hash/lib.esm/namehash.js +64 -0
  51. package/bundle/node_modules/@ethersproject/hash/lib.esm/typed-data.js +443 -0
  52. package/bundle/node_modules/@ethersproject/keccak256/lib.esm/index.js +8 -0
  53. package/bundle/node_modules/@ethersproject/keccak256/node_modules/js-sha3/src/sha3.js +660 -0
  54. package/bundle/node_modules/@ethersproject/logger/lib.esm/_version.js +3 -0
  55. package/bundle/node_modules/@ethersproject/logger/lib.esm/index.js +352 -0
  56. package/bundle/node_modules/@ethersproject/networks/lib.esm/_version.js +3 -0
  57. package/bundle/node_modules/@ethersproject/networks/lib.esm/index.js +248 -0
  58. package/bundle/node_modules/@ethersproject/properties/lib.esm/_version.js +3 -0
  59. package/bundle/node_modules/@ethersproject/properties/lib.esm/index.js +127 -0
  60. package/bundle/node_modules/@ethersproject/providers/lib.esm/_version.js +3 -0
  61. package/bundle/node_modules/@ethersproject/providers/lib.esm/base-provider.js +2007 -0
  62. package/bundle/node_modules/@ethersproject/providers/lib.esm/formatter.js +422 -0
  63. package/bundle/node_modules/@ethersproject/providers/lib.esm/json-rpc-provider.js +674 -0
  64. package/bundle/node_modules/@ethersproject/providers/lib.esm/web3-provider.js +132 -0
  65. package/bundle/node_modules/@ethersproject/rlp/lib.esm/_version.js +3 -0
  66. package/bundle/node_modules/@ethersproject/rlp/lib.esm/index.js +120 -0
  67. package/bundle/node_modules/@ethersproject/sha2/lib.esm/sha2.js +8 -0
  68. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/_version.js +3 -0
  69. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/elliptic.js +2430 -0
  70. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/index.js +76 -0
  71. package/bundle/node_modules/@ethersproject/strings/lib.esm/_version.js +3 -0
  72. package/bundle/node_modules/@ethersproject/strings/lib.esm/utf8.js +219 -0
  73. package/bundle/node_modules/@ethersproject/transactions/lib.esm/_version.js +3 -0
  74. package/bundle/node_modules/@ethersproject/transactions/lib.esm/index.js +279 -0
  75. package/bundle/node_modules/@ethersproject/web/lib.esm/_version.js +3 -0
  76. package/bundle/node_modules/@ethersproject/web/lib.esm/geturl.js +69 -0
  77. package/bundle/node_modules/@ethersproject/web/lib.esm/index.js +404 -0
  78. package/bundle/node_modules/bech32/index.js +187 -0
  79. package/bundle/node_modules/bn.js/lib/bn.js +3361 -0
  80. package/bundle/node_modules/hash.js/lib/hash/common.js +97 -0
  81. package/bundle/node_modules/hash.js/lib/hash/hmac.js +51 -0
  82. package/bundle/node_modules/hash.js/lib/hash/ripemd.js +152 -0
  83. package/bundle/node_modules/hash.js/lib/hash/sha/1.js +81 -0
  84. package/bundle/node_modules/hash.js/lib/hash/sha/224.js +33 -0
  85. package/bundle/node_modules/hash.js/lib/hash/sha/256.js +113 -0
  86. package/bundle/node_modules/hash.js/lib/hash/sha/384.js +39 -0
  87. package/bundle/node_modules/hash.js/lib/hash/sha/512.js +336 -0
  88. package/bundle/node_modules/hash.js/lib/hash/sha/common.js +53 -0
  89. package/bundle/node_modules/hash.js/lib/hash/sha.js +14 -0
  90. package/bundle/node_modules/hash.js/lib/hash/utils.js +282 -0
  91. package/bundle/node_modules/hash.js/lib/hash.js +33 -0
  92. package/bundle/node_modules/inherits/inherits_browser.js +33 -0
  93. package/bundle/node_modules/minimalistic-assert/index.js +13 -0
  94. package/bundle/packages/rln/dist/contract/constants.js +0 -1
  95. package/bundle/packages/rln/dist/contract/rln_base_contract.js +61 -66
  96. package/bundle/packages/rln/dist/contract/rln_contract.js +1 -1
  97. package/bundle/packages/rln/dist/utils/bytes.js +2 -8
  98. package/bundle/packages/rln/dist/utils/metamask.js +2 -2
  99. package/dist/.tsbuildinfo +1 -1
  100. package/dist/contract/index.d.ts +0 -1
  101. package/dist/contract/index.js +0 -1
  102. package/dist/contract/index.js.map +1 -1
  103. package/dist/contract/rln_base_contract.d.ts +11 -5
  104. package/dist/contract/rln_base_contract.js +59 -64
  105. package/dist/contract/rln_base_contract.js.map +1 -1
  106. package/dist/contract/types.d.ts +0 -5
  107. package/dist/contract/types.js.map +1 -1
  108. package/dist/index.d.ts +1 -2
  109. package/dist/index.js +0 -1
  110. package/dist/index.js.map +1 -1
  111. package/dist/keystore/keystore.js.map +1 -1
  112. package/dist/keystore/types.d.ts +2 -2
  113. package/dist/utils/bytes.js +2 -8
  114. package/dist/utils/bytes.js.map +1 -1
  115. package/package.json +1 -1
  116. package/src/contract/index.ts +0 -1
  117. package/src/contract/rln_base_contract.ts +89 -96
  118. package/src/contract/types.ts +0 -5
  119. package/src/index.ts +1 -3
  120. package/src/keystore/keystore.ts +2 -4
  121. package/src/keystore/types.ts +2 -2
  122. package/src/utils/bytes.ts +2 -10
@@ -0,0 +1,33 @@
1
+ import { __module as inherits_browser } from '../../_virtual/inherits_browser.js';
2
+
3
+ if (typeof Object.create === 'function') {
4
+ // implementation from standard node.js 'util' module
5
+ inherits_browser.exports = function inherits(ctor, superCtor) {
6
+ if (superCtor) {
7
+ ctor.super_ = superCtor;
8
+ ctor.prototype = Object.create(superCtor.prototype, {
9
+ constructor: {
10
+ value: ctor,
11
+ enumerable: false,
12
+ writable: true,
13
+ configurable: true
14
+ }
15
+ });
16
+ }
17
+ };
18
+ } else {
19
+ // old school shim for old browsers
20
+ inherits_browser.exports = function inherits(ctor, superCtor) {
21
+ if (superCtor) {
22
+ ctor.super_ = superCtor;
23
+ var TempCtor = function () {};
24
+ TempCtor.prototype = superCtor.prototype;
25
+ ctor.prototype = new TempCtor();
26
+ ctor.prototype.constructor = ctor;
27
+ }
28
+ };
29
+ }
30
+
31
+ var inherits_browserExports = inherits_browser.exports;
32
+
33
+ export { inherits_browserExports as i };
@@ -0,0 +1,13 @@
1
+ var minimalisticAssert = assert;
2
+
3
+ function assert(val, msg) {
4
+ if (!val)
5
+ throw new Error(msg || 'Assertion failed');
6
+ }
7
+
8
+ assert.equal = function assertEqual(l, r, msg) {
9
+ if (l != r)
10
+ throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
11
+ };
12
+
13
+ export { minimalisticAssert as m };
@@ -12,7 +12,6 @@ const LINEA_CONTRACT = {
12
12
  */
13
13
  const RATE_LIMIT_TIERS = {
14
14
  LOW: 20, // Suggested minimum rate - 20 messages per epoch
15
- MEDIUM: 200,
16
15
  HIGH: 600 // Suggested maximum rate - 600 messages per epoch
17
16
  };
18
17
  // Global rate limit parameters
@@ -16,8 +16,8 @@ import { Logger } from '../../../utils/dist/logger/index.js';
16
16
  import { RLN_ABI } from './abi.js';
17
17
  import { DEFAULT_RATE_LIMIT, RATE_LIMIT_PARAMS } from './constants.js';
18
18
  import { MembershipState } from './types.js';
19
- import { Contract } from '@ethersproject/contracts';
20
- import { BigNumber } from '@ethersproject/bignumber';
19
+ import { Contract } from '../../../../node_modules/@ethersproject/contracts/lib.esm/index.js';
20
+ import { BigNumber } from '../../../../node_modules/@ethersproject/bignumber/lib.esm/bignumber.js';
21
21
 
22
22
  const log = new Logger("waku:rln:contract:base");
23
23
  class RLNBaseContract {
@@ -33,22 +33,6 @@ class RLNBaseContract {
33
33
  * Allows injecting a mocked contract for testing purposes.
34
34
  */
35
35
  constructor(options) {
36
- const { address, signer, rateLimit = DEFAULT_RATE_LIMIT, contract } = options;
37
- log.info("Initializing RLNBaseContract", { address, rateLimit });
38
- this.contract = contract || new Contract(address, RLN_ABI, signer);
39
- this.rateLimit = rateLimit;
40
- try {
41
- log.info("Setting up event filters");
42
- // Initialize event filters
43
- this._membersFilter = this.contract.filters.MembershipRegistered();
44
- this._membershipErasedFilter = this.contract.filters.MembershipErased();
45
- this._membersExpiredFilter = this.contract.filters.MembershipExpired();
46
- log.info("Event filters initialized successfully");
47
- }
48
- catch (error) {
49
- log.error("Failed to initialize event filters", { error });
50
- throw new Error("Failed to initialize event filters: " + error.message);
51
- }
52
36
  // Initialize members and subscriptions
53
37
  this.fetchMembers()
54
38
  .then(() => {
@@ -57,10 +41,14 @@ class RLNBaseContract {
57
41
  .catch((error) => {
58
42
  log.error("Failed to initialize members", { error });
59
43
  });
60
- // Validate rate limit asynchronously
61
- this.validateRateLimit(rateLimit).catch((error) => {
62
- log.error("Failed to validate initial rate limit", { error });
63
- });
44
+ const { address, signer, rateLimit = DEFAULT_RATE_LIMIT, contract } = options;
45
+ this.validateRateLimit(rateLimit);
46
+ this.contract = contract || new Contract(address, RLN_ABI, signer);
47
+ this.rateLimit = rateLimit;
48
+ // Initialize event filters
49
+ this._membersFilter = this.contract.filters.MembershipRegistered();
50
+ this._membershipErasedFilter = this.contract.filters.MembershipErased();
51
+ this._membersExpiredFilter = this.contract.filters.MembershipExpired();
64
52
  }
65
53
  /**
66
54
  * Gets the current rate limit for this contract instance
@@ -128,7 +116,7 @@ class RLNBaseContract {
128
116
  * @param newRateLimit The new rate limit to use
129
117
  */
130
118
  async setRateLimit(newRateLimit) {
131
- await this.validateRateLimit(newRateLimit);
119
+ this.validateRateLimit(newRateLimit);
132
120
  this.rateLimit = newRateLimit;
133
121
  }
134
122
  get members() {
@@ -259,63 +247,75 @@ class RLNBaseContract {
259
247
  this.processEvents([event]);
260
248
  });
261
249
  }
262
- async getMembershipInfo(idCommitmentBigInt) {
250
+ /**
251
+ * Helper method to get remaining messages in current epoch
252
+ * @param membershipId The ID of the membership to check
253
+ * @returns number of remaining messages allowed in current epoch
254
+ */
255
+ async getRemainingMessages(membershipId) {
263
256
  try {
264
- const membershipData = await this.contract.memberships(idCommitmentBigInt);
257
+ const [startTime, , rateLimit] = await this.contract.getMembershipInfo(membershipId);
258
+ // Calculate current epoch
259
+ const currentTime = Math.floor(Date.now() / 1000);
260
+ const epochsPassed = Math.floor((currentTime - startTime) / RATE_LIMIT_PARAMS.EPOCH_LENGTH);
261
+ const currentEpochStart = startTime + epochsPassed * RATE_LIMIT_PARAMS.EPOCH_LENGTH;
262
+ // Get message count in current epoch using contract's function
263
+ const messageCount = await this.contract.getMessageCount(membershipId, currentEpochStart);
264
+ return Math.max(0, BigNumber.from(rateLimit)
265
+ .sub(BigNumber.from(messageCount))
266
+ .toNumber());
267
+ }
268
+ catch (error) {
269
+ log.error(`Error getting remaining messages: ${error.message}`);
270
+ return 0; // Fail safe: assume no messages remaining on error
271
+ }
272
+ }
273
+ async getMembershipInfo(idCommitment) {
274
+ try {
275
+ const [startBlock, endBlock, rateLimit] = await this.contract.getMembershipInfo(idCommitment);
265
276
  const currentBlock = await this.contract.provider.getBlockNumber();
266
- const [depositAmount, activeDuration, gracePeriodStartTimestamp, gracePeriodDuration, rateLimit, index, holder, token] = membershipData;
267
- const gracePeriodEnd = gracePeriodStartTimestamp.add(gracePeriodDuration);
268
277
  let state;
269
- if (currentBlock < gracePeriodStartTimestamp.toNumber()) {
278
+ if (currentBlock < startBlock) {
270
279
  state = MembershipState.Active;
271
280
  }
272
- else if (currentBlock < gracePeriodEnd.toNumber()) {
281
+ else if (currentBlock < endBlock) {
273
282
  state = MembershipState.GracePeriod;
274
283
  }
275
284
  else {
276
285
  state = MembershipState.Expired;
277
286
  }
287
+ const index = await this.getMemberIndex(idCommitment);
288
+ if (!index)
289
+ return undefined;
278
290
  return {
279
291
  index,
280
- idCommitment: idCommitmentBigInt.toString(),
281
- rateLimit: Number(rateLimit),
282
- startBlock: gracePeriodStartTimestamp.toNumber(),
283
- endBlock: gracePeriodEnd.toNumber(),
284
- state,
285
- depositAmount,
286
- activeDuration,
287
- gracePeriodDuration,
288
- holder,
289
- token
292
+ idCommitment,
293
+ rateLimit: rateLimit.toNumber(),
294
+ startBlock: startBlock.toNumber(),
295
+ endBlock: endBlock.toNumber(),
296
+ state
290
297
  };
291
298
  }
292
299
  catch (error) {
293
- log.error("Error in getMembershipInfo:", error);
294
300
  return undefined;
295
301
  }
296
302
  }
297
- async extendMembership(idCommitmentBigInt) {
298
- const tx = await this.contract.extendMemberships([idCommitmentBigInt]);
299
- await tx.wait();
300
- return tx;
303
+ async extendMembership(idCommitment) {
304
+ return this.contract.extendMemberships([idCommitment]);
301
305
  }
302
- async eraseMembership(idCommitmentBigInt, eraseFromMembershipSet = true) {
303
- const estimatedGas = await this.contract.estimateGas["eraseMemberships(uint256[],bool)"]([idCommitmentBigInt], eraseFromMembershipSet);
304
- const gasLimit = estimatedGas.add(10000);
305
- const tx = await this.contract["eraseMemberships(uint256[],bool)"]([idCommitmentBigInt], eraseFromMembershipSet, { gasLimit });
306
- await tx.wait();
307
- return tx;
306
+ async eraseMembership(idCommitment, eraseFromMembershipSet = true) {
307
+ return this.contract.eraseMemberships([idCommitment], eraseFromMembershipSet);
308
308
  }
309
- async registerMembership(idCommitmentBigInt, rateLimit = DEFAULT_RATE_LIMIT) {
309
+ async registerMembership(idCommitment, rateLimit = DEFAULT_RATE_LIMIT) {
310
310
  if (rateLimit < RATE_LIMIT_PARAMS.MIN_RATE ||
311
311
  rateLimit > RATE_LIMIT_PARAMS.MAX_RATE) {
312
312
  throw new Error(`Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE}`);
313
313
  }
314
- return this.contract.register(idCommitmentBigInt, rateLimit, []);
314
+ return this.contract.register(idCommitment, rateLimit, []);
315
315
  }
316
- async withdraw(token, from) {
316
+ async withdraw(token, holder) {
317
317
  try {
318
- const tx = await this.contract.withdraw(token, from);
318
+ const tx = await this.contract.withdraw(token, { from: holder });
319
319
  await tx.wait();
320
320
  }
321
321
  catch (error) {
@@ -326,7 +326,7 @@ class RLNBaseContract {
326
326
  try {
327
327
  log.info(`Registering identity with rate limit: ${this.rateLimit} messages/epoch`);
328
328
  // Check if the ID commitment is already registered
329
- const existingIndex = await this.getMemberIndex(identity.IDCommitmentBigInt);
329
+ const existingIndex = await this.getMemberIndex(identity.IDCommitmentBigInt.toString());
330
330
  if (existingIndex) {
331
331
  throw new Error(`ID commitment is already registered with index ${existingIndex}`);
332
332
  }
@@ -435,15 +435,10 @@ class RLNBaseContract {
435
435
  * Validates that the rate limit is within the allowed range
436
436
  * @throws Error if the rate limit is outside the allowed range
437
437
  */
438
- async validateRateLimit(rateLimit) {
439
- const [minRate, maxRate] = await Promise.all([
440
- this.contract.minMembershipRateLimit(),
441
- this.contract.maxMembershipRateLimit()
442
- ]);
443
- const minRateNum = BigNumber.from(minRate).toNumber();
444
- const maxRateNum = BigNumber.from(maxRate).toNumber();
445
- if (rateLimit < minRateNum || rateLimit > maxRateNum) {
446
- throw new Error(`Rate limit must be between ${minRateNum} and ${maxRateNum} messages per epoch`);
438
+ validateRateLimit(rateLimit) {
439
+ if (rateLimit < RATE_LIMIT_PARAMS.MIN_RATE ||
440
+ rateLimit > RATE_LIMIT_PARAMS.MAX_RATE) {
441
+ throw new Error(`Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE} messages per epoch`);
447
442
  }
448
443
  }
449
444
  get membersFilter() {
@@ -464,9 +459,9 @@ class RLNBaseContract {
464
459
  }
465
460
  return this._membersExpiredFilter;
466
461
  }
467
- async getMemberIndex(idCommitmentBigInt) {
462
+ async getMemberIndex(idCommitment) {
468
463
  try {
469
- const events = await this.contract.queryFilter(this.contract.filters.MembershipRegistered(idCommitmentBigInt));
464
+ const events = await this.contract.queryFilter(this.contract.filters.MembershipRegistered(idCommitment));
470
465
  if (events.length === 0)
471
466
  return undefined;
472
467
  // Get the most recent registration event
@@ -6,7 +6,7 @@ import { Logger } from '../../../utils/dist/logger/index.js';
6
6
  import { MerkleRootTracker } from '../root_tracker.js';
7
7
  import { zeroPadLE } from '../utils/bytes.js';
8
8
  import { RLNBaseContract } from './rln_base_contract.js';
9
- import { BigNumber } from '@ethersproject/bignumber';
9
+ import { BigNumber } from '../../../../node_modules/@ethersproject/bignumber/lib.esm/bignumber.js';
10
10
 
11
11
  const log = new Logger("waku:rln:contract");
12
12
  class RLNContract extends RLNBaseContract {
@@ -45,14 +45,8 @@ function writeUIntLE(buf, value, offset, byteLength, noAssert) {
45
45
  * @returns BigInt
46
46
  */
47
47
  function buildBigIntFromUint8Array(array, byteOffset = 0) {
48
- // Convert byte array to BigInt in big-endian format (to match nwaku)
49
- let result = 0n;
50
- // Process all 32 bytes (or the available bytes if less)
51
- const length = Math.min(array.length - byteOffset, 32);
52
- for (let i = 0; i < length; i++) {
53
- result = (result << 8n) | BigInt(array[byteOffset + i]);
54
- }
55
- return result;
48
+ const dataView = new DataView(array.buffer);
49
+ return dataView.getBigUint64(byteOffset, true);
56
50
  }
57
51
  /**
58
52
  * Fills with zeros to set length
@@ -1,4 +1,4 @@
1
- import * as providers from '@ethersproject/providers';
1
+ import { Web3Provider } from '../../../../node_modules/@ethersproject/providers/lib.esm/web3-provider.js';
2
2
 
3
3
  const extractMetaMaskSigner = async () => {
4
4
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -7,7 +7,7 @@ const extractMetaMaskSigner = async () => {
7
7
  throw Error("Missing or invalid Ethereum provider. Please install a Web3 wallet such as MetaMask.");
8
8
  }
9
9
  await ethereum.request({ method: "eth_requestAccounts" });
10
- const provider = new providers.Web3Provider(ethereum, "any");
10
+ const provider = new Web3Provider(ethereum, "any");
11
11
  return provider.getSigner();
12
12
  };
13
13