fix: use proper rate limits

This commit is contained in:
Danish Arora 2025-03-27 12:53:59 +05:30
parent 7b9fadb21a
commit d60962dcb0
No known key found for this signature in database
GPG Key ID: 1C6EF37CDAE1426E
9 changed files with 480 additions and 159 deletions

View File

@ -8,7 +8,7 @@
"name": "waku-keystore-management",
"version": "0.1.0",
"dependencies": {
"@waku/rln": "0.0.2-5c50ed7.0",
"@waku/rln": "0.1.5-6198efb.0",
"next": "15.1.7",
"react": "^19.0.0",
"react-dom": "^19.0.0"
@ -1517,21 +1517,21 @@
}
},
"node_modules/@libp2p/interface-internal": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-2.3.7.tgz",
"integrity": "sha512-u0I4zqUJhhPbL2ReX88068Sudv2uA/Z1sn6EeD8mr5kkGActTrzxoTjjxscmiQgQybOVyvJbkTiJciorT0ZyPw==",
"version": "2.3.9",
"resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-2.3.9.tgz",
"integrity": "sha512-1hW/yHktO3txc+r4ASmVA9GbNN6ZoGnH8Bt9VrYwY580BT53TP3eipn3Bo1XyGBDtmV6bpQiKhFK5AYVbhnz0g==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/interface": "^2.7.0",
"@libp2p/peer-collections": "^6.0.23",
"@libp2p/peer-collections": "^6.0.25",
"@multiformats/multiaddr": "^12.3.3",
"progress-events": "^1.0.1"
}
},
"node_modules/@libp2p/logger": {
"version": "5.1.12",
"resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.12.tgz",
"integrity": "sha512-9K18gnPXxPkgPTQKHgCYaUimlbYheAEogDXvYme1TsPEBPH9oYTVsFpZhe5r92auE3aNuzUSR3VD0TCs/bAZ7g==",
"version": "5.1.13",
"resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.13.tgz",
"integrity": "sha512-JKyMlySG8T+LpItsj9Vma57yap/A0HqJ8ZdaHvgdoThhSOfqcRs8oRWO/2EG0Q5hUXugw//EAT+Ptj8MyNdbjQ==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/interface": "^2.7.0",
@ -1542,21 +1542,21 @@
}
},
"node_modules/@libp2p/peer-collections": {
"version": "6.0.23",
"resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-6.0.23.tgz",
"integrity": "sha512-eJYmiq2KeUpm5727bl2ngSOnxPnc/VzKnHL2s30x9DfGxl2KpsFBuqAhnjpe5eCshHfQhXsIdbH+5IkY9jobrQ==",
"version": "6.0.25",
"resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-6.0.25.tgz",
"integrity": "sha512-sU6mjwANQvVPgTgslRZvxZ6cYzQJ66QmNHm6mrM0cx03Yf1heWnvL28N/P781nGsUjo1cJD7xB5ctAGk6A/lXw==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/interface": "^2.7.0",
"@libp2p/peer-id": "^5.0.16",
"@libp2p/utils": "^6.5.7",
"@libp2p/peer-id": "^5.1.0",
"@libp2p/utils": "^6.6.0",
"multiformats": "^13.3.1"
}
},
"node_modules/@libp2p/peer-id": {
"version": "5.0.16",
"resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.0.16.tgz",
"integrity": "sha512-gRVTWk8LvkSBStvqxc4A1JycEo4H+rJwwefdBmLR+d3fHiUf/2Y6t5elQJzouxykwurAglr8DnUhwCB/pQ9eQQ==",
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.0.tgz",
"integrity": "sha512-9Xob9DDg1uBboM2QvJ5nyPbsjxsNS9obmGAYeAtLSx5aHAIC4AweJQFHssUUCfW7mufkzX/s3zyR62XPR4SYyQ==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/crypto": "^5.0.15",
@ -1581,16 +1581,16 @@
}
},
"node_modules/@libp2p/utils": {
"version": "6.5.7",
"resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.5.7.tgz",
"integrity": "sha512-fu6oRgSCOYlbuQObuF/ZVynMc7vdAfekxfi7B7TW6KjZEWmzeErvX1iEk9pfyJo5D0IxBCIMPRkN+Rr5MDfNWg==",
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.6.0.tgz",
"integrity": "sha512-QjS1+r+jInOxULjdATBc1N/gorUWUoJqEKxpqTcB2wOwCipzB58RYR3n3QPeoRHj1mVMhZujE1dTbmK/Nafhqg==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@chainsafe/is-ip": "^2.0.2",
"@chainsafe/netmask": "^2.0.0",
"@libp2p/crypto": "^5.0.15",
"@libp2p/interface": "^2.7.0",
"@libp2p/logger": "^5.1.12",
"@libp2p/logger": "^5.1.13",
"@multiformats/multiaddr": "^12.3.3",
"@sindresorhus/fnv1a": "^3.1.0",
"any-signal": "^4.1.1",
@ -1954,6 +1954,50 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@sinonjs/commons": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
"integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"license": "BSD-3-Clause",
"dependencies": {
"type-detect": "4.0.8"
}
},
"node_modules/@sinonjs/fake-timers": {
"version": "13.0.5",
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz",
"integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==",
"license": "BSD-3-Clause",
"dependencies": {
"@sinonjs/commons": "^3.0.1"
}
},
"node_modules/@sinonjs/samsam": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz",
"integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==",
"license": "BSD-3-Clause",
"dependencies": {
"@sinonjs/commons": "^3.0.1",
"lodash.get": "^4.4.2",
"type-detect": "^4.1.0"
}
},
"node_modules/@sinonjs/samsam/node_modules/type-detect": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
"integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/@sinonjs/text-encoding": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz",
"integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==",
"license": "(Unlicense OR Apache-2.0)"
},
"node_modules/@swc/counter": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
@ -2265,16 +2309,16 @@
}
},
"node_modules/@waku/core": {
"version": "0.0.34-5c50ed7.0",
"resolved": "https://registry.npmjs.org/@waku/core/-/core-0.0.34-5c50ed7.0.tgz",
"integrity": "sha512-GWYRzLZTfWgwXrK/KCWU3bbsYiE7pCyjGHKOfTDnUX9Z0LEx9fs5nDF7LyK41uefrZ0c6zrth3TH+Rkawm5aHw==",
"version": "0.0.35-6198efb.0",
"resolved": "https://registry.npmjs.org/@waku/core/-/core-0.0.35-6198efb.0.tgz",
"integrity": "sha512-9ta28XPCs9mOT9DmaewxHuZyWVME5bqRsF8Hardrd4QaHVLEaE5nlqi1nF7PoxdwF+l+XmZ2x/gqwgDee6qPwg==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"@libp2p/ping": "2.0.1",
"@waku/enr": "0.0.28-5c50ed7.0",
"@waku/interfaces": "0.0.29-5c50ed7.0",
"@waku/proto": "0.0.9-5c50ed7.0",
"@waku/utils": "0.0.22-5c50ed7.0",
"@waku/enr": "0.0.29-6198efb.0",
"@waku/interfaces": "0.0.30-6198efb.0",
"@waku/proto": "0.0.10-6198efb.0",
"@waku/utils": "0.0.23-6198efb.0",
"debug": "^4.3.4",
"it-all": "^3.0.4",
"it-length-prefixed": "^9.0.4",
@ -2312,9 +2356,9 @@
}
},
"node_modules/@waku/enr": {
"version": "0.0.28-5c50ed7.0",
"resolved": "https://registry.npmjs.org/@waku/enr/-/enr-0.0.28-5c50ed7.0.tgz",
"integrity": "sha512-Ms4FSw/fvkC63yHlikXCSRNUbxcAph4Os4uveVEnevV96B9k5GIoy5VzkLQbimWEdplgNBTiPzwI47O2AhvDrw==",
"version": "0.0.29-6198efb.0",
"resolved": "https://registry.npmjs.org/@waku/enr/-/enr-0.0.29-6198efb.0.tgz",
"integrity": "sha512-vInEV3d2LV1fakhXIACYn4PBZwYLZNpKYqDMU1YJQ3yoQv6nHl0emeGz7GviyXh+2qyLFjEKzesqhLht41kP/A==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"@ethersproject/rlp": "^5.7.0",
@ -2322,7 +2366,7 @@
"@libp2p/peer-id": "^5.0.1",
"@multiformats/multiaddr": "^12.0.0",
"@noble/secp256k1": "^1.7.1",
"@waku/utils": "0.0.22-5c50ed7.0",
"@waku/utils": "0.0.23-6198efb.0",
"debug": "^4.3.4",
"js-sha3": "^0.9.2"
},
@ -2339,21 +2383,21 @@
}
},
"node_modules/@waku/interfaces": {
"version": "0.0.29-5c50ed7.0",
"resolved": "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.29-5c50ed7.0.tgz",
"integrity": "sha512-yfu9+SYLHpA7z9U1VuYlbhQVb5hBfUnqvAT7cLSbBKW4S13+gHaalZ3SFpZy8hYTqiIA5MTvXysWlSfLv6zIyw==",
"version": "0.0.30-6198efb.0",
"resolved": "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.30-6198efb.0.tgz",
"integrity": "sha512-K+DIqbSFct0/1RYg2QdpviXOps9mDo04quW7jvlUvKP9qVBDvDUBlZrvfw+kIHr77g0DzyYLganuLv/Ocd13rw==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"@waku/proto": "0.0.9-5c50ed7.0"
"@waku/proto": "0.0.10-6198efb.0"
},
"engines": {
"node": ">=20"
}
},
"node_modules/@waku/proto": {
"version": "0.0.9-5c50ed7.0",
"resolved": "https://registry.npmjs.org/@waku/proto/-/proto-0.0.9-5c50ed7.0.tgz",
"integrity": "sha512-3QfqbglgWjotrlzrNgtbiXDnxOOP68Bew2OZMhDW8bF7bUdBsq1Y8eih6eJPEcQ/8EP53OQ+gJ0FFv8BTaKLrw==",
"version": "0.0.10-6198efb.0",
"resolved": "https://registry.npmjs.org/@waku/proto/-/proto-0.0.10-6198efb.0.tgz",
"integrity": "sha512-PQktYd1wgQ9Ihdyf+u950ugJL3LUfLh0kEvEHlSLhD9fOsipaegPBR7EsK78cecpZP1hBxuOZwjr5coO3byWlg==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"protons-runtime": "^5.4.0"
@ -2363,19 +2407,24 @@
}
},
"node_modules/@waku/rln": {
"version": "0.0.2-5c50ed7.0",
"resolved": "https://registry.npmjs.org/@waku/rln/-/rln-0.0.2-5c50ed7.0.tgz",
"integrity": "sha512-8C1OevAJMgZn7FWjqsQIMS5PCgAKlr9Dcs4nyXCvTaHBptkFWzVfhVa7hdz2EpcOtlYD1HqsvDeT17S15m1lmA==",
"version": "0.1.5-6198efb.0",
"resolved": "https://registry.npmjs.org/@waku/rln/-/rln-0.1.5-6198efb.0.tgz",
"integrity": "sha512-v/x79fKH6M1E4qjpRWdGErSGt6p7LBLc9tt7G/ZFWJY8afBHbtOH3JrJ0ZqDc4oZsQbRRMGVLJ6WbJIDkQtoYA==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"@chainsafe/bls-keystore": "3.0.0",
"@noble/hashes": "^1.2.0",
"@waku/core": "0.0.34-5c50ed7.0",
"@waku/utils": "0.0.22-5c50ed7.0",
"@waku/core": "0.0.35-6198efb.0",
"@waku/utils": "0.0.23-6198efb.0",
"@waku/zerokit-rln-wasm": "^0.0.13",
"chai": "^5.1.2",
"chai-as-promised": "^8.0.1",
"chai-spies": "^1.1.0",
"chai-subset": "^1.6.0",
"ethereum-cryptography": "^3.1.0",
"ethers": "^5.7.2",
"lodash": "^4.17.21",
"sinon": "^19.0.2",
"uuid": "^11.0.5"
},
"engines": {
@ -2383,13 +2432,13 @@
}
},
"node_modules/@waku/utils": {
"version": "0.0.22-5c50ed7.0",
"resolved": "https://registry.npmjs.org/@waku/utils/-/utils-0.0.22-5c50ed7.0.tgz",
"integrity": "sha512-hD+XO7lZ86OL9zFEzZvBy6pmgZlmNw7g1xeoui3FOauv6+zL///tarjLrmkPWh+eLJHdalVvTF9D/zkUWbK9SA==",
"version": "0.0.23-6198efb.0",
"resolved": "https://registry.npmjs.org/@waku/utils/-/utils-0.0.23-6198efb.0.tgz",
"integrity": "sha512-K7RNG8ngHYpyVwIHeXaIAi52FO1fJM/h4gurxII331segXrnSXSYtnv3jwO3HDnoTMX+o21ddM0VfyzxilM3NQ==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"@noble/hashes": "^1.3.2",
"@waku/interfaces": "0.0.29-5c50ed7.0",
"@waku/interfaces": "0.0.30-6198efb.0",
"chai": "^4.3.10",
"debug": "^4.3.4",
"uint8arrays": "^5.0.1"
@ -2398,12 +2447,96 @@
"node": ">=20"
}
},
"node_modules/@waku/utils/node_modules/assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/@waku/utils/node_modules/chai": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz",
"integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==",
"license": "MIT",
"dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.3",
"deep-eql": "^4.1.3",
"get-func-name": "^2.0.2",
"loupe": "^2.3.6",
"pathval": "^1.1.1",
"type-detect": "^4.1.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/@waku/utils/node_modules/check-error": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
"integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
"license": "MIT",
"dependencies": {
"get-func-name": "^2.0.2"
},
"engines": {
"node": "*"
}
},
"node_modules/@waku/utils/node_modules/deep-eql": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz",
"integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==",
"license": "MIT",
"dependencies": {
"type-detect": "^4.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@waku/utils/node_modules/loupe": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
"integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
"license": "MIT",
"dependencies": {
"get-func-name": "^2.0.1"
}
},
"node_modules/@waku/utils/node_modules/pathval": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/@waku/utils/node_modules/type-detect": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
"integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/@waku/zerokit-rln-wasm": {
"version": "0.0.13",
"resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.13.tgz",
"integrity": "sha512-x7CRIIslmfCmTZc7yVp3dhLlKeLUs8ILIm9kv7+wVJ23H4pPw0Z+uH0ueLIYYfwODI6fDiwJj3S1vdFzM8D1zA==",
"license": "MIT or Apache2"
},
"node_modules/abort-error": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz",
"integrity": "sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg==",
"license": "Apache-2.0 OR MIT"
},
"node_modules/acorn": {
"version": "8.14.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
@ -2692,12 +2825,12 @@
}
},
"node_modules/assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
"integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
"license": "MIT",
"engines": {
"node": "*"
"node": ">=12"
}
},
"node_modules/ast-types-flow": {
@ -2961,19 +3094,50 @@
"license": "CC-BY-4.0"
},
"node_modules/chai": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz",
"integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz",
"integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==",
"license": "MIT",
"dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.3",
"deep-eql": "^4.1.3",
"get-func-name": "^2.0.2",
"loupe": "^2.3.6",
"pathval": "^1.1.1",
"type-detect": "^4.1.0"
"assertion-error": "^2.0.1",
"check-error": "^2.1.1",
"deep-eql": "^5.0.1",
"loupe": "^3.1.0",
"pathval": "^2.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/chai-as-promised": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-8.0.1.tgz",
"integrity": "sha512-OIEJtOL8xxJSH8JJWbIoRjybbzR52iFuDHuF8eb+nTPD6tgXLjRqsgnUGqQfFODxYvq5QdirT0pN9dZ0+Gz6rA==",
"license": "MIT",
"dependencies": {
"check-error": "^2.0.0"
},
"peerDependencies": {
"chai": ">= 2.1.2 < 6"
}
},
"node_modules/chai-spies": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/chai-spies/-/chai-spies-1.1.0.tgz",
"integrity": "sha512-ikaUhQvQWchRYj2K54itFp3nrcxaFRpSDQxDlRzSn9aWgu9Pi7lD8yFxTso4WnQ39+WZ69oB/qOvqp+isJIIWA==",
"license": "MIT",
"engines": {
"node": ">= 4.0.0"
},
"peerDependencies": {
"chai": "*"
}
},
"node_modules/chai-subset": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/chai-subset/-/chai-subset-1.6.0.tgz",
"integrity": "sha512-K3d+KmqdS5XKW5DWPd5sgNffL3uxdDe+6GdnJh3AYPhwnBGRY5urfvfcbRtWIvvpz+KxkL9FeBB6MZewLUNwug==",
"license": "MIT",
"engines": {
"node": ">=4"
}
@ -2996,15 +3160,12 @@
}
},
"node_modules/check-error": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
"integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
"integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
"license": "MIT",
"dependencies": {
"get-func-name": "^2.0.2"
},
"engines": {
"node": "*"
"node": ">= 16"
}
},
"node_modules/chokidar": {
@ -3227,13 +3388,10 @@
}
},
"node_modules/deep-eql": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz",
"integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==",
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
"integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
"license": "MIT",
"dependencies": {
"type-detect": "^4.0.0"
},
"engines": {
"node": ">=6"
}
@ -3310,6 +3468,15 @@
"dev": true,
"license": "Apache-2.0"
},
"node_modules/diff": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
"integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
@ -4522,7 +4689,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@ -5197,12 +5363,12 @@
}
},
"node_modules/it-merge": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.7.tgz",
"integrity": "sha512-4Jzk4ysLW9D6EP6tLCQF253X/ZLO/ELjG9S+Ax79Peo3GQvV4Czux8s3gFS3N/t7/mFhG17ouPvuwY9reFIf+w==",
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.9.tgz",
"integrity": "sha512-TjY4WTiwe4ONmaKScNvHDAJj6Tw0UeQFp4JrtC/3Mq7DTyhytes7mnv5OpZV4gItpZcs0AgRntpT2vAy2cnXUw==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"it-pushable": "^3.2.3"
"it-queueless-pushable": "^2.0.0"
}
},
"node_modules/it-peekable": {
@ -5235,6 +5401,17 @@
"p-defer": "^4.0.0"
}
},
"node_modules/it-queueless-pushable": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.0.tgz",
"integrity": "sha512-MlNnefWT/ntv5fesrHpxwVIu6ZdtlkN0A4aaJiE5wnmPMBv9ttiwX3UEMf78dFwIj5ZNaU9usYXg4swMEpUNJQ==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"abort-error": "^1.0.1",
"p-defer": "^4.0.1",
"race-signal": "^1.1.3"
}
},
"node_modules/it-reader": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/it-reader/-/it-reader-6.0.4.tgz",
@ -5375,6 +5552,12 @@
"node": ">=4.0"
}
},
"node_modules/just-extend": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz",
"integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==",
"license": "MIT"
},
"node_modules/keyv": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@ -5461,6 +5644,13 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
"node_modules/lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
"deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.",
"license": "MIT"
},
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@ -5482,13 +5672,10 @@
}
},
"node_modules/loupe": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
"integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
"license": "MIT",
"dependencies": {
"get-func-name": "^2.0.1"
}
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
"integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==",
"license": "MIT"
},
"node_modules/lru-cache": {
"version": "10.4.3",
@ -5716,6 +5903,19 @@
"node": "^10 || ^12 || >=14"
}
},
"node_modules/nise": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz",
"integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==",
"license": "BSD-3-Clause",
"dependencies": {
"@sinonjs/commons": "^3.0.1",
"@sinonjs/fake-timers": "^13.0.1",
"@sinonjs/text-encoding": "^0.7.3",
"just-extend": "^6.2.0",
"path-to-regexp": "^8.1.0"
}
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@ -6030,13 +6230,22 @@
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/pathval": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"node_modules/path-to-regexp": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz",
"integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==",
"license": "MIT",
"engines": {
"node": "*"
"node": ">=16"
}
},
"node_modules/pathval": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
"integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
"license": "MIT",
"engines": {
"node": ">= 14.16"
}
},
"node_modules/picocolors": {
@ -6782,6 +6991,24 @@
"is-arrayish": "^0.3.1"
}
},
"node_modules/sinon": {
"version": "19.0.5",
"resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.5.tgz",
"integrity": "sha512-r15s9/s+ub/d4bxNXqIUmwp6imVSdTorIRaxoecYjqTVLZ8RuoXr/4EDGwIBo6Waxn7f2gnURX9zuhAfCwaF6Q==",
"license": "BSD-3-Clause",
"dependencies": {
"@sinonjs/commons": "^3.0.1",
"@sinonjs/fake-timers": "^13.0.5",
"@sinonjs/samsam": "^8.0.1",
"diff": "^7.0.0",
"nise": "^6.1.1",
"supports-color": "^7.2.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/sinon"
}
},
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@ -7096,7 +7323,6 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@ -7330,9 +7556,9 @@
}
},
"node_modules/type-detect": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
"integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"license": "MIT",
"engines": {
"node": ">=4"

View File

@ -10,7 +10,7 @@
"lint": "next lint"
},
"dependencies": {
"@waku/rln": "0.0.2-5c50ed7.0",
"@waku/rln": "0.1.5-6198efb.0",
"next": "15.1.7",
"react": "^19.0.0",
"react-dom": "^19.0.0"

View File

@ -252,38 +252,42 @@ export default function RLNMembershipRegistration() {
</p>
{registrationResult.credentials && (
<div className="mt-3 p-3 bg-gray-100 dark:bg-gray-800 rounded-md">
<p className="font-medium mb-2">Your RLN Credentials:</p>
<div className="text-xs font-mono overflow-auto">
<h4 className="font-semibold mt-2 mb-1">Identity:</h4>
<p className="mb-1">
<span className="font-semibold">ID Commitment:</span> {Buffer.from(registrationResult.credentials.identity.IDCommitment).toString('hex')}
</p>
<p className="mb-1">
<span className="font-semibold">ID Secret Hash:</span> {Buffer.from(registrationResult.credentials.identity.IDSecretHash).toString('hex')}
</p>
<p className="mb-1">
<span className="font-semibold">ID Nullifier:</span> {Buffer.from(registrationResult.credentials.identity.IDNullifier).toString('hex')}
</p>
<p className="mb-3">
<span className="font-semibold">ID Trapdoor:</span> {Buffer.from(registrationResult.credentials.identity.IDTrapdoor).toString('hex')}
</p>
<h4 className="font-semibold mt-3 mb-1">Membership:</h4>
<p className="mb-1">
<span className="font-semibold">Chain ID:</span> {registrationResult.credentials.membership.chainId}
</p>
<p className="mb-1">
<span className="font-semibold">Contract Address:</span> {registrationResult.credentials.membership.address}
</p>
<p className="mb-1">
<span className="font-semibold">Tree Index:</span> {registrationResult.credentials.membership.treeIndex}
</p>
</div>
<p className="text-xs mt-2 text-gray-600 dark:text-gray-400">
These credentials are your proof of membership. Store them securely.
</p>
</div>
<><div className="mt-3 p-3 bg-gray-100 dark:bg-gray-800 rounded-md">
<p className="font-medium mb-2">Your RLN Credentials:</p>
<div className="text-xs font-mono overflow-auto">
<h4 className="font-semibold mt-2 mb-1">Identity:</h4>
<p className="mb-1">
<span className="font-semibold">ID Commitment:</span> {Buffer.from(registrationResult.credentials.identity.IDCommitment).toString('hex')}
</p>
<p className="mb-1">
<span className="font-semibold">ID Secret Hash:</span> {Buffer.from(registrationResult.credentials.identity.IDSecretHash).toString('hex')}
</p>
<p className="mb-1">
<span className="font-semibold">ID Nullifier:</span> {Buffer.from(registrationResult.credentials.identity.IDNullifier).toString('hex')}
</p>
<p className="mb-3">
<span className="font-semibold">ID Trapdoor:</span> {Buffer.from(registrationResult.credentials.identity.IDTrapdoor).toString('hex')}
</p>
<h4 className="font-semibold mt-3 mb-1">Membership:</h4>
<p className="mb-1">
<span className="font-semibold">Chain ID:</span> {registrationResult.credentials.membership.chainId}
</p>
<p className="mb-1">
<span className="font-semibold">Contract Address:</span> {registrationResult.credentials.membership.address}
</p>
<p className="mb-1">
<span className="font-semibold">Tree Index:</span> {registrationResult.credentials.membership.treeIndex}
</p>
<p className="mb-1">
<span className="font-semibold">Rate Limit:</span> {registrationResult.credentials.membership.rateLimit}
</p>
</div>
<p className="text-xs mt-2 text-gray-600 dark:text-gray-400">
These credentials are your proof of membership. Store them securely.
</p>
</div>
</>
)}
</div>
)}
@ -315,6 +319,7 @@ export default function RLNMembershipRegistration() {
<p>RLN Initialized: {isInitialized ? "Yes" : "No"}</p>
<p>RLN Started: {isStarted ? "Yes" : "No"}</p>
<p>Min Rate: {rateMinLimit}, Max Rate: {rateMaxLimit}</p>
<p>Current Rate Limit: {rateLimit}</p>
</div>
</div>
);

