diff --git a/advanced/dapps/react-dapp-v2/next.config.js b/advanced/dapps/react-dapp-v2/next.config.js index 0722aae47..f0bf773ca 100644 --- a/advanced/dapps/react-dapp-v2/next.config.js +++ b/advanced/dapps/react-dapp-v2/next.config.js @@ -1,13 +1,29 @@ +const path = require("path"); + /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, distDir: "build", + transpilePackages: ["@web-examples/shared"], webpack(config) { config.resolve.fallback = { ...config.resolve.fallback, fs: false, }; + // Resolve @web-examples/shared to TypeScript source files for direct transpilation + const sharedPath = path.resolve(__dirname, "../../../shared"); + config.resolve.alias = { + ...config.resolve.alias, + "@web-examples/shared": sharedPath, + }; + + // Enable WebAssembly support for packages like tiny-secp256k1 + config.experiments = { + ...config.experiments, + asyncWebAssembly: true, + }; + return config; }, }; diff --git a/advanced/dapps/react-dapp-v2/package.json b/advanced/dapps/react-dapp-v2/package.json index 52d82a3e0..56f58713c 100644 --- a/advanced/dapps/react-dapp-v2/package.json +++ b/advanced/dapps/react-dapp-v2/package.json @@ -8,9 +8,11 @@ "start": "next start", "lint": "next lint", "prettier": "prettier --check '**/*.{js,ts,jsx,tsx}'", - "prettier:write": "prettier --write '**/*.{js,ts,jsx,tsx}'" + "prettier:write": "prettier --write '**/*.{js,ts,jsx,tsx}'", + "postinstall": "cd ../../../shared && pnpm install && pnpm build || echo 'Warning: Shared package postinstall failed'" }, "dependencies": { + "@web-examples/shared": "file:../../../shared", "@celo/wallet-base": "^5.1.1", "@ethereumjs/tx": "^3.5.0", "@kadena/client": "^0.5.0", diff --git a/advanced/dapps/react-dapp-v2/pnpm-lock.yaml b/advanced/dapps/react-dapp-v2/pnpm-lock.yaml index 4bd34bbea..1de231fc3 100644 --- a/advanced/dapps/react-dapp-v2/pnpm-lock.yaml +++ b/advanced/dapps/react-dapp-v2/pnpm-lock.yaml @@ -129,6 +129,9 @@ importers: '@walletconnect/utils': specifier: 2.22.4-canary-auth-3 version: 2.22.4-canary-auth-3(typescript@5.8.3)(zod@3.24.4) + '@web-examples/shared': + specifier: file:../../../shared + version: file:../../../shared(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) axios: specifier: '>=1.8.2' version: 1.8.3 @@ -1011,21 +1014,43 @@ packages: '@cosmjs/amino@0.25.6': resolution: {integrity: sha512-9dXN2W7LHjDtJUGNsQ9ok0DfxeN3ca/TXnxCR3Ikh/5YqBqxI8Gel1J9PQO9L6EheYyh045Wff4bsMaLjyEeqQ==} + '@cosmjs/amino@0.32.3': + resolution: {integrity: sha512-G4zXl+dJbqrz1sSJ56H/25l5NJEk/pAPIr8piAHgbXYw88OdAOlpA26PQvk2IbSN/rRgVbvlLTNgX2tzz1dyUA==} + '@cosmjs/crypto@0.25.6': resolution: {integrity: sha512-ec+YcQLrg2ibcxtNrh4FqQnG9kG9IE/Aik2NH6+OXQdFU/qFuBTxSFcKDgzzBOChwlkXwydllM9Jjbp+dgIzRw==} + '@cosmjs/crypto@0.32.4': + resolution: {integrity: sha512-zicjGU051LF1V9v7bp8p7ovq+VyC91xlaHdsFOTo2oVry3KQikp8L/81RkXmUIT8FxMwdx1T7DmFwVQikcSDIw==} + deprecated: This uses elliptic for cryptographic operations, which contains several security-relevant bugs. To what degree this affects your application is something you need to carefully investigate. See https://github.com/cosmos/cosmjs/issues/1708 for further pointers. Starting with version 0.34.0 the cryptographic library has been replaced. However, private keys might still be at risk. + '@cosmjs/encoding@0.25.6': resolution: {integrity: sha512-0imUOB8XkUstI216uznPaX1hqgvLQ2Xso3zJj5IV5oJuNlsfDj9nt/iQxXWbJuettc6gvrFfpf+Vw2vBZSZ75g==} + '@cosmjs/encoding@0.32.3': + resolution: {integrity: sha512-p4KF7hhv8jBQX3MkB3Defuhz/W0l3PwWVYU2vkVuBJ13bJcXyhU9nJjiMkaIv+XP+W2QgRceqNNgFUC5chNR7w==} + + '@cosmjs/encoding@0.32.4': + resolution: {integrity: sha512-tjvaEy6ZGxJchiizzTn7HVRiyTg1i4CObRRaTRPknm5EalE13SV+TCHq38gIDfyUeden4fCuaBVEdBR5+ti7Hw==} + '@cosmjs/math@0.25.6': resolution: {integrity: sha512-Fmyc9FJ8KMU34n7rdapMJrT/8rx5WhMw2F7WLBu7AVLcBh0yWsXIcMSJCoPHTOnMIiABjXsnrrwEaLrOOBfu6A==} + '@cosmjs/math@0.32.4': + resolution: {integrity: sha512-++dqq2TJkoB8zsPVYCvrt88oJWsy1vMOuSOKcdlnXuOA/ASheTJuYy4+oZlTQ3Fr8eALDLGGPhJI02W2HyAQaw==} + '@cosmjs/proto-signing@0.25.6': resolution: {integrity: sha512-JpQ+Vnv9s6i3x8f3Jo0lJZ3VMnj3R5sMgX+8ti1LtB7qEYRR85qbDrEG9hDGIKqJJabvrAuCHnO6hYi0vJEJHA==} + '@cosmjs/proto-signing@0.32.3': + resolution: {integrity: sha512-kSZ0ZUY0DwcRT0NcIn2HkadH4NKlwjfZgbLj1ABwh/4l0RgeT84QCscZCu63tJYq3K6auwqTiZSZERwlO4/nbg==} + '@cosmjs/utils@0.25.6': resolution: {integrity: sha512-ofOYiuxVKNo238vCPPlaDzqPXy2AQ/5/nashBo5rvPZJkxt9LciGfUEQWPCOb1BIJDNx2Dzu0z4XCf/dwzl0Dg==} + '@cosmjs/utils@0.32.4': + resolution: {integrity: sha512-D1Yc+Zy8oL/hkUkFUL/bwxvuDBzRGpc4cF7/SkdhxX4iHpSLgdOuTt1mhCh9+kl6NQREy9t7SYZ6xeW5gFe60w==} + '@csstools/convert-colors@1.4.0': resolution: {integrity: sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==} engines: {node: '>=4.0.0'} @@ -1113,93 +1138,183 @@ packages: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} engines: {node: '>=14'} + '@ethersproject/abi@5.7.0': + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + '@ethersproject/abi@5.8.0': resolution: {integrity: sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==} + '@ethersproject/abstract-provider@5.7.0': + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + '@ethersproject/abstract-provider@5.8.0': resolution: {integrity: sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==} + '@ethersproject/abstract-signer@5.7.0': + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + '@ethersproject/abstract-signer@5.8.0': resolution: {integrity: sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==} + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + '@ethersproject/address@5.8.0': resolution: {integrity: sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==} + '@ethersproject/base64@5.7.0': + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + '@ethersproject/base64@5.8.0': resolution: {integrity: sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==} + '@ethersproject/basex@5.7.0': + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + '@ethersproject/basex@5.8.0': resolution: {integrity: sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==} + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + '@ethersproject/bignumber@5.8.0': resolution: {integrity: sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==} + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + '@ethersproject/bytes@5.8.0': resolution: {integrity: sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==} + '@ethersproject/constants@5.7.0': + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + '@ethersproject/constants@5.8.0': resolution: {integrity: sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==} + '@ethersproject/contracts@5.7.0': + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + '@ethersproject/contracts@5.8.0': resolution: {integrity: sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==} + '@ethersproject/hash@5.7.0': + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + '@ethersproject/hash@5.8.0': resolution: {integrity: sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==} + '@ethersproject/hdnode@5.7.0': + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + '@ethersproject/hdnode@5.8.0': resolution: {integrity: sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==} + '@ethersproject/json-wallets@5.7.0': + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + '@ethersproject/json-wallets@5.8.0': resolution: {integrity: sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==} + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + '@ethersproject/keccak256@5.8.0': resolution: {integrity: sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==} + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + '@ethersproject/logger@5.8.0': resolution: {integrity: sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==} + '@ethersproject/networks@5.7.1': + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + '@ethersproject/networks@5.8.0': resolution: {integrity: sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==} + '@ethersproject/pbkdf2@5.7.0': + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + '@ethersproject/pbkdf2@5.8.0': resolution: {integrity: sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==} + '@ethersproject/properties@5.7.0': + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + '@ethersproject/properties@5.8.0': resolution: {integrity: sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==} + '@ethersproject/providers@5.7.2': + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + '@ethersproject/providers@5.8.0': resolution: {integrity: sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==} + '@ethersproject/random@5.7.0': + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + '@ethersproject/random@5.8.0': resolution: {integrity: sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==} + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + '@ethersproject/rlp@5.8.0': resolution: {integrity: sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==} + '@ethersproject/sha2@5.7.0': + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + '@ethersproject/sha2@5.8.0': resolution: {integrity: sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==} + '@ethersproject/signing-key@5.7.0': + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + '@ethersproject/signing-key@5.8.0': resolution: {integrity: sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==} + '@ethersproject/solidity@5.7.0': + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + '@ethersproject/solidity@5.8.0': resolution: {integrity: sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==} + '@ethersproject/strings@5.7.0': + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + '@ethersproject/strings@5.8.0': resolution: {integrity: sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==} + '@ethersproject/transactions@5.7.0': + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + '@ethersproject/transactions@5.8.0': resolution: {integrity: sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==} + '@ethersproject/units@5.7.0': + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + '@ethersproject/units@5.8.0': resolution: {integrity: sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==} + '@ethersproject/wallet@5.7.0': + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + '@ethersproject/wallet@5.8.0': resolution: {integrity: sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==} + '@ethersproject/web@5.7.1': + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + '@ethersproject/web@5.8.0': resolution: {integrity: sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==} + '@ethersproject/wordlists@5.7.0': + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + '@ethersproject/wordlists@5.8.0': resolution: {integrity: sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==} @@ -1622,6 +1737,9 @@ packages: '@noble/secp256k1@2.2.3': resolution: {integrity: sha512-l7r5oEQym9Us7EAigzg30/PQAvynhMt2uoYtT3t26eGDVm9Yii5mZ5jWSWmZ/oSIR2Et0xfc6DXrG0bZ787V3w==} + '@noble/secp256k1@3.0.0': + resolution: {integrity: sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1676,10 +1794,33 @@ packages: webpack-plugin-serve: optional: true + '@polkadot/keyring@10.4.2': + resolution: {integrity: sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@polkadot/util': 10.4.2 + '@polkadot/util-crypto': 10.4.2 + '@polkadot/networks@10.4.2': resolution: {integrity: sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==} engines: {node: '>=14.0.0'} + '@polkadot/types-augment@9.14.2': + resolution: {integrity: sha512-WO9d7RJufUeY3iFgt2Wz762kOu1tjEiGBR5TT4AHtpEchVHUeosVTrN9eycC+BhleqYu52CocKz6u3qCT/jKLg==} + engines: {node: '>=14.0.0'} + + '@polkadot/types-codec@9.14.2': + resolution: {integrity: sha512-AJ4XF7W1no4PENLBRU955V6gDxJw0h++EN3YoDgThozZ0sj3OxyFupKgNBZcZb2V23H8JxQozzIad8k+nJbO1w==} + engines: {node: '>=14.0.0'} + + '@polkadot/types-create@9.14.2': + resolution: {integrity: sha512-nSnKpBierlmGBQT8r6/SHf6uamBIzk4WmdMsAsR4uJKJF1PtbIqx2W5PY91xWSiMSNMzjkbCppHkwaDAMwLGaw==} + engines: {node: '>=14.0.0'} + + '@polkadot/types@9.14.2': + resolution: {integrity: sha512-hGLddTiJbvowhhUZJ3k+olmmBc1KAjWIQxujIUIYASih8FQ3/YJDKxaofGOzh0VygOKW3jxQBN2VZPofyDP9KQ==} + engines: {node: '>=14.0.0'} + '@polkadot/util-crypto@10.4.2': resolution: {integrity: sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==} engines: {node: '>=14.0.0'} @@ -1935,6 +2076,9 @@ packages: '@scure/base@1.2.6': resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + '@scure/bip32@1.1.3': + resolution: {integrity: sha512-dSH3+LCWONlSNQuF34xZrG6Xas7tp2jSSqHb/pMfXWM0vKE4JZOtK3uJfoWouUVW5IGlls75HkXmYLldZ8ySgQ==} + '@scure/bip32@1.1.5': resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} @@ -1944,6 +2088,9 @@ packages: '@scure/bip32@1.7.0': resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} + '@scure/bip39@1.1.0': + resolution: {integrity: sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==} + '@scure/bip39@1.1.1': resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} @@ -1963,22 +2110,178 @@ packages: '@sinonjs/fake-timers@6.0.1': resolution: {integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==} + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + '@solana/buffer-layout@4.0.1': resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} engines: {node: '>=5.10'} + '@solana/codecs-core@2.0.0-rc.1': + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-data-structures@2.0.0-rc.1': + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.0.0-rc.1': + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-strings@2.0.0-rc.1': + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + + '@solana/codecs@2.0.0-rc.1': + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.0.0-rc.1': + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/options@2.0.0-rc.1': + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + + '@solana/spl-token-group@0.0.7': + resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token-metadata@0.1.6': + resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token@0.4.14': + resolution: {integrity: sha512-u09zr96UBpX4U685MnvQsNzlvw9TiY005hk1vJmJr7gMJldoPG1eYU5/wNEyOA5lkMLiR/gOi9SFD4MefOYEsA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.5 + '@solana/web3.js@1.98.0': resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==} + '@solana/web3.js@1.98.2': + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + + '@stablelib/binary@1.0.1': + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + + '@stablelib/blake2b@1.0.1': + resolution: {integrity: sha512-B3KyKoBAjkIFeH7romcF96i+pVFYk7K2SBQ1pZvaxV+epSBXJ+n0C66esUhyz6FF+5FbdQVm77C5fzGFcEZpKA==} + + '@stablelib/bytes@1.0.1': + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} + + '@stablelib/constant-time@1.0.1': + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + + '@stablelib/ed25519@1.0.3': + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} + + '@stablelib/hash@1.0.1': + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} + + '@stablelib/hmac@1.0.1': + resolution: {integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==} + + '@stablelib/int@1.0.1': + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + + '@stablelib/keyagreement@1.0.1': + resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} + + '@stablelib/nacl@1.0.4': + resolution: {integrity: sha512-PJ2U/MrkXSKUM8C4qFs87WeCNxri7KQwR8Cdwm9q2sweGuAtTvOJGuW0F3N+zn+ySLPJA98SYWSSpogMJ1gCmw==} + + '@stablelib/pbkdf2@1.0.1': + resolution: {integrity: sha512-d5jwK6jW1DkMyzqY8D1Io+fRXcsUVr95lk5LKX9ghaUdAITTc1ZL0bff+R0IrwSixbHluxhnivG7vDw59AZ/Nw==} + + '@stablelib/poly1305@1.0.1': + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} + + '@stablelib/random@1.0.2': + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + + '@stablelib/salsa20@1.0.2': + resolution: {integrity: sha512-nfjKzw0KTKrrKBasEP+j7UP4I8Xudom8lVZIBCp0kQNARXq72IlSic0oabg2FC1NU68L4RdHrNJDd8bFwrphYA==} + + '@stablelib/sha512@1.0.1': + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} + + '@stablelib/wipe@1.0.1': + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + + '@stablelib/x25519@1.0.3': + resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + + '@stablelib/xsalsa20@1.0.2': + resolution: {integrity: sha512-7XdBGbcNgBShmuhDXv1G1WPVCkjZdkb1oPMzSidO7Fve0MHntH6TjFkj5bfLI+aRE+61weO076vYpP/jmaAYog==} + + '@stacks/auth@7.2.0': + resolution: {integrity: sha512-u+Ky4CMQWFTPI6Au3VFcW74nSIA4Zb8YjsbOkcv0q9E6LiALyK4gozpKTxKvfW3/z1ER3z1Ky9uH/s4zY59rvg==} + '@stacks/common@7.0.2': resolution: {integrity: sha512-+RSecHdkxOtswmE4tDDoZlYEuULpnTQVeDIG5eZ32opK8cFxf4EugAcK9CsIsHx/Se1yTEaQ21WGATmJGK84lQ==} + '@stacks/encryption@7.2.0': + resolution: {integrity: sha512-XDgb5GuR2kURC0YJWo70xnWPKeizBg/qpGPDApBVLFgaOqFL4FdFmvxHXU5lVbFR3W+mtdxPHedWtQpxxOBlMQ==} + '@stacks/network@7.0.2': resolution: {integrity: sha512-XzHnoWqku/jRrTgMXhmh3c+I0O9vDH24KlhzGDZtBu+8CGGyHNPAZzGwvoUShonMXrXjEnfO9IYQwV5aJhfv6g==} + '@stacks/network@7.2.0': + resolution: {integrity: sha512-AkLougCF2RLbK97TtISZxAhF3cE757XMXWOGKvEFWNauiQ5/bYyI9W5jZypG3yI/AyYIo04NKoFWWTnpJcn1iA==} + + '@stacks/profile@7.2.0': + resolution: {integrity: sha512-pzPgn/NpmjA7TdeA5U9OjXLwBNqGPrjWhsMy/ZC3iUdnIUvthgWwlPpydgQOTJaRqaDMdY24hFgT+og6QbyQQA==} + + '@stacks/storage@7.2.0': + resolution: {integrity: sha512-aBfHhfhIom/xMseJSArH0xWqOAhN7waY255s4PfxmRdCsE6GKeXxIdZvgNYcHXrSiIPH3spk00UDA4+8xiRAQA==} + '@stacks/transactions@7.0.6': resolution: {integrity: sha512-qRGo4tNwOh+avUv/u4JGqqUWQ8xW/iUWtJV0o3BxpMyRxqDXmj+m+yeAEVYf9jRDouOo+NaWmwtRmWc0URZPdw==} + '@stacks/transactions@7.2.0': + resolution: {integrity: sha512-U7wjlxM9Q+408ihRsv5mlKRslXGt2WCShKi1lduiqf5+dBSRGdVi8ttCIEckSsg3ulCVF3EHTQF3LZgw4kwKlQ==} + + '@stacks/wallet-sdk@7.2.0': + resolution: {integrity: sha512-w4UmIaulB03ki0eosWA2ju4vXtF1N+n+nX+/GuV8ZW3rbZ7xeRCv16IzZZL6TspMcaUKyZKTVB2uximqBNbqPQ==} + '@substrate/ss58-registry@1.51.0': resolution: {integrity: sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==} @@ -2058,6 +2361,56 @@ packages: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} + '@taquito/axios-fetch-adapter@https://codeload.github.com/ecadlabs/axios-fetch-adapter/tar.gz/167684f522e90343b9f3439d9a43ac571e2396f6': + resolution: {tarball: https://codeload.github.com/ecadlabs/axios-fetch-adapter/tar.gz/167684f522e90343b9f3439d9a43ac571e2396f6} + version: 0.3.1 + peerDependencies: + axios: '>=1.8.2' + + '@taquito/core@23.0.3': + resolution: {integrity: sha512-ivCR0kxMzJ53spPw7xm/wMMYI5rP7ADurq+us6R2Z8t5jwkCtXWBAqpvwMrJeaoNjjJvTaOXf0khLg8WsdDKgg==} + engines: {node: '>=18'} + + '@taquito/http-utils@15.1.0': + resolution: {integrity: sha512-Uug5hN0XvMlFFN+rxSMW+Y9Z8pw5uqHRDZC83eLOBSijbpMo+ScG/2nKkC8MUUrqLaLeHru1HD4kT5DHc1fI+A==} + engines: {node: '>=6.0.0'} + + '@taquito/local-forging@15.1.0': + resolution: {integrity: sha512-ib/2RqtxQQC9SjyTB9T5OSc5yUx9GUSdMOA4dmtiiFcN2+AG+aw7ixn6Hjt9Td8ZIOPt9H6HkyTypKrX7+cENw==} + engines: {node: '>=6.0.0'} + + '@taquito/local-forging@23.0.3': + resolution: {integrity: sha512-xT5h+rutSJSI0QfxZ1M1FiDXcQuFDqSwRDhdYx28twYGFAhsGvGfknXmtN3F5SiO9hkGXL7dZR5w8NpIdk8yEw==} + engines: {node: '>=18'} + + '@taquito/michel-codec@15.1.0': + resolution: {integrity: sha512-wKucIhs7vhaq5H+YSF2f6Qu9+g+QiEL6MPc5ROpxBrXJTeKSwBOEIpfqcKfkfMuecJyHZJW3glNfkpAVTCgkxg==} + engines: {node: '>=6.0.0'} + + '@taquito/michelson-encoder@15.1.0': + resolution: {integrity: sha512-uQMEu3g+8WcYb5ZV6+XGvoWJhKoNxU0F2RqodLJB7UxQ1rI/OMa+VlxSLMt4niIxpKXqnO9j4tD7Y4mPC3ufaA==} + engines: {node: '>=6.0.0'} + + '@taquito/rpc@15.1.0': + resolution: {integrity: sha512-OeQA8QwT+s6IUmLaF5yeWruPYzWi/DVCA3kl+AaQ8IFfCMzmAW/MszbbNkJSzHpY2p4jPBwdRNxg3qeJdL482A==} + engines: {node: '>=6.0.0'} + + '@taquito/signer@15.1.0': + resolution: {integrity: sha512-VP7hS8cYQ6cMerVkbD5X3AqpoIXvh72xNuv3++R4reEjdl+E3VWs1CZZGnJj6yzlFV21SrdGKSILx8Rl3Ql4DA==} + engines: {node: '>=6.0.0'} + + '@taquito/taquito@15.1.0': + resolution: {integrity: sha512-2AXWeNoXsmMOSkJVXtXjOlJkS+hKXITaSybMA6nJuS1YWY4e7iAr678Y6UgVEHRJxeGohX4R4Ww12Ymr3Sfedg==} + engines: {node: '>=6.0.0'} + + '@taquito/utils@15.1.0': + resolution: {integrity: sha512-lqVThoFMmOKPg9jyREr4A63cpeckf5esCwOyOAW3sm+yCxD9s5khnBPtH8s52cRVnChFdwk/eqmADka9gat5hw==} + engines: {node: '>=6.0.0'} + + '@taquito/utils@23.0.3': + resolution: {integrity: sha512-7ef9V8d1z++wCODo03LlvGq6D3P8Gr0nc93nbzDNaKWS+wJfS7lNz2tlYSsVkvBmVOt9KVdFcVLZ1/heySfuOw==} + engines: {node: '>=18'} + '@ton/core@0.61.0': resolution: {integrity: sha512-0qyVfP2dDue2bq80ydXggo2MlufcmzuFk6G94qRrZxvyQ3NSe4UeBTeRf1gQmN7tywgTsX2gS61e4yvJrlUu4Q==} peerDependencies: @@ -2100,6 +2453,9 @@ packages: '@types/bn.js@5.1.6': resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + '@types/bs58check@2.1.2': + resolution: {integrity: sha512-xpXaQlOIY1KoXlA/ytHGHpEIU87PJt+g9SH7nC6HdCgaBwT2IEZIwBMHbjuX6BpnfbiUMlmwqurdLDwXpcdmSA==} + '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} @@ -2547,6 +2903,9 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + '@web-examples/shared@file:../../../shared': + resolution: {directory: ../../../shared, type: directory} + '@webassemblyjs/ast@1.9.0': resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} @@ -2877,6 +3236,9 @@ packages: async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -3075,6 +3437,13 @@ packages: resolution: {integrity: sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==} engines: {node: '>=8.0.0'} + bip32@4.0.0: + resolution: {integrity: sha512-aOGy88DDlVUhspIXJN+dVEtclhIsfAUppD43V0j40cPTld3pv/0X/MlrZSZ6jowIaQQzFwP8M6rFU2z2mVYjDQ==} + engines: {node: '>=6.0.0'} + + bip39-light@1.0.7: + resolution: {integrity: sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==} + bip39@3.0.2: resolution: {integrity: sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==} @@ -3113,6 +3482,9 @@ packages: bn.js@4.12.1: resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + bn.js@5.2.0: + resolution: {integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==} + bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} @@ -3313,6 +3685,9 @@ packages: caniuse-lite@1.0.30001706: resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==} + capability@0.2.5: + resolution: {integrity: sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==} + capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} @@ -3336,6 +3711,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -3440,6 +3819,14 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -3558,6 +3945,9 @@ packages: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} + cosmjs-types@0.9.0: + resolution: {integrity: sha512-MN/yUe6mkJwHnCFfsNPeCfXVhyxHYW6c/xDUzrSbBycYzw++XvWDMJArXp2pLdgD6FQ8DW79vkPjeNKVrXaHeQ==} + cosmos-wallet@1.2.0: resolution: {integrity: sha512-lMEpNhjN6FHU6c8l/lYi1hWU/74bOlTmo3pz0mwVpCHjNSe5u7sZCO7j0dndd3oV0tM8tj/u3eJa4NgZxG9a0Q==} @@ -4001,9 +4391,16 @@ packages: ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + ecpair@2.1.0: + resolution: {integrity: sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==} + engines: {node: '>=8.0.0'} + ed25519-hd-key@1.1.2: resolution: {integrity: sha512-/0y9y6N7vM6Kj5ASr9J9wcMVDTtygxSOvYX+PJiMD7VcxCx2G03V5bLRl8Dug9EgkLFsLhGqBtQWQRcElEeWTA==} + ed25519-hd-key@1.3.0: + resolution: {integrity: sha512-IWwAyiiuJQhgu3L8NaHb68eJxTu2pgCwxIBdgpLJdKpYZM46+AXePSVTr7fkNKaUOfOL4IrjEUaQvyVRIDP7fg==} + ed2curve@0.3.0: resolution: {integrity: sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==} @@ -4018,6 +4415,9 @@ packages: electron-to-chromium@1.5.118: resolution: {integrity: sha512-yNDUus0iultYyVoEFLnQeei7LOQkL8wg8GQpkPCRrOlJXlcCwa6eGKZkxQ9ciHsqZyYbj8Jd94X1CTPzGm+uIA==} + elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -4069,6 +4469,9 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-polyfill@0.1.3: + resolution: {integrity: sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg==} + error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -4403,6 +4806,10 @@ packages: resolution: {integrity: sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A==} deprecated: Deprecated in favor of '@metamask/eth-sig-util' + eth-sig-util@3.0.1: + resolution: {integrity: sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ==} + deprecated: Deprecated in favor of '@metamask/eth-sig-util' + ethereum-bloom-filters@1.2.0: resolution: {integrity: sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==} @@ -4429,6 +4836,9 @@ packages: resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} engines: {node: '>=10.0.0'} + ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + ethers@5.8.0: resolution: {integrity: sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==} @@ -4551,9 +4961,15 @@ packages: fast-stable-stringify@1.0.0: resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + fast-text-encoding@1.0.6: + resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} + fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -5695,6 +6111,9 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-sha256@0.9.0: + resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} + js-sha3@0.5.7: resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} @@ -5791,6 +6210,9 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + jsontokens@4.0.1: + resolution: {integrity: sha512-+MO415LEN6M+3FGsRz4wU20g7N2JA+2j9d9+pGaNJHviG4L8N0qzavGyENw6fJqsq9CcrHOIL6iWX5yeTZ86+Q==} + jsprim@1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} @@ -5857,6 +6279,12 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + libsodium-sumo@0.7.15: + resolution: {integrity: sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==} + + libsodium-wrappers-sumo@0.7.15: + resolution: {integrity: sha512-aSWY8wKDZh5TC7rMvEdTHoyppVq/1dTSAeAR7H6pzd6QRT3vQWcT5pGwCotLcpPEOLXX6VvqihSPkpEhYAjANA==} + libsodium-wrappers@0.7.15: resolution: {integrity: sha512-E4anqJQwcfiC6+Yrl01C1m8p99wEhLmJSs0VQqST66SbQXXBoaJY0pF4BNjRYa/sOQAxx6lXAaAFIlx+15tXJQ==} @@ -6230,6 +6658,9 @@ packages: near-abi@0.2.0: resolution: {integrity: sha512-kCwSf/3fraPU2zENK18sh+kKG4uKbEUEQdyWQkmW8ZofmLarObIz2+zAYjA1teDZLeMvEQew3UysnPDXgjneaA==} + near-api-js@0.45.1: + resolution: {integrity: sha512-QyPO/vjvMFlcMO1DCpsqzmnSqPIyHsjK1Qi4B5ZR1cJCIWMkqugDF/TDf8FVQ85pmlcYeYwfiTqKanKz+3IG0A==} + near-api-js@6.0.1: resolution: {integrity: sha512-L9kwiSrGI9e8QcECi/TGrNRWJfKymwcboKXMFk/7qxEhaZdIdMvAJ6mVx8rETAM2s7iaxidtnF4gN9nZRNCAHw==} peerDependencies: @@ -6244,6 +6675,12 @@ packages: '@near-js/types': ^2.0.1 '@near-js/utils': ^2.0.1 + near-hd-key@1.2.1: + resolution: {integrity: sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==} + + near-seed-phrase@0.2.1: + resolution: {integrity: sha512-feMuums+kVL3LSuPcP4ld07xHCb2mu6z48SGfP3W+8tl1Qm5xIcjiQzY2IDPBvFgajRDxWSb8GzsRHoInazByw==} + negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -6393,6 +6830,9 @@ packages: nwsapi@2.2.18: resolution: {integrity: sha512-p1TRH/edngVEHVbwqWnxUViEmq5znDvyB+Sik5cmuLpGOIfDf/39zLiq3swPF8Vakqn+gvNiOQAZu8djYlQILA==} + o3@1.0.3: + resolution: {integrity: sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==} + oauth-sign@0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} @@ -7498,6 +7938,10 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + ripemd160-min@0.0.6: + resolution: {integrity: sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==} + engines: {node: '>=8'} + ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} @@ -7546,6 +7990,13 @@ packages: run-queue@1.0.3: resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==} + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-array-concat@1.1.3: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} @@ -7606,6 +8057,9 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + schema-inspector@2.1.0: + resolution: {integrity: sha512-3bmQVhbA01/EW8cZin4vIpqlpNU2SIy4BhKCfCgogJ3T/L76dLx3QAE+++4o+dNT33sa+SN9vOJL7iHiHFjiNg==} + schema-utils@1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} engines: {node: '>= 4'} @@ -8204,6 +8658,10 @@ packages: timsort@0.3.0: resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==} + tiny-secp256k1@2.2.4: + resolution: {integrity: sha512-FoDTcToPqZE454Q04hH9o2EhxWsm7pOSpicyHkgTwKhdKWdsTUuqfP5MLq3g+VjAtl2vSx6JpXGdwA2qpYkI0Q==} + engines: {node: '>=14.0.0'} + tinyglobby@0.2.12: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} @@ -8358,6 +8816,9 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typedarray-to-buffer@4.0.0: + resolution: {integrity: sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==} + typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -8369,9 +8830,16 @@ packages: engines: {node: '>=14.17'} hasBin: true + u3@0.1.1: + resolution: {integrity: sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==} + ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + uint8array-tools@0.0.7: + resolution: {integrity: sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==} + engines: {node: '>=14.0.0'} + uint8arrays@3.1.1: resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} @@ -8866,6 +9334,9 @@ packages: engines: {node: '>= 8'} hasBin: true + wif@2.0.6: + resolution: {integrity: sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -8966,6 +9437,18 @@ packages: utf-8-validate: optional: true + ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -9097,6 +9580,10 @@ packages: zod@3.24.4: resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + zone-file@2.0.0-beta.3: + resolution: {integrity: sha512-6tE3PSRcpN5lbTTLlkLez40WkNPc9vw/u1J2j6DBiy0jcVX48nCkWrx2EC+bWHqC2SLp069Xw4AdnYn/qp/W5g==} + engines: {node: '>=10'} + snapshots: '@0no-co/graphql.web@1.1.2(graphql@16.11.0)': @@ -10682,6 +11169,13 @@ snapshots: '@cosmjs/math': 0.25.6 '@cosmjs/utils': 0.25.6 + '@cosmjs/amino@0.32.3': + dependencies: + '@cosmjs/crypto': 0.32.4 + '@cosmjs/encoding': 0.32.3 + '@cosmjs/math': 0.32.4 + '@cosmjs/utils': 0.32.4 + '@cosmjs/crypto@0.25.6': dependencies: '@cosmjs/encoding': 0.25.6 @@ -10695,24 +11189,61 @@ snapshots: ripemd160: 2.0.2 sha.js: 2.4.11 + '@cosmjs/crypto@0.32.4': + dependencies: + '@cosmjs/encoding': 0.32.4 + '@cosmjs/math': 0.32.4 + '@cosmjs/utils': 0.32.4 + '@noble/hashes': 1.8.0 + bn.js: 5.2.1 + elliptic: 6.6.1 + libsodium-wrappers-sumo: 0.7.15 + '@cosmjs/encoding@0.25.6': dependencies: base64-js: 1.5.1 bech32: 1.1.4 readonly-date: 1.0.0 + '@cosmjs/encoding@0.32.3': + dependencies: + base64-js: 1.5.1 + bech32: 1.1.4 + readonly-date: 1.0.0 + + '@cosmjs/encoding@0.32.4': + dependencies: + base64-js: 1.5.1 + bech32: 1.1.4 + readonly-date: 1.0.0 + '@cosmjs/math@0.25.6': dependencies: bn.js: 4.12.1 + '@cosmjs/math@0.32.4': + dependencies: + bn.js: 5.2.1 + '@cosmjs/proto-signing@0.25.6': dependencies: '@cosmjs/amino': 0.25.6 long: 4.0.0 protobufjs: 7.2.4 + '@cosmjs/proto-signing@0.32.3': + dependencies: + '@cosmjs/amino': 0.32.3 + '@cosmjs/crypto': 0.32.4 + '@cosmjs/encoding': 0.32.3 + '@cosmjs/math': 0.32.4 + '@cosmjs/utils': 0.32.4 + cosmjs-types: 0.9.0 + '@cosmjs/utils@0.25.6': {} + '@cosmjs/utils@0.32.4': {} + '@csstools/convert-colors@1.4.0': {} '@csstools/normalize.css@10.1.0': {} @@ -10811,6 +11342,18 @@ snapshots: ethereum-cryptography: 2.2.1 micro-ftch: 0.3.1 + '@ethersproject/abi@5.7.0': + dependencies: + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/abi@5.8.0': dependencies: '@ethersproject/address': 5.8.0 @@ -10823,6 +11366,16 @@ snapshots: '@ethersproject/properties': 5.8.0 '@ethersproject/strings': 5.8.0 + '@ethersproject/abstract-provider@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/networks': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/web': 5.8.0 + '@ethersproject/abstract-provider@5.8.0': dependencies: '@ethersproject/bignumber': 5.8.0 @@ -10833,6 +11386,14 @@ snapshots: '@ethersproject/transactions': 5.8.0 '@ethersproject/web': 5.8.0 + '@ethersproject/abstract-signer@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/abstract-signer@5.8.0': dependencies: '@ethersproject/abstract-provider': 5.8.0 @@ -10841,6 +11402,14 @@ snapshots: '@ethersproject/logger': 5.8.0 '@ethersproject/properties': 5.8.0 + '@ethersproject/address@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/rlp': 5.8.0 + '@ethersproject/address@5.8.0': dependencies: '@ethersproject/bignumber': 5.8.0 @@ -10849,29 +11418,65 @@ snapshots: '@ethersproject/logger': 5.8.0 '@ethersproject/rlp': 5.8.0 + '@ethersproject/base64@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/base64@5.8.0': dependencies: '@ethersproject/bytes': 5.8.0 + '@ethersproject/basex@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/basex@5.8.0': dependencies: '@ethersproject/bytes': 5.8.0 '@ethersproject/properties': 5.8.0 - '@ethersproject/bignumber@5.8.0': + '@ethersproject/bignumber@5.7.0': dependencies: '@ethersproject/bytes': 5.8.0 '@ethersproject/logger': 5.8.0 bn.js: 5.2.1 - '@ethersproject/bytes@5.8.0': + '@ethersproject/bignumber@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.7.0': dependencies: '@ethersproject/logger': 5.8.0 + '@ethersproject/bytes@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/constants@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/constants@5.8.0': dependencies: '@ethersproject/bignumber': 5.8.0 + '@ethersproject/contracts@5.7.0': + dependencies: + '@ethersproject/abi': 5.8.0 + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/contracts@5.8.0': dependencies: '@ethersproject/abi': 5.8.0 @@ -10885,6 +11490,18 @@ snapshots: '@ethersproject/properties': 5.8.0 '@ethersproject/transactions': 5.8.0 + '@ethersproject/hash@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/base64': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/hash@5.8.0': dependencies: '@ethersproject/abstract-signer': 5.8.0 @@ -10897,6 +11514,21 @@ snapshots: '@ethersproject/properties': 5.8.0 '@ethersproject/strings': 5.8.0 + '@ethersproject/hdnode@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/basex': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/pbkdf2': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/sha2': 5.8.0 + '@ethersproject/signing-key': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/wordlists': 5.8.0 + '@ethersproject/hdnode@5.8.0': dependencies: '@ethersproject/abstract-signer': 5.8.0 @@ -10912,6 +11544,22 @@ snapshots: '@ethersproject/transactions': 5.8.0 '@ethersproject/wordlists': 5.8.0 + '@ethersproject/json-wallets@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/hdnode': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/pbkdf2': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/random': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/transactions': 5.8.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + '@ethersproject/json-wallets@5.8.0': dependencies: '@ethersproject/abstract-signer': 5.8.0 @@ -10928,26 +11576,72 @@ snapshots: aes-js: 3.0.0 scrypt-js: 3.0.1 + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + js-sha3: 0.8.0 + '@ethersproject/keccak256@5.8.0': dependencies: '@ethersproject/bytes': 5.8.0 js-sha3: 0.8.0 + '@ethersproject/logger@5.7.0': {} + '@ethersproject/logger@5.8.0': {} + '@ethersproject/networks@5.7.1': + dependencies: + '@ethersproject/logger': 5.8.0 + '@ethersproject/networks@5.8.0': dependencies: '@ethersproject/logger': 5.8.0 + '@ethersproject/pbkdf2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/sha2': 5.8.0 + '@ethersproject/pbkdf2@5.8.0': dependencies: '@ethersproject/bytes': 5.8.0 '@ethersproject/sha2': 5.8.0 + '@ethersproject/properties@5.7.0': + dependencies: + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties@5.8.0': dependencies: '@ethersproject/logger': 5.8.0 + '@ethersproject/providers@5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/base64': 5.8.0 + '@ethersproject/basex': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/networks': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/random': 5.8.0 + '@ethersproject/rlp': 5.8.0 + '@ethersproject/sha2': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/web': 5.8.0 + bech32: 1.1.4 + ws: 7.4.6(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@ethersproject/abstract-provider': 5.8.0 @@ -10974,22 +11668,47 @@ snapshots: - bufferutil - utf-8-validate + '@ethersproject/random@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/random@5.8.0': dependencies: '@ethersproject/bytes': 5.8.0 '@ethersproject/logger': 5.8.0 + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/rlp@5.8.0': dependencies: '@ethersproject/bytes': 5.8.0 '@ethersproject/logger': 5.8.0 + '@ethersproject/sha2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + hash.js: 1.1.7 + '@ethersproject/sha2@5.8.0': dependencies: '@ethersproject/bytes': 5.8.0 '@ethersproject/logger': 5.8.0 hash.js: 1.1.7 + '@ethersproject/signing-key@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + '@ethersproject/signing-key@5.8.0': dependencies: '@ethersproject/bytes': 5.8.0 @@ -10999,6 +11718,15 @@ snapshots: elliptic: 6.6.1 hash.js: 1.1.7 + '@ethersproject/solidity@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/sha2': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/solidity@5.8.0': dependencies: '@ethersproject/bignumber': 5.8.0 @@ -11008,12 +11736,30 @@ snapshots: '@ethersproject/sha2': 5.8.0 '@ethersproject/strings': 5.8.0 + '@ethersproject/strings@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/strings@5.8.0': dependencies: '@ethersproject/bytes': 5.8.0 '@ethersproject/constants': 5.8.0 '@ethersproject/logger': 5.8.0 + '@ethersproject/transactions@5.7.0': + dependencies: + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/rlp': 5.8.0 + '@ethersproject/signing-key': 5.8.0 + '@ethersproject/transactions@5.8.0': dependencies: '@ethersproject/address': 5.8.0 @@ -11026,12 +11772,36 @@ snapshots: '@ethersproject/rlp': 5.8.0 '@ethersproject/signing-key': 5.8.0 + '@ethersproject/units@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/units@5.8.0': dependencies: '@ethersproject/bignumber': 5.8.0 '@ethersproject/constants': 5.8.0 '@ethersproject/logger': 5.8.0 + '@ethersproject/wallet@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/hdnode': 5.8.0 + '@ethersproject/json-wallets': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/random': 5.8.0 + '@ethersproject/signing-key': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/wordlists': 5.8.0 + '@ethersproject/wallet@5.8.0': dependencies: '@ethersproject/abstract-provider': 5.8.0 @@ -11050,6 +11820,14 @@ snapshots: '@ethersproject/transactions': 5.8.0 '@ethersproject/wordlists': 5.8.0 + '@ethersproject/web@5.7.1': + dependencies: + '@ethersproject/base64': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/web@5.8.0': dependencies: '@ethersproject/base64': 5.8.0 @@ -11058,6 +11836,14 @@ snapshots: '@ethersproject/properties': 5.8.0 '@ethersproject/strings': 5.8.0 + '@ethersproject/wordlists@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/wordlists@5.8.0': dependencies: '@ethersproject/bytes': 5.8.0 @@ -11654,6 +12440,8 @@ snapshots: '@noble/secp256k1@2.2.3': {} + '@noble/secp256k1@3.0.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -11696,12 +12484,48 @@ snapshots: sockjs-client: 1.6.1(supports-color@6.1.0) webpack-dev-server: 3.11.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@4.44.2) + '@polkadot/keyring@10.4.2(@polkadot/util-crypto@10.4.2(@polkadot/util@10.4.2))(@polkadot/util@10.4.2)': + dependencies: + '@babel/runtime': 7.26.10 + '@polkadot/util': 10.4.2 + '@polkadot/util-crypto': 10.4.2(@polkadot/util@10.4.2) + '@polkadot/networks@10.4.2': dependencies: '@babel/runtime': 7.26.10 '@polkadot/util': 10.4.2 '@substrate/ss58-registry': 1.51.0 + '@polkadot/types-augment@9.14.2': + dependencies: + '@babel/runtime': 7.26.10 + '@polkadot/types': 9.14.2 + '@polkadot/types-codec': 9.14.2 + '@polkadot/util': 10.4.2 + + '@polkadot/types-codec@9.14.2': + dependencies: + '@babel/runtime': 7.26.10 + '@polkadot/util': 10.4.2 + '@polkadot/x-bigint': 10.4.2 + + '@polkadot/types-create@9.14.2': + dependencies: + '@babel/runtime': 7.26.10 + '@polkadot/types-codec': 9.14.2 + '@polkadot/util': 10.4.2 + + '@polkadot/types@9.14.2': + dependencies: + '@babel/runtime': 7.26.10 + '@polkadot/keyring': 10.4.2(@polkadot/util-crypto@10.4.2(@polkadot/util@10.4.2))(@polkadot/util@10.4.2) + '@polkadot/types-augment': 9.14.2 + '@polkadot/types-codec': 9.14.2 + '@polkadot/types-create': 9.14.2 + '@polkadot/util': 10.4.2 + '@polkadot/util-crypto': 10.4.2(@polkadot/util@10.4.2) + rxjs: 7.8.2 + '@polkadot/util-crypto@10.4.2(@polkadot/util@10.4.2)': dependencies: '@babel/runtime': 7.26.10 @@ -12159,6 +12983,12 @@ snapshots: '@scure/base@1.2.6': {} + '@scure/bip32@1.1.3': + dependencies: + '@noble/hashes': 1.1.5 + '@noble/secp256k1': 1.7.1 + '@scure/base': 1.1.9 + '@scure/bip32@1.1.5': dependencies: '@noble/hashes': 1.2.0 @@ -12177,6 +13007,11 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 + '@scure/bip39@1.1.0': + dependencies: + '@noble/hashes': 1.1.5 + '@scure/base': 1.1.9 + '@scure/bip39@1.1.1': dependencies: '@noble/hashes': 1.2.0 @@ -12202,38 +13037,312 @@ snapshots: dependencies: '@sinonjs/commons': 1.8.6 - '@solana/buffer-layout@4.0.1': + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-rc.1(typescript@5.8.3)': + dependencies: + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-core@2.3.0(typescript@5.8.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-numbers@2.3.0(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.8.3) + '@solana/errors': 2.3.0(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.8.3 + + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-rc.1(typescript@5.8.3)': + dependencies: + chalk: 5.6.2 + commander: 12.1.0 + typescript: 5.8.3 + + '@solana/errors@2.3.0(typescript@5.8.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.2 + typescript: 5.8.3 + + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@solana/spl-token@0.4.14(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + + '@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.26.10 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.6.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0(encoding@0.1.13) + rpc-websockets: 9.1.1 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.26.10 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.3.0(typescript@5.8.3) + agentkeepalive: 4.6.0 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0(encoding@0.1.13) + rpc-websockets: 9.1.1 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@stablelib/binary@1.0.1': + dependencies: + '@stablelib/int': 1.0.1 + + '@stablelib/blake2b@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/bytes@1.0.1': {} + + '@stablelib/constant-time@1.0.1': {} + + '@stablelib/ed25519@1.0.3': + dependencies: + '@stablelib/random': 1.0.2 + '@stablelib/sha512': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/hash@1.0.1': {} + + '@stablelib/hmac@1.0.1': + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/int@1.0.1': {} + + '@stablelib/keyagreement@1.0.1': + dependencies: + '@stablelib/bytes': 1.0.1 + + '@stablelib/nacl@1.0.4': + dependencies: + '@stablelib/poly1305': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@stablelib/xsalsa20': 1.0.2 + + '@stablelib/pbkdf2@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/hmac': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/poly1305@1.0.1': + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/random@1.0.2': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/salsa20@1.0.2': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/sha512@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/wipe@1.0.1': {} + + '@stablelib/x25519@1.0.3': + dependencies: + '@stablelib/keyagreement': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 + + '@stablelib/xsalsa20@1.0.2': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/salsa20': 1.0.2 + '@stablelib/wipe': 1.0.1 + + '@stacks/auth@7.2.0(encoding@0.1.13)': + dependencies: + '@noble/secp256k1': 1.7.1 + '@stacks/common': 7.0.2 + '@stacks/encryption': 7.2.0 + '@stacks/network': 7.2.0(encoding@0.1.13) + '@stacks/profile': 7.2.0(encoding@0.1.13) + cross-fetch: 3.1.8(encoding@0.1.13) + jsontokens: 4.0.1 + transitivePeerDependencies: + - encoding + + '@stacks/common@7.0.2': {} + + '@stacks/encryption@7.2.0': + dependencies: + '@noble/hashes': 1.1.5 + '@noble/secp256k1': 1.7.1 + '@scure/bip39': 1.1.0 + '@stacks/common': 7.0.2 + base64-js: 1.5.1 + bs58: 5.0.0 + ripemd160-min: 0.0.6 + varuint-bitcoin: 1.1.2 + + '@stacks/network@7.0.2(encoding@0.1.13)': dependencies: - buffer: 6.0.3 + '@stacks/common': 7.0.2 + cross-fetch: 3.1.8(encoding@0.1.13) + transitivePeerDependencies: + - encoding - '@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + '@stacks/network@7.2.0(encoding@0.1.13)': dependencies: - '@babel/runtime': 7.26.10 - '@noble/curves': 1.8.1 - '@noble/hashes': 1.8.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.6.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) - node-fetch: 2.7.0(encoding@0.1.13) - rpc-websockets: 9.1.1 - superstruct: 2.0.2 + '@stacks/common': 7.0.2 + cross-fetch: 3.1.8(encoding@0.1.13) transitivePeerDependencies: - - bufferutil - encoding - - utf-8-validate - '@stacks/common@7.0.2': {} + '@stacks/profile@7.2.0(encoding@0.1.13)': + dependencies: + '@stacks/common': 7.0.2 + '@stacks/network': 7.2.0(encoding@0.1.13) + '@stacks/transactions': 7.2.0(encoding@0.1.13) + jsontokens: 4.0.1 + schema-inspector: 2.1.0 + zone-file: 2.0.0-beta.3 + transitivePeerDependencies: + - encoding - '@stacks/network@7.0.2(encoding@0.1.13)': + '@stacks/storage@7.2.0(encoding@0.1.13)': dependencies: + '@stacks/auth': 7.2.0(encoding@0.1.13) '@stacks/common': 7.0.2 - cross-fetch: 3.1.8(encoding@0.1.13) + '@stacks/encryption': 7.2.0 + '@stacks/network': 7.2.0(encoding@0.1.13) + base64-js: 1.5.1 + jsontokens: 4.0.1 transitivePeerDependencies: - encoding @@ -12248,6 +13357,34 @@ snapshots: transitivePeerDependencies: - encoding + '@stacks/transactions@7.2.0(encoding@0.1.13)': + dependencies: + '@noble/hashes': 1.1.5 + '@noble/secp256k1': 1.7.1 + '@stacks/common': 7.0.2 + '@stacks/network': 7.2.0(encoding@0.1.13) + c32check: 2.0.0 + lodash.clonedeep: 4.5.0 + transitivePeerDependencies: + - encoding + + '@stacks/wallet-sdk@7.2.0(encoding@0.1.13)': + dependencies: + '@scure/bip32': 1.1.3 + '@scure/bip39': 1.1.0 + '@stacks/auth': 7.2.0(encoding@0.1.13) + '@stacks/common': 7.0.2 + '@stacks/encryption': 7.2.0 + '@stacks/network': 7.2.0(encoding@0.1.13) + '@stacks/profile': 7.2.0(encoding@0.1.13) + '@stacks/storage': 7.2.0(encoding@0.1.13) + '@stacks/transactions': 7.2.0(encoding@0.1.13) + c32check: 2.0.0 + jsontokens: 4.0.1 + zone-file: 2.0.0-beta.3 + transitivePeerDependencies: + - encoding + '@substrate/ss58-registry@1.51.0': {} '@surma/rollup-plugin-off-main-thread@1.4.2': @@ -12341,6 +13478,109 @@ snapshots: dependencies: defer-to-connect: 2.0.1 + '@taquito/axios-fetch-adapter@https://codeload.github.com/ecadlabs/axios-fetch-adapter/tar.gz/167684f522e90343b9f3439d9a43ac571e2396f6(axios@1.11.0)': + dependencies: + axios: 1.11.0 + + '@taquito/core@23.0.3': + dependencies: + json-stringify-safe: 5.0.1 + + '@taquito/http-utils@15.1.0': + dependencies: + '@vespaiach/axios-fetch-adapter': '@taquito/axios-fetch-adapter@https://codeload.github.com/ecadlabs/axios-fetch-adapter/tar.gz/167684f522e90343b9f3439d9a43ac571e2396f6(axios@1.11.0)' + axios: 1.11.0 + transitivePeerDependencies: + - debug + + '@taquito/local-forging@15.1.0': + dependencies: + '@taquito/utils': 15.1.0 + bignumber.js: 9.1.2 + + '@taquito/local-forging@23.0.3': + dependencies: + '@taquito/core': 23.0.3 + '@taquito/utils': 23.0.3 + bignumber.js: 9.1.2 + fast-text-encoding: 1.0.6 + + '@taquito/michel-codec@15.1.0': {} + + '@taquito/michelson-encoder@15.1.0': + dependencies: + '@taquito/rpc': 15.1.0 + '@taquito/utils': 15.1.0 + bignumber.js: 9.1.2 + fast-json-stable-stringify: 2.1.0 + transitivePeerDependencies: + - debug + + '@taquito/rpc@15.1.0': + dependencies: + '@taquito/http-utils': 15.1.0 + '@taquito/utils': 15.1.0 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - debug + + '@taquito/signer@15.1.0': + dependencies: + '@stablelib/blake2b': 1.0.1 + '@stablelib/ed25519': 1.0.3 + '@stablelib/hmac': 1.0.1 + '@stablelib/nacl': 1.0.4 + '@stablelib/pbkdf2': 1.0.1 + '@stablelib/sha512': 1.0.1 + '@taquito/taquito': 15.1.0 + '@taquito/utils': 15.1.0 + '@types/bn.js': 5.1.6 + bip39: 3.1.0 + elliptic: 6.6.1 + pbkdf2: 3.1.2 + typedarray-to-buffer: 4.0.0 + transitivePeerDependencies: + - debug + + '@taquito/taquito@15.1.0': + dependencies: + '@taquito/http-utils': 15.1.0 + '@taquito/local-forging': 15.1.0 + '@taquito/michel-codec': 15.1.0 + '@taquito/michelson-encoder': 15.1.0 + '@taquito/rpc': 15.1.0 + '@taquito/utils': 15.1.0 + bignumber.js: 9.1.2 + rxjs: 6.6.7 + transitivePeerDependencies: + - debug + + '@taquito/utils@15.1.0': + dependencies: + '@stablelib/blake2b': 1.0.1 + '@stablelib/ed25519': 1.0.3 + '@types/bs58check': 2.1.2 + bignumber.js: 9.1.2 + blakejs: 1.2.1 + bs58check: 2.1.2 + buffer: 6.0.3 + elliptic: 6.6.1 + typedarray-to-buffer: 4.0.0 + + '@taquito/utils@23.0.3': + dependencies: + '@noble/curves': 1.9.7 + '@stablelib/blake2b': 1.0.1 + '@stablelib/ed25519': 1.0.3 + '@taquito/core': 23.0.3 + '@types/bs58check': 2.1.2 + bignumber.js: 9.1.2 + blakejs: 1.2.1 + bs58check: 3.0.1 + buffer: 6.0.3 + elliptic: 6.6.1 + typedarray-to-buffer: 4.0.0 + '@ton/core@0.61.0(@ton/crypto@3.3.0)': dependencies: '@ton/crypto': 3.3.0 @@ -12404,6 +13644,10 @@ snapshots: dependencies: '@types/node': 17.0.45 + '@types/bs58check@2.1.2': + dependencies: + '@types/node': 17.0.45 + '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 @@ -13148,6 +14392,87 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 + '@web-examples/shared@file:../../../shared(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': + dependencies: + '@cosmjs/amino': 0.32.3 + '@cosmjs/encoding': 0.32.3 + '@cosmjs/proto-signing': 0.32.3 + '@kadena/client': 0.5.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@kadena/cryptography-utils': 0.4.4 + '@kadena/types': 0.6.2 + '@multiversx/sdk-core': 12.18.0 + '@multiversx/sdk-wallet': 4.2.0 + '@mysten/sui': 1.30.5(typescript@5.8.3) + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@noble/secp256k1': 3.0.0 + '@polkadot/keyring': 10.4.2(@polkadot/util-crypto@10.4.2(@polkadot/util@10.4.2))(@polkadot/util@10.4.2) + '@polkadot/types': 9.14.2 + '@polkadot/util': 10.4.2 + '@polkadot/util-crypto': 10.4.2(@polkadot/util@10.4.2) + '@solana/spl-token': 0.4.14(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@stacks/network': 7.2.0(encoding@0.1.13) + '@stacks/transactions': 7.2.0(encoding@0.1.13) + '@stacks/wallet-sdk': 7.2.0(encoding@0.1.13) + '@taquito/local-forging': 23.0.3 + '@taquito/signer': 15.1.0 + '@taquito/taquito': 15.1.0 + '@ton/core': 0.61.0(@ton/crypto@3.3.0) + '@ton/crypto': 3.3.0 + '@ton/ton': 15.4.0(@ton/core@0.61.0(@ton/crypto@3.3.0))(@ton/crypto@3.3.0) + '@walletconnect/encoding': 1.0.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/types': 2.22.4-canary-auth-3 + '@walletconnect/utils': 2.22.4-canary-auth-3(typescript@5.8.3)(zod@3.24.4) + axios: 1.11.0 + bip32: 4.0.0 + bip39: 3.1.0 + bitcoinjs-lib: 6.1.7 + bitcoinjs-message: 2.2.0 + borsh: 1.0.0 + bs58: 6.0.0 + ecpair: 2.1.0 + ed25519-hd-key: 1.3.0 + eth-sig-util: 3.0.1 + ethereumjs-util: 7.1.5 + ethers: 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + near-api-js: 0.45.1(encoding@0.1.13) + near-seed-phrase: 0.2.1 + solana-wallet: 1.0.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + tiny-secp256k1: 2.2.4 + tronweb: 6.0.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + tweetnacl: 1.0.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - debug + - encoding + - fastestsmallesttextencoderdecoder + - ioredis + - supports-color + - typescript + - uploadthing + - utf-8-validate + - zod + '@webassemblyjs/ast@1.9.0': dependencies: '@webassemblyjs/helper-module-context': 1.9.0 @@ -13513,6 +14838,10 @@ snapshots: async-limiter@1.0.1: {} + async@2.6.4: + dependencies: + lodash: 4.17.21 + async@3.2.6: {} asynckit@0.4.0: {} @@ -13794,6 +15123,18 @@ snapshots: bip174@2.1.1: {} + bip32@4.0.0: + dependencies: + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + typeforce: 1.18.0 + wif: 2.0.6 + + bip39-light@1.0.7: + dependencies: + create-hash: 1.2.0 + pbkdf2: 3.1.2 + bip39@3.0.2: dependencies: '@types/node': 11.11.6 @@ -13846,6 +15187,8 @@ snapshots: bn.js@4.12.1: {} + bn.js@5.2.0: {} + bn.js@5.2.1: {} body-parser@1.20.3(supports-color@6.1.0): @@ -14145,6 +15488,8 @@ snapshots: caniuse-lite@1.0.30001706: {} + capability@0.2.5: {} + capture-exit@2.0.0: dependencies: rsvp: 4.8.5 @@ -14166,6 +15511,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.2: {} + char-regex@1.0.2: {} check-types@11.2.3: {} @@ -14290,6 +15637,10 @@ snapshots: dependencies: delayed-stream: 1.0.0 + commander@12.1.0: {} + + commander@14.0.2: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -14410,6 +15761,8 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 + cosmjs-types@0.9.0: {} + cosmos-wallet@1.2.0: dependencies: '@cosmjs/amino': 0.25.6 @@ -14920,12 +16273,23 @@ snapshots: jsbn: 0.1.1 safer-buffer: 2.1.2 + ecpair@2.1.0: + dependencies: + randombytes: 2.1.0 + typeforce: 1.18.0 + wif: 2.0.6 + ed25519-hd-key@1.1.2: dependencies: bip39: 3.0.2 create-hmac: 1.1.7 tweetnacl: 1.0.3 + ed25519-hd-key@1.3.0: + dependencies: + create-hmac: 1.1.7 + tweetnacl: 1.0.3 + ed2curve@0.3.0: dependencies: tweetnacl: 1.0.3 @@ -14938,6 +16302,16 @@ snapshots: electron-to-chromium@1.5.118: {} + elliptic@6.5.4: + dependencies: + bn.js: 4.12.1 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + elliptic@6.6.1: dependencies: bn.js: 4.12.1 @@ -14988,6 +16362,12 @@ snapshots: dependencies: is-arrayish: 0.2.1 + error-polyfill@0.1.3: + dependencies: + capability: 0.2.5 + o3: 1.0.3 + u3: 0.1.1 + error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 @@ -15524,6 +16904,13 @@ snapshots: tweetnacl: 1.0.3 tweetnacl-util: 0.15.1 + eth-sig-util@3.0.1: + dependencies: + ethereumjs-abi: 0.6.8 + ethereumjs-util: 5.2.1 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + ethereum-bloom-filters@1.2.0: dependencies: '@noble/hashes': 1.8.0 @@ -15593,6 +16980,42 @@ snapshots: ethereum-cryptography: 0.1.3 rlp: 2.2.7 + ethers@5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.8.0 @@ -15819,8 +17242,12 @@ snapshots: fast-stable-stringify@1.0.0: {} + fast-text-encoding@1.0.6: {} + fast-uri@3.0.6: {} + fastestsmallesttextencoderdecoder@1.0.22: {} + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -17326,6 +18753,8 @@ snapshots: joycon@3.1.1: {} + js-sha256@0.9.0: {} + js-sha3@0.5.7: {} js-sha3@0.8.0: {} @@ -17434,6 +18863,12 @@ snapshots: jsonpointer@5.0.1: {} + jsontokens@4.0.1: + dependencies: + '@noble/hashes': 1.8.0 + '@noble/secp256k1': 1.7.1 + base64-js: 1.5.1 + jsprim@1.4.2: dependencies: assert-plus: 1.0.0 @@ -17504,6 +18939,12 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + libsodium-sumo@0.7.15: {} + + libsodium-wrappers-sumo@0.7.15: + dependencies: + libsodium-sumo: 0.7.15 + libsodium-wrappers@0.7.15: dependencies: libsodium: 0.7.15 @@ -17855,6 +19296,22 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + near-api-js@0.45.1(encoding@0.1.13): + dependencies: + bn.js: 5.2.0 + borsh: 0.7.0 + bs58: 4.0.1 + depd: 2.0.0 + error-polyfill: 0.1.3 + http-errors: 1.7.2 + js-sha256: 0.9.0 + mustache: 4.0.0 + node-fetch: 2.7.0(encoding@0.1.13) + text-encoding-utf-8: 1.0.2 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - encoding + near-api-js@6.0.1(e3nzevk42h66xopb2dhet3g2pa): dependencies: '@near-js/accounts': 2.0.1(jwlaada4p4papqyv4uh3qnluhu) @@ -17876,6 +19333,19 @@ snapshots: transitivePeerDependencies: - encoding + near-hd-key@1.2.1: + dependencies: + bip39: 3.0.2 + create-hmac: 1.1.7 + tweetnacl: 1.0.3 + + near-seed-phrase@0.2.1: + dependencies: + bip39-light: 1.0.7 + bs58: 4.0.1 + near-hd-key: 1.2.1 + tweetnacl: 1.0.3 + negotiator@0.6.3: {} negotiator@0.6.4: {} @@ -18035,6 +19505,10 @@ snapshots: nwsapi@2.2.18: {} + o3@1.0.3: + dependencies: + capability: 0.2.5 + oauth-sign@0.9.0: {} object-assign@4.1.1: {} @@ -19498,6 +20972,8 @@ snapshots: dependencies: glob: 7.2.3 + ripemd160-min@0.0.6: {} + ripemd160@2.0.2: dependencies: hash-base: 3.1.0 @@ -19601,6 +21077,14 @@ snapshots: dependencies: aproba: 1.2.0 + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 @@ -19661,6 +21145,10 @@ snapshots: dependencies: loose-envify: 1.4.0 + schema-inspector@2.1.0: + dependencies: + async: 2.6.4 + schema-utils@1.0.0: dependencies: ajv: 6.12.6 @@ -20429,6 +21917,10 @@ snapshots: timsort@0.3.0: {} + tiny-secp256k1@2.2.4: + dependencies: + uint8array-tools: 0.0.7 + tinyglobby@0.2.12: dependencies: fdir: 6.4.3(picomatch@4.0.2) @@ -20589,14 +22081,20 @@ snapshots: dependencies: is-typedarray: 1.0.0 + typedarray-to-buffer@4.0.0: {} + typedarray@0.0.6: {} typeforce@1.18.0: {} typescript@5.8.3: {} + u3@0.1.1: {} + ufo@1.5.4: {} + uint8array-tools@0.0.7: {} + uint8arrays@3.1.1: dependencies: multiformats: 9.9.0 @@ -21257,6 +22755,10 @@ snapshots: dependencies: isexe: 2.0.0 + wif@2.0.6: + dependencies: + bs58check: 2.1.2 + word-wrap@1.2.5: {} wordwrap@0.0.3: {} @@ -21419,6 +22921,11 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 + ws@7.4.6(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.9 @@ -21529,3 +23036,5 @@ snapshots: zod@3.22.4: {} zod@3.24.4: {} + + zone-file@2.0.0-beta.3: {} diff --git a/advanced/dapps/react-dapp-v2/src/chains/bip122.ts b/advanced/dapps/react-dapp-v2/src/chains/bip122.ts index b1e490576..15e8df85f 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/bip122.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/bip122.ts @@ -1,42 +1,2 @@ -import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers"; - -export const BIP122_MAINNET = "000000000019d6689c085ae165831e93"; -export const BIP122_TESTNET = "000000000933ea01ad0ee984209779ba"; -export const BIP122_DUST_LIMIT = "1001"; - -export const BtcChainData: ChainsMap = { - [BIP122_MAINNET]: { - id: `bip122:${BIP122_MAINNET}`, - name: "BTC Mainnet", - rpc: [], - slip44: 0, - testnet: false, - }, - [BIP122_TESTNET]: { - id: `bip122:${BIP122_TESTNET}`, - name: "BTC Testnet", - rpc: [], - slip44: 501, - testnet: true, - }, -}; - -export const BtcMetadata: NamespaceMetadata = { - [BIP122_MAINNET]: { - logo: "/assets/btc-testnet.png", - rgb: "247, 147, 25", - }, - [BIP122_TESTNET]: { - logo: "/assets/btc-testnet.png", - rgb: "247, 147, 25", - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = BtcMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/bip122"; diff --git a/advanced/dapps/react-dapp-v2/src/chains/cosmos.ts b/advanced/dapps/react-dapp-v2/src/chains/cosmos.ts index 4f66720ee..e7e27f54e 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/cosmos.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/cosmos.ts @@ -1,58 +1,8 @@ import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; +import { ChainRequestRender } from "@web-examples/shared"; -import { - NamespaceMetadata, - ChainMetadata, - ChainRequestRender, - ChainsMap, -} from "../helpers"; - -export const CosmosChainData: ChainsMap = { - "cosmoshub-4": { - name: "Cosmos Hub", - id: "cosmos:cosmoshub-4", - rpc: ["https://rpc.cosmos.network"], - slip44: 118, - testnet: false, - }, - "irishub-1": { - name: "Irisnet", - id: "cosmos:irishub-1", - rpc: ["https://rpc.irisnet.org"], - slip44: 566, - testnet: false, - }, - "kava-4": { - name: "Kava", - id: "cosmos:kava-4", - rpc: ["https://kava4.data.kava.io"], - slip44: 459, - testnet: false, - }, - "columbus-4": { - name: "Terra", - id: "cosmos:columbus-4", - rpc: [], - slip44: 330, - testnet: false, - }, -}; - -export const CosmosMetadata: NamespaceMetadata = { - "cosmoshub-4": { - logo: "/assets/" + "cosmos-cosmoshub-4.png", - rgb: "27, 31, 53", - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = CosmosMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/cosmos"; export function getChainRequestRender( request: JsonRpcRequest diff --git a/advanced/dapps/react-dapp-v2/src/chains/eip155.ts b/advanced/dapps/react-dapp-v2/src/chains/eip155.ts index 5f670fbf6..a6225555c 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/eip155.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/eip155.ts @@ -1,217 +1,12 @@ import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; - import { - NamespaceMetadata, - ChainMetadata, ChainRequestRender, convertHexToNumber, convertHexToUtf8, - ChainsMap, -} from "../helpers"; - -export const EIP155Colors = { - ethereum: "99, 125, 234", - optimism: "233, 1, 1", - goerli: "189, 174, 155", - xdai: "73, 169, 166", - polygon: "130, 71, 229", - zksync: "90, 90, 90", - celo: "60, 203, 132", - arbitrum: "44, 55, 75", -}; - -export const EIP155ChainData: ChainsMap = { - "1": { - name: "Ethereum Mainnet", - id: "eip155:1", - rpc: ["https://api.mycryptoapi.com/eth"], - slip44: 60, - testnet: false, - }, - "5": { - name: "Ethereum Goerli", - id: "eip155:5", - rpc: ["https://rpc.goerli.mudit.blog"], - slip44: 60, - testnet: true, - }, - "11155111": { - name: "Ethereum Sepolia", - id: "eip155:11155111", - rpc: ["https://gateway.tenderly.co/public/sepolia "], - slip44: 60, - testnet: true, - }, - "10": { - name: "Optimism Mainnet", - id: "eip155:10", - rpc: ["https://mainnet.optimism.io"], - slip44: 60, - testnet: false, - }, - "42": { - name: "Ethereum Kovan", - id: "eip155:42", - rpc: ["https://kovan.poa.network"], - slip44: 60, - testnet: true, - }, - "69": { - name: "Optimism Kovan", - id: "eip155:69", - rpc: ["https://kovan.optimism.io"], - slip44: 60, - testnet: true, - }, - "100": { - name: "xDAI", - id: "eip155:100", - rpc: ["https://dai.poa.network"], - slip44: 60, - testnet: false, - }, - "280": { - name: "zkSync Era Testnet", - id: "eip155:280", - rpc: ["https://testnet.era.zksync.dev"], - slip44: 60, - testnet: true, - }, - "324": { - name: "zkSync Era", - id: "eip155:324", - rpc: ["https://mainnet.era.zksync.io"], - slip44: 60, - testnet: false, - }, - "137": { - name: "Polygon Mainnet", - id: "eip155:137", - rpc: ["https://rpc-mainnet.matic.network"], - slip44: 60, - testnet: false, - }, - "420": { - name: "Optimism Goerli", - id: "eip155:420", - rpc: ["https://goerli.optimism.io"], - slip44: 60, - testnet: true, - }, - "42161": { - name: "Arbitrum One", - id: "eip155:42161", - rpc: ["https://arb1.arbitrum.io/rpc"], - slip44: 60, - testnet: false, - }, - "42220": { - name: "Celo Mainnet", - id: "eip155:42220", - rpc: ["https://forno.celo.org"], - slip44: 52752, - testnet: false, - }, - "44787": { - name: "Celo Alfajores", - id: "eip155:44787", - rpc: ["https://alfajores-forno.celo-testnet.org"], - slip44: 52752, - testnet: true, - }, - "80001": { - name: "Polygon Mumbai", - id: "eip155:80001", - rpc: ["https://rpc-mumbai.matic.today"], - slip44: 60, - testnet: true, - }, - "421611": { - name: "Arbitrum Rinkeby", - id: "eip155:421611", - rpc: ["https://rinkeby.arbitrum.io/rpc"], - slip44: 60, - testnet: true, - }, -}; +} from "@web-examples/shared"; -export const EIP155Metadata: NamespaceMetadata = { - "1": { - name: "Ethereum", - logo: "/assets/" + "eip155-1.png", - rgb: EIP155Colors.ethereum, - }, - "5": { - logo: "/assets/" + "eip155-1.png", - rgb: EIP155Colors.ethereum, - }, - "11155111": { - logo: "/assets/" + "eip155-1.png", - rgb: EIP155Colors.ethereum, - }, - "10": { - name: "Optimism", - logo: "/assets/" + "eip155-10.png", - rgb: EIP155Colors.optimism, - }, - "42": { - logo: "/assets/" + "eip155-42.png", - rgb: EIP155Colors.ethereum, - }, - "420": { - logo: "/assets/" + "eip155-420.png", - rgb: EIP155Colors.optimism, - }, - "100": { - logo: "/assets/" + "eip155-100.png", - rgb: EIP155Colors.xdai, - }, - "280": { - name: "zkSync Era Testnet", - logo: "/assets/" + "eip155-324.svg", - rgb: EIP155Colors.zksync, - }, - "324": { - name: "zkSync Era", - logo: "/assets/" + "eip155-324.svg", - rgb: EIP155Colors.zksync, - }, - "137": { - name: "Polygon", - logo: "/assets/" + "eip155-137.png", - rgb: EIP155Colors.polygon, - }, - "80001": { - logo: "/assets/" + "eip155-80001.png", - rgb: EIP155Colors.polygon, - }, - "42161": { - name: "Arbitrum", - logo: "/assets/" + "eip155-42161.png", - rgb: EIP155Colors.arbitrum, - }, - "42220": { - name: "Celo", - logo: "/assets/" + "eip155-42220.png", - rgb: EIP155Colors.celo, - }, - "44787": { - logo: "/assets/" + "eip155-44787.png", - rgb: EIP155Colors.celo, - }, - "421611": { - logo: "/assets/" + "eip155-421611.png", - rgb: EIP155Colors.arbitrum, - }, -}; -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = EIP155Metadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/eip155"; export function getChainRequestRender( request: JsonRpcRequest diff --git a/advanced/dapps/react-dapp-v2/src/chains/index.ts b/advanced/dapps/react-dapp-v2/src/chains/index.ts index e78085705..17f765399 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/index.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/index.ts @@ -1,54 +1,12 @@ import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; - +import { getChainMetadata, ChainRequestRender } from "@web-examples/shared"; +export { getChainMetadata }; import * as eip155 from "./eip155"; import * as cosmos from "./cosmos"; import * as polkadot from "./polkadot"; -import * as solana from "./solana"; import * as near from "./near"; -import * as multiversx from "./multiversx"; -import * as tron from "./tron"; import * as tezos from "./tezos"; import * as kadena from "./kadena"; -import * as bip122 from "./bip122"; -import * as sui from "./sui"; -import * as stacks from "./stacks"; -import * as ton from "./ton"; - -import { ChainMetadata, ChainRequestRender } from "../helpers"; - -export function getChainMetadata(chainId: string): ChainMetadata { - const namespace = chainId.split(":")[0]; - switch (namespace) { - case "eip155": - return eip155.getChainMetadata(chainId); - case "cosmos": - return cosmos.getChainMetadata(chainId); - case "polkadot": - return polkadot.getChainMetadata(chainId); - case "solana": - return solana.getChainMetadata(chainId); - case "near": - return near.getChainMetadata(chainId); - case "kadena": - return kadena.getChainMetadata(chainId); - case "mvx": - return multiversx.getChainMetadata(chainId); - case "tron": - return tron.getChainMetadata(chainId); - case "tezos": - return tezos.getChainMetadata(chainId); - case "bip122": - return bip122.getChainMetadata(chainId); - case "sui": - return sui.getChainMetadata(chainId); - case "stacks": - return stacks.getChainMetadata(chainId); - case "ton": - return ton.getChainMetadata(chainId); - default: - throw new Error(`No metadata handler for namespace ${namespace}`); - } -} export function getChainRequestRender( request: JsonRpcRequest, diff --git a/advanced/dapps/react-dapp-v2/src/chains/kadena.ts b/advanced/dapps/react-dapp-v2/src/chains/kadena.ts index d251854c1..20b8c3345 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/kadena.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/kadena.ts @@ -1,49 +1,8 @@ import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; +import { ChainRequestRender } from "@web-examples/shared"; -import { - NamespaceMetadata, - ChainMetadata, - ChainRequestRender, - ChainsMap, -} from "../helpers"; - -export const KadenaMetadata: NamespaceMetadata = { - mainnet01: { - logo: "/assets/kadena.png", - rgb: "237, 9, 143", - }, - testnet04: { - logo: "/assets/kadena.png", - rgb: "237, 9, 143", - }, -}; - -// TODO: add `kadena` namespace to `caip-api` package to avoid manual specification here. -export const KadenaChainData: ChainsMap = { - mainnet01: { - name: "Kadena", - id: "kadena:mainnet01", - rpc: ["https://api.chainweb.com"], - slip44: 626, - testnet: false, - }, - testnet04: { - name: "Kadena Testnet", - id: "kadena:testnet04", - rpc: ["https://api.chainweb.com"], - slip44: 626, - testnet: true, - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = KadenaMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/kadena"; export function getChainRequestRender( request: JsonRpcRequest diff --git a/advanced/dapps/react-dapp-v2/src/chains/multiversx.ts b/advanced/dapps/react-dapp-v2/src/chains/multiversx.ts index f111f2411..ad5115af6 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/multiversx.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/multiversx.ts @@ -1,53 +1,2 @@ -import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers"; - -export const MultiversxChainData: ChainsMap = { - "1": { - id: "mvx:1", - name: "MultiversX Mainnet", - rpc: ["https://api.multiversx.com"], - slip44: 508, - testnet: false, - }, - D: { - id: "mvx:D", - name: "MultiversX Devnet", - rpc: ["https://devnet-api.multiversx.com"], - slip44: 508, - testnet: true, - }, - // Keep only one Test Chain visible - // T: { - // id: "mvx:T", - // name: "MultiversX Testnet", - // rpc: ["https://testnet-api.multiversx.com"], - // slip44: 508, - // testnet: true, - // }, -}; - -export const MultiversxMetadata: NamespaceMetadata = { - // MultiversX Mainnet - "1": { - logo: "/assets/multiversx_logo.svg", - rgb: "0, 0, 0", - }, - // MultiversX Testnet - T: { - logo: "/assets/multiversx_logo.svg", - rgb: "0, 0, 0", - }, - // MultiversX Devnet - D: { - logo: "/assets/multiversx_logo.svg", - rgb: "0, 0, 0", - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = MultiversxMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/multiversx"; diff --git a/advanced/dapps/react-dapp-v2/src/chains/near.ts b/advanced/dapps/react-dapp-v2/src/chains/near.ts index db58ec64e..40cb30536 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/near.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/near.ts @@ -1,37 +1,8 @@ import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; +import { ChainRequestRender } from "@web-examples/shared"; -import { - NamespaceMetadata, - ChainMetadata, - ChainRequestRender, - ChainsMap, -} from "../helpers"; - -export const NearMetadata: NamespaceMetadata = { - testnet: { - logo: "https://avatars.githubusercontent.com/u/7613128?s=200&v=4", - rgb: "27, 31, 53", - }, -}; - -export const NearChainData: ChainsMap = { - testnet: { - name: "NEAR Testnet", - id: "near:testnet", - rpc: ["https://rpc.testnet.near.org"], - slip44: 397, - testnet: true, - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = NearMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/near"; export function getChainRequestRender( request: JsonRpcRequest diff --git a/advanced/dapps/react-dapp-v2/src/chains/polkadot.ts b/advanced/dapps/react-dapp-v2/src/chains/polkadot.ts index fe1a8ac13..b7b1abf50 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/polkadot.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/polkadot.ts @@ -1,48 +1,8 @@ import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; -import { - NamespaceMetadata, - ChainMetadata, - ChainRequestRender, - ChainsMap, -} from "../helpers"; +import { ChainRequestRender } from "@web-examples/shared"; -export const PolkadotChainData: ChainsMap = { - ["91b171bb158e2d3848fa23a9f1c25182"]: { - id: "polkadot:91b171bb158e2d3848fa23a9f1c25182", - name: "Polkadot Mainnet", - rpc: ["wss://rpc.polkadot.io"], - slip44: 0, - testnet: false, - }, - ["e143f23803ac50e8f6f8e62695d1ce9e"]: { - id: "polkadot:e143f23803ac50e8f6f8e62695d1ce9e", - name: "Polkadot Testnet (Westend)", - rpc: ["wss://westend-rpc.polkadot.io"], - slip44: 0, - testnet: false, - }, -}; - -export const PolkadotMetadata: NamespaceMetadata = { - // eslint-disable-next-line no-useless-computed-key - ["91b171bb158e2d3848fa23a9f1c25182"]: { - logo: "/assets/polkadot.svg", - rgb: "230, 1, 122", - }, - ["e143f23803ac50e8f6f8e62695d1ce9e"]: { - logo: "/assets/westend-logo.svg", - rgb: "218, 104, 167", - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = PolkadotMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/polkadot"; export function getChainRequestRender( request: JsonRpcRequest diff --git a/advanced/dapps/react-dapp-v2/src/chains/solana.ts b/advanced/dapps/react-dapp-v2/src/chains/solana.ts index cabcc626e..87355c224 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/solana.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/solana.ts @@ -1,55 +1,2 @@ -import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers"; - -export const SolanaChainData: ChainsMap = { - "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": { - id: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - name: "Solana Mainnet", - rpc: [ - "https://api.mainnet-beta.solana.com", - "https://solana-api.projectserum.com", - ], - slip44: 501, - testnet: false, - }, - EtWTRABZaYq6iMfeYKouRu166VU2xqa1: { - id: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", - name: "Solana Devnet", - rpc: ["https://api.devnet.solana.com"], - slip44: 501, - testnet: true, - }, - "4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z": { - id: "solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z", - name: "Solana Testnet", - rpc: ["https://api.testnet.solana.com"], - slip44: 501, - testnet: true, - }, -}; - -export const SolanaMetadata: NamespaceMetadata = { - // Solana Mainnet - "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": { - logo: "/assets/solana_logo.png", - rgb: "0, 0, 0", - }, - // Solana Devnet - EtWTRABZaYq6iMfeYKouRu166VU2xqa1: { - logo: "/assets/solana_logo.png", - rgb: "0, 0, 0", - }, - // Solana Testnet - "4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z": { - logo: "/assets/solana_logo.png", - rgb: "0, 0, 0", - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = SolanaMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/solana"; diff --git a/advanced/dapps/react-dapp-v2/src/chains/stacks.ts b/advanced/dapps/react-dapp-v2/src/chains/stacks.ts index 66469dd88..858bfef5b 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/stacks.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/stacks.ts @@ -1,40 +1,2 @@ -import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers"; - -export const StacksChainData: ChainsMap = { - "1": { - id: "stacks:1", - name: "Stacks Mainnet", - rpc: [], - slip44: 195, - testnet: false, - }, - "2147483648": { - id: "stacks:2147483648", - name: "Stacks Testnet", - rpc: [], - slip44: 195, - testnet: true, - }, -}; - -export const StacksMetadata: NamespaceMetadata = { - // Stacks Mainnet - "1": { - logo: "/assets/stacks.png", - rgb: "85, 70, 254", - }, - // Stacks TestNet - "2147483648": { - logo: "/assets/stacks.png", - rgb: "85, 70, 254", - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = StacksMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/stacks"; diff --git a/advanced/dapps/react-dapp-v2/src/chains/sui.ts b/advanced/dapps/react-dapp-v2/src/chains/sui.ts index f55e02d85..9137cad4b 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/sui.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/sui.ts @@ -1,53 +1,2 @@ -import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers"; - -export const SUI_MAINNET = "mainnet"; -export const SUI_TESTNET = "testnet"; -export const SUI_DEVNET = "devnet"; - -export const SuiChainData: ChainsMap = { - [SUI_MAINNET]: { - id: `sui:${SUI_MAINNET}`, - name: "SUI Mainnet", - rpc: [], - slip44: 0, - testnet: false, - }, - [SUI_TESTNET]: { - id: `sui:${SUI_TESTNET}`, - name: "SUI Testnet", - rpc: [], - slip44: 0, - testnet: true, - }, - [SUI_DEVNET]: { - id: `sui:${SUI_DEVNET}`, - name: "SUI Devnet", - rpc: [], - slip44: 0, - testnet: true, - }, -}; - -export const SuiMetadata: NamespaceMetadata = { - [SUI_MAINNET]: { - logo: "/assets/sui.png", - rgb: "6, 135, 245", - }, - [SUI_TESTNET]: { - logo: "/assets/sui.png", - rgb: "6, 135, 245", - }, - [SUI_DEVNET]: { - logo: "/assets/sui.png", - rgb: "6, 135, 245", - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = SuiMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/sui"; diff --git a/advanced/dapps/react-dapp-v2/src/chains/tezos.ts b/advanced/dapps/react-dapp-v2/src/chains/tezos.ts index ed6697f94..af41a1218 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/tezos.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/tezos.ts @@ -1,48 +1,8 @@ import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; +import { ChainRequestRender } from "@web-examples/shared"; -import { - NamespaceMetadata, - ChainMetadata, - ChainRequestRender, - ChainsMap, -} from "../helpers"; - -export const TezosMetadata: NamespaceMetadata = { - mainnet: { - logo: "/assets/tezos.svg", - rgb: "44, 125, 247", - }, - testnet: { - logo: "/assets/tezos.svg", - rgb: "44, 125, 247", - }, -}; - -export const TezosChainData: ChainsMap = { - mainnet: { - name: "Tezos", - id: "tezos:mainnet", - rpc: ["https://mainnet.api.tez.ie"], - slip44: 1729, - testnet: false, - }, - testnet: { - name: "Tezos Testnet", - id: "tezos:testnet", - rpc: ["https://ghostnet.ecadinfra.com"], - slip44: 1729, - testnet: true, - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = TezosMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/tezos"; export function getChainRequestRender( request: JsonRpcRequest diff --git a/advanced/dapps/react-dapp-v2/src/chains/ton.ts b/advanced/dapps/react-dapp-v2/src/chains/ton.ts index d67fc088b..ff05170f9 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/ton.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/ton.ts @@ -1,38 +1,2 @@ -import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers"; - -export const TonChainData: ChainsMap = { - "-239": { - id: "ton:-239", - name: "TON Mainnet", - rpc: [], - slip44: 607, - testnet: false, - }, - "-3": { - id: "ton:-3", - name: "TON Testnet", - rpc: [], - slip44: 607, - testnet: true, - }, -}; - -export const TonMetadata: NamespaceMetadata = { - "-239": { - logo: "/assets/ton.png", - rgb: "0, 153, 255", - }, - "-3": { - logo: "/assets/ton.png", - rgb: "0, 153, 255", - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = TonMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/ton"; diff --git a/advanced/dapps/react-dapp-v2/src/chains/tron.ts b/advanced/dapps/react-dapp-v2/src/chains/tron.ts index e5e762bb3..339d748c9 100644 --- a/advanced/dapps/react-dapp-v2/src/chains/tron.ts +++ b/advanced/dapps/react-dapp-v2/src/chains/tron.ts @@ -1,40 +1,2 @@ -import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers"; - -export const TronChainData: ChainsMap = { - "0x2b6653dc": { - id: "tron:0x2b6653dc", - name: "Tron Mainnet", - rpc: [], - slip44: 195, - testnet: false, - }, - "0xcd8690dc": { - id: "tron:0xcd8690dc", - name: "Tron Testnet", - rpc: [], - slip44: 195, - testnet: true, - }, -}; - -export const TronMetadata: NamespaceMetadata = { - // Tron Mainnet - "0x2b6653dc": { - logo: "/assets/tron.png", - rgb: "183, 62, 49", - }, - // Tron TestNet - "0xcd8690dc": { - logo: "assets/tron.png", - rgb: "183, 62, 49", - }, -}; - -export function getChainMetadata(chainId: string): ChainMetadata { - const reference = chainId.split(":")[1]; - const metadata = TronMetadata[reference]; - if (typeof metadata === "undefined") { - throw new Error(`No chain metadata found for chainId: ${chainId}`); - } - return metadata; -} +// Re-export chain data and metadata from shared +export * from "@web-examples/shared/chains/tron"; diff --git a/advanced/dapps/react-dapp-v2/src/constants/default.ts b/advanced/dapps/react-dapp-v2/src/constants/default.ts index fcdaf31ae..520391e62 100644 --- a/advanced/dapps/react-dapp-v2/src/constants/default.ts +++ b/advanced/dapps/react-dapp-v2/src/constants/default.ts @@ -3,54 +3,6 @@ import { getAppMetadata } from "@walletconnect/utils"; if (!process.env.NEXT_PUBLIC_PROJECT_ID) throw new Error("`NEXT_PUBLIC_PROJECT_ID` env variable is missing."); -export const DEFAULT_MAIN_CHAINS = [ - // mainnets - "eip155:1", - "eip155:10", - "eip155:100", - "eip155:137", - "eip155:324", - "eip155:42161", - "eip155:42220", - "ton:-239", - "cosmos:cosmoshub-4", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - "polkadot:91b171bb158e2d3848fa23a9f1c25182", - "mvx:1", - "tron:0x2b6653dc", - "tezos:mainnet", - "kadena:mainnet01", - "bip122:000000000019d6689c085ae165831e93", - "sui:mainnet", - "stacks:1", -]; - -export const DEFAULT_TEST_CHAINS = [ - // testnets - "eip155:5", - "eip155:11155111", - "eip155:280", - "eip155:420", - "eip155:80001", - "eip155:421611", - "eip155:44787", - "ton:-3", - "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", - "solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z", - "polkadot:e143f23803ac50e8f6f8e62695d1ce9e", - "near:testnet", - "mvx:D", - "tron:0xcd8690dc", - "tezos:testnet", - "kadena:testnet04", - "bip122:000000000933ea01ad0ee984209779ba", - "sui:testnet", - "sui:devnet", - "stacks:2147483648", -]; - -export const DEFAULT_CHAINS = [...DEFAULT_MAIN_CHAINS, ...DEFAULT_TEST_CHAINS]; - export const DEFAULT_PROJECT_ID = process.env.NEXT_PUBLIC_PROJECT_ID; export const DEFAULT_RELAY_URL = process.env.NEXT_PUBLIC_RELAY_URL; diff --git a/advanced/dapps/react-dapp-v2/src/contexts/ChainDataContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/ChainDataContext.tsx index fd70a5b97..d011ece69 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/ChainDataContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/ChainDataContext.tsx @@ -5,21 +5,25 @@ import { useEffect, useState, } from "react"; -import { SolanaChainData } from "../chains/solana"; -import { PolkadotChainData } from "../chains/polkadot"; -import { MultiversxChainData } from "../chains/multiversx"; -import { TronChainData } from "../chains/tron"; +import { + SolanaChainData, + PolkadotChainData, + MultiversxChainData, + TronChainData, + NearChainData, + CosmosChainData, + EIP155ChainData, + TezosChainData, + KadenaChainData, + BtcChainData, + SuiChainData, + StacksChainData, + TonChainData, + ChainNamespaces, + ChainsMap, +} from "@web-examples/shared"; -import { ChainNamespaces, ChainsMap, getAllChainNamespaces } from "../helpers"; -import { NearChainData } from "../chains/near"; -import { CosmosChainData } from "../chains/cosmos"; -import { EIP155ChainData } from "../chains/eip155"; -import { TezosChainData } from "../chains/tezos"; -import { KadenaChainData } from "../chains/kadena"; -import { BtcChainData } from "../chains/bip122"; -import { SuiChainData } from "../chains/sui"; -import { StacksChainData } from "../chains/stacks"; -import { TonChainData } from "../chains/ton"; +import { getAllChainNamespaces } from "../helpers"; /** * Types diff --git a/advanced/dapps/react-dapp-v2/src/contexts/ClientContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/ClientContext.tsx index 98a6c9966..2c3987a76 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/ClientContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/ClientContext.tsx @@ -33,13 +33,14 @@ import { getSdkError, parseChainId, } from "@walletconnect/utils"; + +import { getOptionalNamespaces } from "@web-examples/shared"; import { DEFAULT_LOGGER, DEFAULT_PROJECT_ID, DEFAULT_RELAY_URL, } from "../constants"; import { AccountBalances, apiGetAccountBalance } from "../helpers"; -import { getRequiredNamespaces } from "../helpers/namespaces"; import { getPublicKeysFromAccounts } from "../helpers/solana"; import { isValidSignature } from "./JsonRpcContext"; @@ -207,7 +208,7 @@ export function ClientContextProvider({ } console.log("connect, pairing topic is:", pairing?.topic); try { - const namespacesToRequest = getRequiredNamespaces(chains); + const namespacesToRequest = getOptionalNamespaces(chains); appkit?.open(); diff --git a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx index f0a9b29be..9cb749936 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx @@ -35,8 +35,6 @@ import { } from "@kadena/client"; import { PactNumber } from "@kadena/pactjs"; import { - IUTXO, - KadenaAccount, eip712, formatTestBatchCall, formatTestTransaction, @@ -49,8 +47,16 @@ import { } from "../helpers"; import { useWalletConnectClient } from "./ClientContext"; import { - DEFAULT_COSMOS_METHODS, + SendCallsParams, + GetCapabilitiesResult, + GetCallsResult, + WalletGrantPermissionsParameters, + WalletGrantPermissionsReturnType, +} from "../constants"; + +import { DEFAULT_EIP155_METHODS, + DEFAULT_COSMOS_METHODS, DEFAULT_SOLANA_METHODS, DEFAULT_POLKADOT_METHODS, DEFAULT_NEAR_METHODS, @@ -59,20 +65,16 @@ import { DEFAULT_TON_METHODS, DEFAULT_TEZOS_METHODS, DEFAULT_KADENA_METHODS, - DEFAULT_EIP155_OPTIONAL_METHODS, - DEFAULT_EIP5792_METHODS, - SendCallsParams, - GetCapabilitiesResult, - GetCallsResult, DEFAULT_BIP122_METHODS, - DEFAULT_EIP7715_METHODS, - WalletGrantPermissionsParameters, - WalletGrantPermissionsReturnType, DEFAULT_SUI_METHODS, DEFAULT_STACKS_METHODS, -} from "../constants"; + ALL_CHAINS, + BIP122_DUST_LIMIT, + getTronWeb, +} from "@web-examples/shared"; +import type { IUTXO, KadenaAccount } from "@web-examples/shared"; import { useChainData } from "./ChainDataContext"; -import { rpcProvidersByChainId } from "../../src/helpers/api"; +import { rpcProvidersByChainId } from "../helpers"; import { signatureVerify, cryptoWaitReady } from "@polkadot/util-crypto"; import { @@ -103,11 +105,7 @@ import { getDidAddress, getDidAddressNamespace, getDidChainId, - getNamespacedDidChainId, } from "@walletconnect/utils"; -import { BIP122_DUST_LIMIT } from "../chains/bip122"; -import { getTronWeb } from "../helpers/tron"; -import { signVerify } from "@ton/crypto"; /** * Types */ @@ -356,7 +354,7 @@ export function JsonRpcContextProvider({ topic: session!.topic, chainId, request: { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TRANSACTION, + method: DEFAULT_EIP155_METHODS.ETH_SIGN_TRANSACTION, params: [tx], }, }); @@ -379,7 +377,7 @@ export function JsonRpcContextProvider({ } return { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TRANSACTION, + method: DEFAULT_EIP155_METHODS.ETH_SIGN_TRANSACTION, address, valid, result: signedTx, @@ -447,7 +445,7 @@ export function JsonRpcContextProvider({ topic: session!.topic, chainId, request: { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN, + method: DEFAULT_EIP155_METHODS.ETH_SIGN, params, }, }); @@ -472,7 +470,7 @@ export function JsonRpcContextProvider({ // format displayed result return { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN + " (standard)", + method: DEFAULT_EIP155_METHODS.ETH_SIGN + " (standard)", address, valid, result: signature, @@ -491,7 +489,7 @@ export function JsonRpcContextProvider({ topic: session!.topic, chainId, request: { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TYPED_DATA, + method: DEFAULT_EIP155_METHODS.ETH_SIGN_TYPED_DATA, params, }, }); @@ -515,7 +513,7 @@ export function JsonRpcContextProvider({ ); return { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TYPED_DATA, + method: DEFAULT_EIP155_METHODS.ETH_SIGN_TYPED_DATA, address, valid, result: signature, @@ -535,7 +533,7 @@ export function JsonRpcContextProvider({ topic: session!.topic, chainId, request: { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TYPED_DATA_V4, + method: DEFAULT_EIP155_METHODS.ETH_SIGN_TYPED_DATA_V4, params, }, }); @@ -559,7 +557,7 @@ export function JsonRpcContextProvider({ ); return { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TYPED_DATA, + method: DEFAULT_EIP155_METHODS.ETH_SIGN_TYPED_DATA, address, valid, result: signature, @@ -592,14 +590,14 @@ export function JsonRpcContextProvider({ topic: session!.topic, chainId, request: { - method: DEFAULT_EIP5792_METHODS.WALLET_GET_CAPABILITIES, + method: DEFAULT_EIP155_METHODS.WALLET_GET_CAPABILITIES, params: [address], }, }); // format displayed result return { - method: DEFAULT_EIP5792_METHODS.WALLET_GET_CAPABILITIES, + method: DEFAULT_EIP155_METHODS.WALLET_GET_CAPABILITIES, address, valid: true, result: JSON.stringify(capabilities), @@ -627,14 +625,14 @@ export function JsonRpcContextProvider({ topic: session!.topic, chainId, request: { - method: DEFAULT_EIP5792_METHODS.WALLET_GET_CALLS_STATUS, + method: DEFAULT_EIP155_METHODS.WALLET_GET_CALLS_STATUS, params: params, }, }); // format displayed result return { - method: DEFAULT_EIP5792_METHODS.WALLET_GET_CALLS_STATUS, + method: DEFAULT_EIP155_METHODS.WALLET_GET_CALLS_STATUS, address, valid: true, result: JSON.stringify(getCallsStatusResult), @@ -655,7 +653,7 @@ export function JsonRpcContextProvider({ const balance = BigNumber.from(balances[account][0].balance || "0"); if (balance.lt(parseEther("0.0002"))) { return { - method: DEFAULT_EIP5792_METHODS.WALLET_SEND_CALLS, + method: DEFAULT_EIP155_METHODS.WALLET_SEND_CALLS, address, valid: false, result: @@ -677,7 +675,7 @@ export function JsonRpcContextProvider({ topic: session!.topic, chainId, request: { - method: DEFAULT_EIP5792_METHODS.WALLET_SEND_CALLS, + method: DEFAULT_EIP155_METHODS.WALLET_SEND_CALLS, params: [sendCallsRequestParams], }, }); @@ -687,7 +685,7 @@ export function JsonRpcContextProvider({ ); // format displayed result return { - method: DEFAULT_EIP5792_METHODS.WALLET_SEND_CALLS, + method: DEFAULT_EIP155_METHODS.WALLET_SEND_CALLS, address, valid: true, result: txId, @@ -737,14 +735,14 @@ export function JsonRpcContextProvider({ topic: session!.topic, chainId, request: { - method: DEFAULT_EIP7715_METHODS.WALLET_GRANT_PERMISSIONS, + method: DEFAULT_EIP155_METHODS.WALLET_GRANT_PERMISSIONS, params: [walletGrantPermissionsParameters], }, }); // format displayed result return { - method: DEFAULT_EIP7715_METHODS.WALLET_GRANT_PERMISSIONS, + method: DEFAULT_EIP155_METHODS.WALLET_GRANT_PERMISSIONS, address, valid: true, result: JSON.stringify(issuePermissionResponse), @@ -2361,11 +2359,10 @@ export function JsonRpcContextProvider({ let isValid = false; try { - isValid = await isValidTonSignature({ + isValid = await ALL_CHAINS.ton.utils.verifyMessage({ message: params[0].text, signature: result.signature, - iss: "", - signatureMeta: result.publicKey, + publicKey: result.publicKey, }); } catch (error) { console.error(error); @@ -2567,131 +2564,6 @@ export function useJsonRpc() { return context; } -async function isValidEip155Signature(params: { - message: string; - signature: string; - iss: string; -}) { - const chainId = getDidChainId(params.iss); - const rpc = rpcProvidersByChainId[Number(chainId)]; - - if (typeof rpc === "undefined") { - throw new Error(`Missing rpcProvider definition for chainId: ${chainId}`); - } - - const hashMsg = hashPersonalMessage(params.message); - const valid = await verifySignature( - getDidAddress(params.iss)!, - params.signature, - hashMsg, - rpc.baseURL - ); - return valid; -} - -async function isValidSolanaSignature(params: { - message: string; - signature: string; - iss: string; -}) { - const { message, signature, iss } = params; - const address = getDidAddress(iss)!; - const senderPublicKey = new PublicKey(address); - const valid = verifyMessageSignature( - senderPublicKey.toBase58(), - signature, - bs58.encode(new Uint8Array(Buffer.from(message))) - ); - return valid; -} - -async function isValidPolkadotSignature(params: { - message: string; - signature: string; - iss: string; -}) { - const { message, signature, iss } = params; - const address = getDidAddress(iss)!; - await cryptoWaitReady(); - const { isValid } = signatureVerify(message, signature, address); - return isValid; -} - -async function isValidSuiSignature(params: { - message: string; - signature: string; - iss: string; -}) { - const { message, signature, iss } = params; - const address = getDidAddress(iss)!; - const derivedPublicKey = await verifyPersonalMessageSignature( - new TextEncoder().encode(message), - signature, - { address } - ); - return ( - derivedPublicKey.toSuiAddress().toLowerCase() === address.toLowerCase() - ); -} - -async function isValidStacksSignature(params: { - message: string; - signature: string; - iss: string; -}) { - const { message, signature, iss } = params; - const address = getDidAddress(iss)!; - const network = getDidChainId(iss)! === "1" ? "mainnet" : "testnet"; - const hash = Buffer.from(sha256(message)).toString("hex"); - const pubKey = publicKeyFromSignatureRsv(hash, signature); - - const valid = getAddressFromPublicKey(pubKey, network) === address; - return valid; -} - -async function isValidBip122Sig(params: { - message: string; - signature: string; - iss: string; -}) { - const { message, signature, iss } = params; - const address = getDidAddress(iss)!; - const valid = await isValidBip122Signature(address, signature, message); - return valid; -} - -async function isValidTronSignature(params: { - message: string; - signature: string; - iss: string; -}) { - const { message, signature, iss } = params; - const chainId = getNamespacedDidChainId(iss)!; - const tronWeb = getTronWeb(chainId); - if (!tronWeb) { - throw new Error("Tron web not found for chainId: " + iss); - } - const address = getDidAddress(iss)!; - const valid = await tronWeb.trx.verifyMessageV2(message, signature); - return valid === address; -} - -async function isValidTonSignature(params: { - message: string; - signature: string; - iss: string; - signatureMeta?: string; -}) { - const { message, signature, iss, signatureMeta = "" } = params; - - const valid = await signVerify( - Buffer.from(message, "utf-8"), - Buffer.from(signature, "base64"), - Buffer.from(signatureMeta, "base64") - ); - - return valid; -} export function isValidSignature(params: { message: string; iss: string; @@ -2699,29 +2571,66 @@ export function isValidSignature(params: { signatureMeta?: string; }) { const namespace = getDidAddressNamespace(params.iss); + const address = getDidAddress(params.iss)!; + const chainId = getDidChainId(params.iss)!; + switch (namespace) { case "eip155": - return isValidEip155Signature(params); + return ALL_CHAINS.eip155.utils.verifyMessage({ + message: params.message, + signature: params.signature, + chainId: chainId, + address: address, + }); case "solana": - return isValidSolanaSignature(params); + return ALL_CHAINS.solana.utils.verifyMessage({ + message: params.message, + signature: params.signature, + address: address, + }); case "polkadot": - return isValidPolkadotSignature(params); - - // case "kadena": - // return isValidKadenaSignature(params); - // case "mvx": - // return isValidMultiversxSignature(params); - // case "tezos": - // return isValidTezosSignature(params); + return ALL_CHAINS.polkadot.utils.verifyMessage({ + message: params.message, + signature: params.signature, + address: address, + }); case "tron": - return isValidTronSignature(params); + return ALL_CHAINS.tron.utils.verifyMessage({ + message: params.message, + signature: params.signature, + address: address, + chainId: chainId, + }); case "ton": - return isValidTonSignature(params); + return ALL_CHAINS.ton.utils.verifyMessage({ + message: params.message, + signature: params.signature, + publicKey: params.signatureMeta!, + }); case "bip122": - return isValidBip122Sig(params); + return ALL_CHAINS.bip122.utils.verifyMessage({ + message: params.message, + signature: params.signature, + address: address, + }); case "sui": - return isValidSuiSignature(params); + return ALL_CHAINS.sui.utils.verifyMessage({ + message: params.message, + signature: params.signature, + address: address, + }); case "stacks": - return isValidStacksSignature(params); + return ALL_CHAINS.stacks.utils.verifyMessage({ + message: params.message, + signature: params.signature, + address: address, + chainId: chainId, + }); + case "mvx": + return ALL_CHAINS.mvx.utils.verifyMessage({ + message: params.message, + signature: params.signature, + address: address, + }); } } diff --git a/advanced/dapps/react-dapp-v2/src/helpers/bip122.ts b/advanced/dapps/react-dapp-v2/src/helpers/bip122.ts index 96ad4e613..90456e4dc 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/bip122.ts +++ b/advanced/dapps/react-dapp-v2/src/helpers/bip122.ts @@ -1,8 +1,8 @@ import { schnorr } from "@noble/curves/secp256k1"; import * as bitcoin from "bitcoinjs-lib"; import BitcoinMessage from "bitcoinjs-message"; -import { convertHexToBase64 } from "./utilities"; -import { IUTXO } from "./types"; +import { convertHexToBase64 } from "@web-examples/shared/helpers"; +import type { IUTXO } from "@web-examples/shared"; import { BIP122_TESTNET } from "../chains/bip122"; export async function apiGetBip122AccountBalance( diff --git a/advanced/dapps/react-dapp-v2/src/helpers/index.ts b/advanced/dapps/react-dapp-v2/src/helpers/index.ts index 947729fdf..fa3e0946e 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/index.ts +++ b/advanced/dapps/react-dapp-v2/src/helpers/index.ts @@ -1,8 +1,5 @@ -export * from "./api"; -export * from "./eip712"; -export * from "./eip1271"; -export * from "./tx"; -export * from "./types"; +// Re-export from shared +export * from "@web-examples/shared"; + +// Local helpers export * from "./utilities"; -export * from "./sui"; -export * from "./ton"; diff --git a/advanced/dapps/react-dapp-v2/src/helpers/tx.ts b/advanced/dapps/react-dapp-v2/src/helpers/tx.ts index 83a32c9c2..c9fb8a151 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/tx.ts +++ b/advanced/dapps/react-dapp-v2/src/helpers/tx.ts @@ -1,6 +1,6 @@ import * as encoding from "@walletconnect/encoding"; -import { apiGetAccountNonce, apiGetGasPrice } from "./api"; +import { apiGetAccountNonce, apiGetGasPrice } from "@web-examples/shared/"; import { parseEther } from "ethers/lib/utils"; import { SendCallsParams } from "../constants"; diff --git a/advanced/dapps/react-dapp-v2/src/helpers/types.ts b/advanced/dapps/react-dapp-v2/src/helpers/types.ts deleted file mode 100644 index dfd1890f0..000000000 --- a/advanced/dapps/react-dapp-v2/src/helpers/types.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { IPactCommand } from "@kadena/client"; -import { ChainId } from "@kadena/types"; - -export interface AssetData { - symbol: string; - name: string; - contractAddress?: string; - balance?: string; - decimals?: number; -} - -export interface ChainData { - name: string; - id: string; - rpc: string[]; - slip44: number; - testnet: boolean; -} -export interface ChainsMap { - [reference: string]: ChainData; -} -export interface TxData { - from: string; - to: string; - nonce: string; - gasPrice: string; - gasLimit: string; - value: string; - data: string; -} - -export interface BlockScoutTx { - value: string; - txreceipt_status: string; - transactionIndex: string; - to: string; - timeStamp: string; - nonce: string; - isError: string; - input: string; - hash: string; - gasUsed: string; - gasPrice: string; - gas: string; - from: string; - cumulativeGasUsed: string; - contractAddress: string; - confirmations: string; - blockNumber: string; - blockHash: string; -} - -export interface BlockScoutTokenTx { - value: string; - transactionIndex: string; - tokenSymbol: string; - tokenName: string; - tokenDecimal: string; - to: string; - timeStamp: string; - nonce: string; - input: string; - hash: string; - gasUsed: string; - gasPrice: string; - gas: string; - from: string; - cumulativeGasUsed: string; - contractAddress: string; - confirmations: string; - blockNumber: string; - blockHash: string; -} - -export interface ParsedTx { - timestamp: string; - hash: string; - from: string; - to: string; - nonce: string; - gasPrice: string; - gasUsed: string; - fee: string; - value: string; - input: string; - error: boolean; - asset: AssetData; - operations: TxOperation[]; -} - -export interface TxOperation { - asset: AssetData; - value: string; - from: string; - to: string; - functionName: string; -} - -export interface GasPricesResponse { - fastWait: number; - avgWait: number; - blockNum: number; - fast: number; - fastest: number; - fastestWait: number; - safeLow: number; - safeLowWait: number; - speed: number; - block_time: number; - average: number; -} - -export interface GasPrice { - time: number; - price: number; -} - -export interface GasPrices { - timestamp: number; - slow: GasPrice; - average: GasPrice; - fast: GasPrice; -} - -export interface MethodArgument { - type: string; -} - -export interface Method { - signature: string; - name: string; - args: MethodArgument[]; -} - -export interface ChainRequestRender { - label: string; - value: string; -} - -export interface ChainMetadata { - name?: string; - logo: string; - rgb: string; -} - -export interface NamespaceMetadata { - [reference: string]: ChainMetadata; -} -export interface ChainNamespaces { - [namespace: string]: ChainsMap; -} - -export interface AccountAction { - method: string; - callback: (chainId: string, address: string) => Promise; -} - -export interface AccountBalances { - [account: string]: AssetData[]; -} - -export interface KadenaAccount { - publicKey: string; // Kadena public key - account: string; // Kadena account - chainId: ChainId; // Kadena ChainId -} - -export interface IUTXO { - txid: string; - vout: number; - value: number; - status: { - confirmed: boolean; - block_height: number; - block_hash: string; - block_time: number; - }; -} diff --git a/advanced/dapps/react-dapp-v2/src/helpers/utilities.ts b/advanced/dapps/react-dapp-v2/src/helpers/utilities.ts index aaa6916d3..627273325 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/utilities.ts +++ b/advanced/dapps/react-dapp-v2/src/helpers/utilities.ts @@ -1,220 +1,4 @@ -import { BigNumber, BigNumberish, providers, utils } from "ethers"; -import * as encoding from "@walletconnect/encoding"; -import { TypedDataUtils } from "eth-sig-util"; -import * as ethUtil from "ethereumjs-util"; - -import { eip1271 } from "./eip1271"; -import { DEFAULT_CHAINS } from "../constants"; - -export function capitalize(string: string): string { - return string - .split(" ") - .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) - .join(" "); -} - -export function ellipseText(text = "", maxLength = 9999): string { - if (text.length <= maxLength) { - return text; - } - const _maxLength = maxLength - 3; - let ellipse = false; - let currentLength = 0; - const result = - text - .split(" ") - .filter((word) => { - currentLength += word.length; - if (ellipse || currentLength >= _maxLength) { - ellipse = true; - return false; - } else { - return true; - } - }) - .join(" ") + "..."; - return result; -} - -export function ellipseAddress(address = "", width = 10): string { - return `${address.slice(0, width)}...${address.slice(-width)}`; -} - -export function getDataString(func: string, arrVals: any[]): string { - let val = ""; - for (let i = 0; i < arrVals.length; i++) { - val += encoding.padLeft(arrVals[i], 64); - } - const data = func + val; - return data; -} - -export function isMobile(): boolean { - let mobile = false; - - function hasTouchEvent(): boolean { - try { - document.createEvent("TouchEvent"); - return true; - } catch (e) { - return false; - } - } - - function hasMobileUserAgent(): boolean { - if ( - /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test( - navigator.userAgent - ) || - /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test( - navigator.userAgent.substr(0, 4) - ) - ) { - return true; - } else if (hasTouchEvent()) { - return true; - } - return false; - } - - mobile = hasMobileUserAgent(); - - return mobile; -} - -export function encodePersonalMessage(msg: string): string { - const data = encoding.utf8ToBuffer(msg); - const buf = Buffer.concat([ - new Uint8Array( - Buffer.from( - "\u0019Ethereum Signed Message:\n" + data.length.toString(), - "utf8" - ) - ), - new Uint8Array(data), - ]); - return ethUtil.bufferToHex(buf); -} - -export function hashPersonalMessage(msg: string): string { - const data = encodePersonalMessage(msg); - const buf = ethUtil.toBuffer(data); - const hash = ethUtil.keccak256(buf); - return ethUtil.bufferToHex(hash); -} - -export function encodeTypedDataMessage(msg: string): string { - const data = TypedDataUtils.sanitizeData(JSON.parse(msg)); - const buf = Buffer.concat([ - new Uint8Array(Buffer.from("1901", "hex")), - new Uint8Array( - TypedDataUtils.hashStruct("EIP712Domain", data.domain, data.types) - ), - new Uint8Array( - TypedDataUtils.hashStruct( - data.primaryType as string, - data.message, - data.types - ) - ), - ]); - return ethUtil.bufferToHex(buf); -} - -export function hashTypedDataMessage(msg: string): string { - const data = encodeTypedDataMessage(msg); - const buf = ethUtil.toBuffer(data); - const hash = ethUtil.keccak256(buf); - return ethUtil.bufferToHex(hash); -} - -export function recoverAddress(sig: string, hash: string): string { - const params = ethUtil.fromRpcSig(sig); - const result = ethUtil.ecrecover( - ethUtil.toBuffer(hash), - params.v, - params.r, - params.s - ); - const signer = ethUtil.bufferToHex(ethUtil.publicToAddress(result)); - return signer; -} - -export function recoverPersonalSignature(sig: string, msg: string): string { - const hash = hashPersonalMessage(msg); - const signer = recoverAddress(sig, hash); - return signer; -} - -export function recoverTypedMessage(sig: string, msg: string): string { - const hash = hashTypedDataMessage(msg); - const signer = recoverAddress(sig, hash); - return signer; -} - -export async function verifySignature( - address: string, - sig: string, - hash: string, - rpcUrl: string -): Promise { - const provider = new providers.JsonRpcProvider(rpcUrl); - const bytecode = await provider.getCode(address); - if ( - !bytecode || - bytecode === "0x" || - bytecode === "0x0" || - bytecode === "0x00" - ) { - const signer = recoverAddress(sig, hash); - return signer.toLowerCase() === address.toLowerCase(); - } else { - return eip1271.isValidSignature(address, sig, hash, provider); - } -} - -export function convertHexToNumber(hex: string) { - try { - return encoding.hexToNumber(hex); - } catch (e) { - return hex; - } -} - -export function convertHexToUtf8(hex: string) { - try { - return encoding.hexToUtf8(hex); - } catch (e) { - return hex; - } -} -export function convertHexToBase64(hex: string) { - try { - return encoding.hexToBuffer(hex).toString("base64"); - } catch (e) { - return hex; - } -} - -export const sanitizeDecimals = (value: string, decimals = 18): string => { - const [integer, fractional] = value.split("."); - const _fractional = fractional - ? fractional.substring(0, decimals).replace(/0+$/gi, "") - : undefined; - return _fractional ? [integer, _fractional].join(".") : integer; -}; - -export const toWad = (amount: string, decimals = 18): BigNumber => { - return utils.parseUnits(sanitizeDecimals(amount, decimals), decimals); -}; - -export const fromWad = (wad: BigNumberish, decimals = 18): string => { - try { - return sanitizeDecimals(utils.formatUnits(wad, decimals), decimals); - } catch (e) { - return wad?.toString(); - } -}; +import { DEFAULT_CHAINS } from "@web-examples/shared"; export const LOCALSTORAGE_KEY_TESTNET = "TESTNET"; export const INITIAL_STATE_TESTNET_DEFAULT = true; diff --git a/advanced/dapps/react-dapp-v2/src/pages/index.tsx b/advanced/dapps/react-dapp-v2/src/pages/index.tsx index 9f173f5fa..8997ddaa3 100644 --- a/advanced/dapps/react-dapp-v2/src/pages/index.tsx +++ b/advanced/dapps/react-dapp-v2/src/pages/index.tsx @@ -3,35 +3,35 @@ import React, { useCallback, useEffect, useRef, useState } from "react"; import toast from "react-hot-toast"; import { numberToHex } from "@walletconnect/encoding"; import { RELAYER_SDK_VERSION } from "@walletconnect/core"; - -import Banner from "../components/Banner"; -import Blockchain from "../components/Blockchain"; -import Column from "../components/Column"; -import RelayRegionDropdown from "../components/RelayRegionDropdown"; -import Header from "../components/Header"; -import Modal from "../components/Modal"; import { - DEFAULT_COSMOS_METHODS, + DEFAULT_TESTNET_CHAINS, + DEFAULT_MAINNET_CHAINS, DEFAULT_EIP155_METHODS, - DEFAULT_MAIN_CHAINS, + DEFAULT_EIP5792_METHODS, + DEFAULT_EIP7715_METHODS, + DEFAULT_COSMOS_METHODS, DEFAULT_SOLANA_METHODS, DEFAULT_POLKADOT_METHODS, - DEFAULT_MULTIVERSX_METHODS, - DEFAULT_TEST_CHAINS, DEFAULT_NEAR_METHODS, - DEFAULT_KADENA_METHODS, + DEFAULT_MULTIVERSX_METHODS, DEFAULT_TRON_METHODS, DEFAULT_TEZOS_METHODS, - DEFAULT_EIP155_OPTIONAL_METHODS, - DEFAULT_EIP5792_METHODS, - GetCapabilitiesResult, + DEFAULT_KADENA_METHODS, DEFAULT_BIP122_METHODS, - DEFAULT_EIP7715_METHODS, DEFAULT_SUI_METHODS, DEFAULT_STACKS_METHODS, DEFAULT_TON_METHODS, -} from "../constants"; -import { AccountAction, setLocaleStorageTestnetFlag } from "../helpers"; + AccountAction, +} from "@web-examples/shared"; + +import Banner from "../components/Banner"; +import Blockchain from "../components/Blockchain"; +import Column from "../components/Column"; +import RelayRegionDropdown from "../components/RelayRegionDropdown"; +import Header from "../components/Header"; +import Modal from "../components/Modal"; +import { GetCapabilitiesResult } from "../constants"; +import { setLocaleStorageTestnetFlag } from "../helpers"; import Toggle from "../components/Toggle"; import RequestModal from "../modals/RequestModal"; import PairingModal from "../modals/PairingModal"; @@ -211,29 +211,29 @@ const Home: NextPage = () => { await ethereumRpc.testSignPersonalMessage(chainId, address); }, }, - [DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TRANSACTION]: { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TRANSACTION, + [DEFAULT_EIP155_METHODS.ETH_SIGN_TRANSACTION]: { + method: DEFAULT_EIP155_METHODS.ETH_SIGN_TRANSACTION, callback: async (chainId: string, address: string) => { openRequestModal(); await ethereumRpc.testSignTransaction(chainId, address); }, }, - [DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN]: { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN + " (standard)", + [DEFAULT_EIP155_METHODS.ETH_SIGN]: { + method: DEFAULT_EIP155_METHODS.ETH_SIGN + " (standard)", callback: async (chainId: string, address: string) => { openRequestModal(); await ethereumRpc.testEthSign(chainId, address); }, }, - [DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TYPED_DATA]: { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TYPED_DATA, + [DEFAULT_EIP155_METHODS.ETH_SIGN_TYPED_DATA]: { + method: DEFAULT_EIP155_METHODS.ETH_SIGN_TYPED_DATA, callback: async (chainId: string, address: string) => { openRequestModal(); await ethereumRpc.testSignTypedData(chainId, address); }, }, - [DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TYPED_DATA_V4]: { - method: DEFAULT_EIP155_OPTIONAL_METHODS.ETH_SIGN_TYPED_DATA_V4, + [DEFAULT_EIP155_METHODS.ETH_SIGN_TYPED_DATA_V4]: { + method: DEFAULT_EIP155_METHODS.ETH_SIGN_TYPED_DATA_V4, callback: async (chainId: string, address: string) => { openRequestModal(); await ethereumRpc.testSignTypedDatav4(chainId, address); @@ -733,7 +733,9 @@ const Home: NextPage = () => { }; const renderContent = () => { - const chainOptions = isTestnet ? DEFAULT_TEST_CHAINS : DEFAULT_MAIN_CHAINS; + const chainOptions = isTestnet + ? DEFAULT_TESTNET_CHAINS + : DEFAULT_MAINNET_CHAINS; // Show connect screen if no session or no accounts/balances return !session || (!accounts.length && !Object.keys(balances).length) ? ( diff --git a/advanced/dapps/walletconnect-pay-dapp/next-env.d.ts b/advanced/dapps/walletconnect-pay-dapp/next-env.d.ts new file mode 100644 index 000000000..830fb594c --- /dev/null +++ b/advanced/dapps/walletconnect-pay-dapp/next-env.d.ts @@ -0,0 +1,6 @@ +/// +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/advanced/wallets/react-wallet-v2/next.config.js b/advanced/wallets/react-wallet-v2/next.config.js index ebacdf340..13f6abda9 100644 --- a/advanced/wallets/react-wallet-v2/next.config.js +++ b/advanced/wallets/react-wallet-v2/next.config.js @@ -1,5 +1,6 @@ module.exports = { reactStrictMode: true, + transpilePackages: ['@web-examples/shared'], webpack(config) { config.resolve.fallback = { ...config.resolve.fallback, diff --git a/advanced/wallets/react-wallet-v2/package.json b/advanced/wallets/react-wallet-v2/package.json index 18e8eb705..627409276 100644 --- a/advanced/wallets/react-wallet-v2/package.json +++ b/advanced/wallets/react-wallet-v2/package.json @@ -10,6 +10,7 @@ "prettier:write": "prettier --write '**/*.{js,ts,jsx,tsx}'" }, "dependencies": { + "@web-examples/shared": "file:../../../shared", "@cosmjs/amino": "0.32.3", "@cosmjs/encoding": "0.32.3", "@cosmjs/proto-signing": "0.32.3", diff --git a/advanced/wallets/react-wallet-v2/pnpm-lock.yaml b/advanced/wallets/react-wallet-v2/pnpm-lock.yaml index a44e0de0d..2a787a958 100644 --- a/advanced/wallets/react-wallet-v2/pnpm-lock.yaml +++ b/advanced/wallets/react-wallet-v2/pnpm-lock.yaml @@ -146,6 +146,9 @@ importers: '@walletconnect/utils': specifier: 2.22.4-canary-auth-3 version: 2.22.4-canary-auth-3(typescript@5.2.2)(zod@3.25.76) + '@web-examples/shared': + specifier: file:../../../shared + version: file:../../../shared(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@zerodev/ecdsa-validator': specifier: 5.3.0 version: 5.3.0(@zerodev/sdk@5.3.1(permissionless@0.1.43(viem@2.17.8(bufferutil@4.0.9)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(viem@2.17.8(bufferutil@4.0.9)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(permissionless@0.1.43(viem@2.17.8(bufferutil@4.0.9)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(viem@2.17.8(bufferutil@4.0.9)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)) @@ -1930,6 +1933,9 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/bn.js@4.11.6': + resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} + '@types/bn.js@5.2.0': resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} @@ -1973,6 +1979,9 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@types/pbkdf2@3.1.2': + resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -1990,6 +1999,9 @@ packages: '@types/scheduler@0.26.0': resolution: {integrity: sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA==} + '@types/secp256k1@4.0.7': + resolution: {integrity: sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==} + '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} @@ -2157,6 +2169,9 @@ packages: resolution: {integrity: sha512-Qk4/lnVpjTgHpkgFQAZXkjWM8OQnO3BG7IdhoHVH7amLRO8xKMl9uorv/4ukW9FrL+MZh4sgCnrJzYY8GspU7A==} engines: {node: '>=18.20.8'} + '@walletconnect/encoding@1.0.2': + resolution: {integrity: sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag==} + '@walletconnect/environment@1.0.1': resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} @@ -2254,6 +2269,9 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + '@web-examples/shared@file:../../../shared': + resolution: {directory: ../../../shared, type: directory} + '@zerodev/ecdsa-validator@5.3.0': resolution: {integrity: sha512-pGP6ubhbSGTCoebHdhmQajfhDJM6N/qlIdkESa97wvUOBmn8gcE/U+GvNZBzOxCtiO/MY6bKg9HLC2J4hoRJPA==} peerDependencies: @@ -3090,12 +3108,33 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + eth-sig-util@3.0.1: + resolution: {integrity: sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ==} + deprecated: Deprecated in favor of '@metamask/eth-sig-util' + ethereum-bloom-filters@1.2.0: resolution: {integrity: sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==} + ethereum-cryptography@0.1.3: + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + ethereum-cryptography@2.2.1: resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + ethereumjs-abi@0.6.8: + resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} + deprecated: This library has been deprecated and usage is discouraged. + + ethereumjs-util@5.2.1: + resolution: {integrity: sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==} + + ethereumjs-util@6.2.1: + resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} + + ethereumjs-util@7.1.5: + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} + ethers@5.7.2: resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} @@ -3107,6 +3146,10 @@ packages: resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} engines: {node: '>=6.5.0', npm: '>=3'} + ethjs-util@0.1.6: + resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} + engines: {node: '>=6.5.0', npm: '>=3'} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -3543,6 +3586,9 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -3881,6 +3927,9 @@ packages: node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -4306,6 +4355,10 @@ packages: resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} engines: {node: '>= 0.8'} + rlp@2.2.7: + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} + hasBin: true + rpc-websockets@9.2.0: resolution: {integrity: sha512-DS/XHdPxplQTtNRKiBCRWGBJfjOk56W7fyFUpiYi9fSTWTzoEMbUkn3J4gB0IMniIEVeAGR1/rzFQogzD5MxvQ==} @@ -4360,6 +4413,10 @@ packages: resolution: {integrity: sha512-tArjQw2P0RTdY7QmkNehgp6TVvQXq6ulIhxv8gaH6YubKG/wxxAoNKcbuXjDhybbc+b2Ihc7e0xxiGN744UIiQ==} engines: {node: '>=4.0.0'} + secp256k1@4.0.4: + resolution: {integrity: sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==} + engines: {node: '>=18.0.0'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4389,6 +4446,9 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -4671,6 +4731,9 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + tweetnacl@1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} @@ -4698,6 +4761,9 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typedarray-to-buffer@4.0.0: resolution: {integrity: sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==} @@ -7873,6 +7939,10 @@ snapshots: tslib: 2.8.1 optional: true + '@types/bn.js@4.11.6': + dependencies: + '@types/node': 17.0.35 + '@types/bn.js@5.2.0': dependencies: '@types/node': 17.0.35 @@ -7916,6 +7986,10 @@ snapshots: '@types/parse-json@4.0.2': {} + '@types/pbkdf2@3.1.2': + dependencies: + '@types/node': 17.0.35 + '@types/prop-types@15.7.15': {} '@types/react-dom@18.2.19': @@ -7934,6 +8008,10 @@ snapshots: '@types/scheduler@0.26.0': {} + '@types/secp256k1@4.0.7': + dependencies: + '@types/node': 17.0.35 + '@types/semver@7.7.1': {} '@types/stylis@4.2.5': {} @@ -8187,6 +8265,12 @@ snapshots: - utf-8-validate - zod + '@walletconnect/encoding@1.0.2': + dependencies: + is-typedarray: 1.0.0 + tslib: 1.14.1 + typedarray-to-buffer: 3.1.5 + '@walletconnect/environment@1.0.1': dependencies: tslib: 1.14.1 @@ -8785,6 +8869,17 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 + '@web-examples/shared@file:../../../shared(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/encoding': 1.0.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + eth-sig-util: 3.0.1 + ethereumjs-util: 7.1.5 + ethers: 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@zerodev/ecdsa-validator@5.3.0(@zerodev/sdk@5.3.1(permissionless@0.1.43(viem@2.17.8(bufferutil@4.0.9)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(viem@2.17.8(bufferutil@4.0.9)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(permissionless@0.1.43(viem@2.17.8(bufferutil@4.0.9)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(viem@2.17.8(bufferutil@4.0.9)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: '@zerodev/sdk': 5.3.1(permissionless@0.1.43(viem@2.17.8(bufferutil@4.0.9)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(viem@2.17.8(bufferutil@4.0.9)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)) @@ -9827,10 +9922,35 @@ snapshots: esutils@2.0.3: {} + eth-sig-util@3.0.1: + dependencies: + ethereumjs-abi: 0.6.8 + ethereumjs-util: 5.2.1 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + ethereum-bloom-filters@1.2.0: dependencies: '@noble/hashes': 1.8.0 + ethereum-cryptography@0.1.3: + dependencies: + '@types/pbkdf2': 3.1.2 + '@types/secp256k1': 4.0.7 + blakejs: 1.2.1 + browserify-aes: 1.2.0 + bs58check: 2.1.2 + create-hash: 1.2.0 + create-hmac: 1.1.7 + hash.js: 1.1.7 + keccak: 3.0.2 + pbkdf2: 3.1.5 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + scrypt-js: 3.0.1 + secp256k1: 4.0.4 + setimmediate: 1.0.5 + ethereum-cryptography@2.2.1: dependencies: '@noble/curves': 1.4.2 @@ -9838,6 +9958,39 @@ snapshots: '@scure/bip32': 1.4.0 '@scure/bip39': 1.3.0 + ethereumjs-abi@0.6.8: + dependencies: + bn.js: 4.12.2 + ethereumjs-util: 6.2.1 + + ethereumjs-util@5.2.1: + dependencies: + bn.js: 4.12.2 + create-hash: 1.2.0 + elliptic: 6.6.1 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + safe-buffer: 5.2.1 + + ethereumjs-util@6.2.1: + dependencies: + '@types/bn.js': 4.11.6 + bn.js: 4.12.2 + create-hash: 1.2.0 + elliptic: 6.6.1 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + + ethereumjs-util@7.1.5: + dependencies: + '@types/bn.js': 5.2.0 + bn.js: 5.2.2 + create-hash: 1.2.0 + ethereum-cryptography: 0.1.3 + rlp: 2.2.7 + ethers@5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 @@ -9892,6 +10045,11 @@ snapshots: bn.js: 4.11.6 number-to-bn: 1.7.0 + ethjs-util@0.1.6: + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + eventemitter3@5.0.1: {} events@3.3.0: {} @@ -10370,6 +10528,8 @@ snapshots: dependencies: which-typed-array: 1.1.19 + is-typedarray@1.0.0: {} + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -10750,6 +10910,8 @@ snapshots: node-addon-api@2.0.2: {} + node-addon-api@5.1.0: {} + node-fetch-native@1.6.7: {} node-fetch@2.7.0: @@ -11265,6 +11427,10 @@ snapshots: hash-base: 3.1.2 inherits: 2.0.4 + rlp@2.2.7: + dependencies: + bn.js: 5.2.2 + rpc-websockets@9.2.0: dependencies: '@swc/helpers': 0.5.17 @@ -11342,6 +11508,12 @@ snapshots: nan: 2.23.0 safe-buffer: 5.2.1 + secp256k1@4.0.4: + dependencies: + elliptic: 6.6.1 + node-addon-api: 5.1.0 + node-gyp-build: 4.8.4 + semver@6.3.1: {} semver@7.7.1: {} @@ -11372,6 +11544,8 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + setimmediate@1.0.5: {} + setprototypeof@1.2.0: {} sha.js@2.4.12: @@ -11713,6 +11887,8 @@ snapshots: tslib@2.8.1: {} + tweetnacl-util@0.15.1: {} + tweetnacl@1.0.3: {} type-check@0.4.0: @@ -11754,6 +11930,10 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + typedarray-to-buffer@4.0.0: {} typeforce@1.18.0: {} diff --git a/advanced/wallets/react-wallet-v2/src/components/MultibridgeRequestModal.tsx b/advanced/wallets/react-wallet-v2/src/components/MultibridgeRequestModal.tsx index 4e7f6c032..3295d160d 100644 --- a/advanced/wallets/react-wallet-v2/src/components/MultibridgeRequestModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/components/MultibridgeRequestModal.tsx @@ -13,7 +13,7 @@ import { } from '@/utils/MultibridgeUtil' import { getWallet } from '@/utils/EIP155WalletUtil' import { walletkit } from '@/utils/WalletConnectUtil' -import { EIP155_CHAINS, TEIP155Chain } from '@/data/EIP155Data' +import { EIP155_CHAINS, TEIP155Chain } from '@web-examples/shared' import { ChainAbstractionService, Transaction } from '@/utils/ChainAbstractionService' import { providers } from 'ethers' import { formatJsonRpcError } from '@json-rpc-tools/utils' diff --git a/advanced/wallets/react-wallet-v2/src/components/RequestDetalilsCard.tsx b/advanced/wallets/react-wallet-v2/src/components/RequestDetalilsCard.tsx index 98506cf07..08c19ea26 100644 --- a/advanced/wallets/react-wallet-v2/src/components/RequestDetalilsCard.tsx +++ b/advanced/wallets/react-wallet-v2/src/components/RequestDetalilsCard.tsx @@ -1,11 +1,11 @@ -import { COSMOS_MAINNET_CHAINS, TCosmosChain } from '@/data/COSMOSData' -import { EIP155_CHAINS, TEIP155Chain } from '@/data/EIP155Data' -import { KADENA_CHAINS, TKadenaChain } from '@/data/KadenaData' -import { NEAR_TEST_CHAINS, TNearChain } from '@/data/NEARData' -import { SOLANA_CHAINS, TSolanaChain } from '@/data/SolanaData' -import { MULTIVERSX_CHAINS, TMultiversxChain } from '@/data/MultiversxData' -import { TRON_CHAINS, TTronChain } from '@/data/TronData' -import { TON_CHAINS, TTonChain } from '@/data/TonData' +import { COSMOS_MAINNET_CHAINS, TCosmosChain } from '@web-examples/shared' +import { EIP155_CHAINS, TEIP155Chain } from '@web-examples/shared' +import { KADENA_CHAINS, TKadenaChain } from '@web-examples/shared' +import { NEAR_TEST_CHAINS, TNearChain } from '@web-examples/shared' +import { SOLANA_CHAINS, TSolanaChain } from '@web-examples/shared' +import { MULTIVERSX_CHAINS, TMultiversxChain } from '@web-examples/shared' +import { TRON_CHAINS, TTronChain } from '@web-examples/shared' +import { TON_CHAINS, TTonChain } from '@web-examples/shared' import { Col, Divider, Row, Text } from '@nextui-org/react' import { Fragment } from 'react' diff --git a/advanced/wallets/react-wallet-v2/src/components/SessionChainCard.tsx b/advanced/wallets/react-wallet-v2/src/components/SessionChainCard.tsx index 64b72c0aa..1dc3e3a8a 100644 --- a/advanced/wallets/react-wallet-v2/src/components/SessionChainCard.tsx +++ b/advanced/wallets/react-wallet-v2/src/components/SessionChainCard.tsx @@ -1,10 +1,10 @@ import ChainCard from '@/components/ChainCard' -import { COSMOS_MAINNET_CHAINS } from '@/data/COSMOSData' -import { EIP155_MAINNET_CHAINS, EIP155_TEST_CHAINS } from '@/data/EIP155Data' -import { NEAR_TEST_CHAINS } from '@/data/NEARData' -import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@/data/SolanaData' -import { MULTIVERSX_MAINNET_CHAINS, MULTIVERSX_TEST_CHAINS } from '@/data/MultiversxData' -import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS } from '@/data/TronData' +import { COSMOS_MAINNET_CHAINS } from '@web-examples/shared' +import { EIP155_MAINNET_CHAINS, EIP155_TEST_CHAINS } from '@web-examples/shared' +import { NEAR_TEST_CHAINS } from '@web-examples/shared' +import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@web-examples/shared' +import { MULTIVERSX_MAINNET_CHAINS, MULTIVERSX_TEST_CHAINS } from '@web-examples/shared' +import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS } from '@web-examples/shared' import { formatChainName } from '@/utils/HelperUtil' import { Col, Row, Text } from '@nextui-org/react' import { SessionTypes } from '@walletconnect/types' diff --git a/advanced/wallets/react-wallet-v2/src/components/SessionProposalChainCard.tsx b/advanced/wallets/react-wallet-v2/src/components/SessionProposalChainCard.tsx index eab288e86..b4bd74663 100644 --- a/advanced/wallets/react-wallet-v2/src/components/SessionProposalChainCard.tsx +++ b/advanced/wallets/react-wallet-v2/src/components/SessionProposalChainCard.tsx @@ -1,10 +1,10 @@ import ChainCard from '@/components/ChainCard' -import { COSMOS_MAINNET_CHAINS } from '@/data/COSMOSData' -import { EIP155_MAINNET_CHAINS, EIP155_TEST_CHAINS } from '@/data/EIP155Data' -import { NEAR_TEST_CHAINS } from '@/data/NEARData' -import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@/data/SolanaData' -import { MULTIVERSX_MAINNET_CHAINS, MULTIVERSX_TEST_CHAINS } from '@/data/MultiversxData' -import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS } from '@/data/TronData' +import { COSMOS_MAINNET_CHAINS } from '@web-examples/shared' +import { EIP155_MAINNET_CHAINS, EIP155_TEST_CHAINS } from '@web-examples/shared' +import { NEAR_TEST_CHAINS } from '@web-examples/shared' +import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@web-examples/shared' +import { MULTIVERSX_MAINNET_CHAINS, MULTIVERSX_TEST_CHAINS } from '@web-examples/shared' +import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS } from '@web-examples/shared' import { formatChainName } from '@/utils/HelperUtil' import { Col, Row, Text } from '@nextui-org/react' import { ProposalTypes } from '@walletconnect/types' diff --git a/advanced/wallets/react-wallet-v2/src/hooks/useSmartAccounts.ts b/advanced/wallets/react-wallet-v2/src/hooks/useSmartAccounts.ts index 70cedc49f..1766fd610 100644 --- a/advanced/wallets/react-wallet-v2/src/hooks/useSmartAccounts.ts +++ b/advanced/wallets/react-wallet-v2/src/hooks/useSmartAccounts.ts @@ -1,4 +1,4 @@ -import { EIP155Chain } from '@/data/EIP155Data' +import { EIP155Chain } from '@web-examples/shared' import SettingsStore from '@/store/SettingsStore' import { createOrRestoreBiconomySmartAccount, diff --git a/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts b/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts index 5561c9e6d..5452f2581 100644 --- a/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts +++ b/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts @@ -1,33 +1,33 @@ -import { COSMOS_SIGNING_METHODS } from '@/data/COSMOSData' -import { EIP155_SIGNING_METHODS } from '@/data/EIP155Data' +import { COSMOS_SIGNING_METHODS } from '@web-examples/shared' +import { EIP155_SIGNING_METHODS } from '@web-examples/shared' import { EIP5792_METHODS } from '@/data/EIP5792Data' -import { SOLANA_SIGNING_METHODS } from '@/data/SolanaData' -import { POLKADOT_SIGNING_METHODS } from '@/data/PolkadotData' -import { MULTIVERSX_SIGNING_METHODS } from '@/data/MultiversxData' -import { TRON_SIGNING_METHODS } from '@/data/TronData' +import { SOLANA_SIGNING_METHODS } from '@web-examples/shared' +import { POLKADOT_SIGNING_METHODS } from '@web-examples/shared' +import { MULTIVERSX_SIGNING_METHODS } from '@web-examples/shared' +import { TRON_SIGNING_METHODS } from '@web-examples/shared' import ModalStore from '@/store/ModalStore' import SettingsStore from '@/store/SettingsStore' import { walletkit } from '@/utils/WalletConnectUtil' import { SignClientTypes } from '@walletconnect/types' import { useCallback, useEffect, useMemo } from 'react' -import { NEAR_SIGNING_METHODS } from '@/data/NEARData' +import { NEAR_SIGNING_METHODS } from '@web-examples/shared' import { approveNearRequest } from '@/utils/NearRequestHandlerUtil' -import { TEZOS_SIGNING_METHODS } from '@/data/TezosData' -import { KADENA_SIGNING_METHODS } from '@/data/KadenaData' +import { TEZOS_SIGNING_METHODS } from '@web-examples/shared' +import { KADENA_SIGNING_METHODS } from '@web-examples/shared' import { formatJsonRpcError } from '@json-rpc-tools/utils' import { approveEIP5792Request } from '@/utils/EIP5792RequestHandlerUtils' import EIP155Lib from '@/lib/EIP155Lib' import { getWallet } from '@/utils/EIP155WalletUtil' -import { BIP122_SIGNING_METHODS } from '@/data/Bip122Data' +import { BIP122_SIGNING_METHODS } from '@web-examples/shared' import { EIP7715_METHOD } from '@/data/EIP7715Data' import { refreshSessionsList } from '@/pages/wc' import WalletCheckoutUtil from '@/utils/WalletCheckoutUtil' import WalletCheckoutCtrl from '@/store/WalletCheckoutCtrl' import { CheckoutErrorCode } from '@/types/wallet_checkout' import { createCheckoutError } from '@/types/wallet_checkout' -import { SUI_SIGNING_METHODS } from '@/data/SuiData' -import { STACKS_SIGNING_METHODS } from '@/data/StacksData' -import { TON_SIGNING_METHODS } from '@/data/TonData' +import { SUI_SIGNING_METHODS } from '@web-examples/shared' +import { STACKS_SIGNING_METHODS } from '@web-examples/shared' +import { TON_SIGNING_METHODS } from '@web-examples/shared' export default function useWalletConnectEventsManager(initialized: boolean) { /****************************************************************************** diff --git a/advanced/wallets/react-wallet-v2/src/lib/Bip122Lib.ts b/advanced/wallets/react-wallet-v2/src/lib/Bip122Lib.ts index eed33445b..3df8e134a 100644 --- a/advanced/wallets/react-wallet-v2/src/lib/Bip122Lib.ts +++ b/advanced/wallets/react-wallet-v2/src/lib/Bip122Lib.ts @@ -5,7 +5,7 @@ import * as bip39 from 'bip39' import BIP32Factory, { BIP32Interface } from 'bip32' import bitcoinMessage from 'bitcoinjs-message' import { schnorr } from '@noble/secp256k1' -import { BIP122_CHAINS, BIP122_TESTNET_ID, IBip122ChainId } from '@/data/Bip122Data' +import { BIP122_CHAINS, BIP122_TESTNET_ID, IBip122ChainId } from '@web-examples/shared' bitcoin.initEccLib(ecc) const ECPair = ECPairFactory(ecc) diff --git a/advanced/wallets/react-wallet-v2/src/lib/NearLib.ts b/advanced/wallets/react-wallet-v2/src/lib/NearLib.ts index 5c7c8fe2e..e5044232b 100644 --- a/advanced/wallets/react-wallet-v2/src/lib/NearLib.ts +++ b/advanced/wallets/react-wallet-v2/src/lib/NearLib.ts @@ -13,7 +13,7 @@ import { AccessKeyView } from 'near-api-js/lib/providers/provider' import { Schema, serialize } from 'borsh' import { walletkit } from '@/utils/WalletConnectUtil' -import { NEAR_TEST_CHAINS, TNearChain } from '@/data/NEARData' +import { NEAR_TEST_CHAINS, TNearChain } from '@web-examples/shared' const RPC_URL = 'https://rpc.testnet.near.org' diff --git a/advanced/wallets/react-wallet-v2/src/lib/SolanaLib.ts b/advanced/wallets/react-wallet-v2/src/lib/SolanaLib.ts index f60cd8a13..c33b542db 100644 --- a/advanced/wallets/react-wallet-v2/src/lib/SolanaLib.ts +++ b/advanced/wallets/react-wallet-v2/src/lib/SolanaLib.ts @@ -15,7 +15,7 @@ import { TOKEN_PROGRAM_ID, getOrCreateAssociatedTokenAccount } from '@solana/spl-token' -import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@/data/SolanaData' +import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@web-examples/shared' /** * Types diff --git a/advanced/wallets/react-wallet-v2/src/lib/StacksLib.ts b/advanced/wallets/react-wallet-v2/src/lib/StacksLib.ts index 5a1036951..a8524c647 100644 --- a/advanced/wallets/react-wallet-v2/src/lib/StacksLib.ts +++ b/advanced/wallets/react-wallet-v2/src/lib/StacksLib.ts @@ -10,8 +10,8 @@ import { publicKeyToHex, } from '@stacks/transactions' import { networkFromName, StacksNetworks } from '@stacks/network' -import { STACKS_MAINNET, STACKS_TESTNET, STACKS_TESTNET_CAIP2 } from '@/data/StacksData' -import { STACKS_MAINNET_CAIP2 } from '@/data/StacksData' +import { STACKS_MAINNET, STACKS_TESTNET, STACKS_TESTNET_CAIP2 } from '@web-examples/shared' +import { STACKS_MAINNET_CAIP2 } from '@web-examples/shared' import { sha256 } from '@noble/hashes/sha2' /** diff --git a/advanced/wallets/react-wallet-v2/src/lib/TonLib.ts b/advanced/wallets/react-wallet-v2/src/lib/TonLib.ts index 5aee2d6b1..faf67da58 100644 --- a/advanced/wallets/react-wallet-v2/src/lib/TonLib.ts +++ b/advanced/wallets/react-wallet-v2/src/lib/TonLib.ts @@ -11,7 +11,7 @@ import { beginCell, storeMessage } from '@ton/ton' -import { TON_MAINNET_CHAINS, TON_TEST_CHAINS } from '@/data/TonData' +import { TON_MAINNET_CHAINS, TON_TEST_CHAINS } from '@web-examples/shared' /** * Types diff --git a/advanced/wallets/react-wallet-v2/src/pages/index.tsx b/advanced/wallets/react-wallet-v2/src/pages/index.tsx index a7f502b5a..b92971b32 100644 --- a/advanced/wallets/react-wallet-v2/src/pages/index.tsx +++ b/advanced/wallets/react-wallet-v2/src/pages/index.tsx @@ -1,26 +1,26 @@ import AccountCard from '@/components/AccountCard' import AccountPicker from '@/components/AccountPicker' import PageHeader from '@/components/PageHeader' -import { COSMOS_MAINNET_CHAINS } from '@/data/COSMOSData' -import { EIP155_MAINNET_CHAINS, EIP155_TEST_CHAINS } from '@/data/EIP155Data' -import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@/data/SolanaData' -import { POLKADOT_MAINNET_CHAINS, POLKADOT_TEST_CHAINS } from '@/data/PolkadotData' -import { MULTIVERSX_MAINNET_CHAINS, MULTIVERSX_TEST_CHAINS } from '@/data/MultiversxData' -import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS } from '@/data/TronData' -import { NEAR_TEST_CHAINS } from '@/data/NEARData' -import { TEZOS_MAINNET_CHAINS, TEZOS_TEST_CHAINS } from '@/data/TezosData' -import { KADENA_MAINNET_CHAINS, KADENA_TEST_CHAINS } from '@/data/KadenaData' -import { TON_MAINNET_CHAINS, TON_TEST_CHAINS } from '@/data/TonData' +import { COSMOS_MAINNET_CHAINS } from '@web-examples/shared' +import { EIP155_MAINNET_CHAINS, EIP155_TEST_CHAINS } from '@web-examples/shared' +import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@web-examples/shared' +import { POLKADOT_MAINNET_CHAINS, POLKADOT_TEST_CHAINS } from '@web-examples/shared' +import { MULTIVERSX_MAINNET_CHAINS, MULTIVERSX_TEST_CHAINS } from '@web-examples/shared' +import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS } from '@web-examples/shared' +import { NEAR_TEST_CHAINS } from '@web-examples/shared' +import { TEZOS_MAINNET_CHAINS, TEZOS_TEST_CHAINS } from '@web-examples/shared' +import { KADENA_MAINNET_CHAINS, KADENA_TEST_CHAINS } from '@web-examples/shared' +import { TON_MAINNET_CHAINS, TON_TEST_CHAINS } from '@web-examples/shared' import SettingsStore from '@/store/SettingsStore' import { Text } from '@nextui-org/react' import { Fragment } from 'react' import { useSnapshot } from 'valtio' import useSmartAccounts from '@/hooks/useSmartAccounts' -import { BIP122_CHAINS } from '@/data/Bip122Data' +import { BIP122_CHAINS } from '@web-examples/shared' import { useRouter } from 'next/router' import ChainAbstractionBalanceCard from '@/components/ChainAbstractionBalanceCard' -import { SUI_MAINNET, SUI_MAINNET_CHAINS, SUI_TESTNET_CHAINS } from '@/data/SuiData' -import { STACKS_MAINNET, STACKS_TESTNET } from '@/data/StacksData' +import { SUI_MAINNET, SUI_MAINNET_CHAINS, SUI_TESTNET_CHAINS } from '@web-examples/shared' +import { STACKS_MAINNET, STACKS_TESTNET } from '@web-examples/shared' export default function HomePage() { const { diff --git a/advanced/wallets/react-wallet-v2/src/utils/AuthUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/AuthUtil.ts index 35c820e6d..cb5363998 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/AuthUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/AuthUtil.ts @@ -20,7 +20,7 @@ import { getDidChainId, parseChainId } from '@walletconnect/utils' -import { IBip122ChainId } from '@/data/Bip122Data' +import { IBip122ChainId } from '@web-examples/shared' import { AuthenticationMessage } from '@/types/auth' import bs58 from 'bs58' const didPrefix = 'did:pkh:' diff --git a/advanced/wallets/react-wallet-v2/src/utils/Bip122RequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/Bip122RequestHandlerUtil.ts index 1323b35dd..23c3fe5e3 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/Bip122RequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/Bip122RequestHandlerUtil.ts @@ -1,9 +1,9 @@ -import { KADENA_SIGNING_METHODS } from '@/data/KadenaData' +import { KADENA_SIGNING_METHODS } from '@web-examples/shared' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' import { SignClientTypes } from '@walletconnect/types' import { getSdkError } from '@walletconnect/utils' import { getWalletAddressFromParams } from './HelperUtil' -import { BIP122_SIGNING_METHODS, IBip122ChainId } from '@/data/Bip122Data' +import { BIP122_SIGNING_METHODS, IBip122ChainId } from '@web-examples/shared' import { bip122Addresses, bip122Wallet } from './Bip122WalletUtil' export async function approveBip122Request( diff --git a/advanced/wallets/react-wallet-v2/src/utils/Bip122WalletUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/Bip122WalletUtil.ts index ee1121589..f1af6408e 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/Bip122WalletUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/Bip122WalletUtil.ts @@ -1,4 +1,4 @@ -import { BIP122_MAINNET_CAIP2, BIP122_TESTNET_CAIP2 } from '@/data/Bip122Data' +import { BIP122_MAINNET_CAIP2, BIP122_TESTNET_CAIP2 } from '@web-examples/shared' import BitcoinLib from '@/lib/Bip122Lib' export let wallet1: BitcoinLib diff --git a/advanced/wallets/react-wallet-v2/src/utils/CosmosRequestHandler.ts b/advanced/wallets/react-wallet-v2/src/utils/CosmosRequestHandler.ts index 4b98e4574..91ed473de 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/CosmosRequestHandler.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/CosmosRequestHandler.ts @@ -1,4 +1,4 @@ -import { COSMOS_SIGNING_METHODS } from '@/data/COSMOSData' +import { COSMOS_SIGNING_METHODS } from '@web-examples/shared' import { cosmosAddresses, cosmosWallets } from '@/utils/CosmosWalletUtil' import { getWalletAddressFromParams } from '@/utils/HelperUtil' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' diff --git a/advanced/wallets/react-wallet-v2/src/utils/EIP155RequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/EIP155RequestHandlerUtil.ts index a61af4a22..f80495c2b 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/EIP155RequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/EIP155RequestHandlerUtil.ts @@ -1,4 +1,4 @@ -import { EIP155_CHAINS, EIP155_SIGNING_METHODS, TEIP155Chain } from '@/data/EIP155Data' +import { EIP155_CHAINS, EIP155_SIGNING_METHODS, TEIP155Chain } from '@web-examples/shared' import { getWallet } from '@/utils/EIP155WalletUtil' import { getSignParamsMessage, getSignTypedDataParamsData } from '@/utils/HelperUtil' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' diff --git a/advanced/wallets/react-wallet-v2/src/utils/EIP5792RequestHandlerUtils.ts b/advanced/wallets/react-wallet-v2/src/utils/EIP5792RequestHandlerUtils.ts index a57ae9a3d..4100dd654 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/EIP5792RequestHandlerUtils.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/EIP5792RequestHandlerUtils.ts @@ -1,4 +1,4 @@ -import { EIP155_CHAINS, TEIP155Chain } from '@/data/EIP155Data' +import { EIP155_CHAINS, TEIP155Chain } from '@web-examples/shared' import { EIP5792_METHODS, GetCallsParams, diff --git a/advanced/wallets/react-wallet-v2/src/utils/HelperUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/HelperUtil.ts index 8be1dc0aa..7fd454408 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/HelperUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/HelperUtil.ts @@ -1,14 +1,14 @@ import toast from 'react-hot-toast' -import { COSMOS_MAINNET_CHAINS, TCosmosChain } from '@/data/COSMOSData' -import { EIP155_CHAINS, TEIP155Chain } from '@/data/EIP155Data' -import { MULTIVERSX_CHAINS, TMultiversxChain } from '@/data/MultiversxData' -import { NEAR_CHAINS, NEAR_TEST_CHAINS, TNearChain } from '@/data/NEARData' -import { POLKADOT_CHAINS, TPolkadotChain } from '@/data/PolkadotData' -import { SOLANA_CHAINS, TSolanaChain } from '@/data/SolanaData' -import { TEZOS_CHAINS, TTezosChain } from '@/data/TezosData' -import { TRON_CHAINS, TTronChain } from '@/data/TronData' -import { KADENA_CHAINS, TKadenaChain } from '@/data/KadenaData' -import { TON_CHAINS } from '@/data/TonData' +import { COSMOS_MAINNET_CHAINS, TCosmosChain } from '@web-examples/shared' +import { EIP155_CHAINS, TEIP155Chain } from '@web-examples/shared' +import { MULTIVERSX_CHAINS, TMultiversxChain } from '@web-examples/shared' +import { NEAR_CHAINS, NEAR_TEST_CHAINS, TNearChain } from '@web-examples/shared' +import { POLKADOT_CHAINS, TPolkadotChain } from '@web-examples/shared' +import { SOLANA_CHAINS, TSolanaChain } from '@web-examples/shared' +import { TEZOS_CHAINS, TTezosChain } from '@web-examples/shared' +import { TRON_CHAINS, TTronChain } from '@web-examples/shared' +import { KADENA_CHAINS, TKadenaChain } from '@web-examples/shared' +import { TON_CHAINS } from '@web-examples/shared' import { utils } from 'ethers' import bs58 from 'bs58' diff --git a/advanced/wallets/react-wallet-v2/src/utils/KadenaRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/KadenaRequestHandlerUtil.ts index b059b6a57..a34ced36a 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/KadenaRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/KadenaRequestHandlerUtil.ts @@ -1,4 +1,4 @@ -import { KADENA_SIGNING_METHODS } from '@/data/KadenaData' +import { KADENA_SIGNING_METHODS } from '@web-examples/shared' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' import { SignClientTypes } from '@walletconnect/types' import { getSdkError } from '@walletconnect/utils' diff --git a/advanced/wallets/react-wallet-v2/src/utils/MultibridgeUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/MultibridgeUtil.ts index 1fc7e03be..9f586c708 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/MultibridgeUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/MultibridgeUtil.ts @@ -2,7 +2,7 @@ import { createPublicClient, decodeFunctionData, erc20Abi, getContract, Hex, htt import { arbitrum, base, optimism } from 'viem/chains' import { getChainById } from './ChainUtil' import { providers } from 'ethers' -import { EIP155_CHAINS, TEIP155Chain } from '@/data/EIP155Data' +import { EIP155_CHAINS, TEIP155Chain } from '@web-examples/shared' const BASE_URL = 'https://api.socket.tech/v2' const WHITELIST_BRIDGES = 'across' diff --git a/advanced/wallets/react-wallet-v2/src/utils/MultiversxRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/MultiversxRequestHandlerUtil.ts index 604adc3f5..f121a530d 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/MultiversxRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/MultiversxRequestHandlerUtil.ts @@ -1,4 +1,4 @@ -import { MULTIVERSX_SIGNING_METHODS } from '@/data/MultiversxData' +import { MULTIVERSX_SIGNING_METHODS } from '@web-examples/shared' import { getWalletAddressFromParams } from '@/utils/HelperUtil' import { multiversxAddresses, multiversxWallets } from '@/utils/MultiversxWalletUtil' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' diff --git a/advanced/wallets/react-wallet-v2/src/utils/NearRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/NearRequestHandlerUtil.ts index fa3aee189..1d3ec03e9 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/NearRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/NearRequestHandlerUtil.ts @@ -2,7 +2,7 @@ import { SignClientTypes } from '@walletconnect/types' import { getSdkError } from '@walletconnect/utils' import { InMemorySigner, transactions, utils, Connection } from 'near-api-js' -import { NEAR_SIGNING_METHODS, NEAR_TEST_CHAINS } from '@/data/NEARData' +import { NEAR_SIGNING_METHODS, NEAR_TEST_CHAINS } from '@web-examples/shared' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' import { nearWallet } from '@/utils/NearWalletUtil' import { decodeTransaction } from '@/lib/NearLib' diff --git a/advanced/wallets/react-wallet-v2/src/utils/PaymentValidatorUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/PaymentValidatorUtil.ts index 9db6aaa4b..fe4a8a872 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/PaymentValidatorUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/PaymentValidatorUtil.ts @@ -10,7 +10,7 @@ import TransactionSimulatorUtil from './TransactionSimulatorUtil' import SettingsStore from '@/store/SettingsStore' import { getSolanaTokenData, getTokenData } from '@/data/tokenUtil' import { getChainById } from './ChainUtil' -import { blockchainApiRpc } from '@/data/EIP155Data' +import { blockchainApiRpc } from '@web-examples/shared' import { Connection, PublicKey, @@ -18,8 +18,8 @@ import { Transaction, TransactionInstruction } from '@solana/web3.js' -import { SOLANA_TEST_CHAINS } from '@/data/SolanaData' -import { SOLANA_MAINNET_CHAINS } from '@/data/SolanaData' +import { SOLANA_TEST_CHAINS } from '@web-examples/shared' +import { SOLANA_MAINNET_CHAINS } from '@web-examples/shared' import { createTransferInstruction, TOKEN_PROGRAM_ID } from '@solana/spl-token' import { createAssociatedTokenAccountInstruction } from '@solana/spl-token' import { getAssociatedTokenAddress } from '@solana/spl-token' diff --git a/advanced/wallets/react-wallet-v2/src/utils/PolkadotRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/PolkadotRequestHandlerUtil.ts index 608ef95d9..a8547dc52 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/PolkadotRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/PolkadotRequestHandlerUtil.ts @@ -1,4 +1,4 @@ -import { POLKADOT_SIGNING_METHODS } from '@/data/PolkadotData' +import { POLKADOT_SIGNING_METHODS } from '@web-examples/shared' import { getWalletAddressFromParams } from '@/utils/HelperUtil' import { getPolkadotWallet, polkadotAddresses, polkadotWallets } from '@/utils/PolkadotWalletUtil' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' diff --git a/advanced/wallets/react-wallet-v2/src/utils/SolanaRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/SolanaRequestHandlerUtil.ts index d2894b8d2..14553394c 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/SolanaRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/SolanaRequestHandlerUtil.ts @@ -1,4 +1,4 @@ -import { SOLANA_SIGNING_METHODS } from '@/data/SolanaData' +import { SOLANA_SIGNING_METHODS } from '@web-examples/shared' import { getWalletAddressFromParams } from '@/utils/HelperUtil' import { solanaAddresses, solanaWallets } from '@/utils/SolanaWalletUtil' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' diff --git a/advanced/wallets/react-wallet-v2/src/utils/StacksRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/StacksRequestHandlerUtil.ts index c2b433d12..eaa56b725 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/StacksRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/StacksRequestHandlerUtil.ts @@ -3,7 +3,7 @@ import { SignClientTypes } from '@walletconnect/types' import { getSdkError } from '@walletconnect/utils' import { stacksWallet } from './StacksWalletUtil' -import { STACKS_SIGNING_METHODS } from '@/data/StacksData' +import { STACKS_SIGNING_METHODS } from '@web-examples/shared' export async function approveStacksRequest( requestEvent: SignClientTypes.EventArguments['session_request'] diff --git a/advanced/wallets/react-wallet-v2/src/utils/StacksWalletUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/StacksWalletUtil.ts index 3e4abf1f4..56dea6d66 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/StacksWalletUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/StacksWalletUtil.ts @@ -1,4 +1,4 @@ -import { STACKS_MAINNET_CAIP2, STACKS_TESTNET_CAIP2 } from '@/data/StacksData' +import { STACKS_MAINNET_CAIP2, STACKS_TESTNET_CAIP2 } from '@web-examples/shared' import StacksLib from '@/lib/StacksLib' export let wallet1: StacksLib diff --git a/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts index 46fca6c7e..2ad1ad13f 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts @@ -3,7 +3,7 @@ import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' import { SignClientTypes } from '@walletconnect/types' import { getSdkError } from '@walletconnect/utils' import SettingsStore from '@/store/SettingsStore' -import { SUI_SIGNING_METHODS } from '@/data/SuiData' +import { SUI_SIGNING_METHODS } from '@web-examples/shared' type RequestEventArgs = Omit diff --git a/advanced/wallets/react-wallet-v2/src/utils/TezosRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/TezosRequestHandlerUtil.ts index c96c73b6e..30110e910 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/TezosRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/TezosRequestHandlerUtil.ts @@ -1,4 +1,4 @@ -import { TEZOS_SIGNING_METHODS } from '@/data/TezosData' +import { TEZOS_SIGNING_METHODS } from '@web-examples/shared' import { tezosWallets } from '@/utils/TezosWalletUtil' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' import { SignClientTypes } from '@walletconnect/types' diff --git a/advanced/wallets/react-wallet-v2/src/utils/TonRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/TonRequestHandlerUtil.ts index 8301b6065..adc96ca77 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/TonRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/TonRequestHandlerUtil.ts @@ -4,7 +4,7 @@ import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' import { SignClientTypes } from '@walletconnect/types' import { getSdkError } from '@walletconnect/utils' import SettingsStore from '@/store/SettingsStore' -import { TON_SIGNING_METHODS } from '@/data/TonData' +import { TON_SIGNING_METHODS } from '@web-examples/shared' type RequestEventArgs = Omit diff --git a/advanced/wallets/react-wallet-v2/src/utils/TransactionSimulatorUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/TransactionSimulatorUtil.ts index f8a7cb4e1..44f0292fb 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/TransactionSimulatorUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/TransactionSimulatorUtil.ts @@ -1,4 +1,4 @@ -import { blockchainApiRpc } from '@/data/EIP155Data' +import { blockchainApiRpc } from '@web-examples/shared' import { Connection, PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js' import { createPublicClient, http } from 'viem' diff --git a/advanced/wallets/react-wallet-v2/src/utils/TronRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/TronRequestHandlerUtil.ts index aea1c8d5d..70dc81554 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/TronRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/TronRequestHandlerUtil.ts @@ -1,4 +1,4 @@ -import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS, TRON_SIGNING_METHODS } from '@/data/TronData' +import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS, TRON_SIGNING_METHODS } from '@web-examples/shared' import { getWalletAddressFromParams } from '@/utils/HelperUtil' import { tronAddresses, tronWallets } from '@/utils/TronWalletUtil' import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' diff --git a/advanced/wallets/react-wallet-v2/src/utils/WalletCheckoutPaymentHandler.ts b/advanced/wallets/react-wallet-v2/src/utils/WalletCheckoutPaymentHandler.ts index f59b51922..cf8daddab 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/WalletCheckoutPaymentHandler.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/WalletCheckoutPaymentHandler.ts @@ -9,8 +9,8 @@ import { CheckoutError, SolanaContractInteraction } from '@/types/wallet_checkout' -import { SOLANA_MAINNET_CHAINS } from '@/data/SolanaData' -import { SOLANA_TEST_CHAINS } from '@/data/SolanaData' +import { SOLANA_MAINNET_CHAINS } from '@web-examples/shared' +import { SOLANA_TEST_CHAINS } from '@web-examples/shared' export interface PaymentResult { txHash: string diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionAuthenticateModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionAuthenticateModal.tsx index 979a2a6b1..87f978930 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionAuthenticateModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionAuthenticateModal.tsx @@ -8,7 +8,7 @@ import SettingsStore from '@/store/SettingsStore' import { eip155Addresses, eip155Wallets } from '@/utils/EIP155WalletUtil' import { walletkit } from '@/utils/WalletConnectUtil' import RequestModal from '../components/RequestModal' -import { EIP155_CHAINS, EIP155_SIGNING_METHODS } from '@/data/EIP155Data' +import { EIP155_CHAINS, EIP155_SIGNING_METHODS } from '@web-examples/shared' import { styledToast } from '@/utils/HelperUtil' export default function SessionAuthenticateModal() { diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionCheckoutModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionCheckoutModal.tsx index d54b22f02..1f7e8fa08 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionCheckoutModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionCheckoutModal.tsx @@ -19,7 +19,7 @@ import SettingsStore from '@/store/SettingsStore' import { eip155Wallets } from '@/utils/EIP155WalletUtil' import EIP155Lib from '@/lib/EIP155Lib' import { providers } from 'ethers' -import { EIP155_CHAINS, TEIP155Chain } from '@/data/EIP155Data' +import { EIP155_CHAINS, TEIP155Chain } from '@web-examples/shared' import WalletCheckoutPaymentHandler from '@/utils/WalletCheckoutPaymentHandler' import WalletCheckoutCtrl from '@/store/WalletCheckoutCtrl' import { solanaWallets } from '@/utils/SolanaWalletUtil' diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionGetBip122AddressesModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionGetBip122AddressesModal.tsx index d5c88c7e6..28e687506 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionGetBip122AddressesModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionGetBip122AddressesModal.tsx @@ -9,7 +9,7 @@ import RequestModal from '../components/RequestModal' import { useCallback, useState } from 'react' import { approveBip122Request, rejectBip122Request } from '@/utils/Bip122RequestHandlerUtil' import { bip122Wallet } from '@/utils/Bip122WalletUtil' -import { IBip122ChainId } from '@/data/Bip122Data' +import { IBip122ChainId } from '@web-examples/shared' export default function SessionGetBip122AddressesModal() { // Get request and wallet data from store diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx index 8d76b04d2..7b716fbc0 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx @@ -25,15 +25,15 @@ import { nearAddresses } from '@/utils/NearWalletUtil' import { kadenaAddresses } from '@/utils/KadenaWalletUtil' import { styledToast } from '@/utils/HelperUtil' import { walletkit } from '@/utils/WalletConnectUtil' -import { EIP155_CHAINS, EIP155_SIGNING_METHODS } from '@/data/EIP155Data' -import { COSMOS_MAINNET_CHAINS, COSMOS_SIGNING_METHODS } from '@/data/COSMOSData' -import { KADENA_CHAINS, KADENA_SIGNING_METHODS } from '@/data/KadenaData' -import { MULTIVERSX_CHAINS, MULTIVERSX_SIGNING_METHODS } from '@/data/MultiversxData' -import { NEAR_CHAINS, NEAR_SIGNING_METHODS } from '@/data/NEARData' -import { POLKADOT_CHAINS, POLKADOT_SIGNING_METHODS } from '@/data/PolkadotData' -import { SOLANA_CHAINS, SOLANA_SIGNING_METHODS } from '@/data/SolanaData' -import { TEZOS_CHAINS, TEZOS_SIGNING_METHODS } from '@/data/TezosData' -import { TRON_CHAINS, TRON_SIGNING_METHODS } from '@/data/TronData' +import { EIP155_CHAINS, EIP155_SIGNING_METHODS } from '@web-examples/shared' +import { COSMOS_MAINNET_CHAINS, COSMOS_SIGNING_METHODS } from '@web-examples/shared' +import { KADENA_CHAINS, KADENA_SIGNING_METHODS } from '@web-examples/shared' +import { MULTIVERSX_CHAINS, MULTIVERSX_SIGNING_METHODS } from '@web-examples/shared' +import { NEAR_CHAINS, NEAR_SIGNING_METHODS } from '@web-examples/shared' +import { POLKADOT_CHAINS, POLKADOT_SIGNING_METHODS } from '@web-examples/shared' +import { SOLANA_CHAINS, SOLANA_SIGNING_METHODS } from '@web-examples/shared' +import { TEZOS_CHAINS, TEZOS_SIGNING_METHODS } from '@web-examples/shared' +import { TRON_CHAINS, TRON_SIGNING_METHODS } from '@web-examples/shared' import ChainDataMini from '@/components/ChainDataMini' import ChainAddressMini from '@/components/ChainAddressMini' import { getChainData } from '@/data/chainsUtil' @@ -51,16 +51,16 @@ import { BIP122_EVENTS, BIP122_SIGNING_METHODS, IBip122ChainId -} from '@/data/Bip122Data' +} from '@web-examples/shared' import { EIP7715_METHOD } from '@/data/EIP7715Data' import { useRouter } from 'next/router' -import { SUI_CHAINS, SUI_EVENTS, SUI_SIGNING_METHODS } from '@/data/SuiData' +import { SUI_CHAINS, SUI_EVENTS, SUI_SIGNING_METHODS } from '@web-examples/shared' import { suiAddresses } from '@/utils/SuiWalletUtil' -import { STACKS_CHAINS, STACKS_EVENTS, STACKS_SIGNING_METHODS } from '@/data/StacksData' +import { STACKS_CHAINS, STACKS_EVENTS, STACKS_SIGNING_METHODS } from '@web-examples/shared' import { stacksAddresses, stacksWallet } from '@/utils/StacksWalletUtil' import { getWallet as getSuiWallet } from '@/utils/SuiWalletUtil' import StacksLib from '@/lib/StacksLib' -import { TON_CHAINS, TON_SIGNING_METHODS } from '@/data/TonData' +import { TON_CHAINS, TON_SIGNING_METHODS } from '@web-examples/shared' import { tonAddresses } from '@/utils/TonWalletUtil' import { prepareAuthenticationMessages, signAuthenticationMessages } from '@/utils/AuthUtil' import { AuthenticationMessage } from '@/types/auth' diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignNearModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignNearModal.tsx index 2b0cf8557..77285a875 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignNearModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignNearModal.tsx @@ -8,7 +8,7 @@ import RequestMethodCard from '@/components/RequestMethodCard' import ModalStore from '@/store/ModalStore' import { approveNearRequest, rejectNearRequest } from '@/utils/NearRequestHandlerUtil' import { walletkit } from '@/utils/WalletConnectUtil' -import { NEAR_SIGNING_METHODS } from '@/data/NEARData' +import { NEAR_SIGNING_METHODS } from '@web-examples/shared' import { styledToast } from '@/utils/HelperUtil' import RequestModal from '../components/RequestModal' import { useCallback, useState } from 'react' diff --git a/shared/.gitignore b/shared/.gitignore new file mode 100644 index 000000000..cb6cd6ad1 --- /dev/null +++ b/shared/.gitignore @@ -0,0 +1,6 @@ +node_modules +*.log +.DS_Store +dist +build + diff --git a/shared/chains/bip122.ts b/shared/chains/bip122.ts new file mode 100644 index 000000000..65ce3f4fd --- /dev/null +++ b/shared/chains/bip122.ts @@ -0,0 +1,137 @@ +import { schnorr } from "@noble/secp256k1"; +import * as bitcoin from "bitcoinjs-lib"; +import BitcoinMessage from "bitcoinjs-message"; +import { NamespaceMetadata, ChainsMap } from "../types"; +import { convertHexToBase64 } from "../helpers"; + +export const BtcChainData: ChainsMap = { + "000000000019d6689c085ae165831e93": { + id: "bip122:000000000019d6689c085ae165831e93", + name: "Bitcoin", + rpc: [], + slip44: 0, + testnet: false, + }, + "000000000933ea01ad0ee984209779ba": { + id: "bip122:000000000933ea01ad0ee984209779ba", + name: "Bitcoin Testnet", + rpc: [], + slip44: 1, + testnet: true, + }, +}; + +export const BtcMetadata: NamespaceMetadata = { + "000000000019d6689c085ae165831e93": { + logo: "/assets/btc-testnet.png", + rgb: "247, 147, 26", + }, + "000000000933ea01ad0ee984209779ba": { + logo: "/assets/btc-testnet.png", + rgb: "247, 147, 26", + }, +}; + +// Wallet-specific data structures +export const BIP122_NAMESPACE = "bip122"; + +export const BIP122_MAINNET = "000000000019d6689c085ae165831e93"; +export const BIP122_TESTNET = "000000000933ea01ad0ee984209779ba"; +export const BIP122_DUST_LIMIT = "1001"; + +export const BIP122_MAINNET_ID = "000000000019d6689c085ae165831e93"; +export const BIP122_TESTNET_ID = "000000000933ea01ad0ee984209779ba"; +export const BIP122_MAINNET_CAIP2 = `${BIP122_NAMESPACE}:${BIP122_MAINNET_ID}`; +export const BIP122_TESTNET_CAIP2 = `${BIP122_NAMESPACE}:${BIP122_TESTNET_ID}`; + +export type IBip122ChainId = + | typeof BIP122_MAINNET_CAIP2 + | typeof BIP122_TESTNET_CAIP2; + +export const BITCOIN_MAINNET = { + [BIP122_MAINNET_CAIP2]: { + chainId: BIP122_MAINNET_ID, + name: "BTC Mainnet", + logo: "/chain-logos/btc-testnet.png", + rgb: "107, 111, 147", + rpc: "", + coinType: "0", + caip2: BIP122_MAINNET_CAIP2 as IBip122ChainId, + namespace: BIP122_NAMESPACE, + }, +}; + +export const BITCOIN_TESTNET = { + [BIP122_TESTNET_CAIP2]: { + chainId: BIP122_TESTNET_ID, + name: "BTC Testnet", + logo: "/chain-logos/btc-testnet.png", + rgb: "247, 147, 25", + rpc: "", + coinType: "1", + caip2: BIP122_TESTNET_CAIP2 as IBip122ChainId, + namespace: BIP122_NAMESPACE, + }, +}; + +export const BIP122_CHAINS = { + ...BITCOIN_MAINNET, + ...BITCOIN_TESTNET, +} as Record< + IBip122ChainId, + (typeof BITCOIN_MAINNET)[typeof BIP122_MAINNET_CAIP2] & + (typeof BITCOIN_TESTNET)[typeof BIP122_TESTNET_CAIP2] +>; + +export const DEFAULT_BIP122_METHODS = { + BIP122_SEND_TRANSACTION: "sendTransfer", + BIP122_GET_ACCOUNT_ADDRESSES: "getAccountAddresses", + BIP122_SIGN_MESSAGE: "signMessage", + BIP122_SIGN_PSBT: "signPsbt", +} as const; + +export const DEFAULT_BIP122_EVENTS = { + ACCOUNTS_CHANGED: "accountsChanged", + CHAIN_CHANGED: "chainChanged", +} as const; + +export const BtcUtils = { + verifyMessage: async ({ + message, + signature, + address, + }: { + message: string; + signature: string; + address: string; + }) => { + // if taproot address + if (address.startsWith("bc1p") || address.startsWith("tb1p")) { + // Convert the Ordinals address (Taproot) to the internal public key + const decoded = bitcoin.address.fromBech32(address); + if (decoded.version !== 1 || decoded.data.length !== 32) { + throw new Error("Invalid Taproot address"); + } + + const publicKey = decoded.data; // The 32-byte internal public key (X coordinate of pubkey) + + // Hash the message using SHA256 (standard Bitcoin message hashing) + const messageHash = bitcoin.crypto.sha256(Buffer.from(message)); + + // Verify the Schnorr signature using tiny-secp256k1 + return schnorr.verify( + new Uint8Array(Buffer.from(signature, "hex")), + new Uint8Array(messageHash), + new Uint8Array(publicKey) + ); + } + + return BitcoinMessage.verify( + message, + address, + convertHexToBase64(signature), + undefined, + true + ); + }, +}; diff --git a/shared/chains/cosmos.ts b/shared/chains/cosmos.ts new file mode 100644 index 000000000..e6de885fa --- /dev/null +++ b/shared/chains/cosmos.ts @@ -0,0 +1,51 @@ +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const CosmosChainData: ChainsMap = { + "cosmoshub-4": { + name: "Cosmos Hub", + id: "cosmos:cosmoshub-4", + rpc: ["https://rpc.cosmos.network"], + slip44: 118, + testnet: false, + }, + "irishub-1": { + name: "Irisnet", + id: "cosmos:irishub-1", + rpc: ["https://rpc.irisnet.org"], + slip44: 566, + testnet: false, + }, + "kava-4": { + name: "Kava", + id: "cosmos:kava-4", + rpc: ["https://kava4.data.kava.io"], + slip44: 459, + testnet: false, + }, + "columbus-4": { + name: "Terra", + id: "cosmos:columbus-4", + rpc: [], + slip44: 330, + testnet: false, + }, +}; + +export const CosmosMetadata: NamespaceMetadata = { + "cosmoshub-4": { + logo: "/assets/" + "cosmos-cosmoshub-4.png", + rgb: "27, 31, 53", + }, +}; + +export const DEFAULT_COSMOS_METHODS = { + COSMOS_SIGN_DIRECT: "cosmos_signDirect", + COSMOS_SIGN_AMINO: "cosmos_signAmino", +} as const; + +export const DEFAULT_COSMOS_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const CosmosUtils = {}; diff --git a/shared/chains/eip155.ts b/shared/chains/eip155.ts new file mode 100644 index 000000000..bb1b94fd9 --- /dev/null +++ b/shared/chains/eip155.ts @@ -0,0 +1,248 @@ +import { + hashPersonalMessage, + rpcProvidersByChainId, + verifySignature, +} from "../helpers"; +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const EIP155Colors = { + ethereum: "99, 125, 234", + optimism: "233, 1, 1", + goerli: "189, 174, 155", + xdai: "73, 169, 166", + polygon: "130, 71, 229", + zksync: "90, 90, 90", + celo: "60, 203, 132", + arbitrum: "44, 55, 75", +}; + +export const EIP155ChainData: ChainsMap = { + "1": { + name: "Ethereum Mainnet", + id: "eip155:1", + rpc: ["https://api.mycryptoapi.com/eth"], + slip44: 60, + testnet: false, + }, + "5": { + name: "Ethereum Goerli", + id: "eip155:5", + rpc: ["https://rpc.goerli.mudit.blog"], + slip44: 60, + testnet: true, + }, + "11155111": { + name: "Ethereum Sepolia", + id: "eip155:11155111", + rpc: ["https://gateway.tenderly.co/public/sepolia "], + slip44: 60, + testnet: true, + }, + "10": { + name: "Optimism Mainnet", + id: "eip155:10", + rpc: ["https://mainnet.optimism.io"], + slip44: 60, + testnet: false, + }, + "42": { + name: "Ethereum Kovan", + id: "eip155:42", + rpc: ["https://kovan.poa.network"], + slip44: 60, + testnet: true, + }, + "69": { + name: "Optimism Kovan", + id: "eip155:69", + rpc: ["https://kovan.optimism.io"], + slip44: 60, + testnet: true, + }, + "100": { + name: "xDAI", + id: "eip155:100", + rpc: ["https://dai.poa.network"], + slip44: 60, + testnet: false, + }, + "280": { + name: "zkSync Era Testnet", + id: "eip155:280", + rpc: ["https://testnet.era.zksync.dev"], + slip44: 60, + testnet: true, + }, + "324": { + name: "zkSync Era", + id: "eip155:324", + rpc: ["https://mainnet.era.zksync.io"], + slip44: 60, + testnet: false, + }, + "137": { + name: "Polygon Mainnet", + id: "eip155:137", + rpc: ["https://rpc-mainnet.matic.network"], + slip44: 60, + testnet: false, + }, + "420": { + name: "Optimism Goerli", + id: "eip155:420", + rpc: ["https://goerli.optimism.io"], + slip44: 60, + testnet: true, + }, + "42161": { + name: "Arbitrum One", + id: "eip155:42161", + rpc: ["https://arb1.arbitrum.io/rpc"], + slip44: 60, + testnet: false, + }, + "42220": { + name: "Celo Mainnet", + id: "eip155:42220", + rpc: ["https://forno.celo.org"], + slip44: 52752, + testnet: false, + }, + "44787": { + name: "Celo Alfajores", + id: "eip155:44787", + rpc: ["https://alfajores-forno.celo-testnet.org"], + slip44: 52752, + testnet: true, + }, + "80001": { + name: "Polygon Mumbai", + id: "eip155:80001", + rpc: ["https://rpc-mumbai.matic.today"], + slip44: 60, + testnet: true, + }, + "421611": { + name: "Arbitrum Rinkeby", + id: "eip155:421611", + rpc: ["https://rinkeby.arbitrum.io/rpc"], + slip44: 60, + testnet: true, + }, +}; + +export const EIP155Metadata: NamespaceMetadata = { + "1": { + name: "Ethereum", + logo: "/assets/" + "eip155-1.png", + rgb: EIP155Colors.ethereum, + }, + "5": { + logo: "/assets/" + "eip155-1.png", + rgb: EIP155Colors.ethereum, + }, + "11155111": { + logo: "/assets/" + "eip155-1.png", + rgb: EIP155Colors.ethereum, + }, + "10": { + name: "Optimism", + logo: "/assets/" + "eip155-10.png", + rgb: EIP155Colors.optimism, + }, + "42": { + logo: "/assets/" + "eip155-42.png", + rgb: EIP155Colors.ethereum, + }, + "420": { + logo: "/assets/" + "eip155-420.png", + rgb: EIP155Colors.optimism, + }, + "100": { + logo: "/assets/" + "eip155-100.png", + rgb: EIP155Colors.xdai, + }, + "280": { + name: "zkSync Era Testnet", + logo: "/assets/" + "eip155-324.svg", + rgb: EIP155Colors.zksync, + }, + "324": { + name: "zkSync Era", + logo: "/assets/" + "eip155-324.svg", + rgb: EIP155Colors.zksync, + }, + "137": { + name: "Polygon", + logo: "/assets/" + "eip155-137.png", + rgb: EIP155Colors.polygon, + }, + "80001": { + logo: "/assets/" + "eip155-80001.png", + rgb: EIP155Colors.polygon, + }, + "42161": { + name: "Arbitrum", + logo: "/assets/" + "eip155-42161.png", + rgb: EIP155Colors.arbitrum, + }, + "42220": { + name: "Celo", + logo: "/assets/" + "eip155-42220.png", + rgb: EIP155Colors.celo, + }, + "44787": { + logo: "/assets/" + "eip155-44787.png", + rgb: EIP155Colors.celo, + }, + "421611": { + logo: "/assets/" + "eip155-421611.png", + rgb: EIP155Colors.arbitrum, + }, +}; + +export const DEFAULT_EIP155_METHODS = { + PERSONAL_SIGN: "personal_sign", + ETH_SEND_TRANSACTION: "eth_sendTransaction", + ETH_SIGN_TYPED_DATA: "eth_signTypedData", + WALLET_GRANT_PERMISSIONS: "wallet_grantPermissions", + WALLET_GET_CAPABILITIES: "wallet_getCapabilities", + WALLET_SEND_CALLS: "wallet_sendCalls", + WALLET_GET_CALLS_STATUS: "wallet_getCallsStatus", + ETH_SIGN_TRANSACTION: "eth_signTransaction", + ETH_SIGN: "eth_sign", + ETH_SIGN_TYPED_DATA_V4: "eth_signTypedData_v4", +} as const; + +export const DEFAULT_EIP155_EVENTS = { + ETH_CHAIN_CHANGED: "chainChanged", + ETH_ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const EIP155Utils = { + verifyMessage: async ({ + message, + signature, + chainId, + address, + }: { + message: string; + signature: string; + chainId: string; + address: string; + }) => { + const rpc = rpcProvidersByChainId[Number(chainId)]; + + if (typeof rpc === "undefined") { + throw new Error(`Missing rpcProvider definition for chainId: ${chainId}`); + } + const hashMsg = hashPersonalMessage(message); + const valid = await verifySignature( + address, + signature, + hashMsg, + rpc.baseURL + ); + return valid; + }, +}; diff --git a/shared/chains/index.ts b/shared/chains/index.ts new file mode 100644 index 000000000..e7be1941d --- /dev/null +++ b/shared/chains/index.ts @@ -0,0 +1,188 @@ +/** + * Barrel export for all chain data + */ + +export * from "./eip155"; +export * from "./solana"; +export * from "./cosmos"; +export * from "./polkadot"; +export * from "./near"; +export * from "./kadena"; +export * from "./multiversx"; +export * from "./stacks"; +export * from "./sui"; +export * from "./tezos"; +export * from "./ton"; +export * from "./tron"; +export * from "./bip122"; + +import { ChainData, ChainMetadata } from "../types"; +import { EIP155Metadata, EIP155ChainData, EIP155Utils } from "./eip155"; +import { SolanaChainData, SolanaMetadata, SolanaUtils } from "./solana"; +import { CosmosChainData, CosmosMetadata, CosmosUtils } from "./cosmos"; +import { PolkadotChainData, PolkadotMetadata, PolkadotUtils } from "./polkadot"; +import { NearChainData, NearMetadata, NearUtils } from "./near"; +import { KadenaChainData, KadenaMetadata } from "./kadena"; +import { + MultiversxChainData, + MultiversxMetadata, + MultiversxUtils, +} from "./multiversx"; +import { StacksChainData, StacksMetadata, StacksUtils } from "./stacks"; +import { SuiChainData, SuiMetadata, SuiUtils } from "./sui"; +import { TezosChainData, TezosMetadata, TezosUtils } from "./tezos"; +import { TonChainData, TonMetadata, TONUtils } from "./ton"; +import { TronChainData, TronMetadata, TronUtils } from "./tron"; +import { BtcChainData, BtcMetadata, BtcUtils } from "./bip122"; + +export const ALL_CHAINS = Object.freeze({ + eip155: { + data: EIP155ChainData, + metadata: EIP155Metadata, + utils: EIP155Utils, + }, + solana: { + data: SolanaChainData, + metadata: SolanaMetadata, + utils: SolanaUtils, + }, + cosmos: { + data: CosmosChainData, + metadata: CosmosMetadata, + utils: CosmosUtils, + }, + polkadot: { + data: PolkadotChainData, + metadata: PolkadotMetadata, + utils: PolkadotUtils, + }, + near: { + data: NearChainData, + metadata: NearMetadata, + utils: NearUtils, + }, + kadena: { + data: KadenaChainData, + metadata: KadenaMetadata, + }, + mvx: { + data: MultiversxChainData, + metadata: MultiversxMetadata, + utils: MultiversxUtils, + }, + stacks: { + data: StacksChainData, + metadata: StacksMetadata, + utils: StacksUtils, + }, + sui: { + data: SuiChainData, + metadata: SuiMetadata, + utils: SuiUtils, + }, + tezos: { + data: TezosChainData, + metadata: TezosMetadata, + utils: TezosUtils, + }, + ton: { + data: TonChainData, + metadata: TonMetadata, + utils: TONUtils, + }, + tron: { + data: TronChainData, + metadata: TronMetadata, + utils: TronUtils, + }, + bip122: { + data: BtcChainData, + metadata: BtcMetadata, + utils: BtcUtils, + }, +}); + +/** + * Unified getChainMetadata function that handles all chains + */ +export function getChainMetadata(chainId: string): ChainMetadata { + const [namespace, reference] = chainId.split(":"); + + let metadata: ChainMetadata | undefined = + ALL_CHAINS[namespace as keyof typeof ALL_CHAINS]?.metadata?.[reference]; + if (typeof metadata === "undefined") { + throw new Error(`No chain metadata found for chainId: ${chainId}`); + } + + return metadata; +} + +function getMainnetChains(): string[] { + const mainnetChains: string[] = []; + try { + Object.values(ALL_CHAINS).forEach((namespace) => { + if (namespace?.data) { + Object.values(namespace.data).forEach((chain) => { + if ( + chain && + typeof chain === "object" && + chain.testnet === false && + chain.id + ) { + const chainId = String(chain.id); + if (chainId) { + mainnetChains.push(chainId); + } + } + }); + } + }); + } catch (error) { + console.error("Error getting mainnet chains:", error); + } + console.log("mainnetChains", mainnetChains); + return mainnetChains; +} + +function getTestnetChains(): string[] { + const testnetChains: string[] = []; + try { + Object.values(ALL_CHAINS).forEach((namespace) => { + if (namespace?.data) { + Object.values(namespace.data).forEach((chain) => { + if ( + chain && + typeof chain === "object" && + chain.testnet === true && + chain.id + ) { + const chainId = String(chain.id); + if (chainId) { + testnetChains.push(chainId); + } + } + }); + } + }); + } catch (error) { + console.error("Error getting testnet chains:", error); + } + console.log("testnetChains", testnetChains); + return testnetChains; +} + +// Create arrays explicitly to avoid webpack transpilation issues +const _mainnetChains = getMainnetChains(); +const _testnetChains = getTestnetChains(); + +// Create new arrays explicitly to ensure webpack doesn't optimize them incorrectly +export const DEFAULT_MAINNET_CHAINS: readonly string[] = Object.freeze([ + ..._mainnetChains, +]); +export const DEFAULT_TESTNET_CHAINS: readonly string[] = Object.freeze([ + ..._testnetChains, +]); +export const DEFAULT_CHAINS: readonly string[] = Object.freeze([ + ..._mainnetChains, + ..._testnetChains, +]); diff --git a/shared/chains/kadena.ts b/shared/chains/kadena.ts new file mode 100644 index 000000000..35021e573 --- /dev/null +++ b/shared/chains/kadena.ts @@ -0,0 +1,41 @@ +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const KadenaMetadata: NamespaceMetadata = { + mainnet01: { + logo: "/assets/kadena.png", + rgb: "237, 9, 143", + }, + testnet04: { + logo: "/assets/kadena.png", + rgb: "237, 9, 143", + }, +}; + +// TODO: add `kadena` namespace to `caip-api` package to avoid manual specification here. +export const KadenaChainData: ChainsMap = { + mainnet01: { + name: "Kadena", + id: "kadena:mainnet01", + rpc: ["https://api.chainweb.com"], + slip44: 626, + testnet: false, + }, + testnet04: { + name: "Kadena Testnet", + id: "kadena:testnet04", + rpc: ["https://api.chainweb.com"], + slip44: 626, + testnet: true, + }, +}; + +export const DEFAULT_KADENA_METHODS = { + KADENA_GET_ACCOUNTS: "kadena_getAccounts_v1", + KADENA_SIGN: "kadena_sign_v1", + KADENA_QUICKSIGN: "kadena_quicksign_v1", +} as const; + +export const DEFAULT_KADENA_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; diff --git a/shared/chains/multiversx.ts b/shared/chains/multiversx.ts new file mode 100644 index 000000000..a31c2326a --- /dev/null +++ b/shared/chains/multiversx.ts @@ -0,0 +1,69 @@ +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const MultiversxChainData: ChainsMap = { + "1": { + id: "mvx:1", + name: "MultiversX Mainnet", + rpc: ["https://api.multiversx.com"], + slip44: 508, + testnet: false, + }, + D: { + id: "mvx:D", + name: "MultiversX Devnet", + rpc: ["https://devnet-api.multiversx.com"], + slip44: 508, + testnet: true, + }, + // Keep only one Test Chain visible + // T: { + // id: "mvx:T", + // name: "MultiversX Testnet", + // rpc: ["https://testnet-api.multiversx.com"], + // slip44: 508, + // testnet: true, + // }, +}; + +export const MultiversxMetadata: NamespaceMetadata = { + // MultiversX Mainnet + "1": { + logo: "/assets/multiversx_logo.svg", + rgb: "0, 0, 0", + }, + // MultiversX Testnet + T: { + logo: "/assets/multiversx_logo.svg", + rgb: "0, 0, 0", + }, + // MultiversX Devnet + D: { + logo: "/assets/multiversx_logo.svg", + rgb: "0, 0, 0", + }, +}; + +export const DEFAULT_MULTIVERSX_METHODS = { + MULTIVERSX_SIGN_TRANSACTION: "mvx_signTransaction", + MULTIVERSX_SIGN_TRANSACTIONS: "mvx_signTransactions", + MULTIVERSX_SIGN_MESSAGE: "mvx_signMessage", +} as const; + +export const DEFAULT_MULTIVERSX_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const MultiversxUtils = { + verifyMessage: async ({ + message, + signature, + address, + }: { + message: string; + signature: string; + address: string; + }) => { + return true; + }, +}; diff --git a/shared/chains/near.ts b/shared/chains/near.ts new file mode 100644 index 000000000..a4a7d5021 --- /dev/null +++ b/shared/chains/near.ts @@ -0,0 +1,52 @@ +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const NearMetadata: NamespaceMetadata = { + testnet: { + logo: "https://avatars.githubusercontent.com/u/7613128?s=200&v=4", + rgb: "27, 31, 53", + }, +}; + +export const NearChainData: ChainsMap = { + "near:testnet": { + name: "NEAR Testnet", + id: "near:testnet", + rpc: ["https://rpc.testnet.near.org"], + slip44: 397, + testnet: true, + }, +}; + +export type TNearChain = typeof NearChainData.testnet; + +export const NEAR_TEST_CHAINS = { ...NearChainData }; +export const NEAR_MAINNET_CHAINS = NearChainData; + +export const DEFAULT_NEAR_METHODS = { + NEAR_SIGN_IN: "near_signIn", + NEAR_SIGN_OUT: "near_signOut", + NEAR_GET_ACCOUNTS: "near_getAccounts", + NEAR_SIGN_AND_SEND_TRANSACTION: "near_signAndSendTransaction", + NEAR_SIGN_AND_SEND_TRANSACTIONS: "near_signAndSendTransactions", + NEAR_SIGN_TRANSACTION: "near_signTransaction", + NEAR_SIGN_TRANSACTIONS: "near_signTransactions", +} as const; + +export const DEFAULT_NEAR_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const NearUtils = { + verifyMessage: async ({ + message, + signature, + address, + }: { + message: string; + signature: string; + address: string; + }) => { + return true; + }, +}; diff --git a/shared/chains/polkadot.ts b/shared/chains/polkadot.ts new file mode 100644 index 000000000..a264d97ef --- /dev/null +++ b/shared/chains/polkadot.ts @@ -0,0 +1,57 @@ +import { signatureVerify, cryptoWaitReady } from "@polkadot/util-crypto"; +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const PolkadotChainData: ChainsMap = { + ["91b171bb158e2d3848fa23a9f1c25182"]: { + id: "polkadot:91b171bb158e2d3848fa23a9f1c25182", + name: "Polkadot Mainnet", + rpc: ["wss://rpc.polkadot.io"], + slip44: 0, + testnet: false, + }, + ["e143f23803ac50e8f6f8e62695d1ce9e"]: { + id: "polkadot:e143f23803ac50e8f6f8e62695d1ce9e", + name: "Polkadot Testnet (Westend)", + rpc: ["wss://westend-rpc.polkadot.io"], + slip44: 0, + testnet: false, + }, +}; + +export const PolkadotMetadata: NamespaceMetadata = { + // eslint-disable-next-line no-useless-computed-key + ["91b171bb158e2d3848fa23a9f1c25182"]: { + logo: "/assets/polkadot.svg", + rgb: "230, 1, 122", + }, + ["e143f23803ac50e8f6f8e62695d1ce9e"]: { + logo: "/assets/westend-logo.svg", + rgb: "218, 104, 167", + }, +}; + +export const DEFAULT_POLKADOT_METHODS = { + POLKADOT_SIGN_TRANSACTION: "polkadot_signTransaction", + POLKADOT_SIGN_MESSAGE: "polkadot_signMessage", +} as const; + +export const DEFAULT_POLKADOT_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const PolkadotUtils = { + verifyMessage: async ({ + message, + signature, + address, + }: { + message: string; + signature: string; + address: string; + }) => { + await cryptoWaitReady(); + const result = signatureVerify(message, signature, address); + return result.isValid; + }, +}; diff --git a/shared/chains/solana.ts b/shared/chains/solana.ts new file mode 100644 index 000000000..300bcb9cd --- /dev/null +++ b/shared/chains/solana.ts @@ -0,0 +1,136 @@ +import { PublicKey } from "@solana/web3.js"; +import { verifyMessageSignature } from "solana-wallet"; +import bs58 from "bs58"; + +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const SolanaChainData: ChainsMap = { + "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": { + id: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + name: "Solana Mainnet", + rpc: [ + "https://api.mainnet-beta.solana.com", + "https://solana-api.projectserum.com", + ], + slip44: 501, + testnet: false, + }, + EtWTRABZaYq6iMfeYKouRu166VU2xqa1: { + id: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + name: "Solana Devnet", + rpc: ["https://api.devnet.solana.com"], + slip44: 501, + testnet: true, + }, + "4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z": { + id: "solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z", + name: "Solana Testnet", + rpc: ["https://api.testnet.solana.com"], + slip44: 501, + testnet: true, + }, +}; + +export const SolanaMetadata: NamespaceMetadata = { + // Solana Mainnet + "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": { + logo: "/assets/solana_logo.png", + rgb: "0, 0, 0", + }, + // Solana Devnet + EtWTRABZaYq6iMfeYKouRu166VU2xqa1: { + logo: "/assets/solana_logo.png", + rgb: "0, 0, 0", + }, + // Solana Testnet + "4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z": { + logo: "/assets/solana_logo.png", + rgb: "0, 0, 0", + }, +}; + +// Wallet-specific data structures +export type TSolanaChain = keyof typeof SOLANA_MAINNET_CHAINS; + +export const SOLANA_MAINNET_CHAINS = { + "solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ": { + chainId: "4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ", + name: "Solana (Legacy)", + logo: "/chain-logos/solana-5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp.png", + rgb: "30, 240, 166", + rpc: "", + namespace: "solana", + }, + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": { + chainId: "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + name: "Solana", + logo: "/chain-logos/solana-5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp.png", + rgb: "30, 240, 166", + rpc: "https://api.mainnet-beta.solana.com", + namespace: "solana", + }, +} as const; + +export const SOLANA_TEST_CHAINS = { + "solana:8E9rvCKLFQia2Y35HXjjpWzj8weVo44K": { + chainId: "8E9rvCKLFQia2Y35HXjjpWzj8weVo44K", + name: "Solana Devnet (Legacy)", + logo: "/chain-logos/solana-5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp.png", + rgb: "30, 240, 166", + rpc: "", + namespace: "solana", + }, + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1": { + chainId: "EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + name: "Solana Devnet", + logo: "/chain-logos/solana-5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp.png", + rgb: "30, 240, 166", + rpc: "https://api.devnet.solana.com", + namespace: "solana", + }, + "solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z": { + chainId: "4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z", + name: "Solana Testnet", + logo: "/chain-logos/solana-5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp.png", + rgb: "30, 240, 166", + rpc: "https://api.testnet.solana.com", + namespace: "solana", + }, +} as const; + +export const SOLANA_CHAINS = { + ...SOLANA_MAINNET_CHAINS, + ...SOLANA_TEST_CHAINS, +}; + +export const DEFAULT_SOLANA_METHODS = { + SOL_SIGN_TRANSACTION: "solana_signTransaction", + SOL_SIGN_MESSAGE: "solana_signMessage", + SOL_SIGN_AND_SEND_TRANSACTION: "solana_signAndSendTransaction", + SOL_SIGN_ALL_TRANSACTIONS: "solana_signAllTransactions", +} as const; + +export const DEFAULT_SOLANA_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const SolanaUtils = { + verifyMessage: async ({ + message, + signature, + address, + }: { + message: string; + signature: string; + address: string; + }) => { + const senderPublicKey = new PublicKey(address); + const valid = verifyMessageSignature( + senderPublicKey.toBase58(), + signature, + bs58.encode(new Uint8Array(Buffer.from(message))) + ); + return valid; + }, +}; diff --git a/shared/chains/stacks.ts b/shared/chains/stacks.ts new file mode 100644 index 000000000..038655e08 --- /dev/null +++ b/shared/chains/stacks.ts @@ -0,0 +1,110 @@ +import { + getAddressFromPublicKey, + publicKeyFromSignatureRsv, +} from "@stacks/transactions"; +import { sha256 } from "@noble/hashes/sha2"; +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const StacksChainData: ChainsMap = { + "1": { + id: "stacks:1", + name: "Stacks Mainnet", + rpc: ["https://stacks-node-api.mainnet.stacks.co"], + slip44: 5757, + testnet: false, + }, + "2147483648": { + id: "stacks:2147483648", + name: "Stacks Testnet", + rpc: ["https://stacks-node-api.testnet.stacks.co"], + slip44: 5757, + testnet: true, + }, +}; + +export const StacksMetadata: NamespaceMetadata = { + "1": { + logo: "/assets/stacks.png", + rgb: "88, 86, 214", + }, + "2147483648": { + logo: "/assets/stacks.png", + rgb: "88, 86, 214", + }, +}; + +// Wallet-specific data structures +export const STACKS_NAMESPACE = "stacks"; + +export const STACKS_MAINNET_ID = "1"; +export const STACKS_TESTNET_ID = "2147483648"; +export const STACKS_MAINNET_CAIP2 = `${STACKS_NAMESPACE}:${STACKS_MAINNET_ID}`; +export const STACKS_TESTNET_CAIP2 = `${STACKS_NAMESPACE}:${STACKS_TESTNET_ID}`; + +export type IStacksChainId = + | typeof STACKS_MAINNET_CAIP2 + | typeof STACKS_TESTNET_CAIP2; + +export const STACKS_MAINNET = { + [STACKS_MAINNET_CAIP2]: { + chainId: STACKS_MAINNET_ID, + name: "Stacks Mainnet", + logo: "/chain-logos/stacks.png", + rgb: "107, 111, 147", + rpc: "", + coinType: "0", + caip2: STACKS_MAINNET_CAIP2 as IStacksChainId, + namespace: STACKS_NAMESPACE, + }, +}; + +export const STACKS_TESTNET = { + [STACKS_TESTNET_CAIP2]: { + chainId: STACKS_TESTNET_ID, + name: "Stacks Testnet", + logo: "/chain-logos/stacks.png", + rgb: "107, 111, 147", + rpc: "", + coinType: "1", + caip2: STACKS_TESTNET_CAIP2 as IStacksChainId, + namespace: STACKS_NAMESPACE, + }, +}; + +export const STACKS_CHAINS = { ...STACKS_MAINNET, ...STACKS_TESTNET } as Record< + IStacksChainId, + (typeof STACKS_MAINNET)[typeof STACKS_MAINNET_CAIP2] & + (typeof STACKS_TESTNET)[typeof STACKS_TESTNET_CAIP2] +>; + +export const DEFAULT_STACKS_METHODS = { + STACKS_SEND_TRANSFER: "stx_transferStx", + STACKS_SIGN_MESSAGE: "stx_signMessage", +} as const; + +export const DEFAULT_STACKS_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const StacksUtils = { + verifyMessage: async ({ + message, + signature, + address, + chainId, + }: { + message: string; + signature: string; + address: string; + chainId: string; + }) => { + const network = + chainId === "stacks:1" || chainId === "1" ? "mainnet" : "testnet"; + const hash = Buffer.from(sha256(message)).toString("hex"); + const pubKey = publicKeyFromSignatureRsv(hash, signature); + + const valid = getAddressFromPublicKey(pubKey, network) === address; + return valid; + }, +}; diff --git a/shared/chains/sui.ts b/shared/chains/sui.ts new file mode 100644 index 000000000..09ad7d18c --- /dev/null +++ b/shared/chains/sui.ts @@ -0,0 +1,80 @@ +import { + verifyPersonalMessageSignature, + verifyTransactionSignature, +} from "@mysten/sui/verify"; +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const SUI_MAINNET = "mainnet"; +export const SUI_TESTNET = "testnet"; +export const SUI_DEVNET = "devnet"; + +export const SuiChainData: ChainsMap = { + [SUI_MAINNET]: { + id: `sui:${SUI_MAINNET}`, + name: "SUI Mainnet", + rpc: [], + slip44: 0, + testnet: false, + }, + [SUI_TESTNET]: { + id: `sui:${SUI_TESTNET}`, + name: "SUI Testnet", + rpc: [], + slip44: 0, + testnet: true, + }, + [SUI_DEVNET]: { + id: `sui:${SUI_DEVNET}`, + name: "SUI Devnet", + rpc: [], + slip44: 0, + testnet: true, + }, +}; + +export const SuiMetadata: NamespaceMetadata = { + [SUI_MAINNET]: { + logo: "/assets/sui.png", + rgb: "6, 135, 245", + }, + [SUI_TESTNET]: { + logo: "/assets/sui.png", + rgb: "6, 135, 245", + }, + [SUI_DEVNET]: { + logo: "/assets/sui.png", + rgb: "6, 135, 245", + }, +}; + +export const DEFAULT_SUI_METHODS = { + SUI_SIGN_TRANSACTION: "sui_signTransaction", + SUI_SIGN_AND_EXECUTE_TRANSACTION: "sui_signAndExecuteTransaction", + SUI_SIGN_PERSONAL_MESSAGE: "sui_signPersonalMessage", +} as const; + +export const DEFAULT_SUI_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const SuiUtils = { + verifyMessage: async ({ + message, + signature, + address, + }: { + message: string; + signature: string; + address: string; + }) => { + const derivedPublicKey = await verifyPersonalMessageSignature( + new TextEncoder().encode(message), + signature, + { address } + ); + return ( + derivedPublicKey.toSuiAddress().toLowerCase() === address.toLowerCase() + ); + }, +}; diff --git a/shared/chains/tezos.ts b/shared/chains/tezos.ts new file mode 100644 index 000000000..7cba153e7 --- /dev/null +++ b/shared/chains/tezos.ts @@ -0,0 +1,54 @@ +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const TezosMetadata: NamespaceMetadata = { + mainnet: { + logo: "/assets/tezos.svg", + rgb: "44, 125, 247", + }, + testnet: { + logo: "/assets/tezos.svg", + rgb: "44, 125, 247", + }, +}; + +export const TezosChainData: ChainsMap = { + mainnet: { + name: "Tezos", + id: "tezos:mainnet", + rpc: ["https://mainnet.api.tez.ie"], + slip44: 1729, + testnet: false, + }, + testnet: { + name: "Tezos Testnet", + id: "tezos:testnet", + rpc: ["https://ghostnet.ecadinfra.com"], + slip44: 1729, + testnet: true, + }, +}; + +export const DEFAULT_TEZOS_METHODS = { + TEZOS_GET_ACCOUNTS: "tezos_getAccounts", + TEZOS_SEND: "tezos_send", + TEZOS_SIGN: "tezos_sign", +} as const; + +export const DEFAULT_TEZOS_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const TezosUtils = { + verifyMessage: async ({ + message, + signature, + address, + }: { + message: string; + signature: string; + address: string; + }) => { + return true; + }, +}; diff --git a/shared/chains/ton.ts b/shared/chains/ton.ts new file mode 100644 index 000000000..e01bc8e79 --- /dev/null +++ b/shared/chains/ton.ts @@ -0,0 +1,94 @@ +import { signVerify } from "@ton/crypto"; +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const TonChainData: ChainsMap = { + "-239": { + id: "ton:-239", + name: "TON Mainnet", + rpc: [], + slip44: 607, + testnet: false, + }, + "-3": { + id: "ton:-3", + name: "TON Testnet", + rpc: [], + slip44: 607, + testnet: true, + }, +}; + +export const TonMetadata: NamespaceMetadata = { + "-239": { + logo: "/assets/ton.png", + rgb: "0, 153, 255", + }, + "-3": { + logo: "/assets/ton.png", + rgb: "0, 153, 255", + }, +}; + +// Wallet-specific data structures +export type TTonChain = + | keyof typeof TON_MAINNET_CHAINS + | keyof typeof TON_TEST_CHAINS; + +export const tonCenterRpc = (testnet: boolean) => { + return testnet + ? "https://ton-testnet.api.onfinality.io/public" + : "https://toncenter.com/api/v2/jsonRPC"; +}; + +export const TON_MAINNET_CHAINS = { + "ton:-239": { + chainId: "-239", + name: "TON", + logo: "/chain-logos/ton.png", + rgb: "0, 136, 204", + rpc: tonCenterRpc(false), + namespace: "ton", + }, +} as const; + +export const TON_TEST_CHAINS = { + "ton:-3": { + chainId: "-3", + name: "TON Testnet", + logo: "/chain-logos/ton.png", + rgb: "0, 136, 204", + rpc: tonCenterRpc(true), + namespace: "ton", + }, +} as const; + +export const TON_CHAINS = { ...TON_MAINNET_CHAINS, ...TON_TEST_CHAINS }; + +export const DEFAULT_TON_METHODS = { + TON_SEND_MESSAGE: "ton_sendMessage", + TON_SIGN_DATA: "ton_signData", +} as const; + +export const DEFAULT_TON_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const TONUtils = { + verifyMessage: async ({ + message, + signature, + publicKey, + }: { + message: string; + signature: string; + publicKey: string; + }) => { + const valid = await signVerify( + Buffer.from(message, "utf-8"), + Buffer.from(signature, "base64"), + Buffer.from(publicKey, "base64") + ); + return valid; + }, +}; diff --git a/shared/chains/tron.ts b/shared/chains/tron.ts new file mode 100644 index 000000000..406f2b635 --- /dev/null +++ b/shared/chains/tron.ts @@ -0,0 +1,63 @@ +import { getTronWeb } from "../helpers"; +import { NamespaceMetadata, ChainsMap } from "../types"; + +export const TronChainData: ChainsMap = { + "0x2b6653dc": { + id: "tron:0x2b6653dc", + name: "Tron Mainnet", + rpc: [], + slip44: 195, + testnet: false, + }, + "0xcd8690dc": { + id: "tron:0xcd8690dc", + name: "Tron Testnet", + rpc: [], + slip44: 195, + testnet: true, + }, +}; + +export const TronMetadata: NamespaceMetadata = { + // Tron Mainnet + "0x2b6653dc": { + logo: "/assets/tron.png", + rgb: "183, 62, 49", + }, + // Tron TestNet + "0xcd8690dc": { + logo: "assets/tron.png", + rgb: "183, 62, 49", + }, +}; + +export const DEFAULT_TRON_METHODS = { + TRON_SIGN_TRANSACTION: "tron_signTransaction", + TRON_SIGN_MESSAGE: "tron_signMessage", +} as const; + +export const DEFAULT_TRON_EVENTS = { + CHAIN_CHANGED: "chainChanged", + ACCOUNTS_CHANGED: "accountsChanged", +} as const; + +export const TronUtils = { + verifyMessage: async ({ + message, + signature, + address, + chainId, + }: { + message: string; + signature: string; + address: string; + chainId: string; + }) => { + const tronWeb = getTronWeb(chainId); + if (!tronWeb) { + throw new Error("Tron web not found for chainId: " + chainId); + } + const valid = await tronWeb.trx.verifyMessageV2(message, signature); + return valid === address; + }, +}; diff --git a/shared/constants/default.ts b/shared/constants/default.ts new file mode 100644 index 000000000..9f20e910c --- /dev/null +++ b/shared/constants/default.ts @@ -0,0 +1,76 @@ +import { getAppMetadata } from "@walletconnect/utils"; + +if (!process.env.NEXT_PUBLIC_PROJECT_ID) + throw new Error("`NEXT_PUBLIC_PROJECT_ID` env variable is missing."); + +export const DEFAULT_PROJECT_ID = process.env.NEXT_PUBLIC_PROJECT_ID; +export const DEFAULT_RELAY_URL = process.env.NEXT_PUBLIC_RELAY_URL; + +export const DEFAULT_LOGGER = "debug"; + +export const DEFAULT_APP_METADATA = { + name: "React App", + description: "React App for WalletConnect", + url: "https://walletconnect.com/", + icons: ["https://avatars.githubusercontent.com/u/37784886"], + verifyUrl: "https://verify.walletconnect.com", +}; + +/** + * EIP5792 + */ +export const DEFAULT_EIP5792_METHODS = { + WALLET_GET_CAPABILITIES: "wallet_getCapabilities", + WALLET_SEND_CALLS: "wallet_sendCalls", + WALLET_GET_CALLS_STATUS: "wallet_getCallsStatus", +} as const; + +/** + * EIP7715 + */ +export const DEFAULT_EIP7715_METHODS = { + WALLET_GRANT_PERMISSIONS: "wallet_grantPermissions", +} as const; + +export const DEFAULT_GITHUB_REPO_URL = + "https://github.com/WalletConnect/web-examples/tree/main/dapps/react-dapp-v2"; + +type RelayerType = { + value: string | undefined; + label: string; +}; + +export const REGIONALIZED_RELAYER_ENDPOINTS: RelayerType[] = [ + { + value: DEFAULT_RELAY_URL, + label: "Default", + }, + + { + value: "wss://us-east-1.relay.walletconnect.com", + label: "US", + }, + { + value: "wss://eu-central-1.relay.walletconnect.com", + label: "EU", + }, + { + value: "wss://ap-southeast-1.relay.walletconnect.com", + label: "Asia Pacific", + }, +]; + +export const ORIGIN_OPTIONS = [ + { + value: getAppMetadata().url, + label: "VALID", + }, + { + value: "https://invalid.origin", + label: "INVALID", + }, + { + value: "unknown", + label: "UNKNOWN", + }, +]; diff --git a/shared/constants/index.ts b/shared/constants/index.ts new file mode 100644 index 000000000..f348fd43f --- /dev/null +++ b/shared/constants/index.ts @@ -0,0 +1 @@ +export * from "./default"; diff --git a/advanced/dapps/react-dapp-v2/src/helpers/api.ts b/shared/helpers/api.ts similarity index 98% rename from advanced/dapps/react-dapp-v2/src/helpers/api.ts rename to shared/helpers/api.ts index b7891782a..1fd4b10b7 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/api.ts +++ b/shared/helpers/api.ts @@ -1,7 +1,7 @@ import axios, { AxiosInstance } from "axios"; import { apiGetKadenaAccountBalance } from "./kadena"; -import { AssetData } from "./types"; +import { AssetData } from "../types"; import { PactCommand } from "@kadena/client"; import { apiGetBip122AccountBalance } from "./bip122"; import { getSuiClient } from "./sui"; @@ -170,6 +170,8 @@ export async function apiGetAccountBalance( return apiGetTronAccountBalance(address, networkId); } + // todo: add other chains here + if (namespace !== "eip155") { return { balance: "", symbol: "", name: "" }; } diff --git a/shared/helpers/bip122.ts b/shared/helpers/bip122.ts new file mode 100644 index 000000000..1075b0ad3 --- /dev/null +++ b/shared/helpers/bip122.ts @@ -0,0 +1,89 @@ +import { schnorr } from "@noble/curves/secp256k1"; +import * as bitcoin from "bitcoinjs-lib"; +import BitcoinMessage from "bitcoinjs-message"; +import { convertHexToBase64 } from "./formatting"; +import { IUTXO } from "../types"; +import { BIP122_TESTNET } from "../chains/bip122"; + +export async function apiGetBip122AccountBalance( + address: string, + chainId: string +) { + const utxo = await apiGetAddressUtxos(address, chainId); + const balanceInSatoshis = getAvailableBalanceFromUtxos(utxo); + const balanceInBtc = balanceInSatoshis * 0.00000001; + return { balance: balanceInBtc.toString(), symbol: "BTC", name: "BTC" }; +} + +export async function apiGetAddressUtxos(address: string, chainId: string) { + const isTestnet = chainId.includes(BIP122_TESTNET); + return await ( + await fetch( + `https://mempool.space${ + isTestnet ? "/testnet" : "" + }/api/address/${address}/utxo` + ) + ).json(); +} + +export function getAvailableBalanceFromUtxos(utxos: IUTXO[]) { + if (!utxos || !utxos.length) { + return 0; + } + return utxos.reduce((acc, { value }) => acc + value, 0); +} + +export function calculateChange( + utxos: IUTXO[], + amount: number, + feeRate: number +): number { + const inputSum = utxos.reduce((sum, utxo) => sum + utxo.value, 0); // Sum of all UTXO values + const estimatedSize = 10 + 148 * utxos.length + 34 * 2; // Rough estimate of transaction size + const fee = estimatedSize * feeRate; // Transaction fee + const change = inputSum - amount - fee; // Calculate change + return change; +} + +export async function isValidBip122Signature( + address: string, + signature: string, + message: string +) { + // if taproot address + if (address.startsWith("bc1p") || address.startsWith("tb1p")) { + // Convert the Ordinals address (Taproot) to the internal public key + const decoded = bitcoin.address.fromBech32(address); + if (decoded.version !== 1 || decoded.data.length !== 32) { + throw new Error("Invalid Taproot address"); + } + + const publicKey = decoded.data; // The 32-byte internal public key (X coordinate of pubkey) + + // Hash the message using SHA256 (standard Bitcoin message hashing) + const messageHash = bitcoin.crypto.sha256(Buffer.from(message)); + + // Verify the Schnorr signature using tiny-secp256k1 + return schnorr.verify( + new Uint8Array(Buffer.from(signature, "hex")), + new Uint8Array(messageHash), + new Uint8Array(publicKey) + ); + } + + return BitcoinMessage.verify( + message, + address, + convertHexToBase64(signature), + undefined, + true + ); +} + +export function isOrdinalAddress(address: string) { + return address.startsWith("tb1p"); +} + +export function isBip122Testnet(chainId: string) { + return chainId.includes(BIP122_TESTNET); +} diff --git a/shared/helpers/crypto.ts b/shared/helpers/crypto.ts new file mode 100644 index 000000000..350d6ef8e --- /dev/null +++ b/shared/helpers/crypto.ts @@ -0,0 +1,130 @@ +/** + * Cryptographic utilities for signing and verification + * Consolidated from react-dapp-v2 + */ + +import * as encoding from "@walletconnect/encoding"; +import { TypedDataUtils } from "eth-sig-util"; +import * as ethUtil from "ethereumjs-util"; +import { providers } from "ethers"; +import { eip1271 } from "./eip1271"; + +/** + * Encode a personal message for signing + */ +export function encodePersonalMessage(msg: string): string { + const data = encoding.utf8ToBuffer(msg); + const buf = Buffer.concat([ + new Uint8Array( + Buffer.from( + "\u0019Ethereum Signed Message:\n" + data.length.toString(), + "utf8" + ) + ), + new Uint8Array(data), + ]); + return ethUtil.bufferToHex(buf); +} + +/** + * Hash a personal message + */ +export function hashPersonalMessage(msg: string): string { + const data = encodePersonalMessage(msg); + const buf = ethUtil.toBuffer(data); + const hash = ethUtil.keccak256(buf); + return ethUtil.bufferToHex(hash); +} + +/** + * Encode a typed data message (EIP-712) + */ +export function encodeTypedDataMessage(msg: string): string { + const data = TypedDataUtils.sanitizeData(JSON.parse(msg)); + const buf = Buffer.concat([ + new Uint8Array(Buffer.from("1901", "hex")), + new Uint8Array( + TypedDataUtils.hashStruct("EIP712Domain", data.domain, data.types) + ), + new Uint8Array( + TypedDataUtils.hashStruct( + data.primaryType as string, + data.message, + data.types + ) + ), + ]); + return ethUtil.bufferToHex(buf); +} + +/** + * Hash a typed data message (EIP-712) + */ +export function hashTypedDataMessage(msg: string): string { + const data = encodeTypedDataMessage(msg); + const buf = ethUtil.toBuffer(data); + const hash = ethUtil.keccak256(buf); + return ethUtil.bufferToHex(hash); +} + +/** + * Recover the address from a signature and hash + */ +export function recoverAddress(sig: string, hash: string): string { + const params = ethUtil.fromRpcSig(sig); + const result = ethUtil.ecrecover( + ethUtil.toBuffer(hash), + params.v, + params.r, + params.s + ); + const signer = ethUtil.bufferToHex(ethUtil.publicToAddress(result)); + return signer; +} + +/** + * Recover the signer address from a personal signature + */ +export function recoverPersonalSignature(sig: string, msg: string): string { + const hash = hashPersonalMessage(msg); + const signer = recoverAddress(sig, hash); + return signer; +} + +/** + * Recover the signer address from a typed data signature (EIP-712) + */ +export function recoverTypedMessage(sig: string, msg: string): string { + const hash = hashTypedDataMessage(msg); + const signer = recoverAddress(sig, hash); + return signer; +} + +/** + * Verify a signature against an address + * Handles both EOA (Externally Owned Accounts) and smart contract wallets (EIP-1271) + */ +export async function verifySignature( + address: string, + sig: string, + hash: string, + rpcUrl: string +): Promise { + const provider = new providers.JsonRpcProvider(rpcUrl); + const bytecode = await provider.getCode(address); + + // Check if it's a smart contract + if ( + !bytecode || + bytecode === "0x" || + bytecode === "0x0" || + bytecode === "0x00" + ) { + // EOA verification + const signer = recoverAddress(sig, hash); + return signer.toLowerCase() === address.toLowerCase(); + } else { + // Smart contract verification (EIP-1271) + return eip1271.isValidSignature(address, sig, hash, provider); + } +} diff --git a/advanced/dapps/react-dapp-v2/src/helpers/eip1271.ts b/shared/helpers/eip1271.ts similarity index 92% rename from advanced/dapps/react-dapp-v2/src/helpers/eip1271.ts rename to shared/helpers/eip1271.ts index 20bf82b7b..0bbf30076 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/eip1271.ts +++ b/shared/helpers/eip1271.ts @@ -1,3 +1,8 @@ +/** + * EIP-1271 Smart Contract Signature Verification + * From react-dapp-v2 + */ + import { Contract, providers, utils } from "ethers"; const spec = { diff --git a/advanced/dapps/react-dapp-v2/src/helpers/eip712.ts b/shared/helpers/eip712.ts similarity index 93% rename from advanced/dapps/react-dapp-v2/src/helpers/eip712.ts rename to shared/helpers/eip712.ts index 9dcf66ec2..0d6590413 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/eip712.ts +++ b/shared/helpers/eip712.ts @@ -1,3 +1,8 @@ +/** + * EIP-712 Typed Data utilities + * From react-dapp-v2 + */ + // From spec: https://eips.ethereum.org/EIPS/eip-712 const example = { types: { diff --git a/shared/helpers/formatting.ts b/shared/helpers/formatting.ts new file mode 100644 index 000000000..7709332c4 --- /dev/null +++ b/shared/helpers/formatting.ts @@ -0,0 +1,160 @@ +/** + * Formatting utilities for text, addresses, and data + * Consolidated from react-dapp-v2 + */ + +import * as encoding from "@walletconnect/encoding"; +import { BigNumber, BigNumberish, utils } from "ethers"; + +/** + * Capitalize first letter of each word + */ +export function capitalize(string: string): string { + return string + .split(" ") + .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) + .join(" "); +} + +/** + * Ellipse text to a maximum length + */ +export function ellipseText(text = "", maxLength = 9999): string { + if (text.length <= maxLength) { + return text; + } + const _maxLength = maxLength - 3; + let ellipse = false; + let currentLength = 0; + const result = + text + .split(" ") + .filter((word) => { + currentLength += word.length; + if (ellipse || currentLength >= _maxLength) { + ellipse = true; + return false; + } else { + return true; + } + }) + .join(" ") + "..."; + return result; +} + +/** + * Ellipse an address for display + */ +export function ellipseAddress(address = "", width = 10): string { + return `${address.slice(0, width)}...${address.slice(-width)}`; +} + +/** + * Convert hex to number + */ +export function convertHexToNumber(hex: string) { + try { + return encoding.hexToNumber(hex); + } catch (e) { + return hex; + } +} + +/** + * Convert hex to UTF-8 string + */ +export function convertHexToUtf8(hex: string) { + try { + return encoding.hexToUtf8(hex); + } catch (e) { + return hex; + } +} + +/** + * Convert hex to Base64 + */ +export function convertHexToBase64(hex: string) { + try { + return encoding.hexToBuffer(hex).toString("base64"); + } catch (e) { + return hex; + } +} + +/** + * Sanitize decimal places + */ +export const sanitizeDecimals = (value: string, decimals = 18): string => { + const [integer, fractional] = value.split("."); + const _fractional = fractional + ? fractional.substring(0, decimals).replace(/0+$/gi, "") + : undefined; + return _fractional ? [integer, _fractional].join(".") : integer; +}; + +/** + * Convert amount to Wei/atomic units + */ +export const toWad = (amount: string, decimals = 18): BigNumber => { + return utils.parseUnits(sanitizeDecimals(amount, decimals), decimals); +}; + +/** + * Convert Wei/atomic units to human-readable format + */ +export const fromWad = (wad: BigNumberish, decimals = 18): string => { + try { + return sanitizeDecimals(utils.formatUnits(wad, decimals), decimals); + } catch (e) { + return wad?.toString(); + } +}; + +/** + * Check if running on mobile device + */ +export function isMobile(): boolean { + let mobile = false; + + function hasTouchEvent(): boolean { + try { + document.createEvent("TouchEvent"); + return true; + } catch (e) { + return false; + } + } + + function hasMobileUserAgent(): boolean { + if ( + /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test( + navigator.userAgent + ) || + /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test( + navigator.userAgent.substr(0, 4) + ) + ) { + return true; + } else if (hasTouchEvent()) { + return true; + } + return false; + } + + mobile = hasMobileUserAgent(); + + return mobile; +} + +/** + * Get data string for contract calls + */ +export function getDataString(func: string, arrVals: any[]): string { + let val = ""; + for (let i = 0; i < arrVals.length; i++) { + val += encoding.padLeft(arrVals[i], 64); + } + const data = func + val; + return data; +} diff --git a/shared/helpers/index.ts b/shared/helpers/index.ts new file mode 100644 index 000000000..7fa162359 --- /dev/null +++ b/shared/helpers/index.ts @@ -0,0 +1,20 @@ +/** + * Barrel export for all helper utilities + */ + +// Crypto and signing utilities +export * from "./crypto"; +export * from "./eip712"; +export * from "./eip1271"; +export * from "./formatting"; + +// Chain-specific helpers +export * from "./api"; +export * from "./bip122"; +export * from "./kadena"; +export * from "./solana"; +export * from "./sui"; +export * from "./ton"; +export * from "./tron"; +export * from "./tx"; +export * from "./namespaces"; diff --git a/shared/helpers/kadena.ts b/shared/helpers/kadena.ts new file mode 100644 index 000000000..6ff961f36 --- /dev/null +++ b/shared/helpers/kadena.ts @@ -0,0 +1,81 @@ +import { IPactCommand, PactCommand } from "@kadena/client"; + +export async function getKadenaChainAmount( + WCNetworkId: string +): Promise { + const ENDPOINT = WCNetworkId === "testnet04" ? "testnet." : ""; + + try { + const response = await fetch(`https://api.${ENDPOINT}chainweb.com/info`, { + mode: "cors", + }); + + const json = await response.json(); + return json.nodeNumberOfChains; + } catch (e) { + console.error("Error fetching Kadena chain info", e); + return 0; + } +} + +async function getKadenaBalanceForChain( + publicKey: string, + WCNetworkId: IPactCommand["networkId"], + kadenaChainID: IPactCommand["publicMeta"]["chainId"] +): Promise { + const ENDPOINT = WCNetworkId === "testnet04" ? "testnet." : ""; + const API_HOST = `https://api.${ENDPOINT}chainweb.com/chainweb/0.0/${WCNetworkId}/chain/${kadenaChainID}/pact`; + + // This request will fail if there is no on-chain activity for the given account yet + try { + const command = new PactCommand(); + command.code = `(coin.get-balance "k:${publicKey}")`; + command.setMeta( + { sender: `k:${publicKey}`, chainId: kadenaChainID }, + WCNetworkId + ); + const { result } = await command.local(API_HOST, { + preflight: false, + signatureVerification: false, + }); + + if (result.status !== "success") return 0; + + return result.data * 10e17; + } catch (e) { + return 0; + } +} + +const kadenaNumberOfChains: Record = { + mainnet01: 0, + testnet04: 0, +}; + +export async function apiGetKadenaAccountBalance( + publicKey: string, + WCNetworkId: IPactCommand["networkId"] +) { + if (!kadenaNumberOfChains[WCNetworkId]) { + kadenaNumberOfChains[WCNetworkId] = await getKadenaChainAmount(WCNetworkId); + } + + const chainBalances = await Promise.all( + Array.from(Array(kadenaNumberOfChains[WCNetworkId])).map( + async (_val, chainNumber) => + getKadenaBalanceForChain( + publicKey, + WCNetworkId, + chainNumber.toString() as IPactCommand["publicMeta"]["chainId"] + ) + ) + ); + + const totalBalance = chainBalances.reduce((acc, item) => acc + item, 0); + + return { + balance: totalBalance.toString(), + symbol: "KDA", + name: "KDA", + }; +} diff --git a/advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts b/shared/helpers/namespaces.ts similarity index 75% rename from advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts rename to shared/helpers/namespaces.ts index bf20ac89f..951193705 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts +++ b/shared/helpers/namespaces.ts @@ -3,7 +3,6 @@ import { DEFAULT_COSMOS_EVENTS, DEFAULT_COSMOS_METHODS, DEFAULT_EIP155_METHODS, - DEFAULT_EIP_155_EVENTS, DEFAULT_SOLANA_EVENTS, DEFAULT_SOLANA_METHODS, DEFAULT_POLKADOT_EVENTS, @@ -20,14 +19,14 @@ import { DEFAULT_TON_EVENTS, DEFAULT_TEZOS_METHODS, DEFAULT_TEZOS_EVENTS, - DEFAULT_OPTIONAL_METHODS, DEFAULT_BIP122_METHODS, DEFAULT_BIP122_EVENTS, DEFAULT_SUI_METHODS, DEFAULT_SUI_EVENTS, DEFAULT_STACKS_METHODS, DEFAULT_STACKS_EVENTS, -} from "../constants"; + DEFAULT_EIP155_EVENTS, +} from "../chains"; export const getNamespacesFromChains = (chains: string[]) => { const supportedNamespaces: string[] = []; @@ -41,7 +40,7 @@ export const getNamespacesFromChains = (chains: string[]) => { return supportedNamespaces; }; -export const getSupportedRequiredMethodsByNamespace = (namespace: string) => { +export const getSupportedOptionalMethodsByNamespace = (namespace: string) => { switch (namespace) { case "eip155": return Object.values(DEFAULT_EIP155_METHODS); @@ -76,31 +75,10 @@ export const getSupportedRequiredMethodsByNamespace = (namespace: string) => { } }; -export const getSupportedOptionalMethodsByNamespace = (namespace: string) => { - switch (namespace) { - case "eip155": - return Object.values(DEFAULT_OPTIONAL_METHODS); - case "cosmos": - case "solana": - case "polkadot": - case "near": - case "mvx": - case "tron": - case "tezos": - case "kadena": - case "bip122": - return []; - default: - throw new Error( - `No default optional methods for namespace: ${namespace}` - ); - } -}; - export const getSupportedEventsByNamespace = (namespace: string) => { switch (namespace) { case "eip155": - return Object.values(DEFAULT_EIP_155_EVENTS); + return Object.values(DEFAULT_EIP155_EVENTS); case "cosmos": return Object.values(DEFAULT_COSMOS_EVENTS); case "solana": @@ -130,24 +108,6 @@ export const getSupportedEventsByNamespace = (namespace: string) => { } }; -export const getRequiredNamespaces = ( - chains: string[] -): ProposalTypes.OptionalNamespaces => { - const selectedNamespaces = getNamespacesFromChains(chains); - console.log("selected required namespaces:", selectedNamespaces); - - return Object.fromEntries( - selectedNamespaces.map((namespace) => [ - namespace, - { - methods: getSupportedRequiredMethodsByNamespace(namespace), - chains: chains.filter((chain) => chain.startsWith(namespace)), - events: getSupportedEventsByNamespace(namespace) as any[], - }, - ]) - ); -}; - export const getOptionalNamespaces = ( chains: string[] ): ProposalTypes.OptionalNamespaces => { diff --git a/shared/helpers/solana.ts b/shared/helpers/solana.ts new file mode 100644 index 000000000..6204eedf9 --- /dev/null +++ b/shared/helpers/solana.ts @@ -0,0 +1,20 @@ +import { PublicKey } from "@solana/web3.js"; + +export function getPublicKeysFromAccounts(accounts: string[]) { + return ( + accounts + // Filter out any non-solana accounts. + .filter((account) => account.startsWith("solana:")) + // Create a map of Solana address -> publicKey. + .reduce((map: Record, account) => { + const address = account.split(":").pop(); + if (!address) { + throw new Error( + `Could not derive Solana address from CAIP account: ${account}` + ); + } + map[address] = new PublicKey(address); + return map; + }, {}) + ); +} diff --git a/shared/helpers/sui.ts b/shared/helpers/sui.ts new file mode 100644 index 000000000..31c6d446e --- /dev/null +++ b/shared/helpers/sui.ts @@ -0,0 +1,26 @@ +import { SuiClient } from "@mysten/sui/client"; + +// Cache clients +const clients = new Map(); + +export function getSuiClient(chainId: string): SuiClient { + if (clients.has(chainId)) { + return clients.get(chainId)!; + } + let client: SuiClient; + switch (chainId) { + case "sui:mainnet": + client = new SuiClient({ url: "https://fullnode.mainnet.sui.io/" }); + break; + case "sui:testnet": + client = new SuiClient({ url: "https://fullnode.testnet.sui.io/" }); + break; + case "sui:devnet": + client = new SuiClient({ url: "https://fullnode.devnet.sui.io/" }); + break; + default: + throw new Error(`Unknown chainId: ${chainId}`); + } + clients.set(chainId, client); + return client; +} diff --git a/shared/helpers/ton.ts b/shared/helpers/ton.ts new file mode 100644 index 000000000..d606bf948 --- /dev/null +++ b/shared/helpers/ton.ts @@ -0,0 +1,179 @@ +import { + Message, + beginCell, + storeMessage, + Cell, + loadMessage, + Address, +} from "@ton/core"; +import { TonClient, Transaction } from "@ton/ton"; + +let clients = new Map(); +function getTonClient(chainId: string) { + if (clients.has(chainId)) { + return clients.get(chainId)!; + } + const client = new TonClient({ + endpoint: chainId?.includes("-3") + ? "https://ton-testnet.api.onfinality.io/public" + : "https://toncenter.com/api/v2/jsonRPC", + }); + clients.set(chainId, client); + return client; +} + +export async function getTonTransactionHash({ + boc, + address, + chainId, +}: { + boc: string; + address: string; + chainId: string; +}) { + const client = getTonClient(chainId); + const decodedTransfer = Cell.fromBase64(boc); + + // Build external-in message + const message: Message = { + info: { + type: "external-in", + src: null, + dest: Address.parse(address), + importFee: BigInt(0), + }, + init: null, + body: decodedTransfer, + }; + + const externalMessageCell = beginCell() + .store(storeMessage(message, { forceRef: true })) + .endCell(); + // Wait until the transaction with matching normalized incoming message appears + const tx = await retry( + async () => { + const found = await getTransactionByInMessage( + externalMessageCell.toBoc().toString("base64"), + client + ); + if (!found) throw new Error("Tx not found yet"); + return found; + }, + { retries: 60, delay: 2000, progress: true, progressLabel: "findTx" } + ); + if (!tx) { + console.log("Transaction was not found"); + return ""; + } + const txHashHex = tx.hash().toString("hex"); + console.log("Transaction found:", txHashHex); + // Explorer link: + console.log( + "Transaction link: ", + `https://testnet.tonviewer.com/transaction/${txHashHex}` + ); + return txHashHex; +} + +export function getNormalizedExtMessageHash(message: Message) { + if (message.info.type !== "external-in") { + throw new Error(`Message must be "external-in", got ${message.info.type}`); + } + const info = { + ...message.info, + src: undefined, + importFee: BigInt(0), + }; + const normalizedMessage = { + ...message, + init: null, + info: info, + }; + return beginCell() + .store(storeMessage(normalizedMessage, { forceRef: true })) + .endCell() + .hash(); +} + +// Modified version of the retry function from the TON Connect example +async function retry( + fn: () => Promise, + options: { + retries: number; + delay: number; + progress?: boolean; + progressLabel?: string; + } +): Promise { + let lastError: Error | undefined; + let printedHeader = false; + let printedAnything = false; + for (let i = 0; i < options.retries; i++) { + if (options.progress) { + if (!printedHeader && options.progressLabel) { + console.log(`${options.progressLabel}: `); + printedHeader = true; + } + console.log("."); + printedAnything = true; + } + try { + const result = await fn(); + if (printedAnything) console.log("\n"); + return result; + } catch (e) { + if (e instanceof Error) lastError = e; + if (i < options.retries - 1) { + } + } + + await new Promise((resolve) => setTimeout(resolve, options.delay)); + } + if (printedAnything) console.log("\n"); + throw lastError; +} + +async function getTransactionByInMessage( + inMessageBoc: string, + client: TonClient +): Promise { + const inMessage = loadMessage(Cell.fromBase64(inMessageBoc).beginParse()); + if (inMessage.info.type !== "external-in") { + throw new Error( + `Message must be "external-in", got ${inMessage.info.type}` + ); + } + const account = inMessage.info.dest; + const targetInMessageHash = getNormalizedExtMessageHash(inMessage); + let lt: string | undefined = undefined; + let hash: string | undefined = undefined; + while (true) { + const transactions = await retry( + () => + client.getTransactions(account, { + hash, + lt, + limit: 10, + archival: true, + }), + { delay: 2000, retries: 3 } + ); + if (transactions.length === 0) { + return undefined; + } + for (const transaction of transactions) { + if (transaction.inMessage?.info.type !== "external-in") { + continue; + } + const inMessageHash = getNormalizedExtMessageHash(transaction.inMessage); + if ( + inMessageHash.toString("hex") === targetInMessageHash.toString("hex") + ) { + return transaction; + } + } + const last = transactions.at(-1)!; + lt = last.lt.toString(); + hash = last.hash().toString("base64"); + } +} diff --git a/shared/helpers/tron.ts b/shared/helpers/tron.ts new file mode 100644 index 000000000..520946399 --- /dev/null +++ b/shared/helpers/tron.ts @@ -0,0 +1,22 @@ +import { TronWeb } from "tronweb"; +let tronWebMainnet: TronWeb; +let tronWebTestnet: TronWeb; +export const getTronWeb = (network: string) => { + if (network === "0xcd8690dc" || network === "tron:0xcd8690dc") { + if (!tronWebTestnet) { + tronWebTestnet = new TronWeb({ + fullHost: "https://nile.trongrid.io/", + }); + } + return tronWebTestnet; + } + if (network === "0x2b6653dc" || network === "tron:0x2b6653dc") { + if (!tronWebMainnet) { + tronWebMainnet = new TronWeb({ + fullHost: "https://api.trongrid.io/", + }); + } + return tronWebMainnet; + } + return undefined; +}; diff --git a/shared/helpers/tx.ts b/shared/helpers/tx.ts new file mode 100644 index 000000000..c62af9b6c --- /dev/null +++ b/shared/helpers/tx.ts @@ -0,0 +1,73 @@ +import * as encoding from "@walletconnect/encoding"; + +import { apiGetAccountNonce, apiGetGasPrice } from "./api"; +import { parseEther } from "ethers/lib/utils"; +import { SendCallsParams } from "../types"; + +export async function formatTestTransaction(account: string) { + const [namespace, reference, address] = account.split(":"); + const chainId = `${namespace}:${reference}`; + + let _nonce; + try { + _nonce = await apiGetAccountNonce(address, chainId); + } catch (error) { + throw new Error( + `Failed to fetch nonce for address ${address} on chain ${chainId}` + ); + } + + const nonce = encoding.sanitizeHex(encoding.numberToHex(_nonce)); + + // gasPrice + const _gasPrice = await apiGetGasPrice(chainId); + const gasPrice = encoding.sanitizeHex(_gasPrice); + + // gasLimit + const _gasLimit = 21000; + const gasLimit = encoding.sanitizeHex(encoding.numberToHex(_gasLimit)); + + // value + const _value = 0; + const value = encoding.sanitizeHex(encoding.numberToHex(_value)); + + const tx = { + from: address, + to: address, + data: "0x", + nonce, + gasPrice, + gasLimit, + value, + }; + + return tx; +} + +export async function formatTestBatchCall(account: string) { + const [namespace, reference, address] = account.split(":"); + // preparing calldata for batch send + //sepolia pow faucet address + const receiverAddress = "0x6Cc9397c3B38739daCbfaA68EaD5F5D77Ba5F455"; + const amountToSend = parseEther("0.0001").toHexString(); + const calls = [ + { + to: receiverAddress as `0x${string}`, + data: "0x" as `0x${string}`, + value: amountToSend as `0x${string}`, + }, + { + to: receiverAddress as `0x${string}`, + data: "0x" as `0x${string}`, + value: amountToSend as `0x${string}`, + }, + ]; + const sendCallsRequestParams: SendCallsParams = { + version: "1.0", + chainId: `0x${BigInt(reference).toString(16)}`, + from: address as `0x${string}`, + calls: calls, + }; + + return sendCallsRequestParams; +} diff --git a/shared/index.ts b/shared/index.ts new file mode 100644 index 000000000..aa79b1509 --- /dev/null +++ b/shared/index.ts @@ -0,0 +1,10 @@ +/** + * @web-examples/shared + * Shared utilities and chain data for WalletConnect web examples + */ + +export * from "./chains"; +export * from "./helpers"; +export * from "./wallets"; +export * from "./constants"; +export * from "./types"; diff --git a/shared/package.json b/shared/package.json new file mode 100644 index 000000000..cf634a341 --- /dev/null +++ b/shared/package.json @@ -0,0 +1,76 @@ +{ + "name": "@web-examples/shared", + "version": "1.0.0", + "description": "Shared utilities, chain data, and wallet libraries for WalletConnect web examples", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "sideEffects": false, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.js", + "default": "./dist/index.js" + } + }, + "scripts": { + "build": "rm -rf dist && tsc", + "type-check": "tsc --noEmit", + "clean": "rm -rf dist", + "prepublishOnly": "npm run clean && npm run build" + }, + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/encoding": "^1.0.2", + "@walletconnect/types": "2.22.4-canary-auth-3", + "@walletconnect/utils": "2.22.4-canary-auth-3", + "axios": "^1.0.0", + "ethers": "5.7.2", + "ethereumjs-util": "^7.1.5", + "eth-sig-util": "^3.0.1", + "@cosmjs/amino": "0.32.3", + "@cosmjs/encoding": "0.32.3", + "@cosmjs/proto-signing": "0.32.3", + "@kadena/client": "^0.5.0", + "@kadena/cryptography-utils": "^0.4.0", + "@kadena/types": "^0.6.0", + "@multiversx/sdk-core": "12.18.0", + "@multiversx/sdk-wallet": "4.2.0", + "@mysten/sui": "^1.29.1", + "@noble/curves": "^1.6.0", + "@noble/hashes": "^1.8.0", + "@noble/secp256k1": "^3.0.0", + "@polkadot/keyring": "^10.1.2", + "@polkadot/types": "^9.3.3", + "@polkadot/util": "^10.1.2", + "@polkadot/util-crypto": "^10.1.2", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "1.98.2", + "@stacks/network": "^7.2.0", + "@stacks/transactions": "^7.2.0", + "@stacks/wallet-sdk": "^7.0.6", + "@taquito/local-forging": "^23.0.1", + "@taquito/signer": "^15.1.0", + "@taquito/taquito": "^15.1.0", + "@ton/core": "^0.61.0", + "@ton/crypto": "^3.3.0", + "@ton/ton": "^15.3.1", + "bip32": "^4.0.0", + "bip39": "^3.1.0", + "bitcoinjs-lib": "^6.1.5", + "bitcoinjs-message": "^2.2.0", + "borsh": "^1.0.0", + "bs58": "6.0.0", + "ecpair": "^2.1.0", + "ed25519-hd-key": "^1.3.0", + "near-api-js": "^0.45.0", + "near-seed-phrase": "^0.2.1", + "tiny-secp256k1": "^2.2.3", + "tronweb": "^6.0.4", + "tweetnacl": "^1.0.3", + "solana-wallet": "^1.0.1" + }, + "devDependencies": { + "typescript": "^5.0.0" + } +} \ No newline at end of file diff --git a/shared/pnpm-lock.yaml b/shared/pnpm-lock.yaml new file mode 100644 index 000000000..865944466 --- /dev/null +++ b/shared/pnpm-lock.yaml @@ -0,0 +1,5267 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@cosmjs/amino': + specifier: 0.32.3 + version: 0.32.3 + '@cosmjs/encoding': + specifier: 0.32.3 + version: 0.32.3 + '@cosmjs/proto-signing': + specifier: 0.32.3 + version: 0.32.3 + '@kadena/client': + specifier: ^0.5.0 + version: 0.5.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@kadena/cryptography-utils': + specifier: ^0.4.0 + version: 0.4.4 + '@kadena/types': + specifier: ^0.6.0 + version: 0.6.2 + '@multiversx/sdk-core': + specifier: 12.18.0 + version: 12.18.0 + '@multiversx/sdk-wallet': + specifier: 4.2.0 + version: 4.2.0 + '@mysten/sui': + specifier: ^1.29.1 + version: 1.44.0(typescript@5.9.3) + '@noble/curves': + specifier: ^1.6.0 + version: 1.9.7 + '@noble/hashes': + specifier: ^1.8.0 + version: 1.8.0 + '@noble/secp256k1': + specifier: ^3.0.0 + version: 3.0.0 + '@polkadot/keyring': + specifier: ^10.1.2 + version: 10.4.2(@polkadot/util-crypto@10.4.2(@polkadot/util@10.4.2))(@polkadot/util@10.4.2) + '@polkadot/types': + specifier: ^9.3.3 + version: 9.14.2 + '@polkadot/util': + specifier: ^10.1.2 + version: 10.4.2 + '@polkadot/util-crypto': + specifier: ^10.1.2 + version: 10.4.2(@polkadot/util@10.4.2) + '@solana/spl-token': + specifier: ^0.4.13 + version: 0.4.14(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: 1.98.2 + version: 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@stacks/network': + specifier: ^7.2.0 + version: 7.2.0(encoding@0.1.13) + '@stacks/transactions': + specifier: ^7.2.0 + version: 7.2.0(encoding@0.1.13) + '@stacks/wallet-sdk': + specifier: ^7.0.6 + version: 7.2.0(encoding@0.1.13) + '@taquito/local-forging': + specifier: ^23.0.1 + version: 23.0.3 + '@taquito/signer': + specifier: ^15.1.0 + version: 15.1.0 + '@taquito/taquito': + specifier: ^15.1.0 + version: 15.1.0 + '@ton/core': + specifier: ^0.61.0 + version: 0.61.0(@ton/crypto@3.3.0) + '@ton/crypto': + specifier: ^3.3.0 + version: 3.3.0 + '@ton/ton': + specifier: ^15.3.1 + version: 15.4.0(@ton/core@0.61.0(@ton/crypto@3.3.0))(@ton/crypto@3.3.0) + '@walletconnect/encoding': + specifier: ^1.0.2 + version: 1.0.2 + '@walletconnect/jsonrpc-utils': + specifier: ^1.0.8 + version: 1.0.8 + '@walletconnect/types': + specifier: 2.22.4-canary-auth-3 + version: 2.22.4-canary-auth-3 + '@walletconnect/utils': + specifier: 2.22.4-canary-auth-3 + version: 2.22.4-canary-auth-3(typescript@5.9.3)(zod@3.25.76) + axios: + specifier: ^1.0.0 + version: 1.13.2 + bip32: + specifier: ^4.0.0 + version: 4.0.0 + bip39: + specifier: ^3.1.0 + version: 3.1.0 + bitcoinjs-lib: + specifier: ^6.1.5 + version: 6.1.7 + bitcoinjs-message: + specifier: ^2.2.0 + version: 2.2.0 + borsh: + specifier: ^1.0.0 + version: 1.0.0 + bs58: + specifier: 6.0.0 + version: 6.0.0 + ecpair: + specifier: ^2.1.0 + version: 2.1.0 + ed25519-hd-key: + specifier: ^1.3.0 + version: 1.3.0 + eth-sig-util: + specifier: ^3.0.1 + version: 3.0.1 + ethereumjs-util: + specifier: ^7.1.5 + version: 7.1.5 + ethers: + specifier: 5.7.2 + version: 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + near-api-js: + specifier: ^0.45.0 + version: 0.45.1(encoding@0.1.13) + near-seed-phrase: + specifier: ^0.2.1 + version: 0.2.1 + solana-wallet: + specifier: ^1.0.1 + version: 1.0.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10) + tiny-secp256k1: + specifier: ^2.2.3 + version: 2.2.4 + tronweb: + specifier: ^6.0.4 + version: 6.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + tweetnacl: + specifier: ^1.0.3 + version: 1.0.3 + devDependencies: + typescript: + specifier: ^5.0.0 + version: 5.9.3 + +packages: + + '@0no-co/graphql.web@1.2.0': + resolution: {integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + + '@0no-co/graphqlsp@1.15.1': + resolution: {integrity: sha512-UBDBuVGpX5Ti0PjGnSAzkMG04psNYxKfJ+1bgF8HFPfHHpKNVl4GULHSNW0GTOngcYCYA70c+InoKw0qjHwmVQ==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + + '@adraffy/ens-normalize@1.10.1': + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + + '@adraffy/ens-normalize@1.11.1': + resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} + + '@babel/runtime@7.26.10': + resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} + engines: {node: '>=6.9.0'} + + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + + '@cosmjs/amino@0.32.3': + resolution: {integrity: sha512-G4zXl+dJbqrz1sSJ56H/25l5NJEk/pAPIr8piAHgbXYw88OdAOlpA26PQvk2IbSN/rRgVbvlLTNgX2tzz1dyUA==} + + '@cosmjs/crypto@0.32.4': + resolution: {integrity: sha512-zicjGU051LF1V9v7bp8p7ovq+VyC91xlaHdsFOTo2oVry3KQikp8L/81RkXmUIT8FxMwdx1T7DmFwVQikcSDIw==} + deprecated: This uses elliptic for cryptographic operations, which contains several security-relevant bugs. To what degree this affects your application is something you need to carefully investigate. See https://github.com/cosmos/cosmjs/issues/1708 for further pointers. Starting with version 0.34.0 the cryptographic library has been replaced. However, private keys might still be at risk. + + '@cosmjs/encoding@0.32.3': + resolution: {integrity: sha512-p4KF7hhv8jBQX3MkB3Defuhz/W0l3PwWVYU2vkVuBJ13bJcXyhU9nJjiMkaIv+XP+W2QgRceqNNgFUC5chNR7w==} + + '@cosmjs/encoding@0.32.4': + resolution: {integrity: sha512-tjvaEy6ZGxJchiizzTn7HVRiyTg1i4CObRRaTRPknm5EalE13SV+TCHq38gIDfyUeden4fCuaBVEdBR5+ti7Hw==} + + '@cosmjs/math@0.32.4': + resolution: {integrity: sha512-++dqq2TJkoB8zsPVYCvrt88oJWsy1vMOuSOKcdlnXuOA/ASheTJuYy4+oZlTQ3Fr8eALDLGGPhJI02W2HyAQaw==} + + '@cosmjs/proto-signing@0.32.3': + resolution: {integrity: sha512-kSZ0ZUY0DwcRT0NcIn2HkadH4NKlwjfZgbLj1ABwh/4l0RgeT84QCscZCu63tJYq3K6auwqTiZSZERwlO4/nbg==} + + '@cosmjs/utils@0.32.4': + resolution: {integrity: sha512-D1Yc+Zy8oL/hkUkFUL/bwxvuDBzRGpc4cF7/SkdhxX4iHpSLgdOuTt1mhCh9+kl6NQREy9t7SYZ6xeW5gFe60w==} + + '@ethersproject/abi@5.7.0': + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + + '@ethersproject/abstract-provider@5.7.0': + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + + '@ethersproject/abstract-provider@5.8.0': + resolution: {integrity: sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==} + + '@ethersproject/abstract-signer@5.7.0': + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + + '@ethersproject/abstract-signer@5.8.0': + resolution: {integrity: sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==} + + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + + '@ethersproject/address@5.8.0': + resolution: {integrity: sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==} + + '@ethersproject/base64@5.7.0': + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + + '@ethersproject/base64@5.8.0': + resolution: {integrity: sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==} + + '@ethersproject/basex@5.7.0': + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + + '@ethersproject/basex@5.8.0': + resolution: {integrity: sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==} + + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + + '@ethersproject/bignumber@5.8.0': + resolution: {integrity: sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==} + + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + + '@ethersproject/bytes@5.8.0': + resolution: {integrity: sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==} + + '@ethersproject/constants@5.7.0': + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + + '@ethersproject/constants@5.8.0': + resolution: {integrity: sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==} + + '@ethersproject/contracts@5.7.0': + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + + '@ethersproject/hash@5.7.0': + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + + '@ethersproject/hash@5.8.0': + resolution: {integrity: sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==} + + '@ethersproject/hdnode@5.7.0': + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + + '@ethersproject/hdnode@5.8.0': + resolution: {integrity: sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==} + + '@ethersproject/json-wallets@5.7.0': + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + + '@ethersproject/json-wallets@5.8.0': + resolution: {integrity: sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==} + + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + + '@ethersproject/keccak256@5.8.0': + resolution: {integrity: sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==} + + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + '@ethersproject/logger@5.8.0': + resolution: {integrity: sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==} + + '@ethersproject/networks@5.7.1': + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + + '@ethersproject/networks@5.8.0': + resolution: {integrity: sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==} + + '@ethersproject/pbkdf2@5.7.0': + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + + '@ethersproject/pbkdf2@5.8.0': + resolution: {integrity: sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==} + + '@ethersproject/properties@5.7.0': + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + + '@ethersproject/properties@5.8.0': + resolution: {integrity: sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==} + + '@ethersproject/providers@5.7.2': + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + + '@ethersproject/random@5.7.0': + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + + '@ethersproject/random@5.8.0': + resolution: {integrity: sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==} + + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + + '@ethersproject/rlp@5.8.0': + resolution: {integrity: sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==} + + '@ethersproject/sha2@5.7.0': + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + + '@ethersproject/sha2@5.8.0': + resolution: {integrity: sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==} + + '@ethersproject/signing-key@5.7.0': + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + + '@ethersproject/signing-key@5.8.0': + resolution: {integrity: sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==} + + '@ethersproject/solidity@5.7.0': + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + + '@ethersproject/strings@5.7.0': + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + + '@ethersproject/strings@5.8.0': + resolution: {integrity: sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==} + + '@ethersproject/transactions@5.7.0': + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + + '@ethersproject/transactions@5.8.0': + resolution: {integrity: sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==} + + '@ethersproject/units@5.7.0': + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + + '@ethersproject/wallet@5.7.0': + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + + '@ethersproject/web@5.7.1': + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + + '@ethersproject/web@5.8.0': + resolution: {integrity: sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==} + + '@ethersproject/wordlists@5.7.0': + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + + '@ethersproject/wordlists@5.8.0': + resolution: {integrity: sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==} + + '@gql.tada/cli-utils@1.7.2': + resolution: {integrity: sha512-Qbc7hbLvCz6IliIJpJuKJa9p05b2Jona7ov7+qofCsMRxHRZE1kpAmZMvL8JCI4c0IagpIlWNaMizXEQUe8XjQ==} + peerDependencies: + '@0no-co/graphqlsp': ^1.12.13 + '@gql.tada/svelte-support': 1.0.1 + '@gql.tada/vue-support': 1.0.1 + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + peerDependenciesMeta: + '@gql.tada/svelte-support': + optional: true + '@gql.tada/vue-support': + optional: true + + '@gql.tada/internal@1.0.8': + resolution: {integrity: sha512-XYdxJhtHC5WtZfdDqtKjcQ4d7R1s0d1rnlSs3OcBEUbYiPoJJfZU7tWsVXuv047Z6msvmr4ompJ7eLSK5Km57g==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@kadena/chainweb-node-client@0.3.3': + resolution: {integrity: sha512-QmJYfRPMWJaMJEPD4Cai+9t1rA4ljACQo8XDr6dZ6WQnOItV968rLIDr43KG3p7FsyrJW2G6W97GqQUXcqVdDQ==} + + '@kadena/client@0.5.0': + resolution: {integrity: sha512-F3GPdfKBfmto7BGoDd2+gXAZe7IhSIAI1l3VgPUpZgqAz5jiSQp7CNR94nc5YsyZZE05cYsEOsk64odihDQqZQ==} + + '@kadena/cryptography-utils@0.3.3': + resolution: {integrity: sha512-6GYpjXKbMEeVR9TwIPnE2gv1yjIlIxnlMTH6R0fqlgg8AMkk5WwJ1DpKlahEh2ii2shoZISfmlKLa24U8Fkd/g==} + + '@kadena/cryptography-utils@0.4.4': + resolution: {integrity: sha512-8xUcGlmBuuR9PSW88eqJuW49EmcQeiplDlsvN1N++1Bw6KV4lXlBKlJn5TM8lxctGNpewtzlIUimQFIlMqm9aw==} + + '@kadena/pactjs@0.2.9': + resolution: {integrity: sha512-Y4c9QmcKCHFWOSqAQhQLVN/neFLsNhQRMHNmUvRjnY4BypTX+8PVKVTRWk6y92C709Smkdyh8uzmE6aRfkMHtQ==} + + '@kadena/types@0.3.3': + resolution: {integrity: sha512-61ltE1vx81r/OSrrHaEte1m2QixsCVLBT8koBmWu7wmITGltjEzjkIJNNUs/A0d4aZzlUVOa+6tnRq22clQu3w==} + + '@kadena/types@0.6.2': + resolution: {integrity: sha512-VmHLikwclzi3vtS8Bxi/zUUgdBixNd/Zz+hq3mTUqWuLiIzGBwvJrZ5Q2zzol11voPk2+fBCoCaxnh2EtYYxGw==} + + '@msgpack/msgpack@3.1.2': + resolution: {integrity: sha512-JEW4DEtBzfe8HvUYecLU9e6+XJnKDlUAIve8FvPzF3Kzs6Xo/KuZkZJsDH0wJXl/qEZbeeE7edxDNY3kMs39hQ==} + engines: {node: '>= 18'} + + '@multiversx/sdk-bls-wasm@0.3.5': + resolution: {integrity: sha512-c0tIdQUnbBLSt6NYU+OpeGPYdL0+GV547HeHT8Xc0BKQ7Cj0v82QUoA2QRtWrR1G4MNZmLsIacZSsf6DrIS2Bw==} + engines: {node: '>=8.9.0'} + + '@multiversx/sdk-core@12.18.0': + resolution: {integrity: sha512-F+xGslPMkkZ0S/Q8UJZsMYl0mgHIuK/GdVsNFPiMKxQsKkxA2LTjNdPxVxjwgvRmN7WfdsTtQvmlsA5O1NYhBg==} + + '@multiversx/sdk-transaction-decoder@1.0.2': + resolution: {integrity: sha512-j43QsKquu8N51WLmVlJ7dV2P3A1448R7/ktvl8r3i6wRMpfdtzDPNofTdHmMRT7DdQdvs4+RNgz8hVKL11Etsw==} + + '@multiversx/sdk-wallet@4.2.0': + resolution: {integrity: sha512-EjSb9AnqMcpmDjZ7ebkUpOzpTfxj1plTuVXwZ6AaqJsdpxMfrE2izbPy18+bg5xFlr8V27wYZcW8zOhkBR50BA==} + + '@mysten/bcs@1.9.2': + resolution: {integrity: sha512-kBk5xrxV9OWR7i+JhL/plQrgQ2/KJhB2pB5gj+w6GXhbMQwS3DPpOvi/zN0Tj84jwPvHMllpEl0QHj6ywN7/eQ==} + + '@mysten/sui@1.44.0': + resolution: {integrity: sha512-3p/y5gUhsG/MBXLOdX6qw1b8r1z/lKMvdfpacH+CjuEx8Y0U98R9fLmnFFd+6K+d+CE1gctBuMtcOqr+SppBug==} + engines: {node: '>=18'} + + '@mysten/utils@0.2.0': + resolution: {integrity: sha512-CM6kJcJHX365cK6aXfFRLBiuyXc5WSBHQ43t94jqlCAIRw8umgNcTb5EnEA9n31wPAQgLDGgbG/rCUISCTJ66w==} + + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.2.0': + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + + '@noble/curves@1.4.2': + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + + '@noble/curves@1.8.0': + resolution: {integrity: sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.9.1': + resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.9.4': + resolution: {integrity: sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.9.7': + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/ed25519@1.7.3': + resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} + + '@noble/hashes@1.1.5': + resolution: {integrity: sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==} + + '@noble/hashes@1.2.0': + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + + '@noble/hashes@1.3.0': + resolution: {integrity: sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==} + + '@noble/hashes@1.3.2': + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/hashes@1.7.0': + resolution: {integrity: sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@noble/secp256k1@1.7.1': + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + + '@noble/secp256k1@1.7.2': + resolution: {integrity: sha512-/qzwYl5eFLH8OWIecQWM31qld2g1NfjgylK+TNhqtaUKP37Nm+Y+z30Fjhw0Ct8p9yCQEm2N3W/AckdIb3SMcQ==} + + '@noble/secp256k1@3.0.0': + resolution: {integrity: sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg==} + + '@polkadot/keyring@10.4.2': + resolution: {integrity: sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@polkadot/util': 10.4.2 + '@polkadot/util-crypto': 10.4.2 + + '@polkadot/networks@10.4.2': + resolution: {integrity: sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==} + engines: {node: '>=14.0.0'} + + '@polkadot/types-augment@9.14.2': + resolution: {integrity: sha512-WO9d7RJufUeY3iFgt2Wz762kOu1tjEiGBR5TT4AHtpEchVHUeosVTrN9eycC+BhleqYu52CocKz6u3qCT/jKLg==} + engines: {node: '>=14.0.0'} + + '@polkadot/types-codec@9.14.2': + resolution: {integrity: sha512-AJ4XF7W1no4PENLBRU955V6gDxJw0h++EN3YoDgThozZ0sj3OxyFupKgNBZcZb2V23H8JxQozzIad8k+nJbO1w==} + engines: {node: '>=14.0.0'} + + '@polkadot/types-create@9.14.2': + resolution: {integrity: sha512-nSnKpBierlmGBQT8r6/SHf6uamBIzk4WmdMsAsR4uJKJF1PtbIqx2W5PY91xWSiMSNMzjkbCppHkwaDAMwLGaw==} + engines: {node: '>=14.0.0'} + + '@polkadot/types@9.14.2': + resolution: {integrity: sha512-hGLddTiJbvowhhUZJ3k+olmmBc1KAjWIQxujIUIYASih8FQ3/YJDKxaofGOzh0VygOKW3jxQBN2VZPofyDP9KQ==} + engines: {node: '>=14.0.0'} + + '@polkadot/util-crypto@10.4.2': + resolution: {integrity: sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@polkadot/util': 10.4.2 + + '@polkadot/util@10.4.2': + resolution: {integrity: sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==} + engines: {node: '>=14.0.0'} + + '@polkadot/wasm-bridge@6.4.1': + resolution: {integrity: sha512-QZDvz6dsUlbYsaMV5biZgZWkYH9BC5AfhT0f0/knv8+LrbAoQdP3Asbvddw8vyU9sbpuCHXrd4bDLBwUCRfrBQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + + '@polkadot/wasm-crypto-asmjs@6.4.1': + resolution: {integrity: sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@polkadot/util': '*' + + '@polkadot/wasm-crypto-init@6.4.1': + resolution: {integrity: sha512-1ALagSi/nfkyFaH6JDYfy/QbicVbSn99K8PV9rctDUfxc7P06R7CoqbjGQ4OMPX6w1WYVPU7B4jPHGLYBlVuMw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + + '@polkadot/wasm-crypto-wasm@6.4.1': + resolution: {integrity: sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@polkadot/util': '*' + + '@polkadot/wasm-crypto@6.4.1': + resolution: {integrity: sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + + '@polkadot/wasm-util@6.4.1': + resolution: {integrity: sha512-Uwo+WpEsDmFExWC5kTNvsVhvqXMZEKf4gUHXFn4c6Xz4lmieRT5g+1bO1KJ21pl4msuIgdV3Bksfs/oiqMFqlw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@polkadot/util': '*' + + '@polkadot/x-bigint@10.4.2': + resolution: {integrity: sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==} + engines: {node: '>=14.0.0'} + + '@polkadot/x-global@10.4.2': + resolution: {integrity: sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==} + engines: {node: '>=14.0.0'} + + '@polkadot/x-randomvalues@10.4.2': + resolution: {integrity: sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==} + engines: {node: '>=14.0.0'} + + '@polkadot/x-textdecoder@10.4.2': + resolution: {integrity: sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==} + engines: {node: '>=14.0.0'} + + '@polkadot/x-textencoder@10.4.2': + resolution: {integrity: sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==} + engines: {node: '>=14.0.0'} + + '@protobuf-ts/grpcweb-transport@2.11.1': + resolution: {integrity: sha512-1W4utDdvOB+RHMFQ0soL4JdnxjXV+ddeGIUg08DvZrA8Ms6k5NN6GBFU2oHZdTOcJVpPrDJ02RJlqtaoCMNBtw==} + + '@protobuf-ts/runtime-rpc@2.11.1': + resolution: {integrity: sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==} + + '@protobuf-ts/runtime@2.11.1': + resolution: {integrity: sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@scure/base@1.1.1': + resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/base@1.2.6': + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + + '@scure/bip32@1.1.3': + resolution: {integrity: sha512-dSH3+LCWONlSNQuF34xZrG6Xas7tp2jSSqHb/pMfXWM0vKE4JZOtK3uJfoWouUVW5IGlls75HkXmYLldZ8ySgQ==} + + '@scure/bip32@1.4.0': + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + + '@scure/bip32@1.7.0': + resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} + + '@scure/bip39@1.1.0': + resolution: {integrity: sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==} + + '@scure/bip39@1.3.0': + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + + '@scure/bip39@1.6.0': + resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-rc.1': + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-data-structures@2.0.0-rc.1': + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.0.0-rc.1': + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-strings@2.0.0-rc.1': + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + + '@solana/codecs@2.0.0-rc.1': + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.0.0-rc.1': + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/options@2.0.0-rc.1': + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + + '@solana/spl-token-group@0.0.7': + resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token-metadata@0.1.6': + resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token@0.4.14': + resolution: {integrity: sha512-u09zr96UBpX4U685MnvQsNzlvw9TiY005hk1vJmJr7gMJldoPG1eYU5/wNEyOA5lkMLiR/gOi9SFD4MefOYEsA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.5 + + '@solana/web3.js@1.98.2': + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + + '@stablelib/aead@1.0.1': + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} + + '@stablelib/binary@1.0.1': + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + + '@stablelib/blake2b@1.0.1': + resolution: {integrity: sha512-B3KyKoBAjkIFeH7romcF96i+pVFYk7K2SBQ1pZvaxV+epSBXJ+n0C66esUhyz6FF+5FbdQVm77C5fzGFcEZpKA==} + + '@stablelib/bytes@1.0.1': + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} + + '@stablelib/chacha20poly1305@1.0.1': + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} + + '@stablelib/chacha@1.0.1': + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} + + '@stablelib/constant-time@1.0.1': + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + + '@stablelib/ed25519@1.0.3': + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} + + '@stablelib/hash@1.0.1': + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} + + '@stablelib/hkdf@1.0.1': + resolution: {integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==} + + '@stablelib/hmac@1.0.1': + resolution: {integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==} + + '@stablelib/int@1.0.1': + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + + '@stablelib/keyagreement@1.0.1': + resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} + + '@stablelib/nacl@1.0.4': + resolution: {integrity: sha512-PJ2U/MrkXSKUM8C4qFs87WeCNxri7KQwR8Cdwm9q2sweGuAtTvOJGuW0F3N+zn+ySLPJA98SYWSSpogMJ1gCmw==} + + '@stablelib/pbkdf2@1.0.1': + resolution: {integrity: sha512-d5jwK6jW1DkMyzqY8D1Io+fRXcsUVr95lk5LKX9ghaUdAITTc1ZL0bff+R0IrwSixbHluxhnivG7vDw59AZ/Nw==} + + '@stablelib/poly1305@1.0.1': + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} + + '@stablelib/random@1.0.2': + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + + '@stablelib/salsa20@1.0.2': + resolution: {integrity: sha512-nfjKzw0KTKrrKBasEP+j7UP4I8Xudom8lVZIBCp0kQNARXq72IlSic0oabg2FC1NU68L4RdHrNJDd8bFwrphYA==} + + '@stablelib/sha256@1.0.1': + resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} + + '@stablelib/sha512@1.0.1': + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} + + '@stablelib/wipe@1.0.1': + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + + '@stablelib/x25519@1.0.3': + resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + + '@stablelib/xsalsa20@1.0.2': + resolution: {integrity: sha512-7XdBGbcNgBShmuhDXv1G1WPVCkjZdkb1oPMzSidO7Fve0MHntH6TjFkj5bfLI+aRE+61weO076vYpP/jmaAYog==} + + '@stacks/auth@7.2.0': + resolution: {integrity: sha512-u+Ky4CMQWFTPI6Au3VFcW74nSIA4Zb8YjsbOkcv0q9E6LiALyK4gozpKTxKvfW3/z1ER3z1Ky9uH/s4zY59rvg==} + + '@stacks/common@7.0.2': + resolution: {integrity: sha512-+RSecHdkxOtswmE4tDDoZlYEuULpnTQVeDIG5eZ32opK8cFxf4EugAcK9CsIsHx/Se1yTEaQ21WGATmJGK84lQ==} + + '@stacks/encryption@7.2.0': + resolution: {integrity: sha512-XDgb5GuR2kURC0YJWo70xnWPKeizBg/qpGPDApBVLFgaOqFL4FdFmvxHXU5lVbFR3W+mtdxPHedWtQpxxOBlMQ==} + + '@stacks/network@7.2.0': + resolution: {integrity: sha512-AkLougCF2RLbK97TtISZxAhF3cE757XMXWOGKvEFWNauiQ5/bYyI9W5jZypG3yI/AyYIo04NKoFWWTnpJcn1iA==} + + '@stacks/profile@7.2.0': + resolution: {integrity: sha512-pzPgn/NpmjA7TdeA5U9OjXLwBNqGPrjWhsMy/ZC3iUdnIUvthgWwlPpydgQOTJaRqaDMdY24hFgT+og6QbyQQA==} + + '@stacks/storage@7.2.0': + resolution: {integrity: sha512-aBfHhfhIom/xMseJSArH0xWqOAhN7waY255s4PfxmRdCsE6GKeXxIdZvgNYcHXrSiIPH3spk00UDA4+8xiRAQA==} + + '@stacks/transactions@7.2.0': + resolution: {integrity: sha512-U7wjlxM9Q+408ihRsv5mlKRslXGt2WCShKi1lduiqf5+dBSRGdVi8ttCIEckSsg3ulCVF3EHTQF3LZgw4kwKlQ==} + + '@stacks/wallet-sdk@7.2.0': + resolution: {integrity: sha512-w4UmIaulB03ki0eosWA2ju4vXtF1N+n+nX+/GuV8ZW3rbZ7xeRCv16IzZZL6TspMcaUKyZKTVB2uximqBNbqPQ==} + + '@substrate/ss58-registry@1.51.0': + resolution: {integrity: sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@taquito/axios-fetch-adapter@https://codeload.github.com/ecadlabs/axios-fetch-adapter/tar.gz/167684f522e90343b9f3439d9a43ac571e2396f6': + resolution: {tarball: https://codeload.github.com/ecadlabs/axios-fetch-adapter/tar.gz/167684f522e90343b9f3439d9a43ac571e2396f6} + version: 0.3.1 + peerDependencies: + axios: '>=0.26.0' + + '@taquito/core@23.0.3': + resolution: {integrity: sha512-ivCR0kxMzJ53spPw7xm/wMMYI5rP7ADurq+us6R2Z8t5jwkCtXWBAqpvwMrJeaoNjjJvTaOXf0khLg8WsdDKgg==} + engines: {node: '>=18'} + + '@taquito/http-utils@15.1.0': + resolution: {integrity: sha512-Uug5hN0XvMlFFN+rxSMW+Y9Z8pw5uqHRDZC83eLOBSijbpMo+ScG/2nKkC8MUUrqLaLeHru1HD4kT5DHc1fI+A==} + engines: {node: '>=6.0.0'} + + '@taquito/local-forging@15.1.0': + resolution: {integrity: sha512-ib/2RqtxQQC9SjyTB9T5OSc5yUx9GUSdMOA4dmtiiFcN2+AG+aw7ixn6Hjt9Td8ZIOPt9H6HkyTypKrX7+cENw==} + engines: {node: '>=6.0.0'} + + '@taquito/local-forging@23.0.3': + resolution: {integrity: sha512-xT5h+rutSJSI0QfxZ1M1FiDXcQuFDqSwRDhdYx28twYGFAhsGvGfknXmtN3F5SiO9hkGXL7dZR5w8NpIdk8yEw==} + engines: {node: '>=18'} + + '@taquito/michel-codec@15.1.0': + resolution: {integrity: sha512-wKucIhs7vhaq5H+YSF2f6Qu9+g+QiEL6MPc5ROpxBrXJTeKSwBOEIpfqcKfkfMuecJyHZJW3glNfkpAVTCgkxg==} + engines: {node: '>=6.0.0'} + + '@taquito/michelson-encoder@15.1.0': + resolution: {integrity: sha512-uQMEu3g+8WcYb5ZV6+XGvoWJhKoNxU0F2RqodLJB7UxQ1rI/OMa+VlxSLMt4niIxpKXqnO9j4tD7Y4mPC3ufaA==} + engines: {node: '>=6.0.0'} + + '@taquito/rpc@15.1.0': + resolution: {integrity: sha512-OeQA8QwT+s6IUmLaF5yeWruPYzWi/DVCA3kl+AaQ8IFfCMzmAW/MszbbNkJSzHpY2p4jPBwdRNxg3qeJdL482A==} + engines: {node: '>=6.0.0'} + + '@taquito/signer@15.1.0': + resolution: {integrity: sha512-VP7hS8cYQ6cMerVkbD5X3AqpoIXvh72xNuv3++R4reEjdl+E3VWs1CZZGnJj6yzlFV21SrdGKSILx8Rl3Ql4DA==} + engines: {node: '>=6.0.0'} + + '@taquito/taquito@15.1.0': + resolution: {integrity: sha512-2AXWeNoXsmMOSkJVXtXjOlJkS+hKXITaSybMA6nJuS1YWY4e7iAr678Y6UgVEHRJxeGohX4R4Ww12Ymr3Sfedg==} + engines: {node: '>=6.0.0'} + + '@taquito/utils@15.1.0': + resolution: {integrity: sha512-lqVThoFMmOKPg9jyREr4A63cpeckf5esCwOyOAW3sm+yCxD9s5khnBPtH8s52cRVnChFdwk/eqmADka9gat5hw==} + engines: {node: '>=6.0.0'} + + '@taquito/utils@23.0.3': + resolution: {integrity: sha512-7ef9V8d1z++wCODo03LlvGq6D3P8Gr0nc93nbzDNaKWS+wJfS7lNz2tlYSsVkvBmVOt9KVdFcVLZ1/heySfuOw==} + engines: {node: '>=18'} + + '@ton/core@0.61.0': + resolution: {integrity: sha512-0qyVfP2dDue2bq80ydXggo2MlufcmzuFk6G94qRrZxvyQ3NSe4UeBTeRf1gQmN7tywgTsX2gS61e4yvJrlUu4Q==} + peerDependencies: + '@ton/crypto': '>=3.2.0' + + '@ton/crypto-primitives@2.1.0': + resolution: {integrity: sha512-PQesoyPgqyI6vzYtCXw4/ZzevePc4VGcJtFwf08v10OevVJHVfW238KBdpj1kEDQkxWLeuNHEpTECNFKnP6tow==} + + '@ton/crypto@3.3.0': + resolution: {integrity: sha512-/A6CYGgA/H36OZ9BbTaGerKtzWp50rg67ZCH2oIjV1NcrBaCK9Z343M+CxedvM7Haf3f/Ee9EhxyeTp0GKMUpA==} + + '@ton/ton@15.4.0': + resolution: {integrity: sha512-f19y2Rez88KZK+lv3CT3ghXi07LcToJtJhlgRSfK+3GzjdIcoW/wbmXG1ffi6fkc8W2LO5z6Q3gZaIEvNGnz6w==} + peerDependencies: + '@ton/core': '>=0.62.0 <1.0.0' + '@ton/crypto': '>=3.2.0' + + '@types/bn.js@4.11.6': + resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} + + '@types/bn.js@5.2.0': + resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} + + '@types/bs58check@2.1.2': + resolution: {integrity: sha512-xpXaQlOIY1KoXlA/ytHGHpEIU87PJt+g9SH7nC6HdCgaBwT2IEZIwBMHbjuX6BpnfbiUMlmwqurdLDwXpcdmSA==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/isomorphic-fetch@0.0.39': + resolution: {integrity: sha512-I0gou/ZdA1vMG7t7gMzL7VYu2xAKU78rW9U1l10MI0nn77pEHq3tQqHQ8hMmXdMpBlkxZOorjI4sO594Z3kKJw==} + + '@types/node@11.11.6': + resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + + '@types/pbkdf2@3.1.2': + resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + + '@types/secp256k1@4.0.7': + resolution: {integrity: sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@walletconnect/core@2.8.6': + resolution: {integrity: sha512-rnSqm1KJLcww/v6+UH8JeibQkJ3EKgyUDPfEK0stSEkrIUIcXaFlq3Et8S+vgV8bPhI0MVUhAhFL5OJZ3t2ryg==} + + '@walletconnect/encoding@1.0.2': + resolution: {integrity: sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag==} + + '@walletconnect/environment@1.0.1': + resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} + + '@walletconnect/events@1.0.1': + resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} + + '@walletconnect/heartbeat@1.2.1': + resolution: {integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==} + + '@walletconnect/heartbeat@1.2.2': + resolution: {integrity: sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==} + + '@walletconnect/jsonrpc-provider@1.0.13': + resolution: {integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==} + + '@walletconnect/jsonrpc-types@1.0.3': + resolution: {integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==} + + '@walletconnect/jsonrpc-types@1.0.4': + resolution: {integrity: sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==} + + '@walletconnect/jsonrpc-utils@1.0.8': + resolution: {integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==} + + '@walletconnect/jsonrpc-ws-connection@1.0.16': + resolution: {integrity: sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q==} + + '@walletconnect/keyvaluestorage@1.1.1': + resolution: {integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==} + peerDependencies: + '@react-native-async-storage/async-storage': 1.x + peerDependenciesMeta: + '@react-native-async-storage/async-storage': + optional: true + + '@walletconnect/logger@2.1.3': + resolution: {integrity: sha512-wRsD0eDQSajj8YMM/jpxoH1yeSLyS7FPkh0VKCQ1BWrERTy1Z7/DmOE8FYm/gmd7Cg6BNXVWiymhGq6wnmlq8w==} + + '@walletconnect/logger@3.0.0': + resolution: {integrity: sha512-DDktPBFdmt5d7U3sbp4e3fQHNS1b6amsR8FmtOnt6L2SnV7VfcZr8VmAGL12zetAR+4fndegbREmX0P8Mw6eDg==} + + '@walletconnect/relay-api@1.0.11': + resolution: {integrity: sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==} + + '@walletconnect/relay-auth@1.1.0': + resolution: {integrity: sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ==} + + '@walletconnect/safe-json@1.0.2': + resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} + + '@walletconnect/sign-client@2.8.6': + resolution: {integrity: sha512-rOFTKTHP7oJfXgYHX7+SdB8VbcsEE3ZFG/bMdmZboWaBim1mrY3vUyDdKrNr0VgI3AwBiEQezQDfKxBX0pMSQQ==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + + '@walletconnect/time@1.0.2': + resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} + + '@walletconnect/types@2.22.4-canary-auth-3': + resolution: {integrity: sha512-mWLz6ur82bv4ocnqVtRiJaP4Ef10fHZxjFucxxZ3VXtYWyZeJQrMyQwREy2EC62c0CFtNvkAs0A/VBRmAMjcoA==} + + '@walletconnect/types@2.8.6': + resolution: {integrity: sha512-Z/PFa3W1XdxeTcCtdR6lUsFgZfU/69wWJBPyclPwn7cu1+eriuCr6XZXQpJjib3flU+HnwHiXeUuqZaheehPxw==} + + '@walletconnect/utils@2.22.4-canary-auth-3': + resolution: {integrity: sha512-MyBp5mBT6tKBDz1Ge90E9MFzHxt7c3alCQPVVajep/vw61ZSxlHof4ZZA4XtyYHMiKWtV9S+G98RlCyEps1GOw==} + + '@walletconnect/utils@2.8.6': + resolution: {integrity: sha512-wcy6e5+COYo7tfNnW8YqidnATdJDIW6vDiWWE7A1F78Sl/VflkaevB9cIgyn8eLdxC1SxXgGoeC2oLP90nnHJg==} + + '@walletconnect/window-getters@1.0.1': + resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} + + '@walletconnect/window-metadata@1.0.1': + resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + + abitype@1.1.1: + resolution: {integrity: sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + + aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@0.26.1: + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + + axios@1.12.2: + resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + + axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + + backslash@0.2.2: + resolution: {integrity: sha512-PKRYPE2LLTtNUYz1dszquxKSBs6XyLyJRHgFpY5rlq7y3DscDx239k5Gm+zenoY47OU4CApan1o0k2R8ptZC1Q==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base-x@4.0.1: + resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} + + base-x@5.0.1: + resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + + bech32@2.0.0: + resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.0.1: + resolution: {integrity: sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bip174@2.1.1: + resolution: {integrity: sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==} + engines: {node: '>=8.0.0'} + + bip32@4.0.0: + resolution: {integrity: sha512-aOGy88DDlVUhspIXJN+dVEtclhIsfAUppD43V0j40cPTld3pv/0X/MlrZSZ6jowIaQQzFwP8M6rFU2z2mVYjDQ==} + engines: {node: '>=6.0.0'} + + bip39-light@1.0.7: + resolution: {integrity: sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==} + + bip39@3.0.2: + resolution: {integrity: sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==} + + bip39@3.1.0: + resolution: {integrity: sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==} + + bip66@1.1.5: + resolution: {integrity: sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==} + + bitcoinjs-lib@6.1.7: + resolution: {integrity: sha512-tlf/r2DGMbF7ky1MgUqXHzypYHakkEnm0SZP23CJKIqNY/5uNAnMbFhMJdhjrL/7anfb/U8+AlpdjPWjPnAalg==} + engines: {node: '>=8.0.0'} + + bitcoinjs-message@2.2.0: + resolution: {integrity: sha512-103Wy3xg8Y9o+pdhGP4M3/mtQQuUWs6sPuOp1mYphSUoSMHjHTlkj32K4zxU8qMH0Ckv23emfkGlFWtoWZ7YFA==} + engines: {node: '>=0.10'} + + blake2b-wasm@1.1.7: + resolution: {integrity: sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==} + + blake2b@2.1.3: + resolution: {integrity: sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==} + + blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + + bn.js@4.12.2: + resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + + bn.js@5.2.0: + resolution: {integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + borsh@1.0.0: + resolution: {integrity: sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + + bs58check@2.1.2: + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + + bs58check@3.0.1: + resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} + + buffer-equals@1.0.4: + resolution: {integrity: sha512-99MsCq0j5+RhubVEtKQgKaD6EM+UP3xJgIvQqwJ3SOLDUekzxMX1ylXBng+Wa2sh7mGT0W6RUly8ojjr1Tt6nA==} + engines: {node: '>=0.10.0'} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + c32check@2.0.0: + resolution: {integrity: sha512-rpwfAcS/CMqo0oCqDf3r9eeLgScRE3l/xHDCXhM3UyrfvIn7PrLq63uHh7yYbv8NzaZn5MVsVhIRpQ+5GZ5HyA==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + capability@0.2.5: + resolution: {integrity: sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + cipher-base@1.0.7: + resolution: {integrity: sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==} + engines: {node: '>= 0.10'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + engines: {node: '>=20'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmjs-types@0.9.0: + resolution: {integrity: sha512-MN/yUe6mkJwHnCFfsNPeCfXVhyxHYW6c/xDUzrSbBycYzw++XvWDMJArXp2pLdgD6FQ8DW79vkPjeNKVrXaHeQ==} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + dataloader@2.2.3: + resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-browser@5.3.0: + resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + + drbg.js@1.0.1: + resolution: {integrity: sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==} + engines: {node: '>=0.10'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + + ecpair@2.1.0: + resolution: {integrity: sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==} + engines: {node: '>=8.0.0'} + + ed25519-hd-key@1.1.2: + resolution: {integrity: sha512-/0y9y6N7vM6Kj5ASr9J9wcMVDTtygxSOvYX+PJiMD7VcxCx2G03V5bLRl8Dug9EgkLFsLhGqBtQWQRcElEeWTA==} + + ed25519-hd-key@1.3.0: + resolution: {integrity: sha512-IWwAyiiuJQhgu3L8NaHb68eJxTu2pgCwxIBdgpLJdKpYZM46+AXePSVTr7fkNKaUOfOL4IrjEUaQvyVRIDP7fg==} + + ed2curve@0.3.0: + resolution: {integrity: sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==} + + elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + error-polyfill@0.1.3: + resolution: {integrity: sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + eth-sig-util@3.0.1: + resolution: {integrity: sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ==} + deprecated: Deprecated in favor of '@metamask/eth-sig-util' + + ethereum-cryptography@0.1.3: + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + + ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + + ethereumjs-abi@0.6.8: + resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} + deprecated: This library has been deprecated and usage is discouraged. + + ethereumjs-util@5.2.1: + resolution: {integrity: sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==} + + ethereumjs-util@6.2.1: + resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} + + ethereumjs-util@7.1.5: + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} + + ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + + ethers@6.13.5: + resolution: {integrity: sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ==} + engines: {node: '>=14.0.0'} + + ethjs-util@0.1.6: + resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} + engines: {node: '>=6.5.0', npm: '>=3'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fast-text-encoding@1.0.6: + resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + google-protobuf@3.21.4: + resolution: {integrity: sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + gql.tada@1.9.0: + resolution: {integrity: sha512-1LMiA46dRs5oF7Qev6vMU32gmiNvM3+3nHoQZA9K9j2xQzH8xOAWnnJrLSbZOFHTSdFxqn86TL6beo1/7ja/aA==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + + graphql@16.12.0: + resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + h3@1.15.4: + resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash-base@3.1.2: + resolution: {integrity: sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==} + engines: {node: '>= 0.8'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + idb-keyval@6.2.2: + resolution: {integrity: sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-hex-prefixed@1.0.0: + resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} + engines: {node: '>=6.5.0', npm: '>=3'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + + js-sha256@0.9.0: + resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + json-duplicate-key-handle@1.0.0: + resolution: {integrity: sha512-OLIxL+UpfwUsqcLX3i6Z51ChTou/Vje+6bSeGUSubj96dF/SfjObDprLy++ZXYH07KITuEzsXS7PX7e/BGf4jw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + jsontokens@4.0.1: + resolution: {integrity: sha512-+MO415LEN6M+3FGsRz4wU20g7N2JA+2j9d9+pGaNJHviG4L8N0qzavGyENw6fJqsq9CcrHOIL6iWX5yeTZ86+Q==} + + jssha@3.2.0: + resolution: {integrity: sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==} + + keccak@3.0.1: + resolution: {integrity: sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==} + engines: {node: '>=10.0.0'} + + keccak@3.0.2: + resolution: {integrity: sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==} + engines: {node: '>=10.0.0'} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + keyvaluestorage-interface@1.0.0: + resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} + + libsodium-sumo@0.7.15: + resolution: {integrity: sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==} + + libsodium-wrappers-sumo@0.7.15: + resolution: {integrity: sha512-aSWY8wKDZh5TC7rMvEdTHoyppVq/1dTSAeAR7H6pzd6QRT3vQWcT5pGwCotLcpPEOLXX6VvqihSPkpEhYAjANA==} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + + nan@2.23.1: + resolution: {integrity: sha512-r7bBUGKzlqk8oPBDYxt6Z0aEdF1G1rwlMcLk8LCOMbOzf0mG+JUfUzG4fIMWwHWP0iyaLWEQZJmtB7nOHEm/qw==} + + nanoassert@1.1.0: + resolution: {integrity: sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==} + + near-api-js@0.45.1: + resolution: {integrity: sha512-QyPO/vjvMFlcMO1DCpsqzmnSqPIyHsjK1Qi4B5ZR1cJCIWMkqugDF/TDf8FVQ85pmlcYeYwfiTqKanKz+3IG0A==} + + near-hd-key@1.2.1: + resolution: {integrity: sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==} + + near-seed-phrase@0.2.1: + resolution: {integrity: sha512-feMuums+kVL3LSuPcP4ld07xHCb2mu6z48SGfP3W+8tl1Qm5xIcjiQzY2IDPBvFgajRDxWSb8GzsRHoInazByw==} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-fetch@2.6.13: + resolution: {integrity: sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-mock-http@1.0.3: + resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + o3@1.0.3: + resolution: {integrity: sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==} + + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + on-exit-leak-free@0.2.0: + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + ox@0.9.3: + resolution: {integrity: sha512-KzyJP+fPV4uhuuqrTZyok4DC7vFzi7HLUFiUNEmpbyh59htKWkOC98IONC1zgXJPbHAhQgqs6B0Z6StCGhmQvg==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + pbkdf2@3.1.5: + resolution: {integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==} + engines: {node: '>= 0.10'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pino-abstract-transport@0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-std-serializers@4.0.0: + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@10.0.0: + resolution: {integrity: sha512-eI9pKwWEix40kfvSzqEP6ldqOoBIN7dwD/o91TY5z8vQI12sAffpR/pOqAD1IVVwIVHDpHjkq0joBPdJD0rafA==} + hasBin: true + + pino@7.11.0: + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} + hasBin: true + + poseidon-lite@0.2.1: + resolution: {integrity: sha512-xIr+G6HeYfOhCuswdqcFpSX47SPhm0EpisWJ6h7fHlWwaVIvH3dLnejpatrtw6Xc6HaLrpq05y7VRfvDmDGIog==} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + + protobufjs@7.2.4: + resolution: {integrity: sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==} + engines: {node: '>=12.0.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + readonly-date@1.0.0: + resolution: {integrity: sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ==} + + real-require@0.1.0: + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + ripemd160-min@0.0.6: + resolution: {integrity: sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==} + engines: {node: '>=8'} + + ripemd160@2.0.3: + resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} + engines: {node: '>= 0.8'} + + rlp@2.2.7: + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} + hasBin: true + + rpc-websockets@9.3.1: + resolution: {integrity: sha512-bY6a+i/lEtBJ/mUxwsCTgevoV1P0foXTVA7UoThzaIWbM+3NDqorf8NBWs5DmqKTFeA1IoNzgvkWjFCPgnzUiQ==} + + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + schema-inspector@2.1.0: + resolution: {integrity: sha512-3bmQVhbA01/EW8cZin4vIpqlpNU2SIy4BhKCfCgogJ3T/L76dLx3QAE+++4o+dNT33sa+SN9vOJL7iHiHFjiNg==} + + scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + scryptsy@2.1.0: + resolution: {integrity: sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==} + + secp256k1@3.8.1: + resolution: {integrity: sha512-tArjQw2P0RTdY7QmkNehgp6TVvQXq6ulIhxv8gaH6YubKG/wxxAoNKcbuXjDhybbc+b2Ihc7e0xxiGN744UIiQ==} + engines: {node: '>=4.0.0'} + + secp256k1@4.0.4: + resolution: {integrity: sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==} + engines: {node: '>=18.0.0'} + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.12: + resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} + engines: {node: '>= 0.10'} + hasBin: true + + slow-redact@0.3.2: + resolution: {integrity: sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==} + + solana-wallet@1.0.2: + resolution: {integrity: sha512-oZnLJvwBFnQ0Hf0vTuAUFizq59AhxDfoMpdDUuqo02seNsV7AbYl3QGJZBJ1uCr36cRJnXFr2NqI3RM2IDq62Q==} + + sonic-boom@2.8.0: + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + + split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-hex-prefix@1.0.0: + resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} + engines: {node: '>=6.5.0', npm: '>=3'} + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + symbol.inspect@1.0.1: + resolution: {integrity: sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ==} + + teslabot@1.5.0: + resolution: {integrity: sha512-e2MmELhCgrgZEGo7PQu/6bmYG36IDH+YrBI1iGm6jovXkeDIGa3pZ2WSqRjzkuw2vt1EqfkZoV5GpXgqL8QJVg==} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + thread-stream@0.15.2: + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + + tiny-secp256k1@2.2.4: + resolution: {integrity: sha512-FoDTcToPqZE454Q04hH9o2EhxWsm7pOSpicyHkgTwKhdKWdsTUuqfP5MLq3g+VjAtl2vSx6JpXGdwA2qpYkI0Q==} + engines: {node: '>=14.0.0'} + + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} + engines: {node: '>= 0.4'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tronweb@6.1.0: + resolution: {integrity: sha512-ANEr2YneA2frXTpsxDR21yk2cJLIvOdPe7dg7gu96TyqfVbS9eCrguNuN+qCUZOC/zW3n6R880bBDbEWKZiWzA==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + typedarray-to-buffer@4.0.0: + resolution: {integrity: sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==} + + typeforce@1.18.0: + resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + u3@0.1.1: + resolution: {integrity: sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==} + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + uint8array-tools@0.0.7: + resolution: {integrity: sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==} + engines: {node: '>=14.0.0'} + + uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + unstorage@1.17.2: + resolution: {integrity: sha512-cKEsD6iBWJgOMJ6vW1ID/SYuqNf8oN4yqRk8OYqaVQ3nnkJXOT1PSpaMh2QfzLs78UN5kSNRD2c/mgjT8tX7+w==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6.0.3 || ^7.0.0 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1.0.1 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + valibot@0.36.0: + resolution: {integrity: sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ==} + + validator@13.15.20: + resolution: {integrity: sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw==} + engines: {node: '>= 0.10'} + + varuint-bitcoin@1.1.2: + resolution: {integrity: sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + wif@2.0.6: + resolution: {integrity: sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yaml@2.1.3: + resolution: {integrity: sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==} + engines: {node: '>= 14'} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zone-file@2.0.0-beta.3: + resolution: {integrity: sha512-6tE3PSRcpN5lbTTLlkLez40WkNPc9vw/u1J2j6DBiy0jcVX48nCkWrx2EC+bWHqC2SLp069Xw4AdnYn/qp/W5g==} + engines: {node: '>=10'} + +snapshots: + + '@0no-co/graphql.web@1.2.0(graphql@16.12.0)': + optionalDependencies: + graphql: 16.12.0 + + '@0no-co/graphqlsp@1.15.1(graphql@16.12.0)(typescript@5.9.3)': + dependencies: + '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) + graphql: 16.12.0 + typescript: 5.9.3 + + '@adraffy/ens-normalize@1.10.1': {} + + '@adraffy/ens-normalize@1.11.1': {} + + '@babel/runtime@7.26.10': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/runtime@7.28.4': {} + + '@cosmjs/amino@0.32.3': + dependencies: + '@cosmjs/crypto': 0.32.4 + '@cosmjs/encoding': 0.32.3 + '@cosmjs/math': 0.32.4 + '@cosmjs/utils': 0.32.4 + + '@cosmjs/crypto@0.32.4': + dependencies: + '@cosmjs/encoding': 0.32.4 + '@cosmjs/math': 0.32.4 + '@cosmjs/utils': 0.32.4 + '@noble/hashes': 1.8.0 + bn.js: 5.2.2 + elliptic: 6.6.1 + libsodium-wrappers-sumo: 0.7.15 + + '@cosmjs/encoding@0.32.3': + dependencies: + base64-js: 1.5.1 + bech32: 1.1.4 + readonly-date: 1.0.0 + + '@cosmjs/encoding@0.32.4': + dependencies: + base64-js: 1.5.1 + bech32: 1.1.4 + readonly-date: 1.0.0 + + '@cosmjs/math@0.32.4': + dependencies: + bn.js: 5.2.2 + + '@cosmjs/proto-signing@0.32.3': + dependencies: + '@cosmjs/amino': 0.32.3 + '@cosmjs/crypto': 0.32.4 + '@cosmjs/encoding': 0.32.3 + '@cosmjs/math': 0.32.4 + '@cosmjs/utils': 0.32.4 + cosmjs-types: 0.9.0 + + '@cosmjs/utils@0.32.4': {} + + '@ethersproject/abi@5.7.0': + dependencies: + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/abstract-provider@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/networks': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/web': 5.8.0 + + '@ethersproject/abstract-provider@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/networks': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/web': 5.8.0 + + '@ethersproject/abstract-signer@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + + '@ethersproject/abstract-signer@5.8.0': + dependencies: + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + + '@ethersproject/address@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/rlp': 5.8.0 + + '@ethersproject/address@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/rlp': 5.8.0 + + '@ethersproject/base64@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + + '@ethersproject/base64@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + + '@ethersproject/basex@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/properties': 5.8.0 + + '@ethersproject/basex@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/properties': 5.8.0 + + '@ethersproject/bignumber@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + bn.js: 5.2.2 + + '@ethersproject/bignumber@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + bn.js: 5.2.2 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/bytes@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/constants@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + + '@ethersproject/constants@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + + '@ethersproject/contracts@5.7.0': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/transactions': 5.8.0 + + '@ethersproject/hash@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/base64': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/hash@5.8.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/base64': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/hdnode@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/basex': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/pbkdf2': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/sha2': 5.8.0 + '@ethersproject/signing-key': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/wordlists': 5.8.0 + + '@ethersproject/hdnode@5.8.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/basex': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/pbkdf2': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/sha2': 5.8.0 + '@ethersproject/signing-key': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/wordlists': 5.8.0 + + '@ethersproject/json-wallets@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/hdnode': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/pbkdf2': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/random': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/transactions': 5.8.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + '@ethersproject/json-wallets@5.8.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/hdnode': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/pbkdf2': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/random': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/transactions': 5.8.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + js-sha3: 0.8.0 + + '@ethersproject/keccak256@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/logger@5.8.0': {} + + '@ethersproject/networks@5.7.1': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/networks@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/pbkdf2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/sha2': 5.8.0 + + '@ethersproject/pbkdf2@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/sha2': 5.8.0 + + '@ethersproject/properties@5.7.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/properties@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/providers@5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/base64': 5.8.0 + '@ethersproject/basex': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/networks': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/random': 5.8.0 + '@ethersproject/rlp': 5.8.0 + '@ethersproject/sha2': 5.8.0 + '@ethersproject/strings': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/web': 5.8.0 + bech32: 1.1.4 + ws: 7.4.6(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@ethersproject/random@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/random@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/rlp@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/sha2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + hash.js: 1.1.7 + + '@ethersproject/sha2@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + hash.js: 1.1.7 + + '@ethersproject/signing-key@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + bn.js: 5.2.2 + elliptic: 6.5.4 + hash.js: 1.1.7 + + '@ethersproject/signing-key@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + bn.js: 5.2.2 + elliptic: 6.6.1 + hash.js: 1.1.7 + + '@ethersproject/solidity@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/sha2': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/strings@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/strings@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/transactions@5.7.0': + dependencies: + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/rlp': 5.8.0 + '@ethersproject/signing-key': 5.8.0 + + '@ethersproject/transactions@5.8.0': + dependencies: + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/rlp': 5.8.0 + '@ethersproject/signing-key': 5.8.0 + + '@ethersproject/units@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/wallet@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/hdnode': 5.8.0 + '@ethersproject/json-wallets': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/random': 5.8.0 + '@ethersproject/signing-key': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/wordlists': 5.8.0 + + '@ethersproject/web@5.7.1': + dependencies: + '@ethersproject/base64': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/web@5.8.0': + dependencies: + '@ethersproject/base64': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/wordlists@5.7.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/wordlists@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@gql.tada/cli-utils@1.7.2(@0no-co/graphqlsp@1.15.1(graphql@16.12.0)(typescript@5.9.3))(graphql@16.12.0)(typescript@5.9.3)': + dependencies: + '@0no-co/graphqlsp': 1.15.1(graphql@16.12.0)(typescript@5.9.3) + '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) + graphql: 16.12.0 + typescript: 5.9.3 + + '@gql.tada/internal@1.0.8(graphql@16.12.0)(typescript@5.9.3)': + dependencies: + '@0no-co/graphql.web': 1.2.0(graphql@16.12.0) + graphql: 16.12.0 + typescript: 5.9.3 + + '@graphql-typed-document-node/core@3.2.0(graphql@16.12.0)': + dependencies: + graphql: 16.12.0 + + '@kadena/chainweb-node-client@0.3.3(encoding@0.1.13)': + dependencies: + '@kadena/cryptography-utils': 0.3.3 + '@kadena/pactjs': 0.2.9 + '@kadena/types': 0.3.3 + '@types/isomorphic-fetch': 0.0.39 + cross-fetch: 3.1.8(encoding@0.1.13) + node-fetch: 2.6.13(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + '@kadena/client@0.5.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@kadena/chainweb-node-client': 0.3.3(encoding@0.1.13) + '@kadena/cryptography-utils': 0.3.3 + '@kadena/pactjs': 0.2.9 + '@kadena/types': 0.3.3 + '@walletconnect/sign-client': 2.8.6(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.8.6 + cross-fetch: 3.1.8(encoding@0.1.13) + debug: 4.3.7 + encoding: 0.1.13 + yaml: 2.1.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - supports-color + - uploadthing + - utf-8-validate + + '@kadena/cryptography-utils@0.3.3': + dependencies: + '@kadena/types': 0.3.3 + blakejs: 1.2.1 + buffer: 6.0.3 + tweetnacl: 1.0.3 + + '@kadena/cryptography-utils@0.4.4': + dependencies: + blakejs: 1.2.1 + buffer: 6.0.3 + tweetnacl: 1.0.3 + + '@kadena/pactjs@0.2.9': + dependencies: + '@kadena/types': 0.3.3 + bignumber.js: 9.3.1 + + '@kadena/types@0.3.3': {} + + '@kadena/types@0.6.2': {} + + '@msgpack/msgpack@3.1.2': {} + + '@multiversx/sdk-bls-wasm@0.3.5': {} + + '@multiversx/sdk-core@12.18.0': + dependencies: + '@multiversx/sdk-transaction-decoder': 1.0.2 + bech32: 1.1.4 + bignumber.js: 9.0.1 + blake2b: 2.1.3 + buffer: 6.0.3 + json-duplicate-key-handle: 1.0.0 + keccak: 3.0.2 + protobufjs: 7.2.4 + + '@multiversx/sdk-transaction-decoder@1.0.2': + dependencies: + bech32: 2.0.0 + + '@multiversx/sdk-wallet@4.2.0': + dependencies: + '@multiversx/sdk-bls-wasm': 0.3.5 + '@noble/ed25519': 1.7.3 + '@noble/hashes': 1.3.0 + bech32: 1.1.4 + bip39: 3.0.2 + blake2b: 2.1.3 + ed25519-hd-key: 1.1.2 + ed2curve: 0.3.0 + keccak: 3.0.1 + scryptsy: 2.1.0 + tweetnacl: 1.0.3 + uuid: 8.3.2 + + '@mysten/bcs@1.9.2': + dependencies: + '@mysten/utils': 0.2.0 + '@scure/base': 1.2.6 + + '@mysten/sui@1.44.0(typescript@5.9.3)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@mysten/bcs': 1.9.2 + '@mysten/utils': 0.2.0 + '@noble/curves': 1.9.4 + '@noble/hashes': 1.8.0 + '@protobuf-ts/grpcweb-transport': 2.11.1 + '@protobuf-ts/runtime': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 + '@scure/base': 1.2.6 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + gql.tada: 1.9.0(graphql@16.12.0)(typescript@5.9.3) + graphql: 16.12.0 + poseidon-lite: 0.2.1 + valibot: 0.36.0 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - typescript + + '@mysten/utils@0.2.0': + dependencies: + '@scure/base': 1.2.6 + + '@noble/ciphers@1.3.0': {} + + '@noble/curves@1.2.0': + dependencies: + '@noble/hashes': 1.3.2 + + '@noble/curves@1.4.2': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/curves@1.8.0': + dependencies: + '@noble/hashes': 1.7.0 + + '@noble/curves@1.9.1': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/curves@1.9.4': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/ed25519@1.7.3': {} + + '@noble/hashes@1.1.5': {} + + '@noble/hashes@1.2.0': {} + + '@noble/hashes@1.3.0': {} + + '@noble/hashes@1.3.2': {} + + '@noble/hashes@1.4.0': {} + + '@noble/hashes@1.7.0': {} + + '@noble/hashes@1.8.0': {} + + '@noble/secp256k1@1.7.1': {} + + '@noble/secp256k1@1.7.2': {} + + '@noble/secp256k1@3.0.0': {} + + '@polkadot/keyring@10.4.2(@polkadot/util-crypto@10.4.2(@polkadot/util@10.4.2))(@polkadot/util@10.4.2)': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/util': 10.4.2 + '@polkadot/util-crypto': 10.4.2(@polkadot/util@10.4.2) + + '@polkadot/networks@10.4.2': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/util': 10.4.2 + '@substrate/ss58-registry': 1.51.0 + + '@polkadot/types-augment@9.14.2': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/types': 9.14.2 + '@polkadot/types-codec': 9.14.2 + '@polkadot/util': 10.4.2 + + '@polkadot/types-codec@9.14.2': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/util': 10.4.2 + '@polkadot/x-bigint': 10.4.2 + + '@polkadot/types-create@9.14.2': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/types-codec': 9.14.2 + '@polkadot/util': 10.4.2 + + '@polkadot/types@9.14.2': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/keyring': 10.4.2(@polkadot/util-crypto@10.4.2(@polkadot/util@10.4.2))(@polkadot/util@10.4.2) + '@polkadot/types-augment': 9.14.2 + '@polkadot/types-codec': 9.14.2 + '@polkadot/types-create': 9.14.2 + '@polkadot/util': 10.4.2 + '@polkadot/util-crypto': 10.4.2(@polkadot/util@10.4.2) + rxjs: 7.8.2 + + '@polkadot/util-crypto@10.4.2(@polkadot/util@10.4.2)': + dependencies: + '@babel/runtime': 7.28.4 + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@polkadot/networks': 10.4.2 + '@polkadot/util': 10.4.2 + '@polkadot/wasm-crypto': 6.4.1(@polkadot/util@10.4.2)(@polkadot/x-randomvalues@10.4.2) + '@polkadot/x-bigint': 10.4.2 + '@polkadot/x-randomvalues': 10.4.2 + '@scure/base': 1.1.1 + ed2curve: 0.3.0 + tweetnacl: 1.0.3 + + '@polkadot/util@10.4.2': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/x-bigint': 10.4.2 + '@polkadot/x-global': 10.4.2 + '@polkadot/x-textdecoder': 10.4.2 + '@polkadot/x-textencoder': 10.4.2 + '@types/bn.js': 5.2.0 + bn.js: 5.2.2 + + '@polkadot/wasm-bridge@6.4.1(@polkadot/util@10.4.2)(@polkadot/x-randomvalues@10.4.2)': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/util': 10.4.2 + '@polkadot/x-randomvalues': 10.4.2 + + '@polkadot/wasm-crypto-asmjs@6.4.1(@polkadot/util@10.4.2)': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/util': 10.4.2 + + '@polkadot/wasm-crypto-init@6.4.1(@polkadot/util@10.4.2)(@polkadot/x-randomvalues@10.4.2)': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/util': 10.4.2 + '@polkadot/wasm-bridge': 6.4.1(@polkadot/util@10.4.2)(@polkadot/x-randomvalues@10.4.2) + '@polkadot/wasm-crypto-asmjs': 6.4.1(@polkadot/util@10.4.2) + '@polkadot/wasm-crypto-wasm': 6.4.1(@polkadot/util@10.4.2) + '@polkadot/x-randomvalues': 10.4.2 + + '@polkadot/wasm-crypto-wasm@6.4.1(@polkadot/util@10.4.2)': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/util': 10.4.2 + '@polkadot/wasm-util': 6.4.1(@polkadot/util@10.4.2) + + '@polkadot/wasm-crypto@6.4.1(@polkadot/util@10.4.2)(@polkadot/x-randomvalues@10.4.2)': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/util': 10.4.2 + '@polkadot/wasm-bridge': 6.4.1(@polkadot/util@10.4.2)(@polkadot/x-randomvalues@10.4.2) + '@polkadot/wasm-crypto-asmjs': 6.4.1(@polkadot/util@10.4.2) + '@polkadot/wasm-crypto-init': 6.4.1(@polkadot/util@10.4.2)(@polkadot/x-randomvalues@10.4.2) + '@polkadot/wasm-crypto-wasm': 6.4.1(@polkadot/util@10.4.2) + '@polkadot/wasm-util': 6.4.1(@polkadot/util@10.4.2) + '@polkadot/x-randomvalues': 10.4.2 + + '@polkadot/wasm-util@6.4.1(@polkadot/util@10.4.2)': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/util': 10.4.2 + + '@polkadot/x-bigint@10.4.2': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/x-global': 10.4.2 + + '@polkadot/x-global@10.4.2': + dependencies: + '@babel/runtime': 7.28.4 + + '@polkadot/x-randomvalues@10.4.2': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/x-global': 10.4.2 + + '@polkadot/x-textdecoder@10.4.2': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/x-global': 10.4.2 + + '@polkadot/x-textencoder@10.4.2': + dependencies: + '@babel/runtime': 7.28.4 + '@polkadot/x-global': 10.4.2 + + '@protobuf-ts/grpcweb-transport@2.11.1': + dependencies: + '@protobuf-ts/runtime': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 + + '@protobuf-ts/runtime-rpc@2.11.1': + dependencies: + '@protobuf-ts/runtime': 2.11.1 + + '@protobuf-ts/runtime@2.11.1': {} + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@scure/base@1.1.1': {} + + '@scure/base@1.1.9': {} + + '@scure/base@1.2.6': {} + + '@scure/bip32@1.1.3': + dependencies: + '@noble/hashes': 1.1.5 + '@noble/secp256k1': 1.7.2 + '@scure/base': 1.1.9 + + '@scure/bip32@1.4.0': + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip32@1.7.0': + dependencies: + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + + '@scure/bip39@1.1.0': + dependencies: + '@noble/hashes': 1.1.5 + '@scure/base': 1.1.9 + + '@scure/bip39@1.3.0': + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.6.0': + dependencies: + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.3.1 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-rc.1(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-core@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-numbers@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.9.3 + + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-rc.1(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 12.1.0 + typescript: 5.9.3 + + '@solana/errors@2.3.0(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.2 + typescript: 5.9.3 + + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@solana/spl-token@0.4.14(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + + '@solana/web3.js@1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.28.4 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0(encoding@0.1.13) + rpc-websockets: 9.3.1 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@stablelib/aead@1.0.1': {} + + '@stablelib/binary@1.0.1': + dependencies: + '@stablelib/int': 1.0.1 + + '@stablelib/blake2b@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/bytes@1.0.1': {} + + '@stablelib/chacha20poly1305@1.0.1': + dependencies: + '@stablelib/aead': 1.0.1 + '@stablelib/binary': 1.0.1 + '@stablelib/chacha': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/poly1305': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/chacha@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/constant-time@1.0.1': {} + + '@stablelib/ed25519@1.0.3': + dependencies: + '@stablelib/random': 1.0.2 + '@stablelib/sha512': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/hash@1.0.1': {} + + '@stablelib/hkdf@1.0.1': + dependencies: + '@stablelib/hash': 1.0.1 + '@stablelib/hmac': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/hmac@1.0.1': + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/int@1.0.1': {} + + '@stablelib/keyagreement@1.0.1': + dependencies: + '@stablelib/bytes': 1.0.1 + + '@stablelib/nacl@1.0.4': + dependencies: + '@stablelib/poly1305': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@stablelib/xsalsa20': 1.0.2 + + '@stablelib/pbkdf2@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/hmac': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/poly1305@1.0.1': + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/random@1.0.2': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/salsa20@1.0.2': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/sha256@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/sha512@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/wipe@1.0.1': {} + + '@stablelib/x25519@1.0.3': + dependencies: + '@stablelib/keyagreement': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 + + '@stablelib/xsalsa20@1.0.2': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/salsa20': 1.0.2 + '@stablelib/wipe': 1.0.1 + + '@stacks/auth@7.2.0(encoding@0.1.13)': + dependencies: + '@noble/secp256k1': 1.7.1 + '@stacks/common': 7.0.2 + '@stacks/encryption': 7.2.0 + '@stacks/network': 7.2.0(encoding@0.1.13) + '@stacks/profile': 7.2.0(encoding@0.1.13) + cross-fetch: 3.2.0(encoding@0.1.13) + jsontokens: 4.0.1 + transitivePeerDependencies: + - encoding + + '@stacks/common@7.0.2': {} + + '@stacks/encryption@7.2.0': + dependencies: + '@noble/hashes': 1.1.5 + '@noble/secp256k1': 1.7.1 + '@scure/bip39': 1.1.0 + '@stacks/common': 7.0.2 + base64-js: 1.5.1 + bs58: 5.0.0 + ripemd160-min: 0.0.6 + varuint-bitcoin: 1.1.2 + + '@stacks/network@7.2.0(encoding@0.1.13)': + dependencies: + '@stacks/common': 7.0.2 + cross-fetch: 3.2.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + '@stacks/profile@7.2.0(encoding@0.1.13)': + dependencies: + '@stacks/common': 7.0.2 + '@stacks/network': 7.2.0(encoding@0.1.13) + '@stacks/transactions': 7.2.0(encoding@0.1.13) + jsontokens: 4.0.1 + schema-inspector: 2.1.0 + zone-file: 2.0.0-beta.3 + transitivePeerDependencies: + - encoding + + '@stacks/storage@7.2.0(encoding@0.1.13)': + dependencies: + '@stacks/auth': 7.2.0(encoding@0.1.13) + '@stacks/common': 7.0.2 + '@stacks/encryption': 7.2.0 + '@stacks/network': 7.2.0(encoding@0.1.13) + base64-js: 1.5.1 + jsontokens: 4.0.1 + transitivePeerDependencies: + - encoding + + '@stacks/transactions@7.2.0(encoding@0.1.13)': + dependencies: + '@noble/hashes': 1.1.5 + '@noble/secp256k1': 1.7.1 + '@stacks/common': 7.0.2 + '@stacks/network': 7.2.0(encoding@0.1.13) + c32check: 2.0.0 + lodash.clonedeep: 4.5.0 + transitivePeerDependencies: + - encoding + + '@stacks/wallet-sdk@7.2.0(encoding@0.1.13)': + dependencies: + '@scure/bip32': 1.1.3 + '@scure/bip39': 1.1.0 + '@stacks/auth': 7.2.0(encoding@0.1.13) + '@stacks/common': 7.0.2 + '@stacks/encryption': 7.2.0 + '@stacks/network': 7.2.0(encoding@0.1.13) + '@stacks/profile': 7.2.0(encoding@0.1.13) + '@stacks/storage': 7.2.0(encoding@0.1.13) + '@stacks/transactions': 7.2.0(encoding@0.1.13) + c32check: 2.0.0 + jsontokens: 4.0.1 + zone-file: 2.0.0-beta.3 + transitivePeerDependencies: + - encoding + + '@substrate/ss58-registry@1.51.0': {} + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@taquito/axios-fetch-adapter@https://codeload.github.com/ecadlabs/axios-fetch-adapter/tar.gz/167684f522e90343b9f3439d9a43ac571e2396f6(axios@0.26.1)': + dependencies: + axios: 0.26.1 + + '@taquito/core@23.0.3': + dependencies: + json-stringify-safe: 5.0.1 + + '@taquito/http-utils@15.1.0': + dependencies: + '@vespaiach/axios-fetch-adapter': '@taquito/axios-fetch-adapter@https://codeload.github.com/ecadlabs/axios-fetch-adapter/tar.gz/167684f522e90343b9f3439d9a43ac571e2396f6(axios@0.26.1)' + axios: 0.26.1 + transitivePeerDependencies: + - debug + + '@taquito/local-forging@15.1.0': + dependencies: + '@taquito/utils': 15.1.0 + bignumber.js: 9.3.1 + + '@taquito/local-forging@23.0.3': + dependencies: + '@taquito/core': 23.0.3 + '@taquito/utils': 23.0.3 + bignumber.js: 9.3.1 + fast-text-encoding: 1.0.6 + + '@taquito/michel-codec@15.1.0': {} + + '@taquito/michelson-encoder@15.1.0': + dependencies: + '@taquito/rpc': 15.1.0 + '@taquito/utils': 15.1.0 + bignumber.js: 9.3.1 + fast-json-stable-stringify: 2.1.0 + transitivePeerDependencies: + - debug + + '@taquito/rpc@15.1.0': + dependencies: + '@taquito/http-utils': 15.1.0 + '@taquito/utils': 15.1.0 + bignumber.js: 9.3.1 + transitivePeerDependencies: + - debug + + '@taquito/signer@15.1.0': + dependencies: + '@stablelib/blake2b': 1.0.1 + '@stablelib/ed25519': 1.0.3 + '@stablelib/hmac': 1.0.1 + '@stablelib/nacl': 1.0.4 + '@stablelib/pbkdf2': 1.0.1 + '@stablelib/sha512': 1.0.1 + '@taquito/taquito': 15.1.0 + '@taquito/utils': 15.1.0 + '@types/bn.js': 5.2.0 + bip39: 3.1.0 + elliptic: 6.6.1 + pbkdf2: 3.1.5 + typedarray-to-buffer: 4.0.0 + transitivePeerDependencies: + - debug + + '@taquito/taquito@15.1.0': + dependencies: + '@taquito/http-utils': 15.1.0 + '@taquito/local-forging': 15.1.0 + '@taquito/michel-codec': 15.1.0 + '@taquito/michelson-encoder': 15.1.0 + '@taquito/rpc': 15.1.0 + '@taquito/utils': 15.1.0 + bignumber.js: 9.3.1 + rxjs: 6.6.7 + transitivePeerDependencies: + - debug + + '@taquito/utils@15.1.0': + dependencies: + '@stablelib/blake2b': 1.0.1 + '@stablelib/ed25519': 1.0.3 + '@types/bs58check': 2.1.2 + bignumber.js: 9.3.1 + blakejs: 1.2.1 + bs58check: 2.1.2 + buffer: 6.0.3 + elliptic: 6.6.1 + typedarray-to-buffer: 4.0.0 + + '@taquito/utils@23.0.3': + dependencies: + '@noble/curves': 1.9.7 + '@stablelib/blake2b': 1.0.1 + '@stablelib/ed25519': 1.0.3 + '@taquito/core': 23.0.3 + '@types/bs58check': 2.1.2 + bignumber.js: 9.3.1 + blakejs: 1.2.1 + bs58check: 3.0.1 + buffer: 6.0.3 + elliptic: 6.6.1 + typedarray-to-buffer: 4.0.0 + + '@ton/core@0.61.0(@ton/crypto@3.3.0)': + dependencies: + '@ton/crypto': 3.3.0 + symbol.inspect: 1.0.1 + + '@ton/crypto-primitives@2.1.0': + dependencies: + jssha: 3.2.0 + + '@ton/crypto@3.3.0': + dependencies: + '@ton/crypto-primitives': 2.1.0 + jssha: 3.2.0 + tweetnacl: 1.0.3 + + '@ton/ton@15.4.0(@ton/core@0.61.0(@ton/crypto@3.3.0))(@ton/crypto@3.3.0)': + dependencies: + '@ton/core': 0.61.0(@ton/crypto@3.3.0) + '@ton/crypto': 3.3.0 + axios: 1.13.2 + dataloader: 2.2.3 + symbol.inspect: 1.0.1 + teslabot: 1.5.0 + zod: 3.25.76 + transitivePeerDependencies: + - debug + + '@types/bn.js@4.11.6': + dependencies: + '@types/node': 24.10.1 + + '@types/bn.js@5.2.0': + dependencies: + '@types/node': 24.10.1 + + '@types/bs58check@2.1.2': + dependencies: + '@types/node': 24.10.1 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 24.10.1 + + '@types/isomorphic-fetch@0.0.39': {} + + '@types/node@11.11.6': {} + + '@types/node@12.20.55': {} + + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + + '@types/node@24.10.1': + dependencies: + undici-types: 7.16.0 + + '@types/pbkdf2@3.1.2': + dependencies: + '@types/node': 24.10.1 + + '@types/secp256k1@4.0.7': + dependencies: + '@types/node': 24.10.1 + + '@types/uuid@8.3.4': {} + + '@types/ws@7.4.7': + dependencies: + '@types/node': 24.10.1 + + '@types/ws@8.18.1': + dependencies: + '@types/node': 24.10.1 + + '@walletconnect/core@2.8.6(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.3 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.8.6 + '@walletconnect/utils': 2.8.6 + events: 3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - uploadthing + - utf-8-validate + + '@walletconnect/encoding@1.0.2': + dependencies: + is-typedarray: 1.0.0 + tslib: 1.14.1 + typedarray-to-buffer: 3.1.5 + + '@walletconnect/environment@1.0.1': + dependencies: + tslib: 1.14.1 + + '@walletconnect/events@1.0.1': + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + + '@walletconnect/heartbeat@1.2.1': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + + '@walletconnect/heartbeat@1.2.2': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + events: 3.3.0 + + '@walletconnect/jsonrpc-provider@1.0.13': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + tslib: 1.14.1 + + '@walletconnect/jsonrpc-types@1.0.3': + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + + '@walletconnect/jsonrpc-types@1.0.4': + dependencies: + events: 3.3.0 + keyvaluestorage-interface: 1.0.0 + + '@walletconnect/jsonrpc-utils@1.0.8': + dependencies: + '@walletconnect/environment': 1.0.1 + '@walletconnect/jsonrpc-types': 1.0.4 + tslib: 1.14.1 + + '@walletconnect/jsonrpc-ws-connection@1.0.16(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@walletconnect/keyvaluestorage@1.1.1': + dependencies: + '@walletconnect/safe-json': 1.0.2 + idb-keyval: 6.2.2 + unstorage: 1.17.2(idb-keyval@6.2.2) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/logger@2.1.3': + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 7.11.0 + + '@walletconnect/logger@3.0.0': + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 10.0.0 + + '@walletconnect/relay-api@1.0.11': + dependencies: + '@walletconnect/jsonrpc-types': 1.0.4 + + '@walletconnect/relay-auth@1.1.0': + dependencies: + '@noble/curves': 1.8.0 + '@noble/hashes': 1.7.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + uint8arrays: 3.1.1 + + '@walletconnect/safe-json@1.0.2': + dependencies: + tslib: 1.14.1 + + '@walletconnect/sign-client@2.8.6(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/core': 2.8.6(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.3 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.8.6 + '@walletconnect/utils': 2.8.6 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - uploadthing + - utf-8-validate + + '@walletconnect/time@1.0.2': + dependencies: + tslib: 1.14.1 + + '@walletconnect/types@2.22.4-canary-auth-3': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/types@2.8.6': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.3 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/utils@2.22.4-canary-auth-3(typescript@5.9.3)(zod@3.25.76)': + dependencies: + '@msgpack/msgpack': 3.1.2 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.0 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.22.4-canary-auth-3 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + blakejs: 1.2.1 + bs58: 6.0.0 + detect-browser: 5.3.0 + ox: 0.9.3(typescript@5.9.3)(zod@3.25.76) + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - typescript + - uploadthing + - zod + + '@walletconnect/utils@2.8.6': + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.8.6 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/window-getters@1.0.1': + dependencies: + tslib: 1.14.1 + + '@walletconnect/window-metadata@1.0.1': + dependencies: + '@walletconnect/window-getters': 1.0.1 + tslib: 1.14.1 + + abitype@1.1.1(typescript@5.9.3)(zod@3.25.76): + optionalDependencies: + typescript: 5.9.3 + zod: 3.25.76 + + aes-js@3.0.0: {} + + aes-js@4.0.0-beta.5: {} + + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + async@2.6.4: + dependencies: + lodash: 4.17.21 + + asynckit@0.4.0: {} + + atomic-sleep@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axios@0.26.1: + dependencies: + follow-redirects: 1.15.11 + transitivePeerDependencies: + - debug + + axios@1.12.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axios@1.13.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + backslash@0.2.2: {} + + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.1: {} + + base-x@5.0.1: {} + + base64-js@1.5.1: {} + + bech32@1.1.4: {} + + bech32@2.0.0: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.0.1: {} + + bignumber.js@9.1.2: {} + + bignumber.js@9.3.1: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bip174@2.1.1: {} + + bip32@4.0.0: + dependencies: + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + typeforce: 1.18.0 + wif: 2.0.6 + + bip39-light@1.0.7: + dependencies: + create-hash: 1.2.0 + pbkdf2: 3.1.5 + + bip39@3.0.2: + dependencies: + '@types/node': 11.11.6 + create-hash: 1.2.0 + pbkdf2: 3.1.5 + randombytes: 2.1.0 + + bip39@3.1.0: + dependencies: + '@noble/hashes': 1.8.0 + + bip66@1.1.5: + dependencies: + safe-buffer: 5.2.1 + + bitcoinjs-lib@6.1.7: + dependencies: + '@noble/hashes': 1.8.0 + bech32: 2.0.0 + bip174: 2.1.1 + bs58check: 3.0.1 + typeforce: 1.18.0 + varuint-bitcoin: 1.1.2 + + bitcoinjs-message@2.2.0: + dependencies: + bech32: 1.1.4 + bs58check: 2.1.2 + buffer-equals: 1.0.4 + create-hash: 1.2.0 + secp256k1: 3.8.1 + varuint-bitcoin: 1.1.2 + + blake2b-wasm@1.1.7: + dependencies: + nanoassert: 1.1.0 + + blake2b@2.1.3: + dependencies: + blake2b-wasm: 1.1.7 + nanoassert: 1.1.0 + + blakejs@1.2.1: {} + + bn.js@4.12.2: {} + + bn.js@5.2.0: {} + + bn.js@5.2.2: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.2 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + borsh@1.0.0: {} + + brorand@1.1.0: {} + + browserify-aes@1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.7 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + bs58@4.0.1: + dependencies: + base-x: 3.0.11 + + bs58@5.0.0: + dependencies: + base-x: 4.0.1 + + bs58@6.0.0: + dependencies: + base-x: 5.0.1 + + bs58check@2.1.2: + dependencies: + bs58: 4.0.1 + create-hash: 1.2.0 + safe-buffer: 5.2.1 + + bs58check@3.0.1: + dependencies: + '@noble/hashes': 1.8.0 + bs58: 5.0.0 + + buffer-equals@1.0.4: {} + + buffer-xor@1.0.3: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.9: + dependencies: + node-gyp-build: 4.8.4 + optional: true + + c32check@2.0.0: + dependencies: + '@noble/hashes': 1.8.0 + base-x: 4.0.1 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + capability@0.2.5: {} + + chalk@5.6.2: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + cipher-base@1.0.7: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@12.1.0: {} + + commander@14.0.2: {} + + commander@2.20.3: {} + + cookie-es@1.2.2: {} + + core-util-is@1.0.3: {} + + cosmjs-types@0.9.0: {} + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.7 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.3 + sha.js: 2.4.12 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.7 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.3 + safe-buffer: 5.2.1 + sha.js: 2.4.12 + + cross-fetch@3.1.8(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + cross-fetch@3.2.0(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + + dataloader@2.2.3: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + decode-uri-component@0.2.2: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + defu@6.1.4: {} + + delay@5.0.0: {} + + delayed-stream@1.0.0: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + destr@2.0.5: {} + + detect-browser@5.3.0: {} + + drbg.js@1.0.1: + dependencies: + browserify-aes: 1.2.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexify@4.1.3: + dependencies: + end-of-stream: 1.4.5 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + + ecpair@2.1.0: + dependencies: + randombytes: 2.1.0 + typeforce: 1.18.0 + wif: 2.0.6 + + ed25519-hd-key@1.1.2: + dependencies: + bip39: 3.0.2 + create-hmac: 1.1.7 + tweetnacl: 1.0.3 + + ed25519-hd-key@1.3.0: + dependencies: + create-hmac: 1.1.7 + tweetnacl: 1.0.3 + + ed2curve@0.3.0: + dependencies: + tweetnacl: 1.0.3 + + elliptic@6.5.4: + dependencies: + bn.js: 4.12.2 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + elliptic@6.6.1: + dependencies: + bn.js: 4.12.2 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + error-polyfill@0.1.3: + dependencies: + capability: 0.2.5 + o3: 1.0.3 + u3: 0.1.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + eth-sig-util@3.0.1: + dependencies: + ethereumjs-abi: 0.6.8 + ethereumjs-util: 5.2.1 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + + ethereum-cryptography@0.1.3: + dependencies: + '@types/pbkdf2': 3.1.2 + '@types/secp256k1': 4.0.7 + blakejs: 1.2.1 + browserify-aes: 1.2.0 + bs58check: 2.1.2 + create-hash: 1.2.0 + create-hmac: 1.1.7 + hash.js: 1.1.7 + keccak: 3.0.4 + pbkdf2: 3.1.5 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + scrypt-js: 3.0.1 + secp256k1: 4.0.4 + setimmediate: 1.0.5 + + ethereum-cryptography@2.2.1: + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + + ethereumjs-abi@0.6.8: + dependencies: + bn.js: 4.12.2 + ethereumjs-util: 6.2.1 + + ethereumjs-util@5.2.1: + dependencies: + bn.js: 4.12.2 + create-hash: 1.2.0 + elliptic: 6.6.1 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + safe-buffer: 5.2.1 + + ethereumjs-util@6.2.1: + dependencies: + '@types/bn.js': 4.11.6 + bn.js: 4.12.2 + create-hash: 1.2.0 + elliptic: 6.6.1 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + + ethereumjs-util@7.1.5: + dependencies: + '@types/bn.js': 5.2.0 + bn.js: 5.2.2 + create-hash: 1.2.0 + ethereum-cryptography: 0.1.3 + rlp: 2.2.7 + + ethers@5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 22.7.5 + aes-js: 4.0.0-beta.5 + tslib: 2.7.0 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ethjs-util@0.1.6: + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + + eventemitter3@5.0.1: {} + + events@3.3.0: {} + + evp_bytestokey@1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + + eyes@0.1.8: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-redact@3.5.0: {} + + fast-stable-stringify@1.0.0: {} + + fast-text-encoding@1.0.6: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + file-uri-to-path@1.0.0: {} + + filter-obj@1.1.0: {} + + follow-redirects@1.15.11: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + function-bind@1.1.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + google-protobuf@3.21.4: {} + + gopd@1.2.0: {} + + gql.tada@1.9.0(graphql@16.12.0)(typescript@5.9.3): + dependencies: + '@0no-co/graphql.web': 1.2.0(graphql@16.12.0) + '@0no-co/graphqlsp': 1.15.1(graphql@16.12.0)(typescript@5.9.3) + '@gql.tada/cli-utils': 1.7.2(@0no-co/graphqlsp@1.15.1(graphql@16.12.0)(typescript@5.9.3))(graphql@16.12.0)(typescript@5.9.3) + '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - graphql + + graphql@16.12.0: {} + + h3@1.15.4: + dependencies: + cookie-es: 1.2.2 + crossws: 0.3.5 + defu: 6.1.4 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.3 + radix3: 1.1.2 + ufo: 1.6.1 + uncrypto: 0.1.3 + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hash-base@3.1.2: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + http-errors@1.8.1: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + idb-keyval@6.2.2: {} + + ieee754@1.2.1: {} + + inherits@2.0.4: {} + + iron-webcrypto@1.2.1: {} + + is-callable@1.2.7: {} + + is-hex-prefixed@1.0.0: {} + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-typedarray@1.0.0: {} + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + stream-json: 1.9.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-sha256@0.9.0: {} + + js-sha3@0.8.0: {} + + json-duplicate-key-handle@1.0.0: + dependencies: + backslash: 0.2.2 + + json-stringify-safe@5.0.1: {} + + jsontokens@4.0.1: + dependencies: + '@noble/hashes': 1.8.0 + '@noble/secp256k1': 1.7.2 + base64-js: 1.5.1 + + jssha@3.2.0: {} + + keccak@3.0.1: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.4 + + keccak@3.0.2: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.4 + readable-stream: 3.6.2 + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.4 + readable-stream: 3.6.2 + + keyvaluestorage-interface@1.0.0: {} + + libsodium-sumo@0.7.15: {} + + libsodium-wrappers-sumo@0.7.15: + dependencies: + libsodium-sumo: 0.7.15 + + lodash.clonedeep@4.5.0: {} + + lodash.isequal@4.5.0: {} + + lodash@4.17.21: {} + + long@5.3.2: {} + + lru-cache@10.4.3: {} + + math-intrinsics@1.1.0: {} + + md5.js@1.3.5: + dependencies: + hash-base: 3.1.2 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + ms@2.1.3: {} + + multiformats@9.9.0: {} + + mustache@4.2.0: {} + + nan@2.23.1: {} + + nanoassert@1.1.0: {} + + near-api-js@0.45.1(encoding@0.1.13): + dependencies: + bn.js: 5.2.0 + borsh: 0.7.0 + bs58: 4.0.1 + depd: 2.0.0 + error-polyfill: 0.1.3 + http-errors: 1.8.1 + js-sha256: 0.9.0 + mustache: 4.2.0 + node-fetch: 2.7.0(encoding@0.1.13) + text-encoding-utf-8: 1.0.2 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - encoding + + near-hd-key@1.2.1: + dependencies: + bip39: 3.0.2 + create-hmac: 1.1.7 + tweetnacl: 1.0.3 + + near-seed-phrase@0.2.1: + dependencies: + bip39-light: 1.0.7 + bs58: 4.0.1 + near-hd-key: 1.2.1 + tweetnacl: 1.0.3 + + node-addon-api@2.0.2: {} + + node-addon-api@5.1.0: {} + + node-fetch-native@1.6.7: {} + + node-fetch@2.6.13(encoding@0.1.13): + dependencies: + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 + + node-fetch@2.7.0(encoding@0.1.13): + dependencies: + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 + + node-gyp-build@4.8.4: {} + + node-mock-http@1.0.3: {} + + normalize-path@3.0.0: {} + + o3@1.0.3: + dependencies: + capability: 0.2.5 + + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.1 + + on-exit-leak-free@0.2.0: {} + + on-exit-leak-free@2.1.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + ox@0.9.3(typescript@5.9.3)(zod@3.25.76): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.1(typescript@5.9.3)(zod@3.25.76) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - zod + + pbkdf2@3.1.5: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.3 + safe-buffer: 5.2.1 + sha.js: 2.4.12 + to-buffer: 1.2.2 + + picomatch@2.3.1: {} + + pino-abstract-transport@0.5.0: + dependencies: + duplexify: 4.1.3 + split2: 4.2.0 + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@4.0.0: {} + + pino-std-serializers@7.0.0: {} + + pino@10.0.0: + dependencies: + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.0.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + slow-redact: 0.3.2 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + + pino@7.11.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 0.2.0 + pino-abstract-transport: 0.5.0 + pino-std-serializers: 4.0.0 + process-warning: 1.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.1.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 2.8.0 + thread-stream: 0.15.2 + + poseidon-lite@0.2.1: {} + + possible-typed-array-names@1.1.0: {} + + process-nextick-args@2.0.1: {} + + process-warning@1.0.0: {} + + process-warning@5.0.0: {} + + protobufjs@7.2.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 24.10.1 + long: 5.3.2 + + proxy-from-env@1.1.0: {} + + query-string@7.1.3: + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + + quick-format-unescaped@4.0.4: {} + + radix3@1.1.2: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@4.1.2: {} + + readonly-date@1.0.0: {} + + real-require@0.1.0: {} + + real-require@0.2.0: {} + + regenerator-runtime@0.14.1: {} + + ripemd160-min@0.0.6: {} + + ripemd160@2.0.3: + dependencies: + hash-base: 3.1.2 + inherits: 2.0.4 + + rlp@2.2.7: + dependencies: + bn.js: 5.2.2 + + rpc-websockets@9.3.1: + dependencies: + '@swc/helpers': 0.5.17 + '@types/uuid': 8.3.4 + '@types/ws': 8.18.1 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + schema-inspector@2.1.0: + dependencies: + async: 2.6.4 + + scrypt-js@3.0.1: {} + + scryptsy@2.1.0: {} + + secp256k1@3.8.1: + dependencies: + bindings: 1.5.0 + bip66: 1.1.5 + bn.js: 4.12.2 + create-hash: 1.2.0 + drbg.js: 1.0.1 + elliptic: 6.6.1 + nan: 2.23.1 + safe-buffer: 5.2.1 + + secp256k1@4.0.4: + dependencies: + elliptic: 6.6.1 + node-addon-api: 5.1.0 + node-gyp-build: 4.8.4 + + semver@7.7.1: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + setimmediate@1.0.5: {} + + setprototypeof@1.2.0: {} + + sha.js@2.4.12: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + + slow-redact@0.3.2: {} + + solana-wallet@1.0.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10): + dependencies: + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10) + bs58: 5.0.0 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + sonic-boom@2.8.0: + dependencies: + atomic-sleep: 1.0.0 + + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + + split-on-first@1.1.0: {} + + split2@4.2.0: {} + + statuses@1.5.0: {} + + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + + stream-shift@1.0.3: {} + + strict-uri-encode@2.0.0: {} + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-hex-prefix@1.0.0: + dependencies: + is-hex-prefixed: 1.0.0 + + superstruct@2.0.2: {} + + symbol.inspect@1.0.1: {} + + teslabot@1.5.0: {} + + text-encoding-utf-8@1.0.2: {} + + thread-stream@0.15.2: + dependencies: + real-require: 0.1.0 + + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + + tiny-secp256k1@2.2.4: + dependencies: + uint8array-tools: 0.0.7 + + to-buffer@1.2.2: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + + toidentifier@1.0.1: {} + + tr46@0.0.3: {} + + tronweb@6.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@babel/runtime': 7.26.10 + axios: 1.12.2 + bignumber.js: 9.1.2 + ethereum-cryptography: 2.2.1 + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + eventemitter3: 5.0.1 + google-protobuf: 3.21.4 + semver: 7.7.1 + validator: 13.15.20 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + + tslib@1.14.1: {} + + tslib@2.7.0: {} + + tslib@2.8.1: {} + + tweetnacl-util@0.15.1: {} + + tweetnacl@1.0.3: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + + typedarray-to-buffer@4.0.0: {} + + typeforce@1.18.0: {} + + typescript@5.9.3: {} + + u3@0.1.1: {} + + ufo@1.6.1: {} + + uint8array-tools@0.0.7: {} + + uint8arrays@3.1.1: + dependencies: + multiformats: 9.9.0 + + uncrypto@0.1.3: {} + + undici-types@6.19.8: {} + + undici-types@7.16.0: {} + + unstorage@1.17.2(idb-keyval@6.2.2): + dependencies: + anymatch: 3.1.3 + chokidar: 4.0.3 + destr: 2.0.5 + h3: 1.15.4 + lru-cache: 10.4.3 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.1 + optionalDependencies: + idb-keyval: 6.2.2 + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + optional: true + + util-deprecate@1.0.2: {} + + uuid@8.3.2: {} + + valibot@0.36.0: {} + + validator@13.15.20: {} + + varuint-bitcoin@1.1.2: + dependencies: + safe-buffer: 5.2.1 + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + wif@2.0.6: + dependencies: + bs58check: 2.1.2 + + wrappy@1.0.2: {} + + ws@7.4.6(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + yaml@2.1.3: {} + + zod@3.25.76: {} + + zone-file@2.0.0-beta.3: {} diff --git a/shared/public/chain-logos/arbitrum.webp b/shared/public/chain-logos/arbitrum.webp new file mode 100644 index 000000000..01109e015 Binary files /dev/null and b/shared/public/chain-logos/arbitrum.webp differ diff --git a/shared/public/chain-logos/base.webp b/shared/public/chain-logos/base.webp new file mode 100644 index 000000000..a402e6264 Binary files /dev/null and b/shared/public/chain-logos/base.webp differ diff --git a/shared/public/chain-logos/btc-testnet.png b/shared/public/chain-logos/btc-testnet.png new file mode 100644 index 000000000..b991e4b73 Binary files /dev/null and b/shared/public/chain-logos/btc-testnet.png differ diff --git a/shared/public/chain-logos/chain-placeholder.png b/shared/public/chain-logos/chain-placeholder.png new file mode 100644 index 000000000..12975dfa5 Binary files /dev/null and b/shared/public/chain-logos/chain-placeholder.png differ diff --git a/shared/public/chain-logos/cosmos-cosmoshub-4.png b/shared/public/chain-logos/cosmos-cosmoshub-4.png new file mode 100644 index 000000000..7a2ebe45d Binary files /dev/null and b/shared/public/chain-logos/cosmos-cosmoshub-4.png differ diff --git a/shared/public/chain-logos/eip155-1.png b/shared/public/chain-logos/eip155-1.png new file mode 100644 index 000000000..db6015497 Binary files /dev/null and b/shared/public/chain-logos/eip155-1.png differ diff --git a/shared/public/chain-logos/eip155-10.png b/shared/public/chain-logos/eip155-10.png new file mode 100644 index 000000000..ff6ca5078 Binary files /dev/null and b/shared/public/chain-logos/eip155-10.png differ diff --git a/shared/public/chain-logos/eip155-100.png b/shared/public/chain-logos/eip155-100.png new file mode 100644 index 000000000..66a1db57e Binary files /dev/null and b/shared/public/chain-logos/eip155-100.png differ diff --git a/shared/public/chain-logos/eip155-137.png b/shared/public/chain-logos/eip155-137.png new file mode 100644 index 000000000..93f6e2051 Binary files /dev/null and b/shared/public/chain-logos/eip155-137.png differ diff --git a/shared/public/chain-logos/eip155-324.svg b/shared/public/chain-logos/eip155-324.svg new file mode 100644 index 000000000..db673359c --- /dev/null +++ b/shared/public/chain-logos/eip155-324.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/public/chain-logos/eip155-420.png b/shared/public/chain-logos/eip155-420.png new file mode 100644 index 000000000..da484cf41 Binary files /dev/null and b/shared/public/chain-logos/eip155-420.png differ diff --git a/shared/public/chain-logos/eip155-42161.png b/shared/public/chain-logos/eip155-42161.png new file mode 100644 index 000000000..a00737e8d Binary files /dev/null and b/shared/public/chain-logos/eip155-42161.png differ diff --git a/shared/public/chain-logos/eip155-421611.png b/shared/public/chain-logos/eip155-421611.png new file mode 100644 index 000000000..a982ac435 Binary files /dev/null and b/shared/public/chain-logos/eip155-421611.png differ diff --git a/shared/public/chain-logos/eip155-42220.png b/shared/public/chain-logos/eip155-42220.png new file mode 100644 index 000000000..9277441e0 Binary files /dev/null and b/shared/public/chain-logos/eip155-42220.png differ diff --git a/shared/public/chain-logos/eip155-43113.png b/shared/public/chain-logos/eip155-43113.png new file mode 100644 index 000000000..619576f3a Binary files /dev/null and b/shared/public/chain-logos/eip155-43113.png differ diff --git a/shared/public/chain-logos/eip155-44787.png b/shared/public/chain-logos/eip155-44787.png new file mode 100644 index 000000000..9277441e0 Binary files /dev/null and b/shared/public/chain-logos/eip155-44787.png differ diff --git a/shared/public/chain-logos/eip155-80001.png b/shared/public/chain-logos/eip155-80001.png new file mode 100644 index 000000000..5b8929387 Binary files /dev/null and b/shared/public/chain-logos/eip155-80001.png differ diff --git a/shared/public/chain-logos/erc20.svg b/shared/public/chain-logos/erc20.svg new file mode 100644 index 000000000..d80643917 --- /dev/null +++ b/shared/public/chain-logos/erc20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/public/chain-logos/eth.svg b/shared/public/chain-logos/eth.svg new file mode 100644 index 000000000..11ef7af30 --- /dev/null +++ b/shared/public/chain-logos/eth.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/public/chain-logos/githubLogo.svg b/shared/public/chain-logos/githubLogo.svg new file mode 100644 index 000000000..4cb6f620c --- /dev/null +++ b/shared/public/chain-logos/githubLogo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/public/chain-logos/kadena.png b/shared/public/chain-logos/kadena.png new file mode 100644 index 000000000..28f08cb08 Binary files /dev/null and b/shared/public/chain-logos/kadena.png differ diff --git a/shared/public/chain-logos/multiversx-1.svg b/shared/public/chain-logos/multiversx-1.svg new file mode 100644 index 000000000..402203c3f --- /dev/null +++ b/shared/public/chain-logos/multiversx-1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/public/chain-logos/multiversx_logo.svg b/shared/public/chain-logos/multiversx_logo.svg new file mode 100644 index 000000000..402203c3f --- /dev/null +++ b/shared/public/chain-logos/multiversx_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/public/chain-logos/near.png b/shared/public/chain-logos/near.png new file mode 100644 index 000000000..27913acd8 Binary files /dev/null and b/shared/public/chain-logos/near.png differ diff --git a/shared/public/chain-logos/polkadot.svg b/shared/public/chain-logos/polkadot.svg new file mode 100644 index 000000000..d800f5833 --- /dev/null +++ b/shared/public/chain-logos/polkadot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/public/chain-logos/settings.svg b/shared/public/chain-logos/settings.svg new file mode 100644 index 000000000..0d6f5507c --- /dev/null +++ b/shared/public/chain-logos/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/public/chain-logos/solana-5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp.png b/shared/public/chain-logos/solana-5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp.png new file mode 100644 index 000000000..0ba7236a9 Binary files /dev/null and b/shared/public/chain-logos/solana-5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp.png differ diff --git a/shared/public/chain-logos/solana_logo.png b/shared/public/chain-logos/solana_logo.png new file mode 100644 index 000000000..0f1602872 Binary files /dev/null and b/shared/public/chain-logos/solana_logo.png differ diff --git a/shared/public/chain-logos/stacks.png b/shared/public/chain-logos/stacks.png new file mode 100644 index 000000000..4f023ad07 Binary files /dev/null and b/shared/public/chain-logos/stacks.png differ diff --git a/shared/public/chain-logos/sui.png b/shared/public/chain-logos/sui.png new file mode 100644 index 000000000..f0e8dc545 Binary files /dev/null and b/shared/public/chain-logos/sui.png differ diff --git a/shared/public/chain-logos/tezos.svg b/shared/public/chain-logos/tezos.svg new file mode 100644 index 000000000..c54af4636 --- /dev/null +++ b/shared/public/chain-logos/tezos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/public/chain-logos/ton.png b/shared/public/chain-logos/ton.png new file mode 100644 index 000000000..6bb06e936 Binary files /dev/null and b/shared/public/chain-logos/ton.png differ diff --git a/shared/public/chain-logos/tron.png b/shared/public/chain-logos/tron.png new file mode 100644 index 000000000..7d37d203a Binary files /dev/null and b/shared/public/chain-logos/tron.png differ diff --git a/shared/public/chain-logos/walletconnect.png b/shared/public/chain-logos/walletconnect.png new file mode 100644 index 000000000..603c47d31 Binary files /dev/null and b/shared/public/chain-logos/walletconnect.png differ diff --git a/shared/public/chain-logos/westend-logo.svg b/shared/public/chain-logos/westend-logo.svg new file mode 100644 index 000000000..fb7cbc49f --- /dev/null +++ b/shared/public/chain-logos/westend-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/public/chain-logos/westend.svg b/shared/public/chain-logos/westend.svg new file mode 100644 index 000000000..fb7cbc49f --- /dev/null +++ b/shared/public/chain-logos/westend.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/shared/tsconfig.json b/shared/tsconfig.json new file mode 100644 index 000000000..c9ec403b2 --- /dev/null +++ b/shared/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ES2020", + "lib": ["ES2020", "DOM"], + "moduleResolution": "node", + "esModuleInterop": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "rootDir": ".", + "allowSyntheticDefaultImports": true + }, + "include": [ + "chains/**/*", + "helpers/**/*", + "wallets/**/*", + "types/*", + "index.ts" + ], + "exclude": [ + "node_modules", + "dist", + "**/*.spec.ts", + "**/*.test.ts" + ] +} diff --git a/shared/types/index.ts b/shared/types/index.ts new file mode 100644 index 000000000..eea524d65 --- /dev/null +++ b/shared/types/index.ts @@ -0,0 +1 @@ +export * from "./types"; diff --git a/shared/types/types.ts b/shared/types/types.ts new file mode 100644 index 000000000..17f5e7623 --- /dev/null +++ b/shared/types/types.ts @@ -0,0 +1,158 @@ +export interface AssetData { + symbol: string; + name: string; + contractAddress?: string; + balance?: string; + decimals?: number; +} + +export interface ChainData { + name: string; + id: string; + rpc: string[]; + slip44: number; + testnet: boolean; +} + +export interface ChainsMap { + [reference: string]: ChainData; +} + +export interface ChainMetadata { + name?: string; + logo: string; + rgb: string; +} + +export interface NamespaceMetadata { + [reference: string]: ChainMetadata; +} + +export interface ChainNamespaces { + [namespace: string]: ChainsMap; +} + +export interface ChainRequestRender { + label: string; + value: string; +} + +// Modern chain structure used by wallet-v2 +export interface ChainInfo { + chainId: string | number; + name: string; + logo: string; + rgb: string; + rpc: string; + namespace: string; + smartAccountEnabled?: boolean; +} + +export type ChainRecord = Record; + +export interface AccountAction { + method: string; + callback: (chainId: string, address: string) => Promise; +} + +export interface AccountBalances { + [account: string]: AssetData[]; +} + +export interface KadenaAccount { + publicKey: string; // Kadena public key + account: string; // Kadena account + chainId: any; // Kadena ChainId +} + +export interface IUTXO { + txid: string; + vout: number; + value: number; + status: { + confirmed: boolean; + block_height: number; + block_hash: string; + block_time: number; + }; +} + +export type SendCallsParams = { + version: string; + chainId: `0x${string}`; // Hex chain id + from: `0x${string}`; + calls: { + to?: `0x${string}` | undefined; + data?: `0x${string}` | undefined; + value?: `0x${string}` | undefined; // Hex value + }[]; + capabilities?: Record | undefined; +}; + +// capability names as string literals +export type CapabilityName = "atomicBatch" | "paymasterService" | "sessionKey"; +// Capability type where each key is a capability name and value has `supported` field +export type Capabilities = { + [K in CapabilityName]: { + supported: boolean; + }; +}; +// GetCapabilitiesResult type using mapped types +export type GetCapabilitiesResult = Record; + +export type GetCallsResult = { + status: "PENDING" | "CONFIRMED"; + receipts?: { + logs: { + address: `0x${string}`; + data: `0x${string}`; + topics: `0x${string}`[]; + }[]; + status: `0x${string}`; // Hex 1 or 0 for success or failure, respectively + blockHash: `0x${string}`; + blockNumber: `0x${string}`; + gasUsed: `0x${string}`; + transactionHash: `0x${string}`; + }[]; +}; + +export type WalletGrantPermissionsParameters = { + signer?: + | { + type: string; + data?: unknown | undefined; + } + | undefined; + permissions: readonly { + data: unknown; + policies: readonly { + data: unknown; + type: string; + }[]; + required?: boolean | undefined; + type: string; + }[]; + expiry: number; +}; + +export type WalletGrantPermissionsReturnType = { + expiry: number; + factory?: `0x${string}` | undefined; + factoryData?: string | undefined; + grantedPermissions: readonly { + data: unknown; + policies: readonly { + data: unknown; + type: string; + }[]; + required?: boolean | undefined; + type: string; + }[]; + permissionsContext: string; + signerData?: + | { + userOpBuilder?: `0x${string}` | undefined; + submitToAddress?: `0x${string}` | undefined; + } + | undefined; +}; diff --git a/shared/wallets/Bip122Lib.ts b/shared/wallets/Bip122Lib.ts new file mode 100644 index 000000000..07689ca70 --- /dev/null +++ b/shared/wallets/Bip122Lib.ts @@ -0,0 +1,439 @@ +import ECPairFactory from 'ecpair' +import * as bitcoin from 'bitcoinjs-lib' +import * as ecc from 'tiny-secp256k1' +import * as bip39 from 'bip39' +import BIP32Factory, { BIP32Interface } from 'bip32' +import bitcoinMessage from 'bitcoinjs-message' +import { schnorr } from '@noble/secp256k1' +import { BIP122_CHAINS, BIP122_TESTNET_ID, IBip122ChainId } from '../chains' +bitcoin.initEccLib(ecc) + +const ECPair = ECPairFactory(ecc) +const bip32 = BIP32Factory(ecc) +interface IInitArguments { + privateKey?: string +} + +interface IUTXO { + txid: string + vout: number + value: number + status: { + confirmed: boolean + block_height: number + block_hash: string + block_time: number + } +} + +interface ICreateTransaction { + network: bitcoin.Network + recipientAddress: string + amount: number + changeAddress: string + memo?: string + utxos: IUTXO[] + privateKeyWIF: string + feeRate: number +} + +interface IAddressData { + address: string + path: string + publicKey: string +} + +interface IPsbtInput { + address: string + index: number + sighashTypes: number[] +} + +interface ISignPsbt { + account: string + psbt: string + signInputs: IPsbtInput[] + broadcast: boolean + chainId: IBip122ChainId +} + +const validator = (pubkey: Buffer, msghash: Buffer, signature: Buffer): boolean => { + return ECPair.fromPublicKey(pubkey).verify(msghash, signature) +} + +/** + * Library + */ +export default class Bip122Lib { + private account: BIP32Interface + private mnemonic: string + private addresses = {} as Record> + private ordinals = {} as Record> + private keys = {} as Record< + IBip122ChainId, + Map + > + + constructor(key?: string) { + this.keys = Object.values(BIP122_CHAINS).reduce((acc, chain) => { + acc[chain.caip2] = new Map() + return acc + }, this.keys) + this.addresses = Object.values(BIP122_CHAINS).reduce((acc, chain) => { + acc[chain.caip2] = new Map() + return acc + }, this.addresses) + this.ordinals = Object.values(BIP122_CHAINS).reduce((acc, chain) => { + acc[chain.caip2] = new Map() + return acc + }, this.ordinals) + + this.mnemonic = key ? key : bip39.generateMnemonic() + const seed = bip39.mnemonicToSeedSync(this.mnemonic) + const root = bip32.fromSeed(seed) + this.account = bip32.fromBase58(root.toBase58()) + const addressIndex = (localStorage.getItem(`${seed}_index`) || 0) as number + this.loadAddresses(addressIndex) + } + + static async init({ privateKey }: IInitArguments) { + return new Bip122Lib(privateKey) + } + + public getAddress(chainId: IBip122ChainId) { + return Array.from(this.addresses[chainId].values())[0].address + } + + public getOrdinalsAddress(chainId: IBip122ChainId) { + return Array.from(this.ordinals[chainId].values())[0].address + } + + public getPrivateKey() { + return this.mnemonic + } + + public getAddresses(chainId: IBip122ChainId, intentions?: string[]) { + if (intentions && intentions[0] === 'ordinal') { + return this.ordinals[chainId] + } + return this.addresses[chainId] + } + + public async signMessage({ + message, + address, + protocol, + chainId + }: { + message: string + address: string + protocol?: string + chainId: IBip122ChainId + }) { + if (protocol && protocol !== 'ecdsa') { + throw new Error(`Supported signing protols: ecdsa, received: ${protocol}`) + } + const addressData = this.getAddressData(address, chainId) + if (!addressData) { + throw new Error(`Unkown address: ${address}`) + } + const keyData = this.keys[chainId].get(address)! + var keyPair = ECPair.fromWIF(keyData.wif) + var privateKey = keyPair.privateKey! + + let signature + if (this.isOrdinal(address, chainId)) { + const messageHash = bitcoin.crypto.sha256(Buffer.from(message)) + + const sig = await schnorr.sign(new Uint8Array(messageHash), new Uint8Array(privateKey)) + signature = Buffer.from(sig) + } else { + signature = bitcoinMessage.sign(message, privateKey, keyPair.compressed, { + segwitType: 'p2wpkh' + }) + } + + return { + signature: signature.toString('hex').replace('0x', ''), + address + } + } + + public async sendTransfer(params: { + account: string + recipientAddress: string + amount: string + changeAddress?: string + memo?: string + chainId: IBip122ChainId + }) { + const { account, recipientAddress, amount, changeAddress, memo, chainId } = params + const satoshis = parseInt(amount) + + const addressData = this.getAddressData(account, chainId) + if (!addressData) { + throw new Error(`Unkown address: ${account}`) + } + + if (satoshis < 0) { + throw new Error(`Invalid amount: ${amount}`) + } + + const utxos = (await this.getUTXOs(account, chainId)) as IUTXO[] + if (!utxos || utxos.length === 0) { + throw new Error(`No UTXOs found for address: ${account}`) + } + + let utxosValue = 0 + const utxosToSpend: IUTXO[] = [] + utxos.forEach(utxo => { + utxosValue += utxo.value + utxosToSpend.push(utxo) + if (utxosValue >= satoshis) { + return + } + }) + + const keyData = this.keys[chainId].get(account)! + const transaction = await this.createTransaction({ + network: keyData.network, + recipientAddress, + amount: satoshis, + changeAddress: changeAddress || account, + utxos: utxosToSpend, + privateKeyWIF: keyData.wif, + memo, + feeRate: await this.getFeeRate() + }) + return await this.broadcastTransaction(transaction, chainId) + } + + async getUTXOs(address: string, chainId: IBip122ChainId): Promise { + const isTestnet = this.isTestnet(chainId) + // make chain dynamic + return await ( + await fetch(`https://mempool.space${isTestnet ? '/testnet' : ''}/api/address/${address}/utxo`) + ).json() + } + + async broadcastTransaction(transaction: string, chainId: IBip122ChainId) { + const isTestnet = this.isTestnet(chainId) + const result = await fetch(`https://mempool.space${isTestnet ? '/testnet' : ''}/api/tx`, { + method: 'POST', + body: transaction + }) + + if (result.ok) { + return await result.text() + } + throw new Error('Error broadcasting transaction: ' + (await result.text())) + } + + getAvailableBalance(utxos: IUTXO[]) { + return utxos.reduce((acc, { value }) => acc + value, 0) + } + + private async getFeeRate() { + const defaultFeeRate = 2 + try { + const response = await fetch('https://mempool.space/api/v1/fees/recommended') + if (response.ok) { + const data = await response.json() + return parseInt(data?.economyFee ?? defaultFeeRate) + } + } catch (e) { + console.error('Error fetching fee rate', e) + } + return defaultFeeRate + } + + private generateAddress({ + index, + coinType, + chainId, + change = false, + taproot = false + }: { + index: number + coinType: string + chainId: IBip122ChainId + change?: boolean + taproot?: boolean + }) { + const network = this.getNetwork(coinType) + const path = `m/84'/${coinType}'/0'/${change ? 1 : 0}/${index}` + const child = this.account.derivePath(path) + let address + if (taproot) { + address = bitcoin.payments.p2tr({ + pubkey: child.publicKey.slice(1), + network + }).address! + } else { + address = bitcoin.payments.p2wpkh({ + pubkey: child.publicKey, + network + }).address! + } + const wif = child.toWIF() + this.keys[chainId].set(address, { wif, network }) + return { address, path, publicKey: child.publicKey.toString('hex') } + } + + private loadAddresses(startIndex = 0) { + console.log('Loading addresses...') + console.log('Keys:', this.keys) + console.log('Addresses:', this.addresses) + console.log('Ordinals:', this.ordinals) + Object.keys(this.keys).forEach(chainId => { + const data = BIP122_CHAINS[chainId as IBip122ChainId] + const addressesToLoad = startIndex + 20 + + for (let i = startIndex; i < addressesToLoad; i++) { + const addressParams = { + index: i, + chainId: data.caip2, + coinType: data.coinType + } + // payment addresses + const addressData = this.generateAddress(addressParams) + this.addresses[data.caip2].set(addressData.address, addressData) + // ordinals + const taprootAddress = this.generateAddress({ + ...addressParams, + taproot: true + }) + this.ordinals[data.caip2].set(taprootAddress.address, taprootAddress) + } + console.log('Loaded addresses:', this.addresses, this.ordinals) + }) + } + + private getNetwork(coinType: string) { + if (coinType === '0') { + return bitcoin.networks.bitcoin + } else if (coinType === '1') { + return bitcoin.networks.testnet + } + throw new Error(`Unsupported coin type: ${coinType}`) + } + + private async createTransaction({ + network, + recipientAddress, + amount, + changeAddress, + memo, + utxos, + privateKeyWIF, + feeRate + }: ICreateTransaction) { + const psbt = new bitcoin.Psbt({ network }) + const keyPair = ECPair.fromWIF(privateKeyWIF) + const payment = bitcoin.payments.p2wpkh({ + pubkey: keyPair.publicKey, + network: bitcoin.networks.testnet + }) + + utxos.forEach(utxo => { + psbt.addInput({ + hash: utxo.txid, + index: utxo.vout, + witnessUtxo: { + script: Buffer.from(payment.output?.toString('hex')!, 'hex'), + value: utxo.value + } + }) + }) + + psbt.addOutput({ + address: recipientAddress, + value: amount + }) + const change = this.calculateChange(utxos, amount, feeRate) + + if (change > 0) { + psbt.addOutput({ + address: changeAddress, + value: change + }) + } + + if (memo) { + const data = Buffer.from(memo, 'utf8') + const embed = bitcoin.payments.embed({ data: [data] }) + psbt.addOutput({ + script: embed.output!, + value: 0 + }) + } + + psbt.signAllInputs(keyPair) + + psbt.validateSignaturesOfInput(0, validator) + + psbt.finalizeAllInputs() + + const tx = psbt.extractTransaction() + + return tx.toHex() + } + + public async signPsbt({ account, psbt, signInputs, broadcast = false, chainId }: ISignPsbt) { + const keyData = this.keys[chainId].get(account)! + const keyPair = ECPair.fromWIF(keyData.wif) + const transaction = bitcoin.Psbt.fromBase64(psbt, { network: keyData.network }) + signInputs.forEach(({ address, index, sighashTypes }) => { + let keyPairToSignWith = keyPair + if (address !== account) { + const keyData = this.keys[chainId].get(address)! + keyPairToSignWith = ECPair.fromWIF(keyData.wif) + } + transaction.signInput(index, keyPairToSignWith, sighashTypes) + }) + transaction.validateSignaturesOfInput(0, validator) + transaction.finalizeAllInputs() + + if (!broadcast) { + return { + psbt: transaction.toBase64() + } + } + + const tx = transaction.extractTransaction() + const txId = await this.broadcastTransaction(tx.toHex(), chainId) + return { + psbt: transaction.toBase64(), + txid: txId + } + } + + // Helper function to calculate change + private calculateChange(utxos: IUTXO[], amount: number, feeRate: number): number { + const inputSum = utxos.reduce((sum, utxo) => sum + utxo.value, 0) + /** + * 10 bytes: This is an estimated fixed overhead for the transaction. + * 148 bytes: This is the average size of each input (UTXO). + * 34 bytes: This is the size of each output. + * The multiplication by 2 indicates that there are usually two outputs in a typical transaction (one for the recipient and one for change) + */ + const estimatedSize = 10 + 148 * utxos.length + 34 * 2 + const fee = estimatedSize * feeRate + const change = inputSum - amount - fee + return change + } + + private getAddressData(address: string, chainId: IBip122ChainId) { + const addressData = this.addresses[chainId].get(address) + if (addressData) return addressData + return this.ordinals[chainId].get(address) + } + + private isOrdinal(address: string, chainId: IBip122ChainId) { + return this.ordinals[chainId].has(address) + } + + private isTestnet(chainId: IBip122ChainId) { + return chainId.includes(BIP122_TESTNET_ID) + } +} diff --git a/shared/wallets/CosmosLib.ts b/shared/wallets/CosmosLib.ts new file mode 100644 index 000000000..0372c31c0 --- /dev/null +++ b/shared/wallets/CosmosLib.ts @@ -0,0 +1,65 @@ +import { Secp256k1Wallet, StdSignDoc } from '@cosmjs/amino' +import { fromHex } from '@cosmjs/encoding' +import { DirectSecp256k1Wallet } from '@cosmjs/proto-signing' +// @ts-expect-error +import { SignDoc } from '@cosmjs/proto-signing/build/codec/cosmos/tx/v1beta1/tx' +import { Wallet } from 'ethers' + +/** + * Constants + */ +const DEFAULT_PATH = "m/44'/118'/0'/0/0" +const DEFAULT_PREFIX = 'cosmos' + +/** + * Types + */ +interface IInitArguments { + mnemonic?: string + path?: string + prefix?: string +} + +/** + * Library + */ +export default class CosmosLib { + private mnemonic: string + private directSigner: DirectSecp256k1Wallet + private aminoSigner: Secp256k1Wallet + + constructor(mnemonic: string, directSigner: DirectSecp256k1Wallet, aminoSigner: Secp256k1Wallet) { + this.directSigner = directSigner + this.mnemonic = mnemonic + this.aminoSigner = aminoSigner + } + + static async init({ mnemonic, path, prefix }: IInitArguments) { + const wallet = mnemonic + ? Wallet.fromMnemonic(mnemonic, path ?? DEFAULT_PATH) + : Wallet.createRandom({ path: path ?? DEFAULT_PATH }) + const privateKey = fromHex(wallet.privateKey.replace('0x', '')) + const directSigner = await DirectSecp256k1Wallet.fromKey(privateKey, prefix ?? DEFAULT_PREFIX) + const aminoSigner = await Secp256k1Wallet.fromKey(privateKey, prefix ?? DEFAULT_PREFIX) + + return new CosmosLib(wallet.mnemonic.phrase, directSigner, aminoSigner) + } + + public getMnemonic() { + return this.mnemonic + } + + public async getAddress() { + const account = await this.directSigner.getAccounts() + + return account[0].address + } + + public async signDirect(address: string, signDoc: SignDoc) { + return await this.directSigner.signDirect(address, signDoc) + } + + public async signAmino(address: string, signDoc: StdSignDoc) { + return await this.aminoSigner.signAmino(address, signDoc) + } +} diff --git a/shared/wallets/EIP155Lib.ts b/shared/wallets/EIP155Lib.ts new file mode 100644 index 000000000..b4e7488df --- /dev/null +++ b/shared/wallets/EIP155Lib.ts @@ -0,0 +1,62 @@ +import { providers, Wallet } from 'ethers' + +/** + * Types + */ +interface IInitArgs { + mnemonic?: string +} +export interface EIP155Wallet { + getMnemonic(): string + getPrivateKey(): string + getAddress(): string + signMessage(message: string): Promise + _signTypedData(domain: any, types: any, data: any, _primaryType?: string): Promise + connect(provider: providers.JsonRpcProvider): Wallet + signTransaction(transaction: providers.TransactionRequest): Promise +} + +/** + * Library + */ +export default class EIP155Lib implements EIP155Wallet { + wallet: Wallet + + constructor(wallet: Wallet) { + this.wallet = wallet + } + + static init({ mnemonic }: IInitArgs) { + const wallet = mnemonic ? Wallet.fromMnemonic(mnemonic) : Wallet.createRandom() + + return new EIP155Lib(wallet) + } + + getMnemonic() { + return this.wallet.mnemonic.phrase + } + + getPrivateKey() { + return this.wallet.privateKey + } + + getAddress() { + return this.wallet.address + } + + signMessage(message: string) { + return this.wallet.signMessage(message) + } + + _signTypedData(domain: any, types: any, data: any, _primaryType?: string) { + return this.wallet._signTypedData(domain, types, data) + } + + connect(provider: providers.JsonRpcProvider) { + return this.wallet.connect(provider) + } + + signTransaction(transaction: providers.TransactionRequest) { + return this.wallet.signTransaction(transaction) + } +} diff --git a/shared/wallets/KadenaLib.ts b/shared/wallets/KadenaLib.ts new file mode 100644 index 000000000..a6825ea37 --- /dev/null +++ b/shared/wallets/KadenaLib.ts @@ -0,0 +1,48 @@ +import { restoreKeyPairFromSecretKey, genKeyPair, sign } from '@kadena/cryptography-utils' +import { IKeyPair } from '@kadena/types' + +interface IInitArguments { + secretKey?: string +} + +export default class KadenaLib { + keyPair: IKeyPair + + constructor(keyPair: IKeyPair) { + this.keyPair = keyPair + } + + static init({ secretKey }: IInitArguments) { + const keyPair = secretKey ? restoreKeyPairFromSecretKey(secretKey) : genKeyPair() + + return new KadenaLib(keyPair) + } + + public getAddress() { + return this.keyPair.publicKey + } + + public getSecretKey() { + return this.keyPair.secretKey! + } + + public signRequest(transaction: string) { + const signResponse = sign(transaction.toString(), this.keyPair) + + return { body: { cmd: transaction, sigs: [signResponse.sig] } } + } + + public quicksignRequest(transactions: any) { + const transaction = transactions.commandSigDatas[0].cmd + const signResponse = sign(transaction.toString(), this.keyPair) + + return { + responses: [ + { + outcome: { result: 'success', hash: signResponse.hash }, + commandSigData: { sigs: [{ sig: signResponse.sig, pubKey: this.keyPair.publicKey }] } + } + ] + } + } +} diff --git a/shared/wallets/MultiversxLib.ts b/shared/wallets/MultiversxLib.ts new file mode 100644 index 000000000..a6be49861 --- /dev/null +++ b/shared/wallets/MultiversxLib.ts @@ -0,0 +1,90 @@ +import { Transaction, SignableMessage } from '@multiversx/sdk-core' +import { Mnemonic, UserSecretKey, UserWallet, UserSigner } from '@multiversx/sdk-wallet' + +/** + * Types + */ +interface IInitArgs { + mnemonic?: string +} + +/** + * Library + */ +export default class MultiversxLib { + wallet: UserWallet + mnemonic: Mnemonic + password: string + + constructor(mnemonic: Mnemonic) { + this.mnemonic = mnemonic + this.password = 'password' // test purposes only + + this.wallet = UserWallet.fromMnemonic({ + password: this.password, + mnemonic: mnemonic.toString() + }) + } + + static init({ mnemonic }: IInitArgs) { + const mnemonicObj = mnemonic ? Mnemonic.fromString(mnemonic) : Mnemonic.generate() + + return new MultiversxLib(mnemonicObj) + } + + getMnemonic() { + const secretKey = this.mnemonic.getWords().join(' ') + + return secretKey + } + + getAddress() { + const secretKey = UserWallet.decryptSecretKey(this.wallet.toJSON(), this.password) + const address = secretKey.generatePublicKey().toAddress().bech32() + + return address + } + + async signMessage(message: string) { + const secretKey = UserWallet.decryptSecretKey(this.wallet.toJSON(), this.password) + const secretKeyHex = secretKey.hex() + + const signMessage = new SignableMessage({ + message: Buffer.from(message) + }) + + const signer = new UserSigner(UserSecretKey.fromString(secretKeyHex)) + const signature = await signer.sign(signMessage.serializeForSigning()) + + return { signature: signature.toString('hex') } + } + + async signTransaction(transaction: any) { + const secretKey = UserWallet.decryptSecretKey(this.wallet.toJSON(), this.password) + const secretKeyHex = secretKey.hex() + + const signTransaction = Transaction.fromPlainObject(transaction) + + const signer = new UserSigner(UserSecretKey.fromString(secretKeyHex)) + const signature = await signer.sign(signTransaction.serializeForSigning()) + + return { signature: signature.toString('hex') } + } + + async signTransactions(transactions: any[]) { + const secretKey = UserWallet.decryptSecretKey(this.wallet.toJSON(), this.password) + const secretKeyHex = secretKey.hex() + + const signatures = await Promise.all( + transactions.map(async (transaction: any): Promise => { + const signTransaction = Transaction.fromPlainObject(transaction) + const signer = new UserSigner(UserSecretKey.fromString(secretKeyHex)) + const signature = await signer.sign(signTransaction.serializeForSigning()) + + return { signature: signature.toString('hex') } + }) + ) + + return { signatures } + } +} diff --git a/shared/wallets/NearLib.ts b/shared/wallets/NearLib.ts new file mode 100644 index 000000000..3e2d698b5 --- /dev/null +++ b/shared/wallets/NearLib.ts @@ -0,0 +1,423 @@ +import { + InMemorySigner, + providers, + keyStores as nearKeyStores, + transactions as nearTransactions, + utils, + connect, + keyStores, + KeyPair, +} from "near-api-js"; +import { parseSeedPhrase } from "near-seed-phrase"; +import { AccessKeyView } from "near-api-js/lib/providers/provider"; +import { Schema, serialize } from "borsh"; + +import { NEAR_TEST_CHAINS, TNearChain } from "../chains/near"; + +const RPC_URL = "https://rpc.testnet.near.org"; + +interface Account { + accountId: string; + publicKey: string; +} + +interface Transaction { + signerId: string; + receiverId: string; + actions: Array; +} + +interface CreateTransactionsParams { + chainId: string; + transactions: Array; +} + +interface GetAccountsParams { + topic: string; +} + +interface SignInParams { + chainId: string; + topic: string; + permission: nearTransactions.FunctionCallPermission; + accounts: Array; +} + +interface SignOutParams { + chainId: string; + topic: string; + accounts: Array; +} + +interface SignTransactionsParams { + chainId: string; + topic: string; + transactions: Array; +} + +interface SignAndSendTransactionParams { + chainId: string; + topic: string; + transaction: nearTransactions.Transaction; +} + +interface SignAndSendTransactionsParams { + chainId: string; + topic: string; + transactions: Array; +} + +export interface SignMessageParamsNEP { + message: string; + recipient: string; + nonce: Buffer; + callbackUrl?: string; + state?: string; +} + +interface SignMessageParams { + chainId: string; + messageParams: SignMessageParamsNEP & { + accountId?: string; + }; +} + +interface SignedMessage { + accountId: string; + publicKey: string; + signature: string; + state?: string; +} + +export class MessagePayload { + tag: number; + message: string; + nonce: Buffer; + recipient: string; + callbackUrl?: string; + + constructor(data: SignMessageParamsNEP) { + // The tag's value is a hardcoded value as per + // defined in the NEP [NEP413](https://github.com/near/NEPs/blob/master/neps/nep-0413.md) + this.tag = 2147484061; + this.message = data.message; + this.nonce = data.nonce; + this.recipient = data.recipient; + if (data.callbackUrl) { + this.callbackUrl = data.callbackUrl; + } + } +} + +export const payloadSchema: Schema = { + struct: { + tag: "u32", + message: "string", + nonce: { array: { type: "u8", len: 32 } }, + recipient: "string", + callbackUrl: { option: "string" }, + }, +}; + +export default class NearWallet { + private networkId: string; + private keyStore: nearKeyStores.KeyStore; + + static async init(networkId: string, seedPhrase: string) { + // Derive keypair from seed phrase + const { secretKey, publicKey } = parseSeedPhrase(seedPhrase); + + const keyPair = KeyPair.fromString(secretKey); + + const keyStore = new keyStores.BrowserLocalStorageKeyStore(); + + await keyStore.setKey(networkId, "0xgancho.testnet", keyPair); + + return new NearWallet(networkId, keyStore); + } + + private constructor(networkId: string, keyStore: nearKeyStores.KeyStore) { + this.networkId = networkId; + this.keyStore = keyStore; + } + + getKeyStore() { + return this.keyStore; + } + + // Retrieve all imported accounts from wallet. + async getAllAccounts(): Promise> { + const accountIds = await this.keyStore.getAccounts(this.networkId); + + return Promise.all( + accountIds.map(async (accountId) => { + const keyPair = await this.keyStore.getKey(this.networkId, accountId); + + return { + accountId, + publicKey: keyPair.getPublicKey().toString(), + }; + }) + ); + } + + async createTransactions({ + chainId, + transactions, + }: CreateTransactionsParams): Promise> { + const provider = new providers.JsonRpcProvider( + NEAR_TEST_CHAINS[chainId].rpc[0] + ); + const txs: Array = []; + + const [block, accounts] = await Promise.all([ + provider.block({ finality: "final" }), + this.getAllAccounts(), + ]); + console.log("block", block); + for (let i = 0; i < transactions.length; i += 1) { + const transaction = transactions[i]; + const account = accounts.find( + (x) => x.accountId === transaction.signerId + ); + console.log("account", account); + if (!account) { + throw new Error("Invalid signer id"); + } + + const accessKey = await provider.query({ + request_type: "view_access_key", + finality: "final", + account_id: transaction.signerId, + public_key: account.publicKey, + }); + console.log("accessKey", accessKey); + txs.push( + nearTransactions.createTransaction( + transaction.signerId, + utils.PublicKey.from(account.publicKey), + transaction.receiverId, + accessKey.nonce + i + 1, + transaction.actions, + new Uint8Array(utils.serialize.base_decode(block.header.hash)) + ) + ); + } + + return txs; + } + + async getAccounts(): Promise> { + return this.getAllAccounts(); + } + + async signIn({ + chainId, + topic, + permission, + accounts, + }: SignInParams): Promise> { + const result: Array = []; + + for (let i = 0; i < accounts.length; i += 1) { + const account = accounts[i]; + + try { + const [transaction] = await this.createTransactions({ + chainId, + transactions: [ + { + signerId: account.accountId, + receiverId: account.accountId, + actions: [ + nearTransactions.addKey( + utils.PublicKey.from(account.publicKey), + nearTransactions.functionCallAccessKey( + permission.receiverId, + permission.methodNames, + permission.allowance + ) + ), + ], + }, + ], + }); + + await this.signAndSendTransaction({ chainId, topic, transaction }); + + result.push(account); + } catch (err) { + console.log( + `Failed to create FunctionCall access key for ${account.accountId}` + ); + console.error(err); + } + } + + return result; + } + + async signOut({ + chainId, + topic, + accounts, + }: SignOutParams): Promise> { + const result: Array = []; + + for (let i = 0; i < accounts.length; i += 1) { + const account = accounts[i]; + + try { + const [transaction] = await this.createTransactions({ + chainId, + transactions: [ + { + signerId: account.accountId, + receiverId: account.accountId, + actions: [ + nearTransactions.deleteKey( + utils.PublicKey.from(account.publicKey) + ), + ], + }, + ], + }); + + await this.signAndSendTransaction({ chainId, topic, transaction }); + } catch (err) { + console.log( + `Failed to remove FunctionCall access key for ${account.accountId}` + ); + console.error(err); + + result.push(account); + } + } + + return result; + } + + async signTransactions({ + chainId, + topic, + transactions, + }: SignTransactionsParams): Promise< + Array + > { + const networkId = chainId.split(":")[1]; + const signer = new InMemorySigner(this.keyStore); + const signedTxs: Array = []; + + for (let i = 0; i < transactions.length; i += 1) { + const transaction = transactions[i]; + + const [, signedTx] = await nearTransactions.signTransaction( + transaction, + signer, + transaction.signerId, + networkId + ); + + signedTxs.push(signedTx); + } + + return signedTxs; + } + + async signAndSendTransaction({ + chainId, + topic, + transaction, + }: SignAndSendTransactionParams): Promise { + const provider = new providers.JsonRpcProvider( + NEAR_TEST_CHAINS[chainId].rpc[0] + ); + const [signedTx] = await this.signTransactions({ + chainId, + topic, + transactions: [transaction], + }); + return provider.sendTransaction(signedTx); + } + + async signAndSendTransactions({ + chainId, + topic, + transactions, + }: SignAndSendTransactionsParams): Promise< + Array + > { + const provider = new providers.JsonRpcProvider( + NEAR_TEST_CHAINS[chainId].rpc[0] + ); + const signedTxs = await this.signTransactions({ + chainId, + topic, + transactions, + }); + const results: Array = []; + + for (let i = 0; i < signedTxs.length; i += 1) { + const signedTx = signedTxs[i]; + + results.push(await provider.sendTransaction(signedTx)); + } + + return results; + } + + async signMessage({ + chainId, + messageParams, + }: SignMessageParams): Promise { + const { message, nonce, recipient, callbackUrl, state, accountId } = + messageParams; + const nonceArray = nonce; //Buffer.from(nonce); + + if (nonceArray.length !== 32) { + throw Error("Expected nonce to be a 32 bytes buffer"); + } + + const accounts = await this.getAllAccounts(); + const account = accounts.find((acc) => acc.accountId === accountId); + + // If no accountId is provided in params default to the first accountId in accounts. + // in a real wallet it would default to the `active/selected` account + // this is because we should be able to use `signMessage` without `signIn`. + const accId = account ? account.accountId : accounts[0].accountId; + + const signer = new InMemorySigner(this.getKeyStore()); + const networkId = chainId.split(":")[1]; + + // Create the message payload and sign it + const payload = new MessagePayload({ + message, + nonce: nonceArray, + recipient, + callbackUrl, + }); + const encodedPayload = serialize(payloadSchema, payload); + const signed = await signer.signMessage(encodedPayload, accId, networkId); + + return { + accountId: accId, + publicKey: signed.publicKey.toString(), + signature: Buffer.from(signed.signature).toString("base64"), + }; + } +} + +// by spec, transactions are encoded as a buffer array +// but JSON.stringify converts it to an object +// so we need to account for both cases +export function decodeTransaction(transaction: Uint8Array | Object) { + try { + return nearTransactions.Transaction.decode( + Buffer.from(transaction as Uint8Array) + ); + } catch (error) { + return nearTransactions.Transaction.decode( + Buffer.from(Object.values(transaction as Object)) + ); + } +} diff --git a/shared/wallets/PolkadotLib.ts b/shared/wallets/PolkadotLib.ts new file mode 100644 index 000000000..4a82e8a7e --- /dev/null +++ b/shared/wallets/PolkadotLib.ts @@ -0,0 +1,65 @@ +import { Keyring } from '@polkadot/keyring' +import { cryptoWaitReady, mnemonicGenerate } from '@polkadot/util-crypto' +import { KeyringPair } from '@polkadot/keyring/types' +import { u8aToHex } from '@polkadot/util' +import { SignerPayloadJSON } from '@polkadot/types/types' +import { TypeRegistry } from '@polkadot/types' + +/** + * Types + */ +interface IInitArguments { + mnemonic?: string +} + +/** + * Library + */ +export default class PolkadotLib { + keypair: KeyringPair + mnemonic: string + registry: TypeRegistry + + constructor(keypair: KeyringPair, mnemonic: string) { + this.keypair = keypair + this.mnemonic = mnemonic + this.registry = new TypeRegistry() + } + + static async init({ mnemonic }: IInitArguments) { + // wait till WASM is initialized, in case it is not initialized already (WASM is required for 'sr25519'). + await cryptoWaitReady() + + // create a keyring to load the account. + const keyring = new Keyring({ type: 'sr25519', ss58Format: 1 }) + + mnemonic = mnemonic || mnemonicGenerate() + const keypair = keyring.createFromUri(mnemonic) + + return new PolkadotLib(keypair, mnemonic) + } + + public getAddress() { + return this.keypair.address + } + + public getMnemonic() { + return this.mnemonic + } + + public async signMessage(message: string) { + return { + signature: u8aToHex(this.keypair.sign(message)) + } + } + + public async signTransaction(payload: SignerPayloadJSON) { + this.registry.setSignedExtensions(payload.signedExtensions) + const txPayload = this.registry.createType('ExtrinsicPayload', payload, { + version: payload.version + }) + + const { signature } = txPayload.sign(this.keypair) + return { signature } + } +} diff --git a/shared/wallets/SolanaLib.ts b/shared/wallets/SolanaLib.ts new file mode 100644 index 000000000..f43fe581e --- /dev/null +++ b/shared/wallets/SolanaLib.ts @@ -0,0 +1,271 @@ +import { + Keypair, + Connection, + SendOptions, + VersionedTransaction, + PublicKey, + Transaction, + SystemProgram +} from '@solana/web3.js' +import bs58 from 'bs58' +import nacl from 'tweetnacl' +import { + getAssociatedTokenAddress, + createTransferInstruction, + TOKEN_PROGRAM_ID, + getOrCreateAssociatedTokenAccount +} from '@solana/spl-token' +import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '../chains' + +/** + * Types + */ +interface IInitArguments { + secretKey?: Uint8Array +} + +/** + * Library + */ +export default class SolanaLib { + keypair: Keypair + + constructor(keypair: Keypair) { + this.keypair = keypair + } + + static init({ secretKey }: IInitArguments) { + const keypair = secretKey ? Keypair.fromSecretKey(secretKey) : Keypair.generate() + + return new SolanaLib(keypair) + } + + public async getAddress() { + return await this.keypair.publicKey.toBase58() + } + + public getSecretKey() { + return this.keypair.secretKey.toString() + } + + public async signMessage( + params: SolanaLib.SignMessage['params'] + ): Promise { + const signature = nacl.sign.detached(bs58.decode(params.message), this.keypair.secretKey) + const bs58Signature = bs58.encode(signature) + + return { signature: bs58Signature } + } + + public async signTransaction( + params: SolanaLib.SignTransaction['params'] + ): Promise { + const transaction = this.deserialize(params.transaction) + this.sign(transaction) + + return { + transaction: this.serialize(transaction), + signature: bs58.encode(transaction.signatures[0]) + } + } + + public async signAndSendTransaction( + params: SolanaLib.SignAndSendTransaction['params'], + chainId: string + ): Promise { + const rpc = { ...SOLANA_TEST_CHAINS, ...SOLANA_MAINNET_CHAINS }[chainId]?.rpc + + if (!rpc) { + throw new Error('There is no RPC URL for the provided chain') + } + + const connection = new Connection(rpc) + const transaction = this.deserialize(params.transaction) + this.sign(transaction) + + const signature = await connection.sendTransaction(transaction, { + maxRetries: 3, + preflightCommitment: 'confirmed', + ...params.options + }) + + return { signature } + } + + public async signAllTransactions( + params: SolanaLib.SignAllTransactions['params'] + ): Promise { + const signedTransactions = params.transactions.map(transaction => { + const transactionObj = this.deserialize(transaction) + + this.sign(transactionObj) + + return this.serialize(transactionObj) + }) + + return { transactions: signedTransactions } + } + + private serialize(transaction: VersionedTransaction): string { + return Buffer.from(transaction.serialize()).toString('base64') + } + + private deserialize(transaction: string): VersionedTransaction { + let bytes: Uint8Array + try { + bytes = bs58.decode(transaction) + } catch { + // Convert base64 to Uint8Array to avoid type issues + const buffer = Buffer.from(transaction, 'base64') + bytes = new Uint8Array(buffer) + } + + return VersionedTransaction.deserialize(bytes) + } + + private sign(transaction: VersionedTransaction) { + transaction.sign([this.keypair]) + } + + /** + * Send SOL to a recipient + * @param recipientAddress The recipient's address + * @param amount The amount to send in lamports (as a bigint) + * @returns The transaction signature/hash + */ + public async sendSol(recipientAddress: string, chainId: string, amount: bigint): Promise { + console.log({ chainId }) + const rpc = { ...SOLANA_TEST_CHAINS, ...SOLANA_MAINNET_CHAINS }[chainId]?.rpc + + if (!rpc) { + throw new Error('There is no RPC URL for the provided chain') + } + + const connection = new Connection(rpc, 'confirmed') + const fromPubkey = this.keypair.publicKey + const toPubkey = new PublicKey(recipientAddress) + + // Create a simple SOL transfer transaction + const transaction = new Transaction().add( + SystemProgram.transfer({ + fromPubkey, + toPubkey, + lamports: amount + }) + ) + + // Get recent blockhash + const { blockhash } = await connection.getLatestBlockhash('confirmed') + transaction.recentBlockhash = blockhash + transaction.feePayer = fromPubkey + + // Sign the transaction + transaction.sign(this.keypair) + + // Send and confirm the transaction + const signature = await connection.sendRawTransaction(transaction.serialize()) + + // Wait for confirmation + await connection.confirmTransaction(signature, 'confirmed') + + return signature + } + + /** + * Send an SPL token to a recipient + * @param tokenAddress The token's mint address + * @param recipientAddress The recipient's address + * @param amount The amount to send (as a bigint) + * @returns The transaction signature/hash + */ + public async sendSplToken( + tokenAddress: string, + recipientAddress: string, + chainId: string, + amount: bigint + ): Promise { + const rpc = { ...SOLANA_TEST_CHAINS, ...SOLANA_MAINNET_CHAINS }[chainId]?.rpc + + if (!rpc) { + throw new Error('There is no RPC URL for the provided chain') + } + + const connection = new Connection(rpc, 'confirmed') + const fromWallet = this.keypair + const fromPubkey = fromWallet.publicKey + const toPubkey = new PublicKey(recipientAddress) + const mint = new PublicKey(tokenAddress) + + // Get sender's token account (create if it doesn't exist) + const fromTokenAccount = await getOrCreateAssociatedTokenAccount( + connection, + fromWallet, + mint, + fromPubkey + ) + + // Check if recipient has a token account WITHOUT creating one + const associatedTokenAddress = await getAssociatedTokenAddress(mint, toPubkey) + + const recipientTokenAccount = await connection.getAccountInfo(associatedTokenAddress) + + if (!recipientTokenAccount) { + throw new Error( + `Recipient ${recipientAddress} doesn't have a token account for this SPL token. Transaction cannot proceed.` + ) + } + + // Create transfer instruction to existing account + const transferInstruction = createTransferInstruction( + fromTokenAccount.address, + associatedTokenAddress, + fromPubkey, + amount, + [], + TOKEN_PROGRAM_ID + ) + + // Create transaction and add the transfer instruction + const transaction = new Transaction().add(transferInstruction) + + // Get recent blockhash + const { blockhash } = await connection.getLatestBlockhash('confirmed') + transaction.recentBlockhash = blockhash + transaction.feePayer = fromPubkey + + // Sign the transaction + transaction.sign(fromWallet) + + // Send and confirm the transaction + const signature = await connection.sendRawTransaction(transaction.serialize()) + + // Wait for confirmation + await connection.confirmTransaction(signature, 'confirmed') + + return signature + } +} + +export namespace SolanaLib { + type RPCRequest = { + params: Params + result: Result + } + + export type SignMessage = RPCRequest<{ message: string }, { signature: string }> + + export type SignTransaction = RPCRequest< + { transaction: string }, + { transaction: string; signature: string } + > + + export type SignAndSendTransaction = RPCRequest< + { transaction: string; options?: SendOptions }, + { signature: string } + > + + export type SignAllTransactions = RPCRequest< + { transactions: string[] }, + { transactions: string[] } + > +} diff --git a/shared/wallets/StacksLib.ts b/shared/wallets/StacksLib.ts new file mode 100644 index 000000000..e5305299a --- /dev/null +++ b/shared/wallets/StacksLib.ts @@ -0,0 +1,202 @@ +import { generateWallet, generateSecretKey, Wallet } from '@stacks/wallet-sdk' +import { + broadcastTransaction, + getAddressFromPrivateKey, + getAddressFromPublicKey, + makeSTXTokenTransfer, + privateKeyToPublic, + signMessageHashRsv, + publicKeyFromSignatureRsv, + publicKeyToHex, +} from '@stacks/transactions' +import { networkFromName, StacksNetworks } from '@stacks/network' +import { STACKS_MAINNET, STACKS_TESTNET, STACKS_TESTNET_CAIP2 } from '../chains' +import { STACKS_MAINNET_CAIP2 } from '../chains' +import { sha256 } from '@noble/hashes/sha2' + +/** + * Types + */ +interface IInitArgs { + mnemonic?: string +} +export interface StacksWallet { + // getMnemonic(): string + // getPrivateKey(): string + // getAddress(): string + // signMessage(message: string): Promise + // _signTypedData(domain: any, types: any, data: any, _primaryType?: string): Promise + // connect(provider: providers.JsonRpcProvider): Wallet + // signTransaction(transaction: providers.TransactionRequest): Promise +} + +/** + * Library + */ +export default class StacksLib implements StacksWallet { + wallet: Wallet + accounts: { + mainnet: { + address: string + publicKey: string + } + testnet: { + address: string + publicKey: string + } + } + mnemonic: string + + constructor(wallet: Wallet, mnemonic: string) { + this.wallet = wallet + this.accounts = { + mainnet: { + address: getAddressFromPrivateKey( + wallet.accounts[0].stxPrivateKey, + networkFromName('mainnet') + ), + publicKey: publicKeyToHex(privateKeyToPublic(wallet.accounts[0].stxPrivateKey)) + }, + testnet: { + address: getAddressFromPrivateKey( + wallet.accounts[0].stxPrivateKey, + networkFromName('testnet') + ), + publicKey: publicKeyToHex(privateKeyToPublic(wallet.accounts[0].stxPrivateKey)) + } + } + this.mnemonic = mnemonic + } + + static async init({ mnemonic }: IInitArgs) { + const password = 'password' + const secretKey = mnemonic ? mnemonic : generateSecretKey() + + const wallet = await generateWallet({ + secretKey, + password + }) + console.log('stackswallet', wallet) + return new StacksLib(wallet, secretKey) + } + + getMnemonic() { + return this.mnemonic + } + + getPrivateKey() { + return this.wallet.configPrivateKey + } + + getAddress(chainId: string) { + if (chainId === STACKS_MAINNET_CAIP2) { + return this.accounts.mainnet.address + } else if (chainId === STACKS_TESTNET_CAIP2) { + return this.accounts.testnet.address + } + console.error( + `No stacks address found for chainId: ${chainId}, supported chains: ${STACKS_MAINNET_CAIP2}, ${STACKS_TESTNET_CAIP2}` + ) + return '' + } + + getAddresses() { + return { + mainnet: this.accounts.mainnet.address, + testnet: this.accounts.testnet.address + } + } + + getAccounts() { + return this.accounts + } + + async sendTransfer(request: { + sender: string + recipient: string + amount: number + chainId: string + }) { + const address = this.getAddress(request.chainId) + if (address !== request.sender) { + throw new Error(`Invalid sender pubkey/address: ${request.sender}, expected: ${address}`) + } + const network = request.chainId === STACKS_MAINNET_CAIP2 ? 'mainnet' : 'testnet' + + const tx = await makeSTXTokenTransfer({ + recipient: request.recipient, + amount: request.amount, + senderKey: this.wallet.accounts[0].stxPrivateKey, + network + }) + console.log('tx', tx) + const result = (await broadcastTransaction({ + transaction: tx, + network + })) as { error?: string; reason?: string; txid?: string } + console.log('result', result) + if (result.error) { + throw new Error( + `Transaction broadcast failed: ${(result as any)?.error}: ${(result as any)?.reason}` + ) + } + + console.log('Transaction broadcasted! TXID:', tx.txid()) + + return { + txId: result.txid + } + } + + signMessage(request: { message: string; address: string; chainId: string }) { + const address = this.getAddress(request.chainId) + if (address !== request.address) { + throw new Error(`Invalid sender pubkey/address: ${request.address}, expected: ${address}`) + } + + const network = this.getNetworkFromAddress(address) + console.log('signMessage', request.message, network, address) + + /** two separate ways to sign & validate signatures, choose the better one */ + // const hash = Buffer.from(sha256(request.message)).toString('hex') + // const sig1 = signWithKey(this.wallet.accounts[0].stxPrivateKey, hash) + // const pubKey = publicKeyFromSignatureVrs(hash, sig1) + // // Skip the recovery params bytes from signature and then verify + // const isValid = verifySignature(sig1.slice(2), hash, pubKey) + + const hash = Buffer.from(sha256(request.message)).toString('hex') + const signature = signMessageHashRsv({ + messageHash: hash, + privateKey: this.wallet.accounts[0].stxPrivateKey + }) + + console.log('signature', signature) + const pubKey = publicKeyFromSignatureRsv(hash, signature) + + console.log('isValid', getAddressFromPublicKey(pubKey, network), address) + + if (getAddressFromPublicKey(pubKey, network) !== address) { + throw new Error( + `Signing failed, expected address: ${address}, got: ${getAddressFromPublicKey( + pubKey, + network + )}` + ) + } + + return { + signature + } + } + + private getNetworkFromAddress(address: string) { + switch (address) { + case this.accounts.mainnet.address: + return 'mainnet' + case this.accounts.testnet.address: + return 'testnet' + default: + throw new Error(`Invalid address: ${address}`) + } + } +} diff --git a/shared/wallets/SuiLib.ts b/shared/wallets/SuiLib.ts new file mode 100644 index 000000000..9ff60be5b --- /dev/null +++ b/shared/wallets/SuiLib.ts @@ -0,0 +1,143 @@ +import * as bip39 from 'bip39' +import { mnemonicToSeedSync } from 'bip39' +import { Ed25519Keypair, Ed25519PublicKey } from '@mysten/sui/keypairs/ed25519' +import { verifyPersonalMessageSignature } from '@mysten/sui/verify' +import { derivePath } from 'ed25519-hd-key' +import { SerialTransactionExecutor, Transaction } from '@mysten/sui/transactions' +import { SuiClient } from '@mysten/sui/client' + +interface IInitArguments { + mnemonic?: string +} + +interface ISignMessageArguments { + message: string +} + +interface ISignTransactionArguments { + transaction: string + chainId: string +} + +interface ISignAndExecuteTransactionArguments { + transaction: string + chainId: string +} + +const SUI_PATH = "m/44'/784'/0'/0'/0'" + +/** + * Library + */ +export default class SuiLib { + private keypair: Ed25519Keypair + private mnemonic: string + private suiClients: Record = {} + private publicKey: Ed25519PublicKey + + constructor(mnemonic?: string) { + this.mnemonic = mnemonic ? mnemonic : bip39.generateMnemonic() + const seed = mnemonicToSeedSync(this.mnemonic) + const { key } = derivePath(SUI_PATH, seed.toString('hex')) + + this.keypair = Ed25519Keypair.fromSecretKey(new Uint8Array(key)) + this.publicKey = this.keypair.getPublicKey() + console.log('Sui Address:', this.publicKey.toSuiAddress()) + } + + static async init({ mnemonic }: IInitArguments) { + return new SuiLib(mnemonic) + } + + public getPublicKey() { + return this.publicKey.toBase64() + } + + public getAddress() { + return this.publicKey.toSuiAddress() + } + + public getMnemonic() { + return this.mnemonic + } + + public getAccounts(): { address: string; pubkey: string }[] { + return [{ address: this.getAddress(), pubkey: this.getPublicKey() }] + } + + public async signMessage({ message }: ISignMessageArguments) { + const messageToSign = new TextEncoder().encode(message) + + const signature = await this.keypair.signPersonalMessage(messageToSign) + + // Output + console.log('Signature:', signature) + console.log('Public Key:', this.keypair.getPublicKey().toBase64()) + + const verified = await verifyPersonalMessageSignature(messageToSign, signature.signature) + console.log('Verified:', verified, verified.equals(this.keypair.getPublicKey())) + + return { + signature: signature.signature, + publicKey: this.keypair.getPublicKey().toBase64() + } + } + + public async signTransaction({ transaction, chainId }: ISignTransactionArguments) { + const tx = Transaction.from(transaction) + const client = this.getSuiClient(chainId) + console.log('tx', tx) + const signature = await tx.sign({ signer: this.keypair, client }) + console.log('signature', signature) + const transactionBytes = Buffer.from(await tx.build({ client })).toString('base64') + console.log('transactionBytes', transactionBytes) + return { + transactionBytes, + signature: signature.signature + } + } + + public async signAndExecuteTransaction({ + transaction, + chainId + }: ISignAndExecuteTransactionArguments) { + const tx = Transaction.from(transaction) + const client = this.getSuiClient(chainId) + const executor = new SerialTransactionExecutor({ signer: this.keypair, client }) + const result = await executor.executeTransaction(tx) + console.log('result', result) + return result + } + + private getSuiClient(chainId: string) { + if (this.suiClients[chainId]) { + return this.suiClients[chainId] + } + + switch (chainId) { + case 'sui:mainnet': + this.suiClients[chainId] = new SuiClient({ url: 'https://fullnode.mainnet.sui.io/' }) + break + case 'sui:testnet': + this.suiClients[chainId] = new SuiClient({ url: 'https://fullnode.testnet.sui.io/' }) + break + case 'sui:devnet': + this.suiClients[chainId] = new SuiClient({ url: 'https://fullnode.devnet.sui.io/' }) + break + default: + throw new Error(`Unknown chainId: ${chainId}`) + } + return this.suiClients[chainId] + } + + public async getJsonTransactionFromBase64(transaction: string) { + try { + const tx = Transaction.from(transaction) + const jsonTx = await tx.toJSON() + return jsonTx + } catch (e) { + console.error('Error decoding transaction', e) + return undefined + } + } +} diff --git a/shared/wallets/TezosLib.ts b/shared/wallets/TezosLib.ts new file mode 100644 index 000000000..8e2db75ad --- /dev/null +++ b/shared/wallets/TezosLib.ts @@ -0,0 +1,109 @@ +import { TezosToolkit } from '@taquito/taquito' +import { InMemorySigner } from '@taquito/signer' +import { localForger } from '@taquito/local-forging' +import { Wallet } from 'ethers/' + +/** + * Constants + */ +const DEFAULT_PATH = "m/44'/1729'/0'/0'" +const DEFAULT_CURVE = 'ed25519' + +/** + * Types + */ +interface IInitArguments { + mnemonic?: string + path?: string + curve?: 'ed25519' | 'secp256k1' +} + +/** + * Library + */ +export default class TezosLib { + tezos: TezosToolkit + signer: InMemorySigner + mnemonic: string + secretKey: string + publicKey: string + address: string + curve: 'ed25519' | 'secp256k1' + + constructor( + tezos: TezosToolkit, + mnemonic: string, + signer: InMemorySigner, + secretKey: string, + publicKey: string, + address: string, + curve: 'ed25519' | 'secp256k1' + ) { + this.tezos = tezos + this.mnemonic = mnemonic + this.signer = signer + this.secretKey = secretKey + this.publicKey = publicKey + this.address = address + this.curve = curve + } + + static async init({ mnemonic, path, curve }: IInitArguments) { + const params = { + mnemonic: mnemonic ?? Wallet.createRandom().mnemonic.phrase, + derivationPath: path ?? DEFAULT_PATH, + curve: curve ?? DEFAULT_CURVE + } + + const Tezos = new TezosToolkit('https://mainnet.api.tez.ie') + + const signer = InMemorySigner.fromMnemonic(params) + + Tezos.setSignerProvider(signer) + + const secretKey = await signer.secretKey() + const publicKey = await signer.publicKey() + const address = await signer.publicKeyHash() + + return new TezosLib(Tezos, params.mnemonic, signer, secretKey, publicKey, address, params.curve) + } + + public getMnemonic() { + return this.mnemonic + } + + public getPublicKey() { + return this.publicKey + } + + public getCurve() { + return this.curve + } + + public getAddress() { + return this.address + } + + public async signTransaction(transaction: any) { + const prepared = await this.tezos.prepare.batch( + transaction.map((tx: any) => ({ + amount: tx.amount, + to: tx.destination, + kind: tx.kind, + mutez: true + })) + ) + + const forged = await localForger.forge(prepared.opOb) + + const tx = await this.signer.sign(forged, new Uint8Array([3])) + + const hash = await this.tezos.rpc.injectOperation(tx.sbytes) + + return hash + } + + public async signPayload(payload: any) { + return await this.signer.sign(payload) + } +} diff --git a/shared/wallets/TonLib.ts b/shared/wallets/TonLib.ts new file mode 100644 index 000000000..5f7460bbd --- /dev/null +++ b/shared/wallets/TonLib.ts @@ -0,0 +1,211 @@ +import { KeyPair, keyPairFromSeed, keyPairFromSecretKey, sign, signVerify } from '@ton/crypto' +import { + WalletContractV4, + TonClient, + internal, + Address, + Transaction, + Cell, + Message, + address, + beginCell, + storeMessage +} from '@ton/ton' +import { TON_MAINNET_CHAINS, TON_TEST_CHAINS } from '../chains' + +/** + * Types + */ +interface IInitArguments { + secretKey?: string + seed?: string +} + +/** + * Library + */ +export default class TonLib { + keypair: KeyPair + wallet: WalletContractV4 + + constructor(keypair: KeyPair) { + this.keypair = keypair + this.wallet = WalletContractV4.create({ workchain: 0, publicKey: keypair.publicKey }) + } + + static async init({ secretKey, seed }: IInitArguments) { + let keypair: KeyPair + + if (secretKey) { + keypair = keyPairFromSecretKey(Buffer.from(secretKey, 'hex')) + } else if (seed) { + keypair = keyPairFromSeed(Buffer.from(seed, 'hex')) + } else { + // Generate random keypair using crypto.getRandomValues + const seed = crypto.getRandomValues(new Uint8Array(32)) + keypair = keyPairFromSeed(Buffer.from(seed)) + } + + return new TonLib(keypair) + } + + public async getAddress() { + return this.wallet.address.toString({ bounceable: false }) + } + + public getSecretKey() { + return this.keypair.secretKey.toString('hex') + } + + public async signMessage( + params: TonLib.SignMessage['params'] + ): Promise { + const signature = sign(Buffer.from(params.message), this.keypair.secretKey) + return { + signature: signature.toString('base64'), + publicKey: this.keypair.publicKey.toString('base64') + } + } + + public async sendMessage( + params: TonLib.SendMessage['params'], + chainId: string + ): Promise { + const client = this.getTonClient(chainId) + const walletContract = client.open(this.wallet) + const seqno = await walletContract.getSeqno() + const messages = (params.messages || []).map(m => { + const amountBigInt = typeof m.amount === 'string' ? BigInt(m.amount) : BigInt(m.amount) + return internal({ + to: Address.parse(m.address), + value: amountBigInt, + body: m.payload ?? 'Test transfer from ton WalletConnect' + }) + }) + + const transfer = walletContract.createTransfer({ + seqno, + secretKey: this.keypair.secretKey, + messages + }) + + await walletContract.send(transfer) + + // Build external-in message for the result + const message: Message = { + info: { + type: 'external-in', + src: null, + dest: Address.parse(this.wallet.address.toString()), + importFee: BigInt(0) + }, + init: null, + body: transfer + } + + const externalMessageCell = beginCell() + .store(storeMessage(message, { forceRef: true })) + .endCell() + + return externalMessageCell.toBoc().toString('base64') + } + + public async signData(params: TonLib.SignData['params']): Promise { + const payload: TonLib.SignData['params'] = params + + const dataToSign = this.getToSign(params) + const signature = sign(dataToSign, this.keypair.secretKey as unknown as Buffer) + const addressStr = await this.getAddress() + + const result = { + signature: signature.toString('base64'), + address: addressStr, + publicKey: this.keypair.publicKey.toString('base64'), + timestamp: Math.floor(Date.now() / 1000), + domain: + typeof window !== 'undefined' && window.location && window.location.hostname + ? window.location.hostname + : 'unknown', + payload + } + + try { + const verified = signVerify( + dataToSign, + Buffer.from(result.signature, 'base64'), + this.keypair.publicKey + ) + console.log('TON signData verified:', verified) + } catch (e) { + console.warn('TON signData verification failed to run', e) + } + + return result + } + + private getTonClient(chainId: string): TonClient { + const rpc = { ...TON_TEST_CHAINS, ...TON_MAINNET_CHAINS }[chainId]?.rpc + + if (!rpc) { + throw new Error('There is no RPC URL for the provided chain') + } + + return new TonClient({ + endpoint: rpc, + apiKey: process.env.NEXT_PUBLIC_TON_CENTER_API_KEY + }) + } + + private getToSign(params: TonLib.SignData['params']): Buffer { + if (params.type === 'text') { + return Buffer.from(params.text) + } else if (params.type === 'binary') { + return Buffer.from(params.bytes) + } else if (params.type === 'cell') { + return Buffer.from(params.cell) + } else { + throw new Error('Unsupported sign data type') + } + } +} + +export namespace TonLib { + type RPCRequest = { + params: Params + result: Result + } + + export type SignMessage = RPCRequest< + { message: string }, + { signature: string; publicKey: string } + > + + export type SendMessage = RPCRequest< + { + valid_until?: number + from?: string + messages: Array<{ + address: string + amount: number | string + payload?: string + stateInit?: string + extra_currency?: Record + }> + }, + string + > + + export type SignData = RPCRequest< + | { type: 'text'; text: string; from?: string } + | { type: 'binary'; bytes: string; from?: string } + | { type: 'cell'; schema: string; cell: string; from?: string }, + { + signature: string + address: string + publicKey: string + timestamp: number + domain: string + payload: unknown + } + > +} diff --git a/shared/wallets/TronLib.ts b/shared/wallets/TronLib.ts new file mode 100644 index 000000000..2e2b2d8d5 --- /dev/null +++ b/shared/wallets/TronLib.ts @@ -0,0 +1,57 @@ +import { TronWeb, utils } from 'tronweb' + +/** + * Types + */ +interface IInitArguments { + privateKey: string +} + +/** + * Library + */ +export default class TronLib { + privateKey: string + tronWeb: TronWeb + + constructor(privateKey: string) { + this.privateKey = privateKey + this.tronWeb = new TronWeb({ + // Nile TestNet, if you want to use in MainNet, change the fullHost to 'https://api.trongrid.io', or use tronWeb.setFullNode + fullHost: 'https://nile.trongrid.io/', + privateKey: privateKey + }) + } + + static async init({ privateKey }: IInitArguments) { + if (!privateKey) { + const account = utils.accounts.generateAccount() + return new TronLib(account.privateKey) + } else { + return new TronLib(privateKey) + } + } + + public getAddress() { + return this.tronWeb.defaultAddress.base58 + } + + public createAccount() { + return this.tronWeb.createAccount() + } + + public setFullNode(node: string) { + return this.tronWeb.setFullNode(node) + } + + public async signMessage(message: string) { + const signedtxn = await this.tronWeb.trx.signMessageV2(message) + return signedtxn + } + + public async signTransaction(transaction: any) { + // The transaction parameter is expected to be unwrapped already. + const signedtxn = await this.tronWeb.trx.sign(transaction) + return signedtxn + } +} diff --git a/shared/wallets/index.ts b/shared/wallets/index.ts new file mode 100644 index 000000000..eee66009e --- /dev/null +++ b/shared/wallets/index.ts @@ -0,0 +1,20 @@ +/** + * Barrel export for all wallet libraries + */ + +export { default as EIP155Lib } from "./EIP155Lib"; +export { default as SolanaLib } from "./SolanaLib"; +export { default as CosmosLib } from "./CosmosLib"; +export { default as PolkadotLib } from "./PolkadotLib"; +export { default as NearLib } from "./NearLib"; +export { default as KadenaLib } from "./KadenaLib"; +export { default as MultiversxLib } from "./MultiversxLib"; +export { default as StacksLib } from "./StacksLib"; +export { default as SuiLib } from "./SuiLib"; +export { default as TezosLib } from "./TezosLib"; +export { default as TonLib } from "./TonLib"; +export { default as TronLib } from "./TronLib"; +export { default as Bip122Lib } from "./Bip122Lib"; + +// Re-export types +export type { EIP155Wallet } from "./EIP155Lib";