feat: update rln package and contract (#18)

This commit is contained in:
Arseniy Klempner 2025-10-02 23:21:31 -07:00 committed by GitHub
parent 6a5bb06153
commit a017c49600
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 734 additions and 281 deletions

351
package-lock.json generated
View File

@ -19,7 +19,7 @@
"@radix-ui/react-toggle": "^1.1.2",
"@radix-ui/react-toggle-group": "^1.1.2",
"@radix-ui/react-tooltip": "^1.1.8",
"@waku/rln": "0.1.7-987c6cd.0",
"@waku/rln": "0.1.10-593bc45.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"framer-motion": "^12.6.3",
@ -1292,51 +1292,77 @@
"license": "MIT"
},
"node_modules/@libp2p/crypto": {
"version": "5.1.7",
"resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.7.tgz",
"integrity": "sha512-7DO0piidLEKfCuNfS420BlHG0e2tH7W/zugdsPSiC/1Apa/s1B1dBkaIEgfDkGjrRP4S/8Or86Rtq7zXeEu67g==",
"version": "5.1.11",
"resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.11.tgz",
"integrity": "sha512-J+C4bntXEhf43fJZbgyoa4XI8/kzwB5wE/2FoNQcwhIwgDd4YyRB1SHswgI0KWqF0pgKtFLE+sLnUBn/ZYUTjw==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/interface": "^2.10.5",
"@noble/curves": "^1.9.1",
"@noble/hashes": "^1.8.0",
"multiformats": "^13.3.6",
"protons-runtime": "^5.5.0",
"@libp2p/interface": "^3.0.1",
"@noble/curves": "^2.0.1",
"@noble/hashes": "^2.0.1",
"multiformats": "^13.4.0",
"protons-runtime": "^5.6.0",
"uint8arraylist": "^2.4.8",
"uint8arrays": "^5.1.0"
}
},
"node_modules/@libp2p/crypto/node_modules/@libp2p/interface": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-3.0.1.tgz",
"integrity": "sha512-Fc502I77E+vLiADk7PyydM3NwW6F1HCQGhhtbzi9jLb+X8KgVBL3wlPqWXVM8fyQ++4CpOcAyMel8UYhIXr26w==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@multiformats/dns": "^1.0.6",
"@multiformats/multiaddr": "^13.0.1",
"main-event": "^1.0.1",
"multiformats": "^13.4.0",
"progress-events": "^1.0.1",
"uint8arraylist": "^2.4.8"
}
},
"node_modules/@libp2p/crypto/node_modules/@multiformats/multiaddr": {
"version": "13.0.1",
"resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-13.0.1.tgz",
"integrity": "sha512-XToN915cnfr6Lr9EdGWakGJbPT0ghpg/850HvdC+zFX8XvpLZElwa8synCiwa8TuvKNnny6m8j8NVBNCxhIO3g==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@chainsafe/is-ip": "^2.0.1",
"multiformats": "^13.0.0",
"uint8-varint": "^2.0.1",
"uint8arrays": "^5.0.0"
}
},
"node_modules/@libp2p/crypto/node_modules/@noble/curves": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz",
"integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz",
"integrity": "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==",
"license": "MIT",
"dependencies": {
"@noble/hashes": "1.8.0"
"@noble/hashes": "2.0.1"
},
"engines": {
"node": "^14.21.3 || >=16"
"node": ">= 20.19.0"
},
"funding": {
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/@libp2p/crypto/node_modules/@noble/hashes": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz",
"integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==",
"license": "MIT",
"engines": {
"node": "^14.21.3 || >=16"
"node": ">= 20.19.0"
},
"funding": {
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/@libp2p/interface": {
"version": "2.10.5",
"resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.10.5.tgz",
"integrity": "sha512-Z52n04Mph/myGdwyExbFi5S/HqrmZ9JOmfLc2v4r2Cik3GRdw98vrGH19PFvvwjLwAjaqsweCtlGaBzAz09YDw==",
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.11.0.tgz",
"integrity": "sha512-0MUFKoXWHTQW3oWIgSHApmYMUKWO/Y02+7Hpyp+n3z+geD4Xo2Rku2gYWmxcq+Pyjkz6Q9YjDWz3Yb2SoV2E8Q==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@multiformats/dns": "^1.0.6",
@ -1350,24 +1376,24 @@
}
},
"node_modules/@libp2p/interface-internal": {
"version": "2.3.18",
"resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-2.3.18.tgz",
"integrity": "sha512-tnZ20IFASXLbDc2JxeUPZNIXDuN5Ge7be6BU458WLvmquf93NlSqZkWs6xFdi+0yXUrw7GGTgzIP5v+1LnDUmA==",
"version": "2.3.19",
"resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-2.3.19.tgz",
"integrity": "sha512-v335EB0i5CaNF+0SqT01CTBp0VyjJizpy46KprcshFFjX16UQ8+/QzoTZqmot9WiAmAzwR0b87oKmlAE9cpxzQ==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/interface": "^2.10.5",
"@libp2p/peer-collections": "^6.0.34",
"@libp2p/interface": "^2.11.0",
"@libp2p/peer-collections": "^6.0.35",
"@multiformats/multiaddr": "^12.4.4",
"progress-events": "^1.0.1"
}
},
"node_modules/@libp2p/logger": {
"version": "5.1.21",
"resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.21.tgz",
"integrity": "sha512-V1TWlZM5BuKkiGQ7En4qOnseVP82JwDIpIfNjceUZz1ArL32A5HXJjLQnJchkZ3VW8PVciJzUos/vP6slhPY6Q==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.2.0.tgz",
"integrity": "sha512-OEFS529CnIKfbWEHmuCNESw9q0D0hL8cQ8klQfjIVPur15RcgAEgc1buQ7Y6l0B6tCYg120bp55+e9tGvn8c0g==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/interface": "^2.10.5",
"@libp2p/interface": "^2.11.0",
"@multiformats/multiaddr": "^12.4.4",
"interface-datastore": "^8.3.1",
"multiformats": "^13.3.6",
@ -1375,25 +1401,25 @@
}
},
"node_modules/@libp2p/peer-collections": {
"version": "6.0.34",
"resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-6.0.34.tgz",
"integrity": "sha512-rw8gDGhou4sF6W6i9ntmRARFePX19Dw9MMVpZHr6Kx9q2kvBJq91IXUzsXP06roexEOu1CUlZwxtUAqOBy+Eww==",
"version": "6.0.35",
"resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-6.0.35.tgz",
"integrity": "sha512-QiloK3T7DXW7R2cpL38dBnALCHf5pMzs/TyFzlEK33WezA2YFVoj7CtOJKqbn29bmV9uspWOxMgfmLUXf8ALvA==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/interface": "^2.10.5",
"@libp2p/peer-id": "^5.1.8",
"@libp2p/utils": "^6.7.1",
"@libp2p/interface": "^2.11.0",
"@libp2p/peer-id": "^5.1.9",
"@libp2p/utils": "^6.7.2",
"multiformats": "^13.3.6"
}
},
"node_modules/@libp2p/peer-id": {
"version": "5.1.8",
"resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.8.tgz",
"integrity": "sha512-pGaM4BwjnXdGtAtd84L4/wuABpsnFYE+AQ+h3GxNFme0IsTaTVKWd1jBBE5YFeKHBHGUOhF3TlHsdjFfjQA7TA==",
"version": "5.1.9",
"resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.9.tgz",
"integrity": "sha512-cVDp7lX187Epmi/zr0Qq2RsEMmueswP9eIxYSFoMcHL/qcvRFhsxOfUGB8361E26s2WJvC9sXZ0oJS9XVueJhQ==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/crypto": "^5.1.7",
"@libp2p/interface": "^2.10.5",
"@libp2p/crypto": "^5.1.8",
"@libp2p/interface": "^2.11.0",
"multiformats": "^13.3.6",
"uint8arrays": "^5.1.0"
}
@ -1414,16 +1440,16 @@
}
},
"node_modules/@libp2p/utils": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.7.1.tgz",
"integrity": "sha512-x3WImvw4unmx1ZeAedj8AkRe4UImUlkw0ZItYAiKiekElMNUXwv+Yt48dI/LmB38JIof8sng29XvUeCVU3F6OA==",
"version": "6.7.2",
"resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.7.2.tgz",
"integrity": "sha512-yglVPcYErb4al3MMTdedVLLsdUvr5KaqrrxohxTl/FXMFBvBs0o3w8lo29nfnTUpnNSHFhWZ9at0ZGNnpT/C/w==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@chainsafe/is-ip": "^2.1.0",
"@chainsafe/netmask": "^2.0.0",
"@libp2p/crypto": "^5.1.7",
"@libp2p/interface": "^2.10.5",
"@libp2p/logger": "^5.1.21",
"@libp2p/crypto": "^5.1.8",
"@libp2p/interface": "^2.11.0",
"@libp2p/logger": "^5.2.0",
"@multiformats/multiaddr": "^12.4.4",
"@sindresorhus/fnv1a": "^3.1.0",
"any-signal": "^4.1.1",
@ -1445,12 +1471,11 @@
}
},
"node_modules/@multiformats/dns": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz",
"integrity": "sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw==",
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.9.tgz",
"integrity": "sha512-Ja4hevWI9p96ICx11K3suFvFirnMmXILzS7FpsR2KG3FoKF/XJijm8ylf3vY6kRFGr98yfZYM+zIn18KaINs3A==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@types/dns-packet": "^5.6.5",
"buffer": "^6.0.3",
"dns-packet": "^5.6.1",
"hashlru": "^2.3.0",
@ -1523,6 +1548,111 @@
"node": ">= 10"
}
},
"node_modules/@next/swc-darwin-x64": {
"version": "15.1.7",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.7.tgz",
"integrity": "sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
"version": "15.1.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.7.tgz",
"integrity": "sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@next/swc-linux-arm64-musl": {
"version": "15.1.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.7.tgz",
"integrity": "sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@next/swc-linux-x64-gnu": {
"version": "15.1.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.7.tgz",
"integrity": "sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@next/swc-linux-x64-musl": {
"version": "15.1.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.7.tgz",
"integrity": "sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
"version": "15.1.7",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.7.tgz",
"integrity": "sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@next/swc-win32-x64-msvc": {
"version": "15.1.7",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.7.tgz",
"integrity": "sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@noble/ciphers": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.1.tgz",
@ -2549,15 +2679,6 @@
"@types/ms": "*"
}
},
"node_modules/@types/dns-packet": {
"version": "5.6.5",
"resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz",
"integrity": "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/estree": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
@ -2615,6 +2736,7 @@
"version": "20.17.30",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz",
"integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.19.2"
@ -2872,17 +2994,17 @@
]
},
"node_modules/@waku/core": {
"version": "0.0.37-987c6cd.0",
"resolved": "https://registry.npmjs.org/@waku/core/-/core-0.0.37-987c6cd.0.tgz",
"integrity": "sha512-w3F/dzY/YA5T3l62YKKcza3fMLZNzprupoKScvtpWS8VymLIGZCMhzcKOij4lt6SWzHWyTEMa9qtcB6tZPIC+A==",
"version": "0.0.40-593bc45.0",
"resolved": "https://registry.npmjs.org/@waku/core/-/core-0.0.40-593bc45.0.tgz",
"integrity": "sha512-STERLmw+lNFOUynRrdD33E4cwAEBTTobdaGcERJhfeeaipvQYmoQ5PQpnJLh34kV1wka1Jl+5EW4oj6SHFaRHw==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"@libp2p/ping": "2.0.35",
"@noble/hashes": "^1.3.2",
"@waku/enr": "0.0.31-987c6cd.0",
"@waku/interfaces": "0.0.32-987c6cd.0",
"@waku/proto": "0.0.12-987c6cd.0",
"@waku/utils": "0.0.25-987c6cd.0",
"@waku/enr": "0.0.34-593bc45.0",
"@waku/interfaces": "0.0.35-593bc45.0",
"@waku/proto": "0.0.15-593bc45.0",
"@waku/utils": "0.0.28-593bc45.0",
"debug": "^4.3.4",
"it-all": "^3.0.4",
"it-length-prefixed": "^9.0.4",
@ -2920,9 +3042,9 @@
}
},
"node_modules/@waku/enr": {
"version": "0.0.31-987c6cd.0",
"resolved": "https://registry.npmjs.org/@waku/enr/-/enr-0.0.31-987c6cd.0.tgz",
"integrity": "sha512-nStUXohULcatKLxCyzU7JJK2gKhMXYEAdN90uL1Ggl4tKA9uUrQ2YZC/WB61RmucnDlFNH6phFv47/WbARhhVA==",
"version": "0.0.34-593bc45.0",
"resolved": "https://registry.npmjs.org/@waku/enr/-/enr-0.0.34-593bc45.0.tgz",
"integrity": "sha512-59lJhBOUUXcIJJo6ApUz3ntUUn1PGSFs8dbfuN/0TRreexjzcmwrrX0TKX2hfUoJlY670D9YnbZuaeT3oCO/1Q==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"@ethersproject/rlp": "^5.7.0",
@ -2930,7 +3052,7 @@
"@libp2p/peer-id": "5.1.7",
"@multiformats/multiaddr": "^12.0.0",
"@noble/secp256k1": "^1.7.1",
"@waku/utils": "0.0.25-987c6cd.0",
"@waku/utils": "0.0.28-593bc45.0",
"debug": "^4.3.4",
"js-sha3": "^0.9.2"
},
@ -2974,9 +3096,9 @@
}
},
"node_modules/@waku/enr/node_modules/@noble/curves": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz",
"integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==",
"version": "1.9.7",
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz",
"integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==",
"license": "MIT",
"dependencies": {
"@noble/hashes": "1.8.0"
@ -3007,18 +3129,18 @@
"license": "MIT"
},
"node_modules/@waku/interfaces": {
"version": "0.0.32-987c6cd.0",
"resolved": "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.32-987c6cd.0.tgz",
"integrity": "sha512-7dfGDx1bs+rs1nlMwAZYd0Di4gLyD9cWR0ApDJ+I0sU3enn1NT6hM1U3cp+LE6xqxXUoe2tfQi/4QhrECaGypQ==",
"version": "0.0.35-593bc45.0",
"resolved": "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.35-593bc45.0.tgz",
"integrity": "sha512-BAQs7Qbm3Vbb8ZMcH0b/7RaA0c39HChuU9aHrNYWemwcZ7ZmQbJPGGQmRqnQkPpWJs0eo0VRPTjZbnE9Vi6I+Q==",
"license": "MIT OR Apache-2.0",
"engines": {
"node": ">=22"
}
},
"node_modules/@waku/proto": {
"version": "0.0.12-987c6cd.0",
"resolved": "https://registry.npmjs.org/@waku/proto/-/proto-0.0.12-987c6cd.0.tgz",
"integrity": "sha512-B0u7Qkm/U6mH0ZCGYvRfg4d44JboscYBmXifeOTwY0i4QH8nvrZcPIIsUqvNmzT2CjrAwpt8H+98fGp9l4fKow==",
"version": "0.0.15-593bc45.0",
"resolved": "https://registry.npmjs.org/@waku/proto/-/proto-0.0.15-593bc45.0.tgz",
"integrity": "sha512-fGYt25PvZBZv0EBjvLVzopFBkum3iUQs+1Kjyju3cA5zULA4FH2G8CMmBts81rH0EpGSi/eeUal119+kuctZHw==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"protons-runtime": "^5.4.0"
@ -3028,16 +3150,16 @@
}
},
"node_modules/@waku/rln": {
"version": "0.1.7-987c6cd.0",
"resolved": "https://registry.npmjs.org/@waku/rln/-/rln-0.1.7-987c6cd.0.tgz",
"integrity": "sha512-6w/17WpD7jdw5LyM6OX0c2mMxW3cRrXG7wxi7PzhoSb2celNWZYhnPR9UK+rgsP5opoBDXD7LAyaEEqA3afbgA==",
"version": "0.1.10-593bc45.0",
"resolved": "https://registry.npmjs.org/@waku/rln/-/rln-0.1.10-593bc45.0.tgz",
"integrity": "sha512-nkUcwfosKDXSsqzxBzTV+x9Iiuo0Ti5vVLQP8MnWttf4FuJxR8hKcde9+hvkzZZTZntn6TEQaYFzG3KOAC2kcA==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"@chainsafe/bls-keystore": "3.0.0",
"@noble/hashes": "^1.2.0",
"@waku/core": "0.0.37-987c6cd.0",
"@waku/utils": "0.0.25-987c6cd.0",
"@waku/zerokit-rln-wasm": "^0.0.13",
"@waku/core": "0.0.40-593bc45.0",
"@waku/utils": "0.0.28-593bc45.0",
"@waku/zerokit-rln-wasm": "^0.2.1",
"chai": "^5.1.2",
"chai-as-promised": "^8.0.1",
"chai-spies": "^1.1.0",
@ -3053,13 +3175,13 @@
}
},
"node_modules/@waku/utils": {
"version": "0.0.25-987c6cd.0",
"resolved": "https://registry.npmjs.org/@waku/utils/-/utils-0.0.25-987c6cd.0.tgz",
"integrity": "sha512-HaYkDnVtpfmsXfDBd0gB63CxidIeE9gKMRMCaaywy6W07HK32ZgMgnD/BoPbaREa4BpEZELvW3qbYUydm3AKzw==",
"version": "0.0.28-593bc45.0",
"resolved": "https://registry.npmjs.org/@waku/utils/-/utils-0.0.28-593bc45.0.tgz",
"integrity": "sha512-m4FEzl89cVx6dCQYd15VxRmeqT1DTodHEAS4st7UMdNwaURGWeADbw37NPRc0wHu6LocQYQshJEP1eXtbTkmwg==",
"license": "MIT OR Apache-2.0",
"dependencies": {
"@noble/hashes": "^1.3.2",
"@waku/interfaces": "0.0.32-987c6cd.0",
"@waku/interfaces": "0.0.35-593bc45.0",
"chai": "^4.3.10",
"debug": "^4.3.4",
"uint8arrays": "^5.0.1"
@ -3138,9 +3260,9 @@
}
},
"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==",
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.2.1.tgz",
"integrity": "sha512-2Xp7e92y4qZpsiTPGBSVr4gVJ9mJTLaudlo0DQxNpxJUBtoJKpxdH5xDCQDiorbkWZC2j9EId+ohhxHO/xC1QQ==",
"license": "MIT or Apache2"
},
"node_modules/abort-error": {
@ -7328,9 +7450,9 @@
"license": "MIT"
},
"node_modules/multiformats": {
"version": "13.3.7",
"resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.7.tgz",
"integrity": "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ==",
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.4.1.tgz",
"integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==",
"license": "Apache-2.0 OR MIT"
},
"node_modules/mz": {
@ -7708,9 +7830,9 @@
}
},
"node_modules/p-queue": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz",
"integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==",
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz",
"integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==",
"license": "MIT",
"dependencies": {
"eventemitter3": "^5.0.1",
@ -8122,9 +8244,9 @@
"license": "MIT"
},
"node_modules/race-event": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/race-event/-/race-event-1.6.0.tgz",
"integrity": "sha512-hXkk3CDepWELBG2MsT/zIiTbjNNucMo49vwZEdjChJlxJivc8fWIu/Gh/4vEJdWsHDmnGCC6++ftP2Afep6RUg==",
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/race-event/-/race-event-1.6.1.tgz",
"integrity": "sha512-vi7WH5g5KoTFpu2mme/HqZiWH14XSOtg5rfp6raBskBHl7wnmy3F/biAIyY5MsK+BHWhoPhxtZ1Y2R7OHHaWyQ==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"abort-error": "^1.0.1"
@ -9501,6 +9623,7 @@
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
"dev": true,
"license": "MIT"
},
"node_modules/unified": {
@ -9720,31 +9843,31 @@
}
},
"node_modules/weald": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/weald/-/weald-1.0.4.tgz",
"integrity": "sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ==",
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/weald/-/weald-1.0.6.tgz",
"integrity": "sha512-sX1PzkcMJZUJ848JbFzB6aKHHglTxqACEnq2KgI75b7vWYvfXFBNbOuDKqFKwCT44CrP6c5r+L4+5GmPnb5/SQ==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"ms": "^3.0.0-canary.1",
"supports-color": "^9.4.0"
"supports-color": "^10.0.0"
}
},
"node_modules/weald/node_modules/ms": {
"version": "3.0.0-canary.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.1.tgz",
"integrity": "sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g==",
"version": "3.0.0-canary.202508261828",
"resolved": "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.202508261828.tgz",
"integrity": "sha512-NotsCoUCIUkojWCzQff4ttdCfIPoA1UGZsyQbi7KmqkNRfKCrvga8JJi2PknHymHOuor0cJSn/ylj52Cbt2IrQ==",
"license": "MIT",
"engines": {
"node": ">=12.13"
"node": ">=18"
}
},
"node_modules/weald/node_modules/supports-color": {
"version": "9.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz",
"integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==",
"version": "10.2.2",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz",
"integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==",
"license": "MIT",
"engines": {
"node": ">=12"
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"

View File

@ -21,7 +21,7 @@
"@radix-ui/react-toggle": "^1.1.2",
"@radix-ui/react-toggle-group": "^1.1.2",
"@radix-ui/react-tooltip": "^1.1.8",
"@waku/rln": "0.1.7-987c6cd.0",
"@waku/rln": "0.1.10-593bc45.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"framer-motion": "^12.6.3",

View File

@ -5,20 +5,9 @@ import { useRLN } from '../contexts';
import { useWallet } from '../contexts';
export function RLNStatusIndicator() {
const { isInitialized, isStarted, isLoading, error, rln } = useRLN();
const { isInitialized, isStarted, isLoading, error } = useRLN();
const { isConnected, chainId } = useWallet();
// Debug logging
console.log('RLN Status:', {
isConnected,
chainId,
isInitialized,
isStarted,
isLoading,
error,
rln
});
const getStatusColor = () => {
if (error) return 'bg-red-500 shadow-[0_0_8px_0_rgba(239,68,68,0.6)]';
if (isLoading) return 'bg-yellow-500 animate-pulse shadow-[0_0_8px_0_rgba(234,179,8,0.6)]';

View File

@ -35,6 +35,7 @@ function CodeBlock({ code }: { code: string }) {
);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export default function RunNodeTab({ tabId: _tabId }: RunNodeTabProps) {
const {
hasStoredCredentials,

View File

@ -1,3 +1,5 @@
import { RLN_REGISTRATION_CONTRACT_ADDRESS } from '../contracts/constants';
export type ContentSegment = {
type: 'text' | 'link';
content: string;
@ -20,7 +22,7 @@ export const membershipRegistration = {
],
[
{ type: 'text', content: 'This application is configured to use the ' },
{ type: 'link', content: 'Linea Sepolia', url: 'https://sepolia.lineascan.build/address/0xb9cd878c90e49f797b4431fbf4fb333108cb90e6' },
{ type: 'link', content: 'Linea Sepolia', url: `https://sepolia.lineascan.build/address/${RLN_REGISTRATION_CONTRACT_ADDRESS.toLowerCase()}` },
{ type: 'text', content: ' testnet for RLN registrations.' }
],
[

View File

@ -1,13 +1,15 @@
"use client";
import { createContext, useContext, useState, useEffect, ReactNode, useCallback } from 'react';
import { KeystoreEntity, MembershipInfo, RLNCredentialsManager } from '@waku/rln';
import { KeystoreEntity, MembershipInfo, RLNInstance, createRLN } from '@waku/rln';
import { ethers } from 'ethers';
import { useKeystore } from '../keystore';
import { useWallet } from '../wallet';
import { ERC20_ABI, LINEA_SEPOLIA_CONFIG, ensureLineaSepoliaNetwork } from '../../utils/network';
import { WAKU_TESTNET_TOKEN_ADDRESS } from '../../contracts/constants';
interface RLNContextType {
rln: RLNCredentialsManager | null;
rln: RLNInstance | null;
isInitialized: boolean;
isStarted: boolean;
error: string | null;
@ -34,12 +36,23 @@ interface RLNContextType {
saveCredentialsToKeystore: (credentials: KeystoreEntity, password: string) => Promise<string>;
isLoading: boolean;
getPriceForRateLimit: (rateLimit: number) => Promise<{ price: string }>;
tokenApprovalStatus: {
isApproved: boolean | null;
isChecking: boolean;
needsApproval: boolean;
requiredAmount: string | null;
currentAllowance: string | null;
tokenBalance: string | null;
hasEnoughBalance: boolean | null;
};
checkTokenApproval: (rateLimit: number) => Promise<void>;
approveTokens: () => Promise<{ success: boolean; error?: string }>;
}
const RLNContext = createContext<RLNContextType | undefined>(undefined);
export function RLNProvider({ children }: { children: ReactNode }) {
const [rln, setRln] = useState<RLNCredentialsManager | null>(null);
const [rln, setRln] = useState<RLNInstance | null>(null);
const [isInitialized, setIsInitialized] = useState(false);
const [isStarted, setIsStarted] = useState(false);
const [error, setError] = useState<string | null>(null);
@ -50,8 +63,20 @@ export function RLNProvider({ children }: { children: ReactNode }) {
const [isConnected, setIsConnected] = useState(false);
const [rateMinLimit, setRateMinLimit] = useState<number>(0);
const [rateMaxLimit, setRateMaxLimit] = useState<number>(0);
// Token approval status
const [tokenApprovalStatus, setTokenApprovalStatus] = useState({
isApproved: null as boolean | null,
isChecking: false,
needsApproval: false,
requiredAmount: null as string | null,
currentAllowance: null as string | null,
tokenBalance: null as string | null,
hasEnoughBalance: null as boolean | null,
});
const { saveCredentials: saveToKeystore, getDecryptedCredential } = useKeystore();
const { wttBalance } = useWallet();
// Listen for wallet connection
useEffect(() => {
@ -113,7 +138,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
if (!currentRln) {
console.log("Creating RLN instance...");
try {
currentRln = new RLNCredentialsManager();
currentRln = await createRLN();
setRln(currentRln);
setIsInitialized(true);
console.log("RLN instance created successfully.");
@ -145,6 +170,31 @@ export function RLNProvider({ children }: { children: ReactNode }) {
} else {
console.warn("Could not fetch rate limits: undefined values returned.");
}
// Get and log the token address from the contract
try {
const priceInfo = await currentRln.contract.getPriceForRateLimit(300);
if (priceInfo && priceInfo.token) {
console.log("🪙 Token address from RLN contract:", priceInfo.token);
console.log("🪙 Hardcoded token address:", WAKU_TESTNET_TOKEN_ADDRESS);
console.log("🪙 Addresses match:", priceInfo.token.toLowerCase() === WAKU_TESTNET_TOKEN_ADDRESS.toLowerCase());
// Check balance using the RLN contract's token address
const userAddress = await signer.getAddress();
const rlnTokenContract = new ethers.Contract(priceInfo.token, ERC20_ABI, signer);
const rlnTokenBalance = await rlnTokenContract.balanceOf(userAddress);
console.log("💰 Balance from RLN token contract:", ethers.utils.formatUnits(rlnTokenBalance, 18), "tokens");
// Also check balance using hardcoded address for comparison
const hardcodedTokenContract = new ethers.Contract(WAKU_TESTNET_TOKEN_ADDRESS, ERC20_ABI, signer);
const hardcodedTokenBalance = await hardcodedTokenContract.balanceOf(userAddress);
console.log("💰 Balance from hardcoded token contract:", ethers.utils.formatUnits(hardcodedTokenBalance, 18), "tokens");
} else {
console.warn("Could not get token address from RLN contract");
}
} catch (tokenErr) {
console.warn("Error getting token address from RLN contract:", tokenErr);
}
} catch (limitErr) {
console.warn("Could not fetch rate limits after start:", limitErr);
// Don't fail initialization for this, but log it.
@ -155,7 +205,27 @@ export function RLNProvider({ children }: { children: ReactNode }) {
} catch (startErr) {
console.error("Error starting RLN:", startErr);
setError(startErr instanceof Error ? startErr.message : 'Failed to start RLN');
// Check if it's a network mismatch error
if (startErr instanceof Error && startErr.message.includes('chain ID of contract is different')) {
console.log("Network mismatch detected, attempting to switch to Linea Sepolia...");
try {
const switched = await ensureLineaSepoliaNetwork(signer);
if (switched) {
setError('Network switched to Linea Sepolia. Please try connecting again.');
// Don't retry automatically to avoid loops, let user re-trigger
} else {
setError('Please manually switch to Linea Sepolia network in MetaMask and try again.');
}
} catch (switchErr) {
console.error("Error switching network:", switchErr);
setError('Failed to switch to Linea Sepolia network. Please switch manually in MetaMask.');
}
} else {
setError(startErr instanceof Error ? startErr.message : 'Failed to start RLN');
}
setIsStarted(false);
}
} else if (isStarted) {
@ -245,6 +315,135 @@ export function RLNProvider({ children }: { children: ReactNode }) {
}
};
const checkTokenApproval = useCallback(async (rateLimit: number) => {
if (!rln || !rln.contract || !signer || !isConnected) {
console.log("Cannot check token approval: RLN not ready or wallet not connected");
return;
}
setTokenApprovalStatus(prev => ({ ...prev, isChecking: true }));
try {
const userAddress = await signer.getAddress();
const contractAddress = rln.contract.address;
// Use the hardcoded token address consistently
const tokenAddress = WAKU_TESTNET_TOKEN_ADDRESS;
// Get price info from RLN contract
const priceInfo = await rln.contract.getPriceForRateLimit(rateLimit);
// Create token contract instance
const tokenContract = new ethers.Contract(
tokenAddress,
ERC20_ABI,
signer
);
if (!priceInfo.price) {
throw new Error("Unable to determine required deposit amount");
}
const requiredAmount = priceInfo.price;
const currentAllowance = await tokenContract.allowance(userAddress, contractAddress);
// Check actual token balance directly from the contract
const actualTokenBalance = await tokenContract.balanceOf(userAddress);
const tokenBalanceStr = ethers.utils.formatUnits(actualTokenBalance, 18);
const tokenBalance = actualTokenBalance;
console.log("Token approval check:", {
requiredAmount: ethers.utils.formatUnits(requiredAmount, 18),
currentAllowance: ethers.utils.formatUnits(currentAllowance, 18),
tokenBalance: tokenBalanceStr,
tokenAddress: tokenAddress,
userAddress: userAddress,
contractAddress: contractAddress
});
const isApproved = currentAllowance.gte(requiredAmount);
const needsApproval = !isApproved;
const hasEnoughBalance = tokenBalance.gte(requiredAmount);
setTokenApprovalStatus({
isApproved,
isChecking: false,
needsApproval,
requiredAmount: ethers.utils.formatUnits(requiredAmount, 18),
currentAllowance: ethers.utils.formatUnits(currentAllowance, 18),
tokenBalance: tokenBalanceStr,
hasEnoughBalance,
});
// Clear any existing errors when checking status
setError(null);
} catch (err) {
console.error("Error checking token approval:", err);
setTokenApprovalStatus(prev => ({
...prev,
isChecking: false,
isApproved: null,
needsApproval: false
}));
}
}, [rln, signer, isConnected, setError]);
const approveTokens = useCallback(async (): Promise<{ success: boolean; error?: string }> => {
if (!rln || !rln.contract || !signer) {
return { success: false, error: "RLN not initialized or wallet not connected" };
}
try {
const userAddress = await signer.getAddress();
const contractAddress = rln.contract.address;
// Use the hardcoded token address consistently
const tokenAddress = WAKU_TESTNET_TOKEN_ADDRESS;
// Create token contract instance
const tokenContract = new ethers.Contract(
tokenAddress,
ERC20_ABI,
signer
);
// Approve maximum amount for convenience
const approvalAmount = ethers.constants.MaxUint256;
const approveTx = await tokenContract.approve(contractAddress, approvalAmount);
console.log("Approval transaction submitted:", approveTx.hash);
// Update status to show approval in progress
setTokenApprovalStatus(prev => ({ ...prev, isChecking: true }));
// Wait for the transaction to be mined
const receipt = await approveTx.wait(2);
console.log("Token approval confirmed in block:", receipt.blockNumber);
// Update approval status
const newAllowance = await tokenContract.allowance(userAddress, contractAddress);
const isApproved = newAllowance.gt(0);
setTokenApprovalStatus(prev => ({
...prev,
isApproved,
isChecking: false,
needsApproval: !isApproved,
currentAllowance: ethers.utils.formatUnits(newAllowance, 18),
}));
return { success: true };
} catch (err) {
console.error("Error approving tokens:", err);
setTokenApprovalStatus(prev => ({ ...prev, isChecking: false }));
const errorMessage = err instanceof Error ? err.message : String(err);
return {
success: false,
error: `Failed to approve tokens: ${errorMessage}`
};
}
}, [rln, signer]);
const registerMembership = async (rateLimit: number, saveOptions?: { password: string }) => {
console.log("registerMembership called with rate limit:", rateLimit);
@ -280,7 +479,9 @@ export function RLNProvider({ children }: { children: ReactNode }) {
}
const contractAddress = rln.contract.address;
const tokenAddress = LINEA_SEPOLIA_CONFIG.tokenAddress;
// Use the hardcoded token address consistently
const tokenAddress = WAKU_TESTNET_TOKEN_ADDRESS;
// Create token contract instance
const tokenContract = new ethers.Contract(
@ -289,27 +490,57 @@ export function RLNProvider({ children }: { children: ReactNode }) {
signer
);
// Check token balance
const tokenBalance = await tokenContract.balanceOf(userAddress);
// Check balance from wallet context
const tokenBalanceStr = wttBalance || "0";
const tokenBalance = ethers.utils.parseUnits(tokenBalanceStr, 18);
if (tokenBalance.isZero()) {
return { success: false, error: "You need tokens to register a membership. Your token balance is zero." };
return {
success: false,
error: `You need tokens to register a membership. Your balance is ${tokenBalanceStr} WTT. Please get test tokens.`
};
}
// Check and approve token allowance if needed
// Get the required deposit amount first
let requiredDeposit;
try {
const priceInfo = await rln.contract.getPriceForRateLimit(rateLimit);
if (!priceInfo.price) {
return { success: false, error: "Unable to determine deposit amount for rate limit" };
}
requiredDeposit = priceInfo.price;
console.log("Required deposit:", ethers.utils.formatUnits(requiredDeposit, 18), "WTT");
} catch (priceErr) {
console.error("Error getting price for rate limit:", priceErr);
return { success: false, error: "Failed to determine required deposit amount" };
}
// Check and approve token allowance
const currentAllowance = await tokenContract.allowance(userAddress, contractAddress);
if (currentAllowance.eq(0)) {
console.log("Requesting token approval...");
console.log("Current allowance:", ethers.utils.formatUnits(currentAllowance, 18), "WTT");
console.log("Required deposit:", ethers.utils.formatUnits(requiredDeposit, 18), "WTT");
if (currentAllowance.lt(requiredDeposit)) {
console.log("Insufficient allowance, requesting token approval...");
// Approve a large amount (max uint256)
const maxUint256 = ethers.constants.MaxUint256;
// Approve the required amount plus a buffer (or max uint256 for simplicity)
const approvalAmount = ethers.constants.MaxUint256;
try {
const approveTx = await tokenContract.approve(contractAddress, maxUint256);
const approveTx = await tokenContract.approve(contractAddress, approvalAmount);
console.log("Approval transaction submitted:", approveTx.hash);
// Wait for the transaction to be mined
await approveTx.wait(1);
console.log("Token approval confirmed");
// Wait for the transaction to be mined with more confirmations
const receipt = await approveTx.wait(2);
console.log("Token approval confirmed in block:", receipt.blockNumber);
// Verify the approval was successful
const newAllowance = await tokenContract.allowance(userAddress, contractAddress);
console.log("New allowance:", ethers.utils.formatUnits(newAllowance, 18), "WTT");
if (newAllowance.lt(requiredDeposit)) {
return { success: false, error: "Token approval failed - insufficient allowance after approval" };
}
} catch (approvalErr) {
console.error("Error during token approval:", approvalErr);
return {
@ -328,10 +559,38 @@ export function RLNProvider({ children }: { children: ReactNode }) {
// Register membership
console.log("Registering membership...");
const credentials = await rln.registerMembership({
signature: signature
});
console.log("Credentials:", credentials);
let credentials;
try {
credentials = await rln.registerMembership({
signature: signature
});
console.log("Credentials:", credentials);
} catch (registrationError) {
console.error("Registration error:", registrationError);
// Check if it's an allowance issue
if (registrationError instanceof Error && registrationError.message.includes("insufficient allowance")) {
return {
success: false,
error: "Token approval failed. Please try approving tokens manually in MetaMask and try again."
};
}
// Check for other common errors
if (registrationError instanceof Error && registrationError.message.includes("user rejected")) {
return {
success: false,
error: "Transaction was rejected. Please try again and approve the transaction."
};
}
// Generic error handling
const errorMessage = registrationError instanceof Error ? registrationError.message : String(registrationError);
return {
success: false,
error: `Registration failed: ${errorMessage}`
};
}
// If we have save options, save to keystore
let keystoreHash: string | undefined;
@ -446,8 +705,9 @@ export function RLNProvider({ children }: { children: ReactNode }) {
throw new Error('Could not decrypt credential');
}
// Get token address from config
const tokenAddress = LINEA_SEPOLIA_CONFIG.tokenAddress;
// Use the hardcoded token address consistently
const tokenAddress = WAKU_TESTNET_TOKEN_ADDRESS;
const userAddress = await signer?.getAddress();
if (!userAddress) {
@ -472,7 +732,17 @@ export function RLNProvider({ children }: { children: ReactNode }) {
throw new Error('RLN not initialized or contract not available');
}
const result = await rln.contract.getPriceForRateLimit(rateLimit);
if (!result.price) {
throw new Error('Price not available');
}
console.log("💰 Price from RLN contract (raw BigNumber):", result.price);
console.log("💰 Price from RLN contract (toString):", result.price.toString());
console.log("💰 Price from RLN contract (hex):", result.price.toHexString());
const formatted = ethers.utils.formatUnits(result.price, 18);
console.log("💰 Price formatted to decimal:", formatted);
return { price: formatted };
} catch (err) {
console.error('Error getting price for rate limit:', err);
@ -499,7 +769,10 @@ export function RLNProvider({ children }: { children: ReactNode }) {
getRateLimitsBounds,
saveCredentialsToKeystore: saveToKeystore,
isLoading,
getPriceForRateLimit
getPriceForRateLimit,
tokenApprovalStatus,
checkTokenApproval,
approveTokens
}}
>
{children}

View File

@ -1,7 +1,7 @@
import { DecryptedCredentials, RLNCredentialsManager, RLNInstance } from "@waku/rln";
import { DecryptedCredentials, RLNInstance } from "@waku/rln";
export interface RLNContextType {
rln: RLNInstance | RLNCredentialsManager | null;
rln: RLNInstance | null;
isInitialized: boolean;
isStarted: boolean;
error: string | null;

View File

@ -1,2 +1,3 @@
export const WAKU_TESTNET_TOKEN_ADDRESS = '0x185A0015aC462a0aECb81beCc0497b649a64B9ea';
export const RLN_REGISTRATION_CONTRACT_ADDRESS = '0xB9cd878C90E49F797B4431fBF4fb333108CB90e6';
// Linea Sepolia testnet contract addresses
export const RLN_REGISTRATION_CONTRACT_ADDRESS = '0xB9cd878C90E49F797B4431fBF4fb333108CB90e6';
export const WAKU_TESTNET_TOKEN_ADDRESS = '0xd28d1a688b1cBf5126fB8B034d0150C81ec0024c';

View File

@ -1,11 +1,12 @@
"use client";
import { ethers } from 'ethers';
import { WAKU_TESTNET_TOKEN_ADDRESS } from '../contracts/constants';
// Linea Sepolia configuration
export const LINEA_SEPOLIA_CONFIG = {
chainId: 59141,
tokenAddress: '0x185A0015aC462a0aECb81beCc0497b649a64B9ea'
tokenAddress: WAKU_TESTNET_TOKEN_ADDRESS
};
// Type for Ethereum provider in window
@ -19,10 +20,11 @@ export interface EthereumProvider {
// Function to ensure the wallet is connected to Linea Sepolia network
export const ensureLineaSepoliaNetwork = async (signer?: ethers.Signer): Promise<boolean> => {
try {
console.log("Current network: unknown", await signer?.getChainId());
const currentChainId = await signer?.getChainId();
console.log("Current network chain ID:", currentChainId);
// Check if already on Linea Sepolia
if (await signer?.getChainId() === LINEA_SEPOLIA_CONFIG.chainId) {
if (currentChainId === LINEA_SEPOLIA_CONFIG.chainId) {
console.log("Already on Linea Sepolia network");
return true;
}
@ -38,18 +40,54 @@ export const ensureLineaSepoliaNetwork = async (signer?: ethers.Signer): Promise
return false;
}
const chainIdHex = `0x${LINEA_SEPOLIA_CONFIG.chainId.toString(16)}`; // 0xe705
try {
// Request network switch
await provider.request({
method: 'wallet_switchEthereumChain',
params: [{ chainId: `0x${LINEA_SEPOLIA_CONFIG.chainId.toString(16)}` }],
params: [{ chainId: chainIdHex }],
});
console.log("Successfully switched to Linea Sepolia");
return true;
} catch (switchError: unknown) {
console.error("Error switching network:", switchError);
return false;
console.log("Switch error:", switchError);
// Check if the error is because the network is not added to MetaMask
const error = switchError as { code?: number; message?: string };
if (error?.code === 4902 || error?.message?.includes('Unrecognized chain ID')) {
console.log("Network not found, attempting to add Linea Sepolia...");
try {
// Add the network to MetaMask
await provider.request({
method: 'wallet_addEthereumChain',
params: [
{
chainId: chainIdHex,
chainName: 'Linea Sepolia Testnet',
nativeCurrency: {
name: 'ETH',
symbol: 'ETH',
decimals: 18,
},
rpcUrls: ['https://rpc.sepolia.linea.build'],
blockExplorerUrls: ['https://sepolia.lineascan.build'],
},
],
});
console.log("Successfully added Linea Sepolia network");
return true;
} catch (addError) {
console.error("Error adding network:", addError);
return false;
}
} else {
console.error("Error switching network:", switchError);
return false;
}
}
} catch (err) {
console.error("Error checking or switching network:", err);

262
yarn.lock
View File

@ -568,16 +568,16 @@
resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz"
integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==
"@libp2p/crypto@^5.1.6", "@libp2p/crypto@^5.1.7":
version "5.1.7"
resolved "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.7.tgz"
integrity sha512-7DO0piidLEKfCuNfS420BlHG0e2tH7W/zugdsPSiC/1Apa/s1B1dBkaIEgfDkGjrRP4S/8Or86Rtq7zXeEu67g==
"@libp2p/crypto@^5.1.6", "@libp2p/crypto@^5.1.8":
version "5.1.11"
resolved "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.11.tgz"
integrity sha512-J+C4bntXEhf43fJZbgyoa4XI8/kzwB5wE/2FoNQcwhIwgDd4YyRB1SHswgI0KWqF0pgKtFLE+sLnUBn/ZYUTjw==
dependencies:
"@libp2p/interface" "^2.10.5"
"@noble/curves" "^1.9.1"
"@noble/hashes" "^1.8.0"
multiformats "^13.3.6"
protons-runtime "^5.5.0"
"@libp2p/interface" "^3.0.1"
"@noble/curves" "^2.0.1"
"@noble/hashes" "^2.0.1"
multiformats "^13.4.0"
protons-runtime "^5.6.0"
uint8arraylist "^2.4.8"
uint8arrays "^5.1.0"
@ -595,19 +595,19 @@
uint8arrays "^5.1.0"
"@libp2p/interface-internal@^2.3.17":
version "2.3.18"
resolved "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-2.3.18.tgz"
integrity sha512-tnZ20IFASXLbDc2JxeUPZNIXDuN5Ge7be6BU458WLvmquf93NlSqZkWs6xFdi+0yXUrw7GGTgzIP5v+1LnDUmA==
version "2.3.19"
resolved "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-2.3.19.tgz"
integrity sha512-v335EB0i5CaNF+0SqT01CTBp0VyjJizpy46KprcshFFjX16UQ8+/QzoTZqmot9WiAmAzwR0b87oKmlAE9cpxzQ==
dependencies:
"@libp2p/interface" "^2.10.5"
"@libp2p/peer-collections" "^6.0.34"
"@libp2p/interface" "^2.11.0"
"@libp2p/peer-collections" "^6.0.35"
"@multiformats/multiaddr" "^12.4.4"
progress-events "^1.0.1"
"@libp2p/interface@^2.10.4", "@libp2p/interface@^2.10.5":
version "2.10.5"
resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-2.10.5.tgz"
integrity sha512-Z52n04Mph/myGdwyExbFi5S/HqrmZ9JOmfLc2v4r2Cik3GRdw98vrGH19PFvvwjLwAjaqsweCtlGaBzAz09YDw==
"@libp2p/interface@^2.10.4", "@libp2p/interface@^2.11.0":
version "2.11.0"
resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-2.11.0.tgz"
integrity sha512-0MUFKoXWHTQW3oWIgSHApmYMUKWO/Y02+7Hpyp+n3z+geD4Xo2Rku2gYWmxcq+Pyjkz6Q9YjDWz3Yb2SoV2E8Q==
dependencies:
"@multiformats/dns" "^1.0.6"
"@multiformats/multiaddr" "^12.4.4"
@ -618,34 +618,46 @@
progress-events "^1.0.1"
uint8arraylist "^2.4.8"
"@libp2p/logger@^5.1.21":
version "5.1.21"
resolved "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.21.tgz"
integrity sha512-V1TWlZM5BuKkiGQ7En4qOnseVP82JwDIpIfNjceUZz1ArL32A5HXJjLQnJchkZ3VW8PVciJzUos/vP6slhPY6Q==
"@libp2p/interface@^3.0.1":
version "3.0.1"
resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-3.0.1.tgz"
integrity sha512-Fc502I77E+vLiADk7PyydM3NwW6F1HCQGhhtbzi9jLb+X8KgVBL3wlPqWXVM8fyQ++4CpOcAyMel8UYhIXr26w==
dependencies:
"@libp2p/interface" "^2.10.5"
"@multiformats/dns" "^1.0.6"
"@multiformats/multiaddr" "^13.0.1"
main-event "^1.0.1"
multiformats "^13.4.0"
progress-events "^1.0.1"
uint8arraylist "^2.4.8"
"@libp2p/logger@^5.2.0":
version "5.2.0"
resolved "https://registry.npmjs.org/@libp2p/logger/-/logger-5.2.0.tgz"
integrity sha512-OEFS529CnIKfbWEHmuCNESw9q0D0hL8cQ8klQfjIVPur15RcgAEgc1buQ7Y6l0B6tCYg120bp55+e9tGvn8c0g==
dependencies:
"@libp2p/interface" "^2.11.0"
"@multiformats/multiaddr" "^12.4.4"
interface-datastore "^8.3.1"
multiformats "^13.3.6"
weald "^1.0.4"
"@libp2p/peer-collections@^6.0.34":
version "6.0.34"
resolved "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-6.0.34.tgz"
integrity sha512-rw8gDGhou4sF6W6i9ntmRARFePX19Dw9MMVpZHr6Kx9q2kvBJq91IXUzsXP06roexEOu1CUlZwxtUAqOBy+Eww==
"@libp2p/peer-collections@^6.0.35":
version "6.0.35"
resolved "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-6.0.35.tgz"
integrity sha512-QiloK3T7DXW7R2cpL38dBnALCHf5pMzs/TyFzlEK33WezA2YFVoj7CtOJKqbn29bmV9uspWOxMgfmLUXf8ALvA==
dependencies:
"@libp2p/interface" "^2.10.5"
"@libp2p/peer-id" "^5.1.8"
"@libp2p/utils" "^6.7.1"
"@libp2p/interface" "^2.11.0"
"@libp2p/peer-id" "^5.1.9"
"@libp2p/utils" "^6.7.2"
multiformats "^13.3.6"
"@libp2p/peer-id@^5.1.8":
version "5.1.8"
resolved "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.8.tgz"
integrity sha512-pGaM4BwjnXdGtAtd84L4/wuABpsnFYE+AQ+h3GxNFme0IsTaTVKWd1jBBE5YFeKHBHGUOhF3TlHsdjFfjQA7TA==
"@libp2p/peer-id@^5.1.9":
version "5.1.9"
resolved "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.9.tgz"
integrity sha512-cVDp7lX187Epmi/zr0Qq2RsEMmueswP9eIxYSFoMcHL/qcvRFhsxOfUGB8361E26s2WJvC9sXZ0oJS9XVueJhQ==
dependencies:
"@libp2p/crypto" "^5.1.7"
"@libp2p/interface" "^2.10.5"
"@libp2p/crypto" "^5.1.8"
"@libp2p/interface" "^2.11.0"
multiformats "^13.3.6"
uint8arrays "^5.1.0"
@ -672,16 +684,16 @@
main-event "^1.0.1"
uint8arrays "^5.1.0"
"@libp2p/utils@^6.7.1":
version "6.7.1"
resolved "https://registry.npmjs.org/@libp2p/utils/-/utils-6.7.1.tgz"
integrity sha512-x3WImvw4unmx1ZeAedj8AkRe4UImUlkw0ZItYAiKiekElMNUXwv+Yt48dI/LmB38JIof8sng29XvUeCVU3F6OA==
"@libp2p/utils@^6.7.2":
version "6.7.2"
resolved "https://registry.npmjs.org/@libp2p/utils/-/utils-6.7.2.tgz"
integrity sha512-yglVPcYErb4al3MMTdedVLLsdUvr5KaqrrxohxTl/FXMFBvBs0o3w8lo29nfnTUpnNSHFhWZ9at0ZGNnpT/C/w==
dependencies:
"@chainsafe/is-ip" "^2.1.0"
"@chainsafe/netmask" "^2.0.0"
"@libp2p/crypto" "^5.1.7"
"@libp2p/interface" "^2.10.5"
"@libp2p/logger" "^5.1.21"
"@libp2p/crypto" "^5.1.8"
"@libp2p/interface" "^2.11.0"
"@libp2p/logger" "^5.2.0"
"@multiformats/multiaddr" "^12.4.4"
"@sindresorhus/fnv1a" "^3.1.0"
any-signal "^4.1.1"
@ -702,11 +714,10 @@
uint8arrays "^5.1.0"
"@multiformats/dns@^1.0.3", "@multiformats/dns@^1.0.6":
version "1.0.6"
resolved "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz"
integrity sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw==
version "1.0.9"
resolved "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.9.tgz"
integrity sha512-Ja4hevWI9p96ICx11K3suFvFirnMmXILzS7FpsR2KG3FoKF/XJijm8ylf3vY6kRFGr98yfZYM+zIn18KaINs3A==
dependencies:
"@types/dns-packet" "^5.6.5"
buffer "^6.0.3"
dns-packet "^5.6.1"
hashlru "^2.3.0"
@ -727,6 +738,16 @@
uint8-varint "^2.0.1"
uint8arrays "^5.0.0"
"@multiformats/multiaddr@^13.0.1":
version "13.0.1"
resolved "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-13.0.1.tgz"
integrity sha512-XToN915cnfr6Lr9EdGWakGJbPT0ghpg/850HvdC+zFX8XvpLZElwa8synCiwa8TuvKNnny6m8j8NVBNCxhIO3g==
dependencies:
"@chainsafe/is-ip" "^2.0.1"
multiformats "^13.0.0"
uint8-varint "^2.0.1"
uint8arrays "^5.0.0"
"@next/env@15.1.7":
version "15.1.7"
resolved "https://registry.npmjs.org/@next/env/-/env-15.1.7.tgz"
@ -750,12 +771,19 @@
integrity sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==
"@noble/curves@^1.9.1":
version "1.9.2"
resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz"
integrity sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==
version "1.9.7"
resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz"
integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==
dependencies:
"@noble/hashes" "1.8.0"
"@noble/curves@^2.0.1":
version "2.0.1"
resolved "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz"
integrity sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==
dependencies:
"@noble/hashes" "2.0.1"
"@noble/curves@~1.8.1":
version "1.8.2"
resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz"
@ -780,6 +808,11 @@
resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz"
integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==
"@noble/hashes@^2.0.1", "@noble/hashes@2.0.1":
version "2.0.1"
resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz"
integrity sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==
"@noble/hashes@~1.2.0", "@noble/hashes@1.2.0":
version "1.2.0"
resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz"
@ -1272,13 +1305,6 @@
dependencies:
"@types/ms" "*"
"@types/dns-packet@^5.6.5":
version "5.6.5"
resolved "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz"
integrity sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==
dependencies:
"@types/node" "*"
"@types/estree-jsx@^1.0.0":
version "1.0.5"
resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz"
@ -1320,7 +1346,7 @@
resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz"
integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==
"@types/node@*", "@types/node@^20":
"@types/node@^20":
version "20.17.30"
resolved "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz"
integrity sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==
@ -1440,17 +1466,17 @@
resolved "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.5.0.tgz"
integrity sha512-YmocNlEcX/AgJv8gI41bhjMOTcKcea4D2nRIbZj+MhRtSH5+vEU8r/pFuTuoF+JjVplLsBueU+CILfBPVISyGQ==
"@waku/core@0.0.37-987c6cd.0":
version "0.0.37-987c6cd.0"
resolved "https://registry.npmjs.org/@waku/core/-/core-0.0.37-987c6cd.0.tgz"
integrity sha512-w3F/dzY/YA5T3l62YKKcza3fMLZNzprupoKScvtpWS8VymLIGZCMhzcKOij4lt6SWzHWyTEMa9qtcB6tZPIC+A==
"@waku/core@0.0.40-593bc45.0":
version "0.0.40-593bc45.0"
resolved "https://registry.npmjs.org/@waku/core/-/core-0.0.40-593bc45.0.tgz"
integrity sha512-STERLmw+lNFOUynRrdD33E4cwAEBTTobdaGcERJhfeeaipvQYmoQ5PQpnJLh34kV1wka1Jl+5EW4oj6SHFaRHw==
dependencies:
"@libp2p/ping" "2.0.35"
"@noble/hashes" "^1.3.2"
"@waku/enr" "0.0.31-987c6cd.0"
"@waku/interfaces" "0.0.32-987c6cd.0"
"@waku/proto" "0.0.12-987c6cd.0"
"@waku/utils" "0.0.25-987c6cd.0"
"@waku/enr" "0.0.34-593bc45.0"
"@waku/interfaces" "0.0.35-593bc45.0"
"@waku/proto" "0.0.15-593bc45.0"
"@waku/utils" "0.0.28-593bc45.0"
debug "^4.3.4"
it-all "^3.0.4"
it-length-prefixed "^9.0.4"
@ -1458,42 +1484,42 @@
uint8arraylist "^2.4.3"
uuid "^9.0.0"
"@waku/enr@0.0.31-987c6cd.0":
version "0.0.31-987c6cd.0"
resolved "https://registry.npmjs.org/@waku/enr/-/enr-0.0.31-987c6cd.0.tgz"
integrity sha512-nStUXohULcatKLxCyzU7JJK2gKhMXYEAdN90uL1Ggl4tKA9uUrQ2YZC/WB61RmucnDlFNH6phFv47/WbARhhVA==
"@waku/enr@0.0.34-593bc45.0":
version "0.0.34-593bc45.0"
resolved "https://registry.npmjs.org/@waku/enr/-/enr-0.0.34-593bc45.0.tgz"
integrity sha512-59lJhBOUUXcIJJo6ApUz3ntUUn1PGSFs8dbfuN/0TRreexjzcmwrrX0TKX2hfUoJlY670D9YnbZuaeT3oCO/1Q==
dependencies:
"@ethersproject/rlp" "^5.7.0"
"@libp2p/crypto" "5.1.6"
"@libp2p/peer-id" "5.1.7"
"@multiformats/multiaddr" "^12.0.0"
"@noble/secp256k1" "^1.7.1"
"@waku/utils" "0.0.25-987c6cd.0"
"@waku/utils" "0.0.28-593bc45.0"
debug "^4.3.4"
js-sha3 "^0.9.2"
"@waku/interfaces@0.0.32-987c6cd.0":
version "0.0.32-987c6cd.0"
resolved "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.32-987c6cd.0.tgz"
integrity sha512-7dfGDx1bs+rs1nlMwAZYd0Di4gLyD9cWR0ApDJ+I0sU3enn1NT6hM1U3cp+LE6xqxXUoe2tfQi/4QhrECaGypQ==
"@waku/interfaces@0.0.35-593bc45.0":
version "0.0.35-593bc45.0"
resolved "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.35-593bc45.0.tgz"
integrity sha512-BAQs7Qbm3Vbb8ZMcH0b/7RaA0c39HChuU9aHrNYWemwcZ7ZmQbJPGGQmRqnQkPpWJs0eo0VRPTjZbnE9Vi6I+Q==
"@waku/proto@0.0.12-987c6cd.0":
version "0.0.12-987c6cd.0"
resolved "https://registry.npmjs.org/@waku/proto/-/proto-0.0.12-987c6cd.0.tgz"
integrity sha512-B0u7Qkm/U6mH0ZCGYvRfg4d44JboscYBmXifeOTwY0i4QH8nvrZcPIIsUqvNmzT2CjrAwpt8H+98fGp9l4fKow==
"@waku/proto@0.0.15-593bc45.0":
version "0.0.15-593bc45.0"
resolved "https://registry.npmjs.org/@waku/proto/-/proto-0.0.15-593bc45.0.tgz"
integrity sha512-fGYt25PvZBZv0EBjvLVzopFBkum3iUQs+1Kjyju3cA5zULA4FH2G8CMmBts81rH0EpGSi/eeUal119+kuctZHw==
dependencies:
protons-runtime "^5.4.0"
"@waku/rln@0.1.7-987c6cd.0":
version "0.1.7-987c6cd.0"
resolved "https://registry.npmjs.org/@waku/rln/-/rln-0.1.7-987c6cd.0.tgz"
integrity sha512-6w/17WpD7jdw5LyM6OX0c2mMxW3cRrXG7wxi7PzhoSb2celNWZYhnPR9UK+rgsP5opoBDXD7LAyaEEqA3afbgA==
"@waku/rln@0.1.10-593bc45.0":
version "0.1.10-593bc45.0"
resolved "https://registry.npmjs.org/@waku/rln/-/rln-0.1.10-593bc45.0.tgz"
integrity sha512-nkUcwfosKDXSsqzxBzTV+x9Iiuo0Ti5vVLQP8MnWttf4FuJxR8hKcde9+hvkzZZTZntn6TEQaYFzG3KOAC2kcA==
dependencies:
"@chainsafe/bls-keystore" "3.0.0"
"@noble/hashes" "^1.2.0"
"@waku/core" "0.0.37-987c6cd.0"
"@waku/utils" "0.0.25-987c6cd.0"
"@waku/zerokit-rln-wasm" "^0.0.13"
"@waku/core" "0.0.40-593bc45.0"
"@waku/utils" "0.0.28-593bc45.0"
"@waku/zerokit-rln-wasm" "^0.2.1"
chai "^5.1.2"
chai-as-promised "^8.0.1"
chai-spies "^1.1.0"
@ -1504,21 +1530,21 @@
sinon "^19.0.2"
uuid "^11.0.5"
"@waku/utils@0.0.25-987c6cd.0":
version "0.0.25-987c6cd.0"
resolved "https://registry.npmjs.org/@waku/utils/-/utils-0.0.25-987c6cd.0.tgz"
integrity sha512-HaYkDnVtpfmsXfDBd0gB63CxidIeE9gKMRMCaaywy6W07HK32ZgMgnD/BoPbaREa4BpEZELvW3qbYUydm3AKzw==
"@waku/utils@0.0.28-593bc45.0":
version "0.0.28-593bc45.0"
resolved "https://registry.npmjs.org/@waku/utils/-/utils-0.0.28-593bc45.0.tgz"
integrity sha512-m4FEzl89cVx6dCQYd15VxRmeqT1DTodHEAS4st7UMdNwaURGWeADbw37NPRc0wHu6LocQYQshJEP1eXtbTkmwg==
dependencies:
"@noble/hashes" "^1.3.2"
"@waku/interfaces" "0.0.32-987c6cd.0"
"@waku/interfaces" "0.0.35-593bc45.0"
chai "^4.3.10"
debug "^4.3.4"
uint8arrays "^5.0.1"
"@waku/zerokit-rln-wasm@^0.0.13":
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==
"@waku/zerokit-rln-wasm@^0.2.1":
version "0.2.1"
resolved "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.2.1.tgz"
integrity sha512-2Xp7e92y4qZpsiTPGBSVr4gVJ9mJTLaudlo0DQxNpxJUBtoJKpxdH5xDCQDiorbkWZC2j9EId+ohhxHO/xC1QQ==
abort-error@^1.0.1:
version "1.0.1"
@ -3900,14 +3926,14 @@ ms@^2.1.1, ms@^2.1.3:
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
ms@^3.0.0-canary.1:
version "3.0.0-canary.1"
resolved "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.1.tgz"
integrity sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g==
version "3.0.0-canary.202508261828"
resolved "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.202508261828.tgz"
integrity sha512-NotsCoUCIUkojWCzQff4ttdCfIPoA1UGZsyQbi7KmqkNRfKCrvga8JJi2PknHymHOuor0cJSn/ylj52Cbt2IrQ==
multiformats@^13.0.0, multiformats@^13.3.6:
version "13.3.7"
resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.3.7.tgz"
integrity sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ==
multiformats@^13.0.0, multiformats@^13.3.6, multiformats@^13.4.0:
version "13.4.1"
resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.4.1.tgz"
integrity sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==
mz@^2.7.0:
version "2.7.0"
@ -4089,9 +4115,9 @@ p-locate@^5.0.0:
p-limit "^3.0.2"
p-queue@^8.0.1:
version "8.1.0"
resolved "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz"
integrity sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==
version "8.1.1"
resolved "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz"
integrity sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==
dependencies:
eventemitter3 "^5.0.1"
p-timeout "^6.1.2"
@ -4280,7 +4306,7 @@ property-information@^7.0.0:
resolved "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz"
integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==
protons-runtime@^5.4.0, protons-runtime@^5.5.0:
protons-runtime@^5.4.0, protons-runtime@^5.5.0, protons-runtime@^5.6.0:
version "5.6.0"
resolved "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.6.0.tgz"
integrity sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg==
@ -4300,9 +4326,9 @@ queue-microtask@^1.2.2:
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
race-event@^1.3.0:
version "1.6.0"
resolved "https://registry.npmjs.org/race-event/-/race-event-1.6.0.tgz"
integrity sha512-hXkk3CDepWELBG2MsT/zIiTbjNNucMo49vwZEdjChJlxJivc8fWIu/Gh/4vEJdWsHDmnGCC6++ftP2Afep6RUg==
version "1.6.1"
resolved "https://registry.npmjs.org/race-event/-/race-event-1.6.1.tgz"
integrity sha512-vi7WH5g5KoTFpu2mme/HqZiWH14XSOtg5rfp6raBskBHl7wnmy3F/biAIyY5MsK+BHWhoPhxtZ1Y2R7OHHaWyQ==
dependencies:
abort-error "^1.0.1"
@ -4850,6 +4876,11 @@ sucrase@^3.35.0:
pirates "^4.0.1"
ts-interface-checker "^0.1.9"
supports-color@^10.0.0:
version "10.2.2"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz"
integrity sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==
supports-color@^7.1.0, supports-color@^7.2.0:
version "7.2.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
@ -4857,11 +4888,6 @@ supports-color@^7.1.0, supports-color@^7.2.0:
dependencies:
has-flag "^4.0.0"
supports-color@^9.4.0:
version "9.4.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz"
integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==
supports-preserve-symlinks-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
@ -5205,12 +5231,12 @@ vfile@^6.0.0:
vfile-message "^4.0.0"
weald@^1.0.4:
version "1.0.4"
resolved "https://registry.npmjs.org/weald/-/weald-1.0.4.tgz"
integrity sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ==
version "1.0.6"
resolved "https://registry.npmjs.org/weald/-/weald-1.0.6.tgz"
integrity sha512-sX1PzkcMJZUJ848JbFzB6aKHHglTxqACEnq2KgI75b7vWYvfXFBNbOuDKqFKwCT44CrP6c5r+L4+5GmPnb5/SQ==
dependencies:
ms "^3.0.0-canary.1"
supports-color "^9.4.0"
supports-color "^10.0.0"
which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1:
version "1.1.1"