View File

@ -1,6 +1,6 @@
"use client";
import { createRLN, RLNLightInstance } from '@waku/rln';
import { createRLN, MembershipInfo, RLNLightInstance } from '@waku/rln';
import { ethers } from 'ethers';
// Define a unified interface that both implementations must support
@ -8,6 +8,18 @@ export interface UnifiedRLNInstance {
contract: {
address: string;
membershipFee?: () => Promise<ethers.BigNumber>;
getRateLimit: () => number;
getMinRateLimit: () => Promise<number>;
getMaxRateLimit: () => Promise<number>;
getMaxTotalRateLimit: () => Promise<number>;
getCurrentTotalRateLimit: () => Promise<number>;
getRemainingTotalRateLimit: () => Promise<number>;
setRateLimit: (newRateLimit: number) => Promise<void>;
getRemainingMessages: (membershipId: number) => Promise<number>;
getMembershipInfo: (idCommitment: string) => Promise<MembershipInfo | undefined>;
extendMembership: (idCommitment: string) => Promise<ethers.ContractTransaction>;
eraseMembership: (idCommitment: string, eraseFromMembershipSet?: boolean) => Promise<ethers.ContractTransaction>;
registerMembership: (idCommitment: string, rateLimit?: number) => Promise<ethers.ContractTransaction>;
};
start: (options: { signer: ethers.Signer }) => Promise<void>;
// Both implementations use registerMembership but with different parameters

View File

@ -38,8 +38,8 @@ export function RLNProvider({ children }: { children: ReactNode }) {
const [isInitialized, setIsInitialized] = useState(false);
const [isStarted, setIsStarted] = useState(false);
const [error, setError] = useState<string | null>(null);
const [rateMinLimit, setRateMinLimit] = useState(20);
const [rateMaxLimit, setRateMaxLimit] = useState(600);
const [rateMinLimit, setRateMinLimit] = useState(0);
const [rateMaxLimit, setRateMaxLimit] = useState(0);
const ensureLineaSepoliaNetwork = async (): Promise<boolean> => {
try {
@ -105,10 +105,6 @@ export function RLNProvider({ children }: { children: ReactNode }) {
setIsInitialized(true);
console.log("isInitialized set to true");
// Update rate limits to match contract requirements
setRateMinLimit(20); // Contract minimum (RATE_LIMIT_PARAMS.MIN_RATE)
setRateMaxLimit(600); // Contract maximum (RATE_LIMIT_PARAMS.MAX_RATE)
} catch (createErr) {
console.error("Error creating RLN instance:", createErr);
throw createErr;
@ -130,6 +126,17 @@ export function RLNProvider({ children }: { children: ReactNode }) {
setIsStarted(true);
console.log("RLN started successfully, isStarted set to true");
const minRate = await rln.contract?.getMinRateLimit();
const maxRate = await rln.contract?.getMaxRateLimit();
if (!minRate || !maxRate) {
throw new Error("Failed to get rate limits from contract");
}
setRateMinLimit(minRate);
setRateMaxLimit(maxRate);
console.log("Min rate:", minRate);
console.log("Max rate:", maxRate);
} catch (startErr) {
console.error("Error starting RLN:", startErr);
throw startErr;
@ -167,6 +174,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
error: `Rate limit must be between ${rateMinLimit} and ${rateMaxLimit}`
};
}
await rln.contract?.setRateLimit(rateLimit);
// Ensure we're on the correct network
const isOnLineaSepolia = await ensureLineaSepoliaNetwork();
@ -258,7 +266,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
} else {
console.log("Wallet not connected or no signer available, skipping RLN initialization");
}
}, [isConnected, signer]);
}, [initializeRLN, isConnected, signer]);
// Debug log for state changes
useEffect(() => {

View File

@ -1,7 +1,7 @@
"use client";
import { ReactNode } from 'react';
import { RLNProvider as StandardRLNProvider } from './RLNContext';
import { RLNProvider as StandardRLNProvider } from './RLNZerokitContext';
import { RLNProvider as LightRLNProvider } from './RLNLightContext';
import { useRLNImplementation } from './RLNImplementationContext';

View File

@ -30,6 +30,8 @@ interface RLNContextType {
registerMembership: (rateLimit: number) => Promise<{ success: boolean; error?: string; credentials?: KeystoreEntity }>;
rateMinLimit: number;
rateMaxLimit: number;
getCurrentRateLimit: () => Promise<number | null>;
getRateLimitsBounds: () => Promise<{ success: boolean; rateMinLimit: number; rateMaxLimit: number; error?: string }>;
}
// Create the context
@ -42,12 +44,12 @@ export function RLNUnifiedProvider({ children }: { children: ReactNode }) {
const [isInitialized, setIsInitialized] = useState(false);
const [isStarted, setIsStarted] = useState(false);
const [error, setError] = useState<string | null>(null);
const [rateMinLimit, setRateMinLimit] = useState(20);
const [rateMaxLimit, setRateMaxLimit] = useState(600);
// Get the signer from window.ethereum
const [signer, setSigner] = useState<ethers.Signer | null>(null);
const [isConnected, setIsConnected] = useState(false);
const [rateMinLimit, setRateMinLimit] = useState<number>(0);
const [rateMaxLimit, setRateMaxLimit] = useState<number>(0);
// Listen for wallet connection
useEffect(() => {
@ -163,10 +165,6 @@ export function RLNUnifiedProvider({ children }: { children: ReactNode }) {
setIsInitialized(true);
console.log("isInitialized set to true");
// Update rate limits to match contract requirements
setRateMinLimit(20); // Contract minimum (RATE_LIMIT_PARAMS.MIN_RATE)
setRateMaxLimit(600); // Contract maximum (RATE_LIMIT_PARAMS.MAX_RATE)
} catch (createErr) {
console.error("Error creating RLN instance:", createErr);
throw createErr;
@ -188,6 +186,17 @@ export function RLNUnifiedProvider({ children }: { children: ReactNode }) {
setIsStarted(true);
console.log("RLN started successfully, isStarted set to true");
// Fetch rate limits after RLN is started
try {
const minLimit = await rln.contract.getMinRateLimit();
const maxLimit = await rln.contract.getMaxRateLimit();
setRateMinLimit(minLimit);
setRateMaxLimit(maxLimit);
console.log("Rate limits fetched:", { min: minLimit, max: maxLimit });
} catch (limitErr) {
console.warn("Could not fetch rate limits:", limitErr);
}
} catch (startErr) {
console.error("Error starting RLN:", startErr);
throw startErr;
@ -206,6 +215,55 @@ export function RLNUnifiedProvider({ children }: { children: ReactNode }) {
}
};
const getCurrentRateLimit = async (): Promise<number | null> => {
try {
if (!rln || !rln.contract || !isStarted) {
console.log("Cannot get rate limit: RLN not initialized or started");
return null;
}
const rateLimit = rln.contract.getRateLimit();
console.log("Current rate limit:", rateLimit);
return rateLimit;
} catch (err) {
console.error("Error getting current rate limit:", err);
return null;
}
};
const getRateLimitsBounds = async () => {
try {
if (!rln || !isStarted) {
return {
success: false,
rateMinLimit: 0,
rateMaxLimit: 0,
error: 'RLN not initialized or not started'
};
}
const minLimit = await rln.contract.getMinRateLimit();
const maxLimit = await rln.contract.getMaxRateLimit();
// Update state
setRateMinLimit(minLimit);
setRateMaxLimit(maxLimit);
return {
success: true,
rateMinLimit: minLimit,
rateMaxLimit: maxLimit
};
} catch (error) {
console.error("Error getting rate limits bounds:", error);
return {
success: false,
rateMinLimit: 0,
rateMaxLimit: 0,
error: 'Failed to get rate limits bounds'
};
}
}
const registerMembership = async (rateLimit: number) => {
console.log("registerMembership called with rate limit:", rateLimit);
@ -218,6 +276,13 @@ export function RLNUnifiedProvider({ children }: { children: ReactNode }) {
}
try {
console.log("im here")
const rateMinLimit = await rln.contract.getMinRateLimit();
const rateMaxLimit = await rln.contract.getMaxRateLimit();
console.log({
rateMinLimit,
rateMaxLimit
})
// Validate rate limit
if (rateLimit < rateMinLimit || rateLimit > rateMaxLimit) {
return {
@ -225,6 +290,8 @@ export function RLNUnifiedProvider({ children }: { children: ReactNode }) {
error: `Rate limit must be between ${rateMinLimit} and ${rateMaxLimit}`
};
}
rln.contract.setRateLimit(rateLimit);
console.log("Rate limit set to:", rateLimit);
// Ensure we're on the correct network
const isOnLineaSepolia = await ensureLineaSepoliaNetwork();
@ -337,6 +404,8 @@ export function RLNUnifiedProvider({ children }: { children: ReactNode }) {
error,
initializeRLN,
registerMembership,
getCurrentRateLimit,
getRateLimitsBounds,
rateMinLimit,
rateMaxLimit
};
@ -356,3 +425,4 @@ export function useRLN() {
}
return context;
}

View File

@ -43,7 +43,7 @@ export function UnifiedRLNProvider({ children }: { children: ReactNode }) {
try {
if (implementation === 'standard') {
// Import the standard RLN hook
const standardModule = await import('./RLNContext');
const standardModule = await import('./RLNZerokitContext');
const { useRLN: useStandardRLN } = standardModule;
// Create a temporary component to access the context

View File

@ -1,7 +1,7 @@
"use client";
import { createContext, useContext, useState, useEffect, ReactNode } from 'react';
import { createRLN, DecryptedCredentials, RLNInstance } from '@waku/rln';
import { createRLN, DecryptedCredentials, LINEA_CONTRACT, RLNInstance } from '@waku/rln';
import { useWallet } from './WalletContext';
import { ethers } from 'ethers';
@ -13,11 +13,7 @@ const ERC20_ABI = [
"function balanceOf(address account) view returns (uint256)"
];
// Linea Sepolia configuration
const LINEA_SEPOLIA_CONFIG = {
chainId: 59141,
tokenAddress: '0x185A0015aC462a0aECb81beCc0497b649a64B9ea'
};
interface RLNContextType {
rln: RLNInstance | null;
@ -38,15 +34,15 @@ export function RLNProvider({ children }: { children: ReactNode }) {
const [isInitialized, setIsInitialized] = useState(false);
const [isStarted, setIsStarted] = useState(false);
const [error, setError] = useState<string | null>(null);
const [rateMinLimit, setRateMinLimit] = useState(20);
const [rateMaxLimit, setRateMaxLimit] = useState(600);
const [rateMinLimit, setRateMinLimit] = useState(0);
const [rateMaxLimit, setRateMaxLimit] = useState(0);
const ensureLineaSepoliaNetwork = async (): Promise<boolean> => {
try {
console.log("Current network: unknown", await signer?.getChainId());
// Check if already on Linea Sepolia
if (await signer?.getChainId() === LINEA_SEPOLIA_CONFIG.chainId) {
if (await signer?.getChainId() === LINEA_CONTRACT.chainId) {
console.log("Already on Linea Sepolia network");
return true;
}
@ -73,7 +69,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
// Request network switch
await provider.request({
method: 'wallet_switchEthereumChain',
params: [{ chainId: `0x${LINEA_SEPOLIA_CONFIG.chainId.toString(16)}` }],
params: [{ chainId: `0x${LINEA_CONTRACT.chainId.toString(16)}` }],
});
console.log("Successfully switched to Linea Sepolia");
@ -105,10 +101,6 @@ export function RLNProvider({ children }: { children: ReactNode }) {
setIsInitialized(true);
console.log("isInitialized set to true");
// Update rate limits to match contract requirements
setRateMinLimit(20); // Contract minimum (RATE_LIMIT_PARAMS.MIN_RATE)
setRateMaxLimit(600); // Contract maximum (RATE_LIMIT_PARAMS.MAX_RATE)
} catch (createErr) {
console.error("Error creating RLN instance:", createErr);
throw createErr;
@ -130,6 +122,13 @@ export function RLNProvider({ children }: { children: ReactNode }) {
setIsStarted(true);
console.log("RLN started successfully, isStarted set to true");
const minRate = await rln.contract?.getMinRateLimit();
const maxRate = await rln.contract?.getMaxRateLimit();
setRateMinLimit(minRate || 0);
setRateMaxLimit(maxRate || 0);
console.log("Min rate:", minRate);
console.log("Max rate:", maxRate);
} catch (startErr) {
console.error("Error starting RLN:", startErr);
throw startErr;
@ -167,6 +166,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
error: `Rate limit must be between ${rateMinLimit} and ${rateMaxLimit}`
};
}
rln.contract?.setRateLimit(rateLimit);
// Ensure we're on the correct network
const isOnLineaSepolia = await ensureLineaSepoliaNetwork();
@ -182,7 +182,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
}
const contractAddress = rln.contract.address;
const tokenAddress = LINEA_SEPOLIA_CONFIG.tokenAddress;
const tokenAddress = LINEA_CONTRACT.address;
// Create token contract instance
const tokenContract = new ethers.Contract(