From 2dc4ddf51c9e785df7a744a484061d754231adc7 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 12:48:47 +0200 Subject: [PATCH 01/51] first commit --- .env.example | 17 + .eslintrc.cjs | 36 + .gitignore | 42 + README.md | 28 + next.config.mjs | 29 + package.json | 47 + pnpm-lock.yaml | 4944 ++++++++++++++++++++++++++++++++ postcss.config.cjs | 8 + prettier.config.mjs | 6 + public/favicon.ico | Bin 0 -> 15406 bytes src/env.mjs | 42 + src/pages/_app.tsx | 39 + src/pages/api/trpc/[trpc].ts | 19 + src/pages/index.tsx | 33 + src/server/api/root.ts | 14 + src/server/api/routers/post.ts | 32 + src/server/api/trpc.ts | 92 + src/styles/globals.css | 3 + src/utils/api.ts | 68 + tailwind.config.ts | 14 + tsconfig.json | 35 + 21 files changed, 5548 insertions(+) create mode 100644 .env.example create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 README.md create mode 100644 next.config.mjs create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.cjs create mode 100644 prettier.config.mjs create mode 100644 public/favicon.ico create mode 100644 src/env.mjs create mode 100644 src/pages/_app.tsx create mode 100644 src/pages/api/trpc/[trpc].ts create mode 100644 src/pages/index.tsx create mode 100644 src/server/api/root.ts create mode 100644 src/server/api/routers/post.ts create mode 100644 src/server/api/trpc.ts create mode 100644 src/styles/globals.css create mode 100644 src/utils/api.ts create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7088e05 --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +# walletconnect projectId: +# you can get it from https://cloud.walletconnect.com/ +# by creating a new project with email & password +# you don't need a wallet for this example +WALLET_CONNECT_PROJECT_ID = "walletconnect_project_id" + +# ------------------------------------------------------------------------------ +# Since the ".env" file is gitignored, you can use the ".env.example" file to +# build a new ".env" file when you clone the repo. Keep this file up-to-date +# when you add new variables to `.env`. + +# This file will be committed to version control, so make sure not to have any +# secrets in it. If you are cloning this repo, create a copy of this file named +# ".env" and populate it with your secrets. + +# When adding additional environment variables, the schema in "/src/env.mjs" +# should be updated accordingly. diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..79cb511 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,36 @@ +/** @type {import("eslint").Linter.Config} */ +const config = { + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, + }, + plugins: ["@typescript-eslint"], + extends: [ + "next/core-web-vitals", + "plugin:@typescript-eslint/recommended-type-checked", + "plugin:@typescript-eslint/stylistic-type-checked", + ], + rules: { + // These opinionated rules are enabled in stylistic-type-checked above. + // Feel free to reconfigure them to your own preference. + "@typescript-eslint/array-type": "off", + "@typescript-eslint/consistent-type-definitions": "off", + + "@typescript-eslint/consistent-type-imports": [ + "warn", + { + prefer: "type-imports", + fixStyle: "inline-type-imports", + }, + ], + "@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_" }], + "@typescript-eslint/no-misused-promises": [ + 2, + { + checksVoidReturn: { attributes: false }, + }, + ], + }, +}; + +module.exports = config; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2971a0b --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# database +/prisma/db.sqlite +/prisma/db.sqlite-journal + +# next.js +/.next/ +/out/ +next-env.d.ts + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +# do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables +.env +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo diff --git a/README.md b/README.md new file mode 100644 index 0000000..fba19ed --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# Create T3 App + +This is a [T3 Stack](https://create.t3.gg/) project bootstrapped with `create-t3-app`. + +## What's next? How do I make an app with this? + +We try to keep this project as simple as possible, so you can start with just the scaffolding we set up for you, and add additional things later when they become necessary. + +If you are not familiar with the different technologies used in this project, please refer to the respective docs. If you still are in the wind, please join our [Discord](https://t3.gg/discord) and ask for help. + +- [Next.js](https://nextjs.org) +- [NextAuth.js](https://next-auth.js.org) +- [Prisma](https://prisma.io) +- [Tailwind CSS](https://tailwindcss.com) +- [tRPC](https://trpc.io) + +## Learn More + +To learn more about the [T3 Stack](https://create.t3.gg/), take a look at the following resources: + +- [Documentation](https://create.t3.gg/) +- [Learn the T3 Stack](https://create.t3.gg/en/faq#what-learning-resources-are-currently-available) — Check out these awesome tutorials + +You can check out the [create-t3-app GitHub repository](https://github.com/t3-oss/create-t3-app) — your feedback and contributions are welcome! + +## How do I deploy this? + +Follow our deployment guides for [Vercel](https://create.t3.gg/en/deployment/vercel), [Netlify](https://create.t3.gg/en/deployment/netlify) and [Docker](https://create.t3.gg/en/deployment/docker) for more information. diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..7df4049 --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,29 @@ +/** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful + * for Docker builds. + */ +await import("./src/env.mjs"); + +/** @type {import("next").NextConfig} */ +const config = { + reactStrictMode: true, + + webpack: (config) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + config.resolve.fallback = { fs: false, net: false, tls: false }; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return config; + }, + + /** + * If you are using `appDir` then you must comment the below `i18n` config out. + * + * @see https://github.com/vercel/next.js/issues/41980 + */ + i18n: { + locales: ["en"], + defaultLocale: "en", + }, +}; + +export default config; diff --git a/package.json b/package.json new file mode 100644 index 0000000..ae01c65 --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "maioapp", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "next build", + "dev": "next dev", + "lint": "next lint", + "start": "next start" + }, + "dependencies": { + "@rainbow-me/rainbowkit": "^1.1.2", + "@t3-oss/env-nextjs": "^0.7.0", + "@tanstack/react-query": "^4.32.6", + "@trpc/client": "^10.37.1", + "@trpc/next": "^10.37.1", + "@trpc/react-query": "^10.37.1", + "@trpc/server": "^10.37.1", + "next": "^13.5.4", + "react": "18.2.0", + "react-dom": "18.2.0", + "superjson": "^1.13.1", + "viem": "^1.16.6", + "wagmi": "^1.4.5", + "zod": "^3.22.4" + }, + "devDependencies": { + "@types/eslint": "^8.44.2", + "@types/node": "^18.16.0", + "@types/react": "^18.2.20", + "@types/react-dom": "^18.2.7", + "@typescript-eslint/eslint-plugin": "^6.3.0", + "@typescript-eslint/parser": "^6.3.0", + "autoprefixer": "^10.4.14", + "eslint": "^8.47.0", + "eslint-config-next": "^13.5.4", + "postcss": "^8.4.27", + "prettier": "^3.0.0", + "prettier-plugin-tailwindcss": "^0.5.1", + "tailwindcss": "^3.3.3", + "typescript": "^5.1.6" + }, + "ct3aMetadata": { + "initVersion": "7.22.0" + }, + "packageManager": "pnpm@8.9.2" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..99c02cc --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4944 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@rainbow-me/rainbowkit': + specifier: ^1.1.2 + version: 1.1.2(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0)(viem@1.16.6)(wagmi@1.4.5) + '@t3-oss/env-nextjs': + specifier: ^0.7.0 + version: 0.7.1(typescript@5.2.2)(zod@3.22.4) + '@tanstack/react-query': + specifier: ^4.32.6 + version: 4.36.1(react-dom@18.2.0)(react@18.2.0) + '@trpc/client': + specifier: ^10.37.1 + version: 10.41.0(@trpc/server@10.41.0) + '@trpc/next': + specifier: ^10.37.1 + version: 10.41.0(@tanstack/react-query@4.36.1)(@trpc/client@10.41.0)(@trpc/react-query@10.41.0)(@trpc/server@10.41.0)(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) + '@trpc/react-query': + specifier: ^10.37.1 + version: 10.41.0(@tanstack/react-query@4.36.1)(@trpc/client@10.41.0)(@trpc/server@10.41.0)(react-dom@18.2.0)(react@18.2.0) + '@trpc/server': + specifier: ^10.37.1 + version: 10.41.0 + next: + specifier: ^13.5.4 + version: 13.5.6(react-dom@18.2.0)(react@18.2.0) + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + superjson: + specifier: ^1.13.1 + version: 1.13.3 + viem: + specifier: ^1.16.6 + version: 1.16.6(typescript@5.2.2)(zod@3.22.4) + wagmi: + specifier: ^1.4.5 + version: 1.4.5(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6)(zod@3.22.4) + zod: + specifier: ^3.22.4 + version: 3.22.4 + +devDependencies: + '@types/eslint': + specifier: ^8.44.2 + version: 8.44.6 + '@types/node': + specifier: ^18.16.0 + version: 18.18.6 + '@types/react': + specifier: ^18.2.20 + version: 18.2.31 + '@types/react-dom': + specifier: ^18.2.7 + version: 18.2.14 + '@typescript-eslint/eslint-plugin': + specifier: ^6.3.0 + version: 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': + specifier: ^6.3.0 + version: 6.8.0(eslint@8.52.0)(typescript@5.2.2) + autoprefixer: + specifier: ^10.4.14 + version: 10.4.16(postcss@8.4.31) + eslint: + specifier: ^8.47.0 + version: 8.52.0 + eslint-config-next: + specifier: ^13.5.4 + version: 13.5.6(eslint@8.52.0)(typescript@5.2.2) + postcss: + specifier: ^8.4.27 + version: 8.4.31 + prettier: + specifier: ^3.0.0 + version: 3.0.3 + prettier-plugin-tailwindcss: + specifier: ^0.5.1 + version: 0.5.6(prettier@3.0.3) + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + typescript: + specifier: ^5.1.6 + version: 5.2.2 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@adraffy/ens-normalize@1.9.4: + resolution: {integrity: sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==} + dev: false + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + + /@babel/runtime@7.23.2: + resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + + /@coinbase/wallet-sdk@3.7.2: + resolution: {integrity: sha512-lIGvXMsgpsQWci/XOMQIJ2nIZ8JUy/L+bvC0wkRaYarr0YylwpXrJ2gRM3hCXPS477pkyO7N/kSiAoRgEXUdJQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + '@solana/web3.js': 1.87.2 + bind-decorator: 1.0.11 + bn.js: 5.2.1 + buffer: 6.0.3 + clsx: 1.2.1 + eth-block-tracker: 6.1.0 + eth-json-rpc-filters: 5.1.0 + eth-rpc-errors: 4.0.2 + json-rpc-engine: 6.1.0 + keccak: 3.0.4 + preact: 10.18.1 + qs: 6.11.2 + rxjs: 6.6.7 + sha.js: 2.4.11 + stream-browserify: 3.0.0 + util: 0.12.5 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@emotion/hash@0.8.0: + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + dev: false + + /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.52.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.9.1: + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.52.0: + resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@ledgerhq/connect-kit-loader@1.1.2: + resolution: {integrity: sha512-mscwGroSJQrCTjtNGBu+18FQbZYA4+q6Tyx6K7CXHl6AwgZKbWfZYdgP2F+fyZcRUdGRsMX8QtvU61VcGGtO1A==} + dev: false + + /@lit-labs/ssr-dom-shim@1.1.2: + resolution: {integrity: sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==} + dev: false + + /@lit/reactive-element@1.6.3: + resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.1.2 + dev: false + + /@metamask/safe-event-emitter@2.0.0: + resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} + dev: false + + /@metamask/utils@3.6.0: + resolution: {integrity: sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@types/debug': 4.1.10 + debug: 4.3.4 + semver: 7.5.4 + superstruct: 1.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@motionone/animation@10.16.3: + resolution: {integrity: sha512-QUGWpLbMFLhyqKlngjZhjtxM8IqiJQjLK0DF+XOF6od9nhSvlaeEpOY/UMCRVcZn/9Tr2rZO22EkuCIjYdI74g==} + dependencies: + '@motionone/easing': 10.16.3 + '@motionone/types': 10.16.3 + '@motionone/utils': 10.16.3 + tslib: 2.6.2 + dev: false + + /@motionone/dom@10.16.4: + resolution: {integrity: sha512-HPHlVo/030qpRj9R8fgY50KTN4Ko30moWRTA3L3imrsRBmob93cTYmodln49HYFbQm01lFF7X523OkKY0DX6UA==} + dependencies: + '@motionone/animation': 10.16.3 + '@motionone/generators': 10.16.4 + '@motionone/types': 10.16.3 + '@motionone/utils': 10.16.3 + hey-listen: 1.0.8 + tslib: 2.6.2 + dev: false + + /@motionone/easing@10.16.3: + resolution: {integrity: sha512-HWTMZbTmZojzwEuKT/xCdvoMPXjYSyQvuVM6jmM0yoGU6BWzsmYMeB4bn38UFf618fJCNtP9XeC/zxtKWfbr0w==} + dependencies: + '@motionone/utils': 10.16.3 + tslib: 2.6.2 + dev: false + + /@motionone/generators@10.16.4: + resolution: {integrity: sha512-geFZ3w0Rm0ZXXpctWsSf3REGywmLLujEjxPYpBR0j+ymYwof0xbV6S5kGqqsDKgyWKVWpUInqQYvQfL6fRbXeg==} + dependencies: + '@motionone/types': 10.16.3 + '@motionone/utils': 10.16.3 + tslib: 2.6.2 + dev: false + + /@motionone/svelte@10.16.4: + resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} + dependencies: + '@motionone/dom': 10.16.4 + tslib: 2.6.2 + dev: false + + /@motionone/types@10.16.3: + resolution: {integrity: sha512-W4jkEGFifDq73DlaZs3HUfamV2t1wM35zN/zX7Q79LfZ2sc6C0R1baUHZmqc/K5F3vSw3PavgQ6HyHLd/MXcWg==} + dev: false + + /@motionone/utils@10.16.3: + resolution: {integrity: sha512-WNWDksJIxQkaI9p9Z9z0+K27xdqISGNFy1SsWVGaiedTHq0iaT6iZujby8fT/ZnZxj1EOaxJtSfUPCFNU5CRoA==} + dependencies: + '@motionone/types': 10.16.3 + hey-listen: 1.0.8 + tslib: 2.6.2 + dev: false + + /@motionone/vue@10.16.4: + resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} + dependencies: + '@motionone/dom': 10.16.4 + tslib: 2.6.2 + dev: false + + /@next/env@13.5.6: + resolution: {integrity: sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==} + dev: false + + /@next/eslint-plugin-next@13.5.6: + resolution: {integrity: sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==} + dependencies: + glob: 7.1.7 + dev: true + + /@next/swc-darwin-arm64@13.5.6: + resolution: {integrity: sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@13.5.6: + resolution: {integrity: sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@13.5.6: + resolution: {integrity: sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@13.5.6: + resolution: {integrity: sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@13.5.6: + resolution: {integrity: sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@13.5.6: + resolution: {integrity: sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@13.5.6: + resolution: {integrity: sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@13.5.6: + resolution: {integrity: sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@13.5.6: + resolution: {integrity: sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: false + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + dev: false + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@rainbow-me/rainbowkit@1.1.2(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0)(viem@1.16.6)(wagmi@1.4.5): + resolution: {integrity: sha512-yWxKDfHL4xDZJW34APGkmO2SkxjHwrEeAfvx6+137hWLttQwHcalG9nj4II8roYV2/2XJPmQsbEs7TM0rC0fOg==} + engines: {node: '>=12.4'} + peerDependencies: + react: '>=17' + react-dom: '>=17' + viem: ~0.3.19 || ^1.0.0 + wagmi: ~1.0.1 || ~1.1.0 || ~1.2.0 || ~1.3.0 || ~1.4.0 + dependencies: + '@vanilla-extract/css': 1.9.1 + '@vanilla-extract/dynamic': 2.0.2 + '@vanilla-extract/sprinkles': 1.5.0(@vanilla-extract/css@1.9.1) + clsx: 1.1.1 + i18n-js: 4.3.2 + qrcode: 1.5.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.4(@types/react@18.2.31)(react@18.2.0) + viem: 1.16.6(typescript@5.2.2)(zod@3.22.4) + wagmi: 1.4.5(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6)(zod@3.22.4) + transitivePeerDependencies: + - '@types/react' + dev: false + + /@rushstack/eslint-patch@1.5.1: + resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==} + dev: true + + /@safe-global/safe-apps-provider@0.17.1(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-lYfRqrbbK1aKU1/UGkYWc/X7PgySYcumXKc5FB2uuwAs2Ghj8uETuW5BrwPqyjBknRxutFbTv+gth/JzjxAhdQ==} + dependencies: + '@safe-global/safe-apps-sdk': 8.0.0(typescript@5.2.2)(zod@3.22.4) + events: 3.3.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-apps-sdk@8.0.0(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-gYw0ki/EAuV1oSyMxpqandHjnthZjYYy+YWpTAzf8BqfXM3ItcZLpjxfg+3+mXW8HIO+3jw6T9iiqEXsqHaMMw==} + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.12.0 + viem: 1.16.6(typescript@5.2.2)(zod@3.22.4) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-apps-sdk@8.1.0(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w==} + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.12.0 + viem: 1.16.6(typescript@5.2.2)(zod@3.22.4) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-gateway-typescript-sdk@3.12.0: + resolution: {integrity: sha512-hExCo62lScVC9/ztVqYEYL2pFxcqLTvB8fj0WtdP5FWrvbtEgD0pbVolchzD5bf85pbzvEwdAxSVS7EdCZxTNw==} + engines: {node: '>=16'} + dev: false + + /@scure/base@1.1.3: + resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} + dev: false + + /@scure/bip32@1.3.2: + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + dev: false + + /@scure/bip39@1.2.1: + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + dependencies: + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + dev: false + + /@solana/buffer-layout@4.0.1: + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + dependencies: + buffer: 6.0.3 + dev: false + + /@solana/web3.js@1.87.2: + resolution: {integrity: sha512-TZNhS+tvJbYjm0LAvIkUy/3Aqgt2l6/3X6XsVUpvj5MGOl2Q6Ch8hYSxcUUtMbAFNN3sUXmV8NhhMLNJEvI6TA==} + dependencies: + '@babel/runtime': 7.23.2 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.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.0 + node-fetch: 2.7.0 + rpc-websockets: 7.6.1 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@stablelib/aead@1.0.1: + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} + dev: false + + /@stablelib/binary@1.0.1: + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + dependencies: + '@stablelib/int': 1.0.1 + dev: false + + /@stablelib/bytes@1.0.1: + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} + dev: false + + /@stablelib/chacha20poly1305@1.0.1: + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} + 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 + dev: false + + /@stablelib/chacha@1.0.1: + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/constant-time@1.0.1: + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + dev: false + + /@stablelib/ed25519@1.0.3: + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} + dependencies: + '@stablelib/random': 1.0.2 + '@stablelib/sha512': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/hash@1.0.1: + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} + dev: false + + /@stablelib/hkdf@1.0.1: + resolution: {integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==} + dependencies: + '@stablelib/hash': 1.0.1 + '@stablelib/hmac': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/hmac@1.0.1: + resolution: {integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==} + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/int@1.0.1: + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + dev: false + + /@stablelib/keyagreement@1.0.1: + resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} + dependencies: + '@stablelib/bytes': 1.0.1 + dev: false + + /@stablelib/poly1305@1.0.1: + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/random@1.0.2: + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/sha256@1.0.1: + resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/sha512@1.0.1: + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/wipe@1.0.1: + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + dev: false + + /@stablelib/x25519@1.0.3: + resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + dependencies: + '@stablelib/keyagreement': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 + dev: false + + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + dependencies: + tslib: 2.6.2 + dev: false + + /@t3-oss/env-core@0.7.1(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-3+SQt39OlmSaRLqYVFv8uRm1BpFepM5TIiMytRqO9cjH+wB77o6BIJdeyM5h5U4qLBMEzOJWCY4MBaU/rLwbYw==} + peerDependencies: + typescript: '>=4.7.2' + zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.2.2 + zod: 3.22.4 + dev: false + + /@t3-oss/env-nextjs@0.7.1(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-tQDbNLGCOvKGi+JoGuJ/CJInJI7/kLWJqtgGppAKS7ZFLdVOqZYR/uRjxlXOWPnxmUKF8VswOAsq7fXUpNZDhA==} + peerDependencies: + typescript: '>=4.7.2' + zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@t3-oss/env-core': 0.7.1(typescript@5.2.2)(zod@3.22.4) + typescript: 5.2.2 + zod: 3.22.4 + dev: false + + /@tanstack/query-core@4.36.1: + resolution: {integrity: sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==} + dev: false + + /@tanstack/query-persist-client-core@4.36.1: + resolution: {integrity: sha512-eocgCeI7D7TRv1IUUBMfVwOI0wdSmMkBIbkKhqEdTrnUHUQEeOaYac8oeZk2cumAWJdycu6P/wB+WqGynTnzXg==} + dependencies: + '@tanstack/query-core': 4.36.1 + dev: false + + /@tanstack/query-sync-storage-persister@4.36.1: + resolution: {integrity: sha512-yMEt5hWe2+1eclf1agMtXHnPIkxEida0lYWkfdhR8U6KXk/lO4Vca6piJmhKI85t0NHlx3l/z6zX+t/Fn5O9NA==} + dependencies: + '@tanstack/query-persist-client-core': 4.36.1 + dev: false + + /@tanstack/react-query-persist-client@4.36.1(@tanstack/react-query@4.36.1): + resolution: {integrity: sha512-32I5b9aAu4NCiXZ7Te/KEQLfHbYeTNriVPrKYcvEThnZ9tlW01vLcSoxpUIsMYRsembvJUUAkzYBAiZHLOd6pQ==} + peerDependencies: + '@tanstack/react-query': ^4.36.1 + dependencies: + '@tanstack/query-persist-client-core': 4.36.1 + '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) + dev: false + + /@tanstack/react-query@4.36.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@tanstack/query-core': 4.36.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + + /@trpc/client@10.41.0(@trpc/server@10.41.0): + resolution: {integrity: sha512-W4lYULb7//2yXkULCKim49slXsBwiBq48rfge1yOWXdq0Ed8VxzXvZt8+uWOkxmHbQAw4lq8G5fCNYFB+Za6vQ==} + peerDependencies: + '@trpc/server': 10.41.0 + dependencies: + '@trpc/server': 10.41.0 + dev: false + + /@trpc/next@10.41.0(@tanstack/react-query@4.36.1)(@trpc/client@10.41.0)(@trpc/react-query@10.41.0)(@trpc/server@10.41.0)(next@13.5.6)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-QwvZrvDjRFEzErmLZ4hMdYfX13nsH0SpijjuTNPIlSIyFISCIfDCqmBvWC07O6fCG/swh+XM19FhJN6RMqTlKQ==} + peerDependencies: + '@tanstack/react-query': ^4.18.0 + '@trpc/client': 10.41.0 + '@trpc/react-query': 10.41.0 + '@trpc/server': 10.41.0 + next: '*' + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) + '@trpc/client': 10.41.0(@trpc/server@10.41.0) + '@trpc/react-query': 10.41.0(@tanstack/react-query@4.36.1)(@trpc/client@10.41.0)(@trpc/server@10.41.0)(react-dom@18.2.0)(react@18.2.0) + '@trpc/server': 10.41.0 + next: 13.5.6(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-ssr-prepass: 1.5.0(react@18.2.0) + dev: false + + /@trpc/react-query@10.41.0(@tanstack/react-query@4.36.1)(@trpc/client@10.41.0)(@trpc/server@10.41.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pCLZfIgcnneq1AocPLvstALawZYWS/sbhujd4mwUwA3UXFBWC/D31ysPlbz7R1dhjxhhPaIM+C6pz8vmr2ctpw==} + peerDependencies: + '@tanstack/react-query': ^4.18.0 + '@trpc/client': 10.41.0 + '@trpc/server': 10.41.0 + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) + '@trpc/client': 10.41.0(@trpc/server@10.41.0) + '@trpc/server': 10.41.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@trpc/server@10.41.0: + resolution: {integrity: sha512-uC0xLelzOuoFwxbBQ3GzX4DaWNucO9lW2vlGPdKu8ycXu2ObSa739oQ/lNF6qWDNUKXS0tQvGnDCAxEd178EzQ==} + dev: false + + /@types/connect@3.4.37: + resolution: {integrity: sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==} + dependencies: + '@types/node': 18.18.6 + dev: false + + /@types/debug@4.1.10: + resolution: {integrity: sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==} + dependencies: + '@types/ms': 0.7.33 + dev: false + + /@types/eslint@8.44.6: + resolution: {integrity: sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==} + dependencies: + '@types/estree': 1.0.3 + '@types/json-schema': 7.0.14 + dev: true + + /@types/estree@1.0.3: + resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==} + dev: true + + /@types/json-schema@7.0.14: + resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/ms@0.7.33: + resolution: {integrity: sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==} + dev: false + + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: false + + /@types/node@18.18.6: + resolution: {integrity: sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==} + + /@types/prop-types@15.7.9: + resolution: {integrity: sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==} + + /@types/react-dom@18.2.14: + resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==} + dependencies: + '@types/react': 18.2.31 + dev: true + + /@types/react@18.2.31: + resolution: {integrity: sha512-c2UnPv548q+5DFh03y8lEDeMfDwBn9G3dRwfkrxQMo/dOtRHUUO57k6pHvBIfH/VF4Nh+98mZ5aaSe+2echD5g==} + dependencies: + '@types/prop-types': 15.7.9 + '@types/scheduler': 0.16.5 + csstype: 3.1.2 + + /@types/scheduler@0.16.5: + resolution: {integrity: sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==} + + /@types/semver@7.5.4: + resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} + dev: true + + /@types/trusted-types@2.0.5: + resolution: {integrity: sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==} + dev: false + + /@types/ws@7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 18.18.6 + dev: false + + /@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.9.1 + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/type-utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.8.0 + debug: 4.3.4 + eslint: 8.52.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.8.0(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.8.0 + debug: 4.3.4 + eslint: 8.52.0 + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@6.8.0: + resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/visitor-keys': 6.8.0 + dev: true + + /@typescript-eslint/type-utils@6.8.0(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2) + debug: 4.3.4 + eslint: 8.52.0 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.8.0: + resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.8.0(typescript@5.2.2): + resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/visitor-keys': 6.8.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.8.0(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@types/json-schema': 7.0.14 + '@types/semver': 7.5.4 + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) + eslint: 8.52.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.8.0: + resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.8.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /@vanilla-extract/css@1.9.1: + resolution: {integrity: sha512-pu2SFiff5jRhPwvGoj8cM5l/qIyLvigOmy22ss5DGjwV5pJYezRjDLxWumi2luIwioMWvh9EozCjyfH8nq+7fQ==} + dependencies: + '@emotion/hash': 0.8.0 + '@vanilla-extract/private': 1.0.3 + ahocorasick: 1.0.2 + chalk: 4.1.2 + css-what: 5.1.0 + cssesc: 3.0.0 + csstype: 3.1.2 + deep-object-diff: 1.1.9 + deepmerge: 4.3.1 + media-query-parser: 2.0.2 + outdent: 0.8.0 + dev: false + + /@vanilla-extract/dynamic@2.0.2: + resolution: {integrity: sha512-U4nKaEQ8Kuz+exXEr51DUpyaOuzo24/S/k1YbDPQR06cYcNjQqvwFRnwWtZ+9ImocqM1wTKtzrdUgSTtLGIwAg==} + dependencies: + '@vanilla-extract/private': 1.0.3 + dev: false + + /@vanilla-extract/private@1.0.3: + resolution: {integrity: sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==} + dev: false + + /@vanilla-extract/sprinkles@1.5.0(@vanilla-extract/css@1.9.1): + resolution: {integrity: sha512-W58f2Rzz5lLmk0jbhgStVlZl5wEiPB1Ur3fRvUaBM+MrifZ3qskmFq/CiH//fEYeG5Dh9vF1qRviMMH46cX9Nw==} + peerDependencies: + '@vanilla-extract/css': ^1.0.0 + dependencies: + '@vanilla-extract/css': 1.9.1 + dev: false + + /@wagmi/connectors@3.1.3(@types/react@18.2.31)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6)(zod@3.22.4): + resolution: {integrity: sha512-UgwsQKQDFObJVJMf9pDfFoXTv710o4zrTHyhIWKBTMMkLpCMsMxN5+ZaDhBYt/BgoRinfRYQo8uwuwLhxE6Log==} + peerDependencies: + typescript: '>=5.0.4' + viem: '>=0.3.35' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@coinbase/wallet-sdk': 3.7.2 + '@ledgerhq/connect-kit-loader': 1.1.2 + '@safe-global/safe-apps-provider': 0.17.1(typescript@5.2.2)(zod@3.22.4) + '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.2.2)(zod@3.22.4) + '@walletconnect/ethereum-provider': 2.10.2(@walletconnect/modal@2.6.2) + '@walletconnect/legacy-provider': 2.0.0 + '@walletconnect/modal': 2.6.2(@types/react@18.2.31)(react@18.2.0) + '@walletconnect/utils': 2.10.2 + abitype: 0.8.7(typescript@5.2.2)(zod@3.22.4) + eventemitter3: 4.0.7 + typescript: 5.2.2 + viem: 1.16.6(typescript@5.2.2)(zod@3.22.4) + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - '@types/react' + - bufferutil + - encoding + - lokijs + - react + - supports-color + - utf-8-validate + - zod + dev: false + + /@wagmi/core@1.4.5(@types/react@18.2.31)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6)(zod@3.22.4): + resolution: {integrity: sha512-N9luRb1Uk4tBN9kaYcQSWKE9AsRt/rvZaFt5IZech4JPzNN2sQlfhKd9GEjOXYRDqEPHdDvos7qyBKiDNTz4GA==} + peerDependencies: + typescript: '>=5.0.4' + viem: '>=0.3.35' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@wagmi/connectors': 3.1.3(@types/react@18.2.31)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6)(zod@3.22.4) + abitype: 0.8.7(typescript@5.2.2)(zod@3.22.4) + eventemitter3: 4.0.7 + typescript: 5.2.2 + viem: 1.16.6(typescript@5.2.2)(zod@3.22.4) + zustand: 4.4.4(@types/react@18.2.31)(react@18.2.0) + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - '@types/react' + - bufferutil + - encoding + - immer + - lokijs + - react + - supports-color + - utf-8-validate + - zod + dev: false + + /@walletconnect/core@2.10.2: + resolution: {integrity: sha512-JQz/xp3SLEpTeRQctdck2ugSBVEpMxoSE+lFi2voJkZop1hv6P+uqr6E4PzjFluAjeAnKlT1xvra0aFWjPWVcw==} + 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.13 + '@walletconnect/keyvaluestorage': 1.0.2 + '@walletconnect/logger': 2.0.1 + '@walletconnect/relay-api': 1.0.9 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.10.2 + '@walletconnect/utils': 2.10.2 + events: 3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - bufferutil + - lokijs + - utf-8-validate + dev: false + + /@walletconnect/crypto@1.0.3: + resolution: {integrity: sha512-+2jdORD7XQs76I2Odgr3wwrtyuLUXD/kprNVsjWRhhhdO9Mt6WqVzOPu0/t7OHSmgal8k7SoBQzUc5hu/8zL/g==} + dependencies: + '@walletconnect/encoding': 1.0.2 + '@walletconnect/environment': 1.0.1 + '@walletconnect/randombytes': 1.0.3 + aes-js: 3.1.2 + hash.js: 1.1.7 + tslib: 1.14.1 + dev: false + + /@walletconnect/encoding@1.0.2: + resolution: {integrity: sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag==} + dependencies: + is-typedarray: 1.0.0 + tslib: 1.14.1 + typedarray-to-buffer: 3.1.5 + dev: false + + /@walletconnect/environment@1.0.1: + resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/ethereum-provider@2.10.2(@walletconnect/modal@2.6.2): + resolution: {integrity: sha512-QMYFZ6+rVq2CJLdIPdKK0j1Qm66UA27oQU5V2SrL8EVwl7wFfm0Bq7fnL+qAWeDpn612dNeNErpk/ROa1zWlWg==} + peerDependencies: + '@walletconnect/modal': '>=2' + peerDependenciesMeta: + '@walletconnect/modal': + optional: true + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.7 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/modal': 2.6.2(@types/react@18.2.31)(react@18.2.0) + '@walletconnect/sign-client': 2.10.2 + '@walletconnect/types': 2.10.2 + '@walletconnect/universal-provider': 2.10.2 + '@walletconnect/utils': 2.10.2 + events: 3.3.0 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - bufferutil + - encoding + - lokijs + - utf-8-validate + dev: false + + /@walletconnect/events@1.0.1: + resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/heartbeat@1.2.1: + resolution: {integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-http-connection@1.0.7: + resolution: {integrity: sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + cross-fetch: 3.1.8 + tslib: 1.14.1 + transitivePeerDependencies: + - encoding + dev: false + + /@walletconnect/jsonrpc-provider@1.0.13: + resolution: {integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-types@1.0.3: + resolution: {integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==} + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-utils@1.0.8: + resolution: {integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==} + dependencies: + '@walletconnect/environment': 1.0.1 + '@walletconnect/jsonrpc-types': 1.0.3 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-ws-connection@1.0.13: + resolution: {integrity: sha512-mfOM7uFH4lGtQxG+XklYuFBj6dwVvseTt5/ahOkkmpcAEgz2umuzu7fTR+h5EmjQBdrmYyEBOWADbeaFNxdySg==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + tslib: 1.14.1 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@walletconnect/keyvaluestorage@1.0.2: + resolution: {integrity: sha512-U/nNG+VLWoPFdwwKx0oliT4ziKQCEoQ27L5Hhw8YOFGA2Po9A9pULUYNWhDgHkrb0gYDNt//X7wABcEWWBd3FQ==} + peerDependencies: + '@react-native-async-storage/async-storage': 1.x + lokijs: 1.x + peerDependenciesMeta: + '@react-native-async-storage/async-storage': + optional: true + lokijs: + optional: true + dependencies: + safe-json-utils: 1.1.1 + tslib: 1.14.1 + dev: false + + /@walletconnect/legacy-client@2.0.0: + resolution: {integrity: sha512-v5L7rYk9loVnfvUf0mF+76bUPFaU5/Vh7mzL6/950CD/yoGdzYZ3Kj+L7mkC6HPMEGeQsBP1+sqBuiVGZ/aODA==} + dependencies: + '@walletconnect/crypto': 1.0.3 + '@walletconnect/encoding': 1.0.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/legacy-types': 2.0.0 + '@walletconnect/legacy-utils': 2.0.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + query-string: 6.14.1 + dev: false + + /@walletconnect/legacy-modal@2.0.0: + resolution: {integrity: sha512-jckNd8lMhm4X7dX9TDdxM3bXKJnaqkRs6K2Mo5j6GmbIF9Eyx40jZ5+q457RVxvM6ciZEDT5s1wBHWdWoOo+9Q==} + dependencies: + '@walletconnect/legacy-types': 2.0.0 + '@walletconnect/legacy-utils': 2.0.0 + copy-to-clipboard: 3.3.3 + preact: 10.18.1 + qrcode: 1.5.3 + dev: false + + /@walletconnect/legacy-provider@2.0.0: + resolution: {integrity: sha512-A8xPebMI1A+50HbWwTpFCbwP7G+1NGKdTKyg8BUUg3h3Y9JucpC1W6w/x0v1Xw7qFEqQnz74LoIN/A3ytH9xrQ==} + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.7 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/legacy-client': 2.0.0 + '@walletconnect/legacy-modal': 2.0.0 + '@walletconnect/legacy-types': 2.0.0 + '@walletconnect/legacy-utils': 2.0.0 + transitivePeerDependencies: + - encoding + dev: false + + /@walletconnect/legacy-types@2.0.0: + resolution: {integrity: sha512-sOVrA7HUdbI1OwKyPOQU0/DdvTSVFlsXWpAk2K2WvP2erTkBWPMTJq6cv2BmKdoJ3p6gLApT7sd+jHi3OF71uw==} + dependencies: + '@walletconnect/jsonrpc-types': 1.0.3 + dev: false + + /@walletconnect/legacy-utils@2.0.0: + resolution: {integrity: sha512-CPWxSVVXw0kgNCxvU126g4GiV3mzXmC8IPJ15twE46aJ1FX+RHEIfAzFMFz2F2+fEhBxL63A7dwNQKDXorRPcQ==} + dependencies: + '@walletconnect/encoding': 1.0.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/legacy-types': 2.0.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + query-string: 6.14.1 + dev: false + + /@walletconnect/logger@2.0.1: + resolution: {integrity: sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ==} + dependencies: + pino: 7.11.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/modal-core@2.6.2(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA==} + dependencies: + valtio: 1.11.2(@types/react@18.2.31)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@walletconnect/modal-ui@2.6.2(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA==} + dependencies: + '@walletconnect/modal-core': 2.6.2(@types/react@18.2.31)(react@18.2.0) + lit: 2.8.0 + motion: 10.16.2 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@walletconnect/modal@2.6.2(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA==} + dependencies: + '@walletconnect/modal-core': 2.6.2(@types/react@18.2.31)(react@18.2.0) + '@walletconnect/modal-ui': 2.6.2(@types/react@18.2.31)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@walletconnect/randombytes@1.0.3: + resolution: {integrity: sha512-35lpzxcHFbTN3ABefC9W+uBpNZl1GC4Wpx0ed30gibfO/y9oLdy1NznbV96HARQKSBV9J9M/rrtIvf6a23jfYw==} + dependencies: + '@walletconnect/encoding': 1.0.2 + '@walletconnect/environment': 1.0.1 + randombytes: 2.1.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/relay-api@1.0.9: + resolution: {integrity: sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg==} + dependencies: + '@walletconnect/jsonrpc-types': 1.0.3 + tslib: 1.14.1 + dev: false + + /@walletconnect/relay-auth@1.0.4: + resolution: {integrity: sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==} + dependencies: + '@stablelib/ed25519': 1.0.3 + '@stablelib/random': 1.0.2 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + uint8arrays: 3.1.1 + dev: false + + /@walletconnect/safe-json@1.0.2: + resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/sign-client@2.10.2: + resolution: {integrity: sha512-vviSLV3f92I0bReX+OLr1HmbH0uIzYEQQFd1MzIfDk9PkfFT/LLAHhUnDaIAMkIdippqDcJia+5QEtT4JihL3Q==} + dependencies: + '@walletconnect/core': 2.10.2 + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.0.1 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.10.2 + '@walletconnect/utils': 2.10.2 + events: 3.3.0 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - bufferutil + - lokijs + - utf-8-validate + dev: false + + /@walletconnect/time@1.0.2: + resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/types@2.10.2: + resolution: {integrity: sha512-luNV+07Wdla4STi9AejseCQY31tzWKQ5a7C3zZZaRK/di+rFaAAb7YW04OP4klE7tw/mJRGPTlekZElmHxO8kQ==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/keyvaluestorage': 1.0.2 + '@walletconnect/logger': 2.0.1 + events: 3.3.0 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - lokijs + dev: false + + /@walletconnect/universal-provider@2.10.2: + resolution: {integrity: sha512-wFgI0LbQ3D56sgaUMsgOHCM5m8WLxiC71BGuCKQfApgsbNMVKugYVy2zWHyUyi8sqTQHI+uSaVpDev4UHq9LEw==} + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.7 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.0.1 + '@walletconnect/sign-client': 2.10.2 + '@walletconnect/types': 2.10.2 + '@walletconnect/utils': 2.10.2 + events: 3.3.0 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - bufferutil + - encoding + - lokijs + - utf-8-validate + dev: false + + /@walletconnect/utils@2.10.2: + resolution: {integrity: sha512-syxXRpc2yhSknMu3IfiBGobxOY7fLfLTJuw+ppKaeO6WUdZpIit3wfuGOcc0Ms3ZPFCrGfyGOoZsCvgdXtptRg==} + 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.9 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.10.2 + '@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: + - '@react-native-async-storage/async-storage' + - lokijs + dev: false + + /@walletconnect/window-getters@1.0.1: + resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/window-metadata@1.0.1: + resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + dependencies: + '@walletconnect/window-getters': 1.0.1 + tslib: 1.14.1 + dev: false + + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: false + + /abitype@0.8.7(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-wQ7hV8Yg/yKmGyFpqrNZufCxbszDe5es4AZGYPBitocfSqXtjrTG9JMWFcc4N30ukl2ve48aBTwt7NJxVQdU3w==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + dependencies: + typescript: 5.2.2 + zod: 3.22.4 + dev: false + + /abitype@0.9.8(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.2.2 + zod: 3.22.4 + dev: false + + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + dev: true + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /aes-js@3.1.2: + resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} + dev: false + + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + dev: false + + /ahocorasick@1.0.2: + resolution: {integrity: sha512-hCOfMzbFx5IDutmWLAt6MZwOUjIfSM9G9FyVxytmE4Rs/5YDPWQrD/+IR1w+FweD9H2oOZEnv36TmkjhNURBVA==} + dev: false + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: true + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /ast-types-flow@0.0.7: + resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + dev: true + + /async-mutex@0.2.6: + resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} + dependencies: + tslib: 2.6.2 + dev: false + + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: true + + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false + + /autoprefixer@10.4.16(postcss@8.4.31): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.1 + caniuse-lite: 1.0.30001553 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + /axe-core@4.8.2: + resolution: {integrity: sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==} + engines: {node: '>=4'} + dev: true + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + + /bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + dev: false + + /bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + dev: false + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bind-decorator@1.0.11: + resolution: {integrity: sha512-yzkH0uog6Vv/vQ9+rhSKxecnqGUZHYncg7qS7voz3Q76+TAi1SGiOKk2mlOvusQnFz9Dc4BC/NMkeXu11YgjJg==} + dev: false + + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: false + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: false + + /borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + dev: false + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001553 + electron-to-chromium: 1.4.563 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: true + + /bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + dependencies: + base-x: 3.0.9 + dev: false + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.6.1 + dev: false + + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: false + + /caniuse-lite@1.0.30001553: + resolution: {integrity: sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==} + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + + /clsx@1.1.1: + resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} + engines: {node: '>=6'} + dev: false + + /clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + dependencies: + is-what: 4.1.15 + dev: false + + /copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + dependencies: + toggle-selection: 1.0.6 + dev: false + + /cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /css-what@5.1.0: + resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} + engines: {node: '>= 6'} + dev: false + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: false + + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: false + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deep-object-diff@1.1.9: + resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} + dev: false + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: false + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: true + + /delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: false + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + + /detect-browser@5.3.0: + resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + dev: false + + /detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: false + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + dev: false + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /duplexify@4.1.2: + resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.1 + dev: false + + /electron-to-chromium@1.4.563: + resolution: {integrity: sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /encode-utf8@1.0.3: + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + dev: false + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: false + + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.13 + dev: true + + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: true + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: false + + /es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + dependencies: + es6-promise: 4.2.8 + dev: false + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-next@13.5.6(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 13.5.6 + '@rushstack/eslint-patch': 1.5.1 + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.52.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.52.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.52.0) + eslint-plugin-react: 7.33.2(eslint@8.52.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.52.0) + typescript: 5.2.2 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.52.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.52.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) + fast-glob: 3.3.1 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) + debug: 3.2.7 + eslint: 8.52.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.52.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0): + resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.52.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) + has: 1.0.4 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.52.0): + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.2 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.7 + axe-core: 4.8.2 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.52.0 + has: 1.0.4 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + semver: 6.3.1 + dev: true + + /eslint-plugin-react-hooks@4.6.0(eslint@8.52.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.52.0 + dev: true + + /eslint-plugin-react@7.33.2(eslint@8.52.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.52.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.52.0: + resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/regexpp': 4.9.1 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.52.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.23.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /eth-block-tracker@6.1.0: + resolution: {integrity: sha512-K9SY8+/xMBi4M5HHTDdxnpEqEEGjbNpzHFqvxyjMZej8InV/B+CkFRKM6W+uvrFJ7m8Zd1E0qUkseU3vdIDFYQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + '@metamask/utils': 3.6.0 + json-rpc-random-id: 1.0.1 + pify: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /eth-json-rpc-filters@5.1.0: + resolution: {integrity: sha512-fos+9xmoa1A2Ytsc9eYof17r81BjdJOUcGcgZn4K/tKdCCTb+a8ytEtwlu1op5qsXFDlgGmstTELFrDEc89qEQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + async-mutex: 0.2.6 + eth-query: 2.1.2 + json-rpc-engine: 6.1.0 + pify: 5.0.0 + dev: false + + /eth-query@2.1.2: + resolution: {integrity: sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==} + dependencies: + json-rpc-random-id: 1.0.1 + xtend: 4.0.2 + dev: false + + /eth-rpc-errors@4.0.2: + resolution: {integrity: sha512-n+Re6Gu8XGyfFy1it0AwbD1x0MUzspQs0D5UiPs1fFPCr6WAwZM+vbIhXheBFrpgosqN9bs5PqlB4Q61U/QytQ==} + dependencies: + fast-safe-stringify: 2.1.1 + dev: false + + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fast-redact@3.3.0: + resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} + engines: {node: '>=6'} + dev: false + + /fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + dev: false + + /fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + dev: false + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.1.1 + dev: true + + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: false + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + dev: false + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: false + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} + engines: {node: '>=12.0.0'} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + + /get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: false + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: false + + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} + dev: true + + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + dev: false + + /humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + dev: false + + /i18n-js@4.3.2: + resolution: {integrity: sha512-n8gbEbQEueym2/q2yrZk5/xKWjFcKtg3/Escw4JHSVWa8qtKqP8j7se3UjkRbHlO/REqFA0V/MG1q8tEfyHeOA==} + dependencies: + bignumber.js: 9.1.2 + lodash: 4.17.21 + make-plural: 7.3.0 + dev: false + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: false + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: false + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /is-what@4.1.15: + resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==} + engines: {node: '>=12.13'} + dev: false + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isomorphic-ws@4.0.1(ws@7.5.9): + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.9 + dev: false + + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: false + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: true + + /jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@types/connect': 3.4.37 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + 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.9) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /jiti@1.20.0: + resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} + hasBin: true + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-rpc-engine@6.1.0: + resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + eth-rpc-errors: 4.0.2 + dev: false + + /json-rpc-random-id@1.0.1: + resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} + dev: false + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: false + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: false + + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.4 + object.values: 1.1.7 + dev: true + + /keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.6.1 + readable-stream: 3.6.2 + dev: false + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /keyvaluestorage-interface@1.0.0: + resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} + dev: false + + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true + + /language-tags@1.0.5: + resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /lit-element@3.3.3: + resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.1.2 + '@lit/reactive-element': 1.6.3 + lit-html: 2.8.0 + dev: false + + /lit-html@2.8.0: + resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + dependencies: + '@types/trusted-types': 2.0.5 + dev: false + + /lit@2.8.0: + resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} + dependencies: + '@lit/reactive-element': 1.6.3 + lit-element: 3.3.3 + lit-html: 2.8.0 + dev: false + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: false + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: false + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /make-plural@7.3.0: + resolution: {integrity: sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw==} + dev: false + + /media-query-parser@2.0.2: + resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} + dependencies: + '@babel/runtime': 7.23.2 + dev: false + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /motion@10.16.2: + resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} + dependencies: + '@motionone/animation': 10.16.3 + '@motionone/dom': 10.16.4 + '@motionone/svelte': 10.16.4 + '@motionone/types': 10.16.3 + '@motionone/utils': 10.16.3 + '@motionone/vue': 10.16.4 + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + dev: false + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /next@13.5.6(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==} + engines: {node: '>=16.14.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.5.6 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001553 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + watchpack: 2.4.0 + optionalDependencies: + '@next/swc-darwin-arm64': 13.5.6 + '@next/swc-darwin-x64': 13.5.6 + '@next/swc-linux-arm64-gnu': 13.5.6 + '@next/swc-linux-arm64-musl': 13.5.6 + '@next/swc-linux-x64-gnu': 13.5.6 + '@next/swc-linux-x64-musl': 13.5.6 + '@next/swc-win32-arm64-msvc': 13.5.6 + '@next/swc-win32-ia32-msvc': 13.5.6 + '@next/swc-win32-x64-msvc': 13.5.6 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + dev: false + + /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 + dependencies: + whatwg-url: 5.0.0 + dev: false + + /node-gyp-build@4.6.1: + resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==} + hasBin: true + dev: false + + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + dev: true + + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /on-exit-leak-free@0.2.0: + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /outdent@0.8.0: + resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + dev: false + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: false + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: false + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: false + + /pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + dev: false + + /pino-abstract-transport@0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + dependencies: + duplexify: 4.1.2 + split2: 4.2.0 + dev: false + + /pino-std-serializers@4.0.0: + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + dev: false + + /pino@7.11.0: + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.3.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.4.3 + sonic-boom: 2.8.0 + thread-stream: 0.15.2 + dev: false + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + dev: false + + /postcss-import@15.1.0(postcss@8.4.31): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: true + + /postcss-js@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.31 + dev: true + + /postcss-load-config@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.31 + yaml: 2.3.3 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.31): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /preact@10.18.1: + resolution: {integrity: sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==} + dev: false + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-plugin-tailwindcss@0.5.6(prettier@3.0.3): + resolution: {integrity: sha512-2Xgb+GQlkPAUCFi3sV+NOYcSI5XgduvDBL2Zt/hwJudeKXkyvRS65c38SB0yb9UB40+1rL83I6m0RtlOQ8eHdg==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@shufo/prettier-plugin-blade': '*' + '@trivago/prettier-plugin-sort-imports': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + prettier-plugin-twig-melody: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@shufo/prettier-plugin-blade': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier-plugin-twig-melody: + optional: true + dependencies: + prettier: 3.0.3 + dev: true + + /prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + dev: false + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + + /proxy-compare@2.5.1: + resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + dev: false + + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: true + + /qrcode@1.5.0: + resolution: {integrity: sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + dijkstrajs: 1.0.3 + encode-utf8: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + dev: false + + /qrcode@1.5.3: + resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + dijkstrajs: 1.0.3 + encode-utf8: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + dev: false + + /qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /query-string@6.14.1: + resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} + engines: {node: '>=6'} + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + dev: false + + /query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + dev: false + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + + /react-remove-scroll-bar@2.3.4(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.2.31)(react@18.2.0) + tslib: 2.6.2 + dev: false + + /react-remove-scroll@2.5.4(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.31)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.31)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.0(@types/react@18.2.31)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.31)(react@18.2.0) + dev: false + + /react-ssr-prepass@1.5.0(react@18.2.0): + resolution: {integrity: sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /react-style-singleton@2.2.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /real-require@0.1.0: + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} + dev: false + + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: true + + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rpc-websockets@7.6.1: + resolution: {integrity: sha512-MmRGaJJvxTHSRxYPjJJqcj2zWnCetw7YbYbKlD0Yc7qVw6PsZhRJg1MI3mpWlpBs+4zO+urlNfLl9zLsdOD/gA==} + dependencies: + '@babel/runtime': 7.23.2 + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + dev: false + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safe-json-utils@1.1.1: + resolution: {integrity: sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==} + dev: false + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-regex: 1.1.4 + dev: true + + /safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + dev: false + + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: false + + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: true + + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /sonic-boom@2.8.0: + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + dependencies: + atomic-sleep: 1.0.0 + dev: false + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + dev: false + + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + + /stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /stream-shift@1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + dev: false + + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + + /strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: false + + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 + side-channel: 1.0.4 + dev: true + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /styled-jsx@5.1.1(react@18.2.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + client-only: 0.0.1 + react: 18.2.0 + dev: false + + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + + /superjson@1.13.3: + resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} + engines: {node: '>=10'} + dependencies: + copy-anything: 3.0.5 + dev: false + + /superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + dev: false + + /superstruct@1.0.3: + resolution: {integrity: sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==} + engines: {node: '>=14.0.0'} + dev: false + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.1 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.20.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.31 + postcss-import: 15.1.0(postcss@8.4.31) + postcss-js: 4.0.1(postcss@8.4.31) + postcss-load-config: 4.0.1(postcss@8.4.31) + postcss-nested: 6.0.1(postcss@8.4.31) + postcss-selector-parser: 6.0.13 + resolve: 1.22.8 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: true + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + + /text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + dev: false + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /thread-stream@0.15.2: + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + dependencies: + real-require: 0.1.0 + dev: false + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + dev: false + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.2.2 + dev: true + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: true + + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: false + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + + /uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} + dependencies: + multiformats: 9.9.0 + dev: false + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.1 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: true + + /use-callback-ref@1.3.0(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /use-sidecar@1.1.2(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.6.1 + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.12 + which-typed-array: 1.1.13 + dev: false + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /valtio@1.11.2(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=16.8' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + dependencies: + '@types/react': 18.2.31 + proxy-compare: 2.5.1 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + + /viem@1.16.6(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-jcWcFQ+xzIfDwexwPJRvCuCRJKEkK9iHTStG7mpU5MmuSBpACs4nATBDyXNFtUiyYTFzLlVEwWkt68K0nCSImg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.9.4 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 0.9.8(typescript@5.2.2)(zod@3.22.4) + isows: 1.0.3(ws@8.13.0) + typescript: 5.2.2 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /wagmi@1.4.5(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6)(zod@3.22.4): + resolution: {integrity: sha512-Ph62E6cO5n2Z8Z5LTyZrkaNprxTsbC4w0qZJT4OJdXrEELziI8z/b4FO6amVFXdu2rDp/wpvF56e4mhKC8/Kdw==} + peerDependencies: + react: '>=17.0.0' + typescript: '>=5.0.4' + viem: '>=0.3.35' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@tanstack/query-sync-storage-persister': 4.36.1 + '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-query-persist-client': 4.36.1(@tanstack/react-query@4.36.1) + '@wagmi/core': 1.4.5(@types/react@18.2.31)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6)(zod@3.22.4) + abitype: 0.8.7(typescript@5.2.2)(zod@3.22.4) + react: 18.2.0 + typescript: 5.2.2 + use-sync-external-store: 1.2.0(react@18.2.0) + viem: 1.16.6(typescript@5.2.2)(zod@3.22.4) + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - '@types/react' + - bufferutil + - encoding + - immer + - lokijs + - react-dom + - react-native + - supports-color + - utf-8-validate + - zod + dev: false + + /watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: false + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: true + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: false + + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + 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 + dev: false + + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + 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 + dev: false + + /ws@8.14.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + 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 + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + dev: false + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: false + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml@2.3.3: + resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} + engines: {node: '>= 14'} + dev: true + + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: false + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + + /zustand@4.4.4(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-5UTUIAiHMNf5+mFp7/AnzJXS7+XxktULFN0+D1sCiZWyX7ZG+AQpqs2qpYrynRij4QvoDdCD+U+bmg/cG3Ucxw==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + dependencies: + '@types/react': 18.2.31 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..e305dd9 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,8 @@ +const config = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; + +module.exports = config; diff --git a/prettier.config.mjs b/prettier.config.mjs new file mode 100644 index 0000000..2d2fa4c --- /dev/null +++ b/prettier.config.mjs @@ -0,0 +1,6 @@ +/** @type {import('prettier').Config & import('prettier-plugin-tailwindcss').options} */ +const config = { + plugins: ["prettier-plugin-tailwindcss"], +}; + +export default config; diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..60c702aac13409c82c4040f8fee9603eb84aa10c GIT binary patch literal 15406 zcmeHOX^b4j6>hH&u3!wtgoMM(Da<7x5Rn8Tjvq)?zybua1c*c20{$U^Aj%>HD9R-z zBuWB;ARB>eYK+y}Dk#s*$8Q(p+iLA_;N7bn84x`l%#I{rywlCmbkAPayBK)27Rhm!$WXNYV+Q zK^4@P%189Q__>DsD^FL?7r_P=JJvIlKl+CJ62dyd9WqHP5Sp7xG3? zPX~|xApI@EB+@r<8Zj2@M^QA-H<*IF*CS2am*|i;*E8hDd|es0ZRN*eT}q4f={qph zUyoWUdZ+R8ip52QA+%;l|Sa2^7!PrYAH1GAw4nmfKx zy1+M;Td^MB<(cfVs$m?`u57IHH)D=|NWm@3zi7tCFgENLSn7k=Pdv~@u`r2!VJ-Hn z5cXiS66w9>LT56iNCfU;)=ma= z`c9MYdEO$lXDjiAZma0~qmy`0Ud=wxm3KG>+B=)kiuq~siOx6F`)WK*<@aK}q_nFk z=W_Xo|D8k=&&!fe^n@YJ_ToIDgFft$u(^~7d^hv_v^bCawEFQf^jDeWqrcR6S<-hm zzt3;Z#bYA(s$u7s3+5#DVP-&b)99=$<^0;j3 zcc)NTm?l#!%OgJ;80Z7t%UlN9>UibS>6}kssAr=rpgqWS-2-@jo;Z(u;uA5p57xgo zI0neFT|+sU%cxe{+k^AUuVIL^eX;Kh)-j;ZL#;@rXxqP5TdFpnH#&uyA7>w*DZVL^MIqKm_{4qbT z46X9@-3V1(K8eflW%)qJ|3tvB*;bOy=By;paJ=otl~IG8!ZC!Zx){7a=ln4@zlz(V z7_;4!AJJMDRWX`AY2VT|#s$X@PdzK-T;Cwj zne8F?PcC3MKk<6qh;i;b3A`O4yiT@P9^OMkLknOd-T*uDYt$b@NVA1^;H+n%Evu7k z>pb$3Xk0dOYE15jHpV~_t(ZqPKm3n>Lf!4L`e|*bmEqhbhbHxN@*R{YCoA0!{t9D< z0rS(%aWflbbWbUxZ)$$W8ML~>yt1+aZJ3*dF|E8+{1N%xP5HMN-`hk?7#G{oA8!yQ zItP22wv^7IzFj^8bPprM{pCAx9^42%$E4xQDr*&g=#+mBoDDzCl#kAa&+K;Sa(**; z)E3lx6Km5h?MAzv?PMIaf}i>te(+aCy+em3%;8I#;TH2vtP6w}Vahi-HQy%#tysSg z73uS&TftwgXv=7vaQstao88lj{;Ha`Y{og-R9*p(zC3v2G_ByLx>&>Sg}!UPZM37{ z>Basy&#Z6gV1VnO7GpiK)nUBcX#LkJemal)mUNRv0cJMfcj3f=Dz^j|@H+FCaH(7$6r#>64S<{vsG@JOVy1oSK4xI(+V+VV|j!MdVwyb&3DSn!Z zW3G1OR$D#3*?L50mMZRep!apV>Ydsl|2+$1T6rh6M@FW$H2ME+kz+>T7Wl^_o9vCD6fxs zw5dex9l)Jn7RI#lcJW8_p3YR>!}x930X2N`de0kKO7H%-T=dC&PcQue_TD(`)d{Ti zpVECPFYhF77eC3Qa|(3&+O+N)x;5nYT$7zD;-a%M-T>Z>_WovzZD*cO#ky(fPVm!M z4>50XE?F;*jp_Cb#^0xcejdVtG(4@Ab%LME8grb(VULnMQ(qTr?XlS4sA=Z%WpG}t z#@)bAGHE<}Ce}x+=VD)Aj=U1KY1`*%OSkaTSaNZniT#y)LG`(S^d#o(f0N$S=E0Xm z69nua-)1-RfN`**lRLwjZKf-mfScCTMmtQlmSkn&*%Qh=t8_ZBe~{3IHMCdn2^iBb zU@Z0dnsO%gtl?N6Y{&Y!ir&Ac*2mk5ac|mxL_VZh2;?)RIUwSqJpgNKaYjEF@;@WI zV;5<~G|ty}hr~8c`6=kme>Q^rmKXb<0b#1W2{PGdGuxm%Zdt`cMch0MyXbn%Lwe)X zm_Ofrn*7V_#@MFAI1Y+wEV-6^4ls%5b>Nb>VQu|ugs~#hQ+hYypVk$7do)3>4&JN5 z*Qv&IioJq8V&L9GYy;NYm7v3!Od*?f)&p$Ie z=7xjyDDv&@jzB)Sqc--SY9FM2yJ2IM#O`-=V2OZPO;(?CxHJq`3Uu%~L^f2g^2 A#Q*>R literal 0 HcmV?d00001 diff --git a/src/env.mjs b/src/env.mjs new file mode 100644 index 0000000..6d34641 --- /dev/null +++ b/src/env.mjs @@ -0,0 +1,42 @@ +import { createEnv } from "@t3-oss/env-nextjs"; +import { z } from "zod"; + +export const env = createEnv({ + /** + * Specify your server-side environment variables schema here. This way you can ensure the app + * isn't built with invalid env vars. + */ + server: { + NODE_ENV: z.enum(["development", "test", "production"]), + WALLET_CONNECT_PROJECT_ID: z.string(), + }, + + /** + * Specify your client-side environment variables schema here. This way you can ensure the app + * isn't built with invalid env vars. To expose them to the client, prefix them with + * `NEXT_PUBLIC_`. + */ + client: { + // NEXT_PUBLIC_CLIENTVAR: z.string(), + }, + + /** + * You can't destruct `process.env` as a regular object in the Next.js edge runtimes (e.g. + * middlewares) or client-side so we need to destruct manually. + */ + runtimeEnv: { + NODE_ENV: process.env.NODE_ENV, + WALLET_CONNECT_PROJECT_ID: process.env.WALLET_CONNECT_PROJECT_ID, + // NEXT_PUBLIC_CLIENTVAR: process.env.NEXT_PUBLIC_CLIENTVAR, + }, + /** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. + * This is especially useful for Docker builds. + */ + skipValidation: !!process.env.SKIP_ENV_VALIDATION, + /** + * Makes it so that empty strings are treated as undefined. + * `SOME_VAR: z.string()` and `SOME_VAR=''` will throw an error. + */ + emptyStringAsUndefined: true, +}); diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx new file mode 100644 index 0000000..ce8c028 --- /dev/null +++ b/src/pages/_app.tsx @@ -0,0 +1,39 @@ +import { type AppType } from "next/app"; + +import { api } from "~/utils/api"; + +import "~/styles/globals.css"; +import "@rainbow-me/rainbowkit/styles.css"; +import { getDefaultWallets, RainbowKitProvider } from "@rainbow-me/rainbowkit"; +import { configureChains, createConfig, WagmiConfig } from "wagmi"; +import { publicProvider } from "wagmi/providers/public"; +import { xdcTestnet } from "viem/chains"; + +const MyApp: AppType = ({ Component, pageProps }) => { + const { chains, publicClient } = configureChains( + [xdcTestnet], + [publicProvider()], + ); + + const { connectors } = getDefaultWallets({ + appName: "MIAO", + chains, + projectId: "7171244509c2a41cb8e9e1fbc38a90b3", + }); + + const wagmiConfig = createConfig({ + autoConnect: true, + connectors, + publicClient, + }); + + return ( + + + + + + ); +}; + +export default api.withTRPC(MyApp); diff --git a/src/pages/api/trpc/[trpc].ts b/src/pages/api/trpc/[trpc].ts new file mode 100644 index 0000000..af81d92 --- /dev/null +++ b/src/pages/api/trpc/[trpc].ts @@ -0,0 +1,19 @@ +import { createNextApiHandler } from "@trpc/server/adapters/next"; + +import { env } from "~/env.mjs"; +import { appRouter } from "~/server/api/root"; +import { createTRPCContext } from "~/server/api/trpc"; + +// export API handler +export default createNextApiHandler({ + router: appRouter, + createContext: createTRPCContext, + onError: + env.NODE_ENV === "development" + ? ({ path, error }) => { + console.error( + `❌ tRPC failed on ${path ?? ""}: ${error.message}` + ); + } + : undefined, +}); diff --git a/src/pages/index.tsx b/src/pages/index.tsx new file mode 100644 index 0000000..62b63e6 --- /dev/null +++ b/src/pages/index.tsx @@ -0,0 +1,33 @@ +import { ConnectButton } from "@rainbow-me/rainbowkit"; +import Head from "next/head"; + +import { api } from "~/utils/api"; + +export default function Home() { + const hello = api.post.hello.useQuery({ text: "from tRPC" }); + + return ( + <> + + Create T3 App + + + +
+
+

+ Create T3 App +

+ +

+ {hello.data ? hello.data.greeting : "Loading tRPC query..."} +

+ +
+ +
+
+
+ + ); +} diff --git a/src/server/api/root.ts b/src/server/api/root.ts new file mode 100644 index 0000000..3d629a7 --- /dev/null +++ b/src/server/api/root.ts @@ -0,0 +1,14 @@ +import { postRouter } from "~/server/api/routers/post"; +import { createTRPCRouter } from "~/server/api/trpc"; + +/** + * This is the primary router for your server. + * + * All routers added in /api/routers should be manually added here. + */ +export const appRouter = createTRPCRouter({ + post: postRouter, +}); + +// export type definition of API +export type AppRouter = typeof appRouter; diff --git a/src/server/api/routers/post.ts b/src/server/api/routers/post.ts new file mode 100644 index 0000000..1673517 --- /dev/null +++ b/src/server/api/routers/post.ts @@ -0,0 +1,32 @@ +import { z } from "zod"; + +import { createTRPCRouter, publicProcedure } from "~/server/api/trpc"; + +let post = { + id: 1, + name: "Hello World", +}; + +export const postRouter = createTRPCRouter({ + hello: publicProcedure + .input(z.object({ text: z.string() })) + .query(({ input }) => { + return { + greeting: `Hello ${input.text}`, + }; + }), + + create: publicProcedure + .input(z.object({ name: z.string().min(1) })) + .mutation(async ({ input }) => { + // simulate a slow db call + await new Promise((resolve) => setTimeout(resolve, 1000)); + + post = { id: post.id + 1, name: input.name }; + return post; + }), + + getLatest: publicProcedure.query(() => { + return post; + }), +}); diff --git a/src/server/api/trpc.ts b/src/server/api/trpc.ts new file mode 100644 index 0000000..3bda296 --- /dev/null +++ b/src/server/api/trpc.ts @@ -0,0 +1,92 @@ +/** + * YOU PROBABLY DON'T NEED TO EDIT THIS FILE, UNLESS: + * 1. You want to modify request context (see Part 1). + * 2. You want to create a new middleware or type of procedure (see Part 3). + * + * TL;DR - This is where all the tRPC server stuff is created and plugged in. The pieces you will + * need to use are documented accordingly near the end. + */ + +import { initTRPC } from "@trpc/server"; +import { type CreateNextContextOptions } from "@trpc/server/adapters/next"; +import superjson from "superjson"; +import { ZodError } from "zod"; + +/** + * 1. CONTEXT + * + * This section defines the "contexts" that are available in the backend API. + * + * These allow you to access things when processing a request, like the database, the session, etc. + */ + +type CreateContextOptions = Record; + +/** + * This helper generates the "internals" for a tRPC context. If you need to use it, you can export + * it from here. + * + * Examples of things you may need it for: + * - testing, so we don't have to mock Next.js' req/res + * - tRPC's `createSSGHelpers`, where we don't have req/res + * + * @see https://create.t3.gg/en/usage/trpc#-serverapitrpcts + */ +const createInnerTRPCContext = (_opts: CreateContextOptions) => { + return {}; +}; + +/** + * This is the actual context you will use in your router. It will be used to process every request + * that goes through your tRPC endpoint. + * + * @see https://trpc.io/docs/context + */ +export const createTRPCContext = (_opts: CreateNextContextOptions) => { + return createInnerTRPCContext({}); +}; + +/** + * 2. INITIALIZATION + * + * This is where the tRPC API is initialized, connecting the context and transformer. We also parse + * ZodErrors so that you get typesafety on the frontend if your procedure fails due to validation + * errors on the backend. + */ + +const t = initTRPC.context().create({ + transformer: superjson, + errorFormatter({ shape, error }) { + return { + ...shape, + data: { + ...shape.data, + zodError: + error.cause instanceof ZodError ? error.cause.flatten() : null, + }, + }; + }, +}); + +/** + * 3. ROUTER & PROCEDURE (THE IMPORTANT BIT) + * + * These are the pieces you use to build your tRPC API. You should import these a lot in the + * "/src/server/api/routers" directory. + */ + +/** + * This is how you create new routers and sub-routers in your tRPC API. + * + * @see https://trpc.io/docs/router + */ +export const createTRPCRouter = t.router; + +/** + * Public (unauthenticated) procedure + * + * This is the base piece you use to build new queries and mutations on your tRPC API. It does not + * guarantee that a user querying is authorized, but you can still access user session data if they + * are logged in. + */ +export const publicProcedure = t.procedure; diff --git a/src/styles/globals.css b/src/styles/globals.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/src/styles/globals.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/src/utils/api.ts b/src/utils/api.ts new file mode 100644 index 0000000..f4f4ad5 --- /dev/null +++ b/src/utils/api.ts @@ -0,0 +1,68 @@ +/** + * This is the client-side entrypoint for your tRPC API. It is used to create the `api` object which + * contains the Next.js App-wrapper, as well as your type-safe React Query hooks. + * + * We also create a few inference helpers for input and output types. + */ +import { httpBatchLink, loggerLink } from "@trpc/client"; +import { createTRPCNext } from "@trpc/next"; +import { type inferRouterInputs, type inferRouterOutputs } from "@trpc/server"; +import superjson from "superjson"; + +import { type AppRouter } from "~/server/api/root"; + +const getBaseUrl = () => { + if (typeof window !== "undefined") return ""; // browser should use relative url + if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}`; // SSR should use vercel url + return `http://localhost:${process.env.PORT ?? 3000}`; // dev SSR should use localhost +}; + +/** A set of type-safe react-query hooks for your tRPC API. */ +export const api = createTRPCNext({ + config() { + return { + /** + * Transformer used for data de-serialization from the server. + * + * @see https://trpc.io/docs/data-transformers + */ + transformer: superjson, + + /** + * Links used to determine request flow from client to server. + * + * @see https://trpc.io/docs/links + */ + links: [ + loggerLink({ + enabled: (opts) => + process.env.NODE_ENV === "development" || + (opts.direction === "down" && opts.result instanceof Error), + }), + httpBatchLink({ + url: `${getBaseUrl()}/api/trpc`, + }), + ], + }; + }, + /** + * Whether tRPC should await queries when server rendering pages. + * + * @see https://trpc.io/docs/nextjs#ssr-boolean-default-false + */ + ssr: false, +}); + +/** + * Inference helper for inputs. + * + * @example type HelloInput = RouterInputs['example']['hello'] + */ +export type RouterInputs = inferRouterInputs; + +/** + * Inference helper for outputs. + * + * @example type HelloOutput = RouterOutputs['example']['hello'] + */ +export type RouterOutputs = inferRouterOutputs; diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..f06488f --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,14 @@ +import { type Config } from "tailwindcss"; +import { fontFamily } from "tailwindcss/defaultTheme"; + +export default { + content: ["./src/**/*.tsx"], + theme: { + extend: { + fontFamily: { + sans: ["var(--font-sans)", ...fontFamily.sans], + }, + }, + }, + plugins: [], +} satisfies Config; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1dfa3a8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + "target": "es2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "checkJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "noUncheckedIndexedAccess": true, + "baseUrl": ".", + "paths": { + "~/*": ["./src/*"] + }, + "plugins": [{ "name": "next" }] + }, + "include": [ + ".eslintrc.cjs", + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + "**/*.cjs", + "**/*.mjs", + ".next/types/**/*.ts" + ], + "exclude": ["node_modules"] +} From bb9493488204db1691d14d7aa3675e7572d82cfa Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 13:58:32 +0200 Subject: [PATCH 02/51] add nvmrc --- .nvmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..a58d2d2 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +18.18.2 \ No newline at end of file From d4040319e8626cf1c1136e9723903bf4364ed92a Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 13:58:41 +0200 Subject: [PATCH 03/51] change name --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ae01c65..3dd2632 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "maioapp", + "name": "perpetual-dex", "version": "0.1.0", "private": true, "scripts": { From cbafe828e95a5246460ed28342d6937b112e6900 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 14:12:23 +0200 Subject: [PATCH 04/51] baseLayout --- src/layouts/BaseLayout.tsx | 31 +++++++++++++++++++++++++++++++ src/pages/_app.tsx | 5 ++++- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/layouts/BaseLayout.tsx diff --git a/src/layouts/BaseLayout.tsx b/src/layouts/BaseLayout.tsx new file mode 100644 index 0000000..457e00b --- /dev/null +++ b/src/layouts/BaseLayout.tsx @@ -0,0 +1,31 @@ +import { ConnectButton } from "@rainbow-me/rainbowkit"; +import Head from "next/head"; +import React from "react"; +import { Navbar } from "~/components"; + +const BaseLayout: React.FC<{ + children: React.ReactNode; +}> = ({ children }) => { + const bg = "bg-gradient-to-b from-gray-900 to-gray-600 bg-gradient-to-r"; + return ( + <> + + AT - Dex + + + +
+ + + {children} +
+ + ); +}; + +export default BaseLayout; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index ce8c028..d25e765 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -8,6 +8,7 @@ import { getDefaultWallets, RainbowKitProvider } from "@rainbow-me/rainbowkit"; import { configureChains, createConfig, WagmiConfig } from "wagmi"; import { publicProvider } from "wagmi/providers/public"; import { xdcTestnet } from "viem/chains"; +import BaseLayout from "~/layouts/BaseLayout"; const MyApp: AppType = ({ Component, pageProps }) => { const { chains, publicClient } = configureChains( @@ -30,7 +31,9 @@ const MyApp: AppType = ({ Component, pageProps }) => { return ( - + + + ); From 8fd85995824f3c32228693b50bcc5315512affe9 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 14:12:32 +0200 Subject: [PATCH 05/51] nabar --- src/components/Navbar.tsx | 49 +++++++++++++++++++++++++++++++++++++++ src/components/index.ts | 6 +++++ src/pages/index.tsx | 21 +---------------- 3 files changed, 56 insertions(+), 20 deletions(-) create mode 100644 src/components/Navbar.tsx create mode 100644 src/components/index.ts diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx new file mode 100644 index 0000000..f2209e6 --- /dev/null +++ b/src/components/Navbar.tsx @@ -0,0 +1,49 @@ +import { ConnectButton } from "@rainbow-me/rainbowkit"; +import React from "react"; + +const Navbar = () => { + return ( +
+
+ + + + + Tailblocks + + + {/* */} + +
+
+ ); +}; + +export default Navbar; diff --git a/src/components/index.ts b/src/components/index.ts new file mode 100644 index 0000000..4a00deb --- /dev/null +++ b/src/components/index.ts @@ -0,0 +1,6 @@ +import Navbar from "./Navbar"; + +export { + Navbar, + // other components +}; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 62b63e6..6807c81 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -8,26 +8,7 @@ export default function Home() { return ( <> - - Create T3 App - - - -
-
-

- Create T3 App -

- -

- {hello.data ? hello.data.greeting : "Loading tRPC query..."} -

- -
- -
-
-
+
Hello
); } From 0b0f4694ae855c4ae28c6b9b50b09399637d1c6d Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 14:16:32 +0200 Subject: [PATCH 06/51] instrument sans --- package.json | 1 + pnpm-lock.yaml | 7 +++++++ src/layouts/BaseLayout.tsx | 1 - src/pages/_app.tsx | 6 ++++++ src/styles/globals.css | 4 ++++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 3dd2632..0783bf7 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "start": "next start" }, "dependencies": { + "@fontsource-variable/instrument-sans": "^5.0.3", "@rainbow-me/rainbowkit": "^1.1.2", "@t3-oss/env-nextjs": "^0.7.0", "@tanstack/react-query": "^4.32.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 99c02cc..8d1b119 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + '@fontsource-variable/instrument-sans': + specifier: ^5.0.3 + version: 5.0.3 '@rainbow-me/rainbowkit': specifier: ^1.1.2 version: 1.1.2(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0)(viem@1.16.6)(wagmi@1.4.5) @@ -183,6 +186,10 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@fontsource-variable/instrument-sans@5.0.3: + resolution: {integrity: sha512-HlObrvApp8qftNZOS3My3aVHrj0hOMLETJ11GKEyPUB1XQB5+Lkts2SdfYQjgOZOQqvhXtwpvWPrn+uk+lCpgw==} + dev: false + /@humanwhocodes/config-array@0.11.13: resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} diff --git a/src/layouts/BaseLayout.tsx b/src/layouts/BaseLayout.tsx index 457e00b..45a5d39 100644 --- a/src/layouts/BaseLayout.tsx +++ b/src/layouts/BaseLayout.tsx @@ -1,4 +1,3 @@ -import { ConnectButton } from "@rainbow-me/rainbowkit"; import Head from "next/head"; import React from "react"; import { Navbar } from "~/components"; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index d25e765..adbbb64 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -2,8 +2,14 @@ import { type AppType } from "next/app"; import { api } from "~/utils/api"; +// Font (supports weights 400-700) +import "@fontsource-variable/instrument-sans/wdth.css"; + +// Styles import "~/styles/globals.css"; import "@rainbow-me/rainbowkit/styles.css"; + +// Misc import { getDefaultWallets, RainbowKitProvider } from "@rainbow-me/rainbowkit"; import { configureChains, createConfig, WagmiConfig } from "wagmi"; import { publicProvider } from "wagmi/providers/public"; diff --git a/src/styles/globals.css b/src/styles/globals.css index b5c61c9..4016e00 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,3 +1,7 @@ @tailwind base; @tailwind components; @tailwind utilities; + +body { + font-family: "Instrument Sans Variable", sans-serif; +} From 75871e57cfc9bd1eaf217ec2b1d29571d55f53f5 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 14:37:09 +0200 Subject: [PATCH 07/51] add shadcn --- components.json | 16 ++ package.json | 7 + pnpm-lock.yaml | 432 +++++++++++++++++++++++++------ src/components/lib/utils.ts | 6 + src/components/shadcn/button.tsx | 56 ++++ src/pages/index.tsx | 14 +- src/styles/globals.css | 73 +++++- tailwind.config.js | 76 ++++++ 8 files changed, 598 insertions(+), 82 deletions(-) create mode 100644 components.json create mode 100644 src/components/lib/utils.ts create mode 100644 src/components/shadcn/button.tsx create mode 100644 tailwind.config.js diff --git a/components.json b/components.json new file mode 100644 index 0000000..163d2e2 --- /dev/null +++ b/components.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/styles/globals.css", + "baseColor": "slate", + "cssVariables": true + }, + "aliases": { + "components": "src/components/shadcn", + "utils": "src/utils/lib" + } +} diff --git a/package.json b/package.json index 0783bf7..22716e0 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ }, "dependencies": { "@fontsource-variable/instrument-sans": "^5.0.3", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-slot": "^1.0.2", "@rainbow-me/rainbowkit": "^1.1.2", "@t3-oss/env-nextjs": "^0.7.0", "@tanstack/react-query": "^4.32.6", @@ -17,10 +19,15 @@ "@trpc/next": "^10.37.1", "@trpc/react-query": "^10.37.1", "@trpc/server": "^10.37.1", + "class-variance-authority": "^0.7.0", + "clsx": "^2.0.0", + "lucide-react": "^0.288.0", "next": "^13.5.4", "react": "18.2.0", "react-dom": "18.2.0", "superjson": "^1.13.1", + "tailwind-merge": "^1.14.0", + "tailwindcss-animate": "^1.0.7", "viem": "^1.16.6", "wagmi": "^1.4.5", "zod": "^3.22.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d1b119..3753002 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,12 @@ dependencies: '@fontsource-variable/instrument-sans': specifier: ^5.0.3 version: 5.0.3 + '@radix-ui/react-dialog': + specifier: ^1.0.5 + version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': + specifier: ^1.0.2 + version: 1.0.2(@types/react@18.2.31)(react@18.2.0) '@rainbow-me/rainbowkit': specifier: ^1.1.2 version: 1.1.2(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0)(viem@1.16.6)(wagmi@1.4.5) @@ -29,6 +35,15 @@ dependencies: '@trpc/server': specifier: ^10.37.1 version: 10.41.0 + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.0.0 + version: 2.0.0 + lucide-react: + specifier: ^0.288.0 + version: 0.288.0(react@18.2.0) next: specifier: ^13.5.4 version: 13.5.6(react-dom@18.2.0)(react@18.2.0) @@ -41,6 +56,12 @@ dependencies: superjson: specifier: ^1.13.1 version: 1.13.3 + tailwind-merge: + specifier: ^1.14.0 + version: 1.14.0 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.3.3) viem: specifier: ^1.16.6 version: 1.16.6(typescript@5.2.2)(zod@3.22.4) @@ -109,7 +130,6 @@ packages: /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - dev: true /@babel/runtime@7.23.2: resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} @@ -217,28 +237,23 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.20 - dev: true /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.20: resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@ledgerhq/connect-kit-loader@1.1.2: resolution: {integrity: sha512-mscwGroSJQrCTjtNGBu+18FQbZYA4+q6Tyx6K7CXHl6AwgZKbWfZYdgP2F+fyZcRUdGRsMX8QtvU61VcGGtO1A==} @@ -439,12 +454,10 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -452,7 +465,288 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: true + + /@radix-ui/primitive@1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + dependencies: + '@babel/runtime': 7.23.2 + dev: false + + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + + /@radix-ui/react-context@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + + /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.31)(react@18.2.0) + dev: false + + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-id@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-slot@1.0.2(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false /@rainbow-me/rainbowkit@1.1.2(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0)(viem@1.16.6)(wagmi@1.4.5): resolution: {integrity: sha512-yWxKDfHL4xDZJW34APGkmO2SkxjHwrEeAfvx6+137hWLttQwHcalG9nj4II8roYV2/2XJPmQsbEs7TM0rC0fOg==} @@ -863,7 +1157,6 @@ packages: resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==} dependencies: '@types/react': 18.2.31 - dev: true /@types/react@18.2.31: resolution: {integrity: sha512-c2UnPv548q+5DFh03y8lEDeMfDwBn9G3dRwfkrxQMo/dOtRHUUO57k6pHvBIfH/VF4Nh+98mZ5aaSe+2echD5g==} @@ -1581,7 +1874,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -1589,16 +1881,21 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true + /aria-hidden@1.2.3: + resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + engines: {node: '>=10'} + dependencies: + tslib: 2.6.2 + dev: false + /aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: @@ -1736,7 +2033,6 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true /base-x@3.0.9: resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} @@ -1763,7 +2059,6 @@ packages: /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: true /bind-decorator@1.0.11: resolution: {integrity: sha512-yzkH0uog6Vv/vQ9+rhSKxecnqGUZHYncg7qS7voz3Q76+TAi1SGiOKk2mlOvusQnFz9Dc4BC/NMkeXu11YgjJg==} @@ -1792,14 +2087,12 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: true /browserslist@4.22.1: resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} @@ -1855,7 +2148,6 @@ packages: /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - dev: true /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} @@ -1885,7 +2177,12 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true + + /class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + dependencies: + clsx: 2.0.0 + dev: false /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -1909,6 +2206,11 @@ packages: engines: {node: '>=6'} dev: false + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1925,11 +2227,9 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: true /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true /copy-anything@3.0.5: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} @@ -2060,7 +2360,6 @@ packages: /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true /dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} @@ -2075,7 +2374,6 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} @@ -2576,7 +2874,6 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -2603,7 +2900,6 @@ packages: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 - dev: true /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} @@ -2621,7 +2917,6 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: true /filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} @@ -2668,14 +2963,12 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind@1.1.2: @@ -2732,14 +3025,12 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: true /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: true /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -2754,7 +3045,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} @@ -2906,7 +3196,6 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -2960,7 +3249,6 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -2978,7 +3266,6 @@ packages: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.0 - dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -2990,7 +3277,6 @@ packages: /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true /is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} @@ -3014,7 +3300,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: true /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} @@ -3035,7 +3320,6 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} @@ -3165,7 +3449,6 @@ packages: /jiti@1.20.0: resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} hasBin: true - dev: true /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3268,11 +3551,9 @@ packages: /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - dev: true /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /lit-element@3.3.3: resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} @@ -3334,6 +3615,14 @@ packages: dependencies: yallist: 4.0.0 + /lucide-react@0.288.0(react@18.2.0): + resolution: {integrity: sha512-ikhb/9LOkq9orPoLV9lLC4UYyoXQycBhIgH7H59ahOkk0mkcAqkD52m84RXedE/qVqZHW8rEJquInT4xGmsNqw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /make-plural@7.3.0: resolution: {integrity: sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw==} dev: false @@ -3347,7 +3636,6 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: true /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} @@ -3355,7 +3643,6 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -3365,7 +3652,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -3398,7 +3684,6 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} @@ -3476,7 +3761,6 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: true /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} @@ -3486,12 +3770,10 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: true /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: true /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -3626,7 +3908,6 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -3635,7 +3916,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -3648,12 +3928,10 @@ packages: /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: true /pify@3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} @@ -3696,7 +3974,6 @@ packages: /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - dev: true /pngjs@5.0.0: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} @@ -3713,7 +3990,6 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - dev: true /postcss-js@4.0.1(postcss@8.4.31): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -3723,7 +3999,6 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.31 - dev: true /postcss-load-config@4.0.1(postcss@8.4.31): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} @@ -3740,7 +4015,6 @@ packages: lilconfig: 2.1.0 postcss: 8.4.31 yaml: 2.3.3 - dev: true /postcss-nested@6.0.1(postcss@8.4.31): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -3750,7 +4024,6 @@ packages: dependencies: postcss: 8.4.31 postcss-selector-parser: 6.0.13 - dev: true /postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} @@ -3758,11 +4031,9 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true /postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} @@ -3914,7 +4185,6 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true /quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} @@ -3975,6 +4245,25 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.31)(react@18.2.0) dev: false + /react-remove-scroll@2.5.5(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.31)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.31)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.0(@types/react@18.2.31)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.31)(react@18.2.0) + dev: false + /react-ssr-prepass@1.5.0(react@18.2.0): resolution: {integrity: sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==} peerDependencies: @@ -4011,7 +4300,6 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 - dev: true /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} @@ -4027,7 +4315,6 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: true /real-require@0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} @@ -4083,7 +4370,6 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} @@ -4097,7 +4383,6 @@ packages: /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -4122,7 +4407,6 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: true /rxjs@6.6.7: resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} @@ -4374,7 +4658,6 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: true /superjson@1.13.3: resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} @@ -4401,7 +4684,18 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true + + /tailwind-merge@1.14.0: + resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} + dev: false + + /tailwindcss-animate@1.0.7(tailwindcss@3.3.3): + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + tailwindcss: 3.3.3 + dev: false /tailwindcss@3.3.3: resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} @@ -4432,7 +4726,6 @@ packages: sucrase: 3.34.0 transitivePeerDependencies: - ts-node - dev: true /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -4452,13 +4745,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: true /thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} @@ -4475,7 +4766,6 @@ packages: engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: true /toggle-selection@1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} @@ -4496,7 +4786,6 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true /tsconfig-paths@3.14.2: resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} @@ -4894,7 +5183,6 @@ packages: /yaml@2.3.3: resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} engines: {node: '>= 14'} - dev: true /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} diff --git a/src/components/lib/utils.ts b/src/components/lib/utils.ts new file mode 100644 index 0000000..ec79801 --- /dev/null +++ b/src/components/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/components/shadcn/button.tsx b/src/components/shadcn/button.tsx new file mode 100644 index 0000000..a1c1ee1 --- /dev/null +++ b/src/components/shadcn/button.tsx @@ -0,0 +1,56 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "~/components/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button"; + return ( + + ); + }, +); +Button.displayName = "Button"; + +export { Button, buttonVariants }; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6807c81..5e18898 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,14 +1,12 @@ -import { ConnectButton } from "@rainbow-me/rainbowkit"; -import Head from "next/head"; - -import { api } from "~/utils/api"; +import { Button } from "~/components/shadcn/button"; export default function Home() { - const hello = api.post.hello.useQuery({ text: "from tRPC" }); + // const hello = api.post.hello.useQuery({ text: "from tRPC" }); return ( - <> -
Hello
- +
+ Hello + +
); } diff --git a/src/styles/globals.css b/src/styles/globals.css index 4016e00..6a75725 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,7 +1,76 @@ @tailwind base; @tailwind components; @tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; -body { - font-family: "Instrument Sans Variable", sans-serif; + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + } } + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..0377ea1 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,76 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: [ + './pages/**/*.{ts,tsx}', + './components/**/*.{ts,tsx}', + './app/**/*.{ts,tsx}', + './src/**/*.{ts,tsx}', + ], + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: 0 }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: 0 }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], +} \ No newline at end of file From d105850ea319009a89566488300b816faf704310 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 14:45:13 +0200 Subject: [PATCH 08/51] add sheet --- src/components/{shadcn => ui}/button.tsx | 0 src/components/ui/sheet.tsx | 138 +++++++++++++++++++++++ src/pages/index.tsx | 10 +- 3 files changed, 147 insertions(+), 1 deletion(-) rename src/components/{shadcn => ui}/button.tsx (100%) create mode 100644 src/components/ui/sheet.tsx diff --git a/src/components/shadcn/button.tsx b/src/components/ui/button.tsx similarity index 100% rename from src/components/shadcn/button.tsx rename to src/components/ui/button.tsx diff --git a/src/components/ui/sheet.tsx b/src/components/ui/sheet.tsx new file mode 100644 index 0000000..d9f0c71 --- /dev/null +++ b/src/components/ui/sheet.tsx @@ -0,0 +1,138 @@ +import * as React from "react"; +import * as SheetPrimitive from "@radix-ui/react-dialog"; +import { cva, type VariantProps } from "class-variance-authority"; +import { X } from "lucide-react"; + +import { cn } from "../lib/utils"; + +const Sheet = SheetPrimitive.Root; + +const SheetTrigger = SheetPrimitive.Trigger; + +const SheetClose = SheetPrimitive.Close; + +const SheetPortal = SheetPrimitive.Portal; + +const SheetOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SheetOverlay.displayName = SheetPrimitive.Overlay.displayName; + +const sheetVariants = cva( + "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500", + { + variants: { + side: { + top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top", + bottom: + "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom", + left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm", + right: + "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm", + }, + }, + defaultVariants: { + side: "right", + }, + }, +); + +interface SheetContentProps + extends React.ComponentPropsWithoutRef, + VariantProps {} + +const SheetContent = React.forwardRef< + React.ElementRef, + SheetContentProps +>(({ side = "right", className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)); +SheetContent.displayName = SheetPrimitive.Content.displayName; + +const SheetHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +SheetHeader.displayName = "SheetHeader"; + +const SheetFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +SheetFooter.displayName = "SheetFooter"; + +const SheetTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SheetTitle.displayName = SheetPrimitive.Title.displayName; + +const SheetDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SheetDescription.displayName = SheetPrimitive.Description.displayName; + +export { + Sheet, + SheetPortal, + SheetOverlay, + SheetTrigger, + SheetClose, + SheetContent, + SheetHeader, + SheetFooter, + SheetTitle, + SheetDescription, +}; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5e18898..6ae1e97 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,4 +1,12 @@ -import { Button } from "~/components/shadcn/button"; +import { Button } from "~/components/ui/button"; +import { + Sheet, + SheetContent, + SheetDescription, + SheetHeader, + SheetTitle, + SheetTrigger, +} from "~/components/ui/sheet"; export default function Home() { // const hello = api.post.hello.useQuery({ text: "from tRPC" }); From 8db7a3830080daf87af7a2a3cc2cbcb5e52851f0 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 15:02:08 +0200 Subject: [PATCH 09/51] add autoanimate --- package.json | 1 + pnpm-lock.yaml | 7 +++++++ src/components/AutoanimateTest.tsx | 23 +++++++++++++++++++++++ src/pages/index.tsx | 3 ++- 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/components/AutoanimateTest.tsx diff --git a/package.json b/package.json index 22716e0..e6b4fd5 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@fontsource-variable/instrument-sans": "^5.0.3", + "@formkit/auto-animate": "^0.8.0", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-slot": "^1.0.2", "@rainbow-me/rainbowkit": "^1.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3753002..3f975da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@fontsource-variable/instrument-sans': specifier: ^5.0.3 version: 5.0.3 + '@formkit/auto-animate': + specifier: ^0.8.0 + version: 0.8.0 '@radix-ui/react-dialog': specifier: ^1.0.5 version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) @@ -210,6 +213,10 @@ packages: resolution: {integrity: sha512-HlObrvApp8qftNZOS3My3aVHrj0hOMLETJ11GKEyPUB1XQB5+Lkts2SdfYQjgOZOQqvhXtwpvWPrn+uk+lCpgw==} dev: false + /@formkit/auto-animate@0.8.0: + resolution: {integrity: sha512-G8f7489ka0mWyi+1IEZT+xgIwcpWtRMmE2x+IrVoQ+KM1cP6VDj/TbujZjwxdb0P8w8b16/qBfViRmydbYHwMw==} + dev: false + /@humanwhocodes/config-array@0.11.13: resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} diff --git a/src/components/AutoanimateTest.tsx b/src/components/AutoanimateTest.tsx new file mode 100644 index 0000000..5013fc7 --- /dev/null +++ b/src/components/AutoanimateTest.tsx @@ -0,0 +1,23 @@ +import React from "react"; +import { useAutoAnimate } from "@formkit/auto-animate/react"; +import { Button } from "./ui/button"; + +const AutoanimateTest = () => { + const [items, setItems] = React.useState([0, 1, 2]); + const [parent, enableAnimations] = useAutoAnimate(/* optional config */); + const add = () => setItems([...items, items.length]); + return ( + <> +
    + {items.map((item) => ( +
  • {item}
  • + ))} +
+ + + ); +}; + +export default AutoanimateTest; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6ae1e97..4302e8f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,3 +1,4 @@ +import AutoanimateTest from "~/components/AutoanimateTest"; import { Button } from "~/components/ui/button"; import { Sheet, @@ -12,7 +13,7 @@ export default function Home() { // const hello = api.post.hello.useQuery({ text: "from tRPC" }); return ( -
+
Hello
From e138635593e695f4c577e016768ba89d13331c4d Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 15:36:57 +0200 Subject: [PATCH 10/51] general layout --- src/components/Navbar.tsx | 38 +++++++++++++------------------------- src/layouts/BaseLayout.tsx | 5 +++-- src/pages/index.tsx | 19 +++++-------------- 3 files changed, 21 insertions(+), 41 deletions(-) diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index f2209e6..78eb972 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -1,45 +1,33 @@ import { ConnectButton } from "@rainbow-me/rainbowkit"; import React from "react"; +import { Button } from "./ui/button"; const Navbar = () => { return ( -
+
- + - Tailblocks + AllDex -
diff --git a/src/layouts/BaseLayout.tsx b/src/layouts/BaseLayout.tsx index 45a5d39..2066f81 100644 --- a/src/layouts/BaseLayout.tsx +++ b/src/layouts/BaseLayout.tsx @@ -6,16 +6,17 @@ const BaseLayout: React.FC<{ children: React.ReactNode; }> = ({ children }) => { const bg = "bg-gradient-to-b from-gray-900 to-gray-600 bg-gradient-to-r"; + return ( <> - AT - Dex + AllDex
diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4302e8f..3f9f153 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,21 +1,12 @@ -import AutoanimateTest from "~/components/AutoanimateTest"; -import { Button } from "~/components/ui/button"; -import { - Sheet, - SheetContent, - SheetDescription, - SheetHeader, - SheetTitle, - SheetTrigger, -} from "~/components/ui/sheet"; - export default function Home() { // const hello = api.post.hello.useQuery({ text: "from tRPC" }); return ( -
- Hello - +
+
+

+
+
); } From c201f95e327f2045505204211c6de6bfb495c4a3 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 15:42:29 +0200 Subject: [PATCH 11/51] add defaults & types --- src/types/index.ts | 4 ++++ src/utils/constants.ts | 8 ++++++++ 2 files changed, 12 insertions(+) create mode 100644 src/types/index.ts create mode 100644 src/utils/constants.ts diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..b811bdc --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,4 @@ +export interface Pair { + numerator: string; + denominator: string; +} diff --git a/src/utils/constants.ts b/src/utils/constants.ts new file mode 100644 index 0000000..9c39ed0 --- /dev/null +++ b/src/utils/constants.ts @@ -0,0 +1,8 @@ +import type { Pair } from "~/types"; + +const defaultPair: Pair = { + numerator: "XDC", + denominator: "USDC", +}; + +export { defaultPair }; From f8467167c452c3e05aec2abd6ec66c0ae6773c1f Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 16:12:03 +0200 Subject: [PATCH 12/51] fix errors --- components.json | 4 +- src/components/ui/card.tsx | 85 ++++++++++++++++++++++++++++++++++++++ src/pages/index.tsx | 41 ++++++++++++++++-- 3 files changed, 125 insertions(+), 5 deletions(-) create mode 100644 src/components/ui/card.tsx diff --git a/components.json b/components.json index 163d2e2..e7c28b5 100644 --- a/components.json +++ b/components.json @@ -10,7 +10,7 @@ "cssVariables": true }, "aliases": { - "components": "src/components/shadcn", - "utils": "src/utils/lib" + "components": "src/components/", + "utils": "src/components/lib/" } } diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 0000000..fbee0ab --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,85 @@ +import * as React from "react"; +import { cn } from "~/components/lib/utils"; + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +Card.displayName = "Card"; + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardHeader.displayName = "CardHeader"; + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardTitle.displayName = "CardTitle"; + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardDescription.displayName = "CardDescription"; + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardContent.displayName = "CardContent"; + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardFooter.displayName = "CardFooter"; + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardDescription, + CardContent, +}; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 3f9f153..3a839c4 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -3,10 +3,45 @@ export default function Home() { return (
-
-

+
+ {/* table with bid and asks here */} +
+
+ The chart goes here +
+
+ The Execution history goes here +
+
+
+
-
); } + +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "~/components/ui/card"; + +const TradingUi = () => { + return ( + + + Card Title + Card Description + + +

Card Content

+
+ +

Card Footer

+
+
+ ); +}; From caecbd126347e9609320955490f6f14c944cec36 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 16:15:53 +0200 Subject: [PATCH 13/51] fix paths --- components.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components.json b/components.json index e7c28b5..def268f 100644 --- a/components.json +++ b/components.json @@ -11,6 +11,6 @@ }, "aliases": { "components": "src/components/", - "utils": "src/components/lib/" + "utils": "~/components/lib/utils" } } From 9a640b29efbcfd816cde6655fc07296abd063aed Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 16:15:57 +0200 Subject: [PATCH 14/51] add tabs --- package.json | 1 + pnpm-lock.yaml | 98 ++++++++++++++++++++++++++++++++++++++ src/components/ui/tabs.tsx | 53 +++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 src/components/ui/tabs.tsx diff --git a/package.json b/package.json index e6b4fd5..bb1c229 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@formkit/auto-animate": "^0.8.0", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tabs": "^1.0.4", "@rainbow-me/rainbowkit": "^1.1.2", "@t3-oss/env-nextjs": "^0.7.0", "@tanstack/react-query": "^4.32.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f975da..3b97a62 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ dependencies: '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-tabs': + specifier: ^1.0.4 + version: 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) '@rainbow-me/rainbowkit': specifier: ^1.1.2 version: 1.1.2(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0)(viem@1.16.6)(wagmi@1.4.5) @@ -479,6 +482,30 @@ packages: '@babel/runtime': 7.23.2 dev: false + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: @@ -541,6 +568,20 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.31)(react@18.2.0) dev: false + /@radix-ui/react-direction@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: @@ -682,6 +723,35 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-slot@1.0.2(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: @@ -697,6 +767,34 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: diff --git a/src/components/ui/tabs.tsx b/src/components/ui/tabs.tsx new file mode 100644 index 0000000..a79ced0 --- /dev/null +++ b/src/components/ui/tabs.tsx @@ -0,0 +1,53 @@ +import * as React from "react" +import * as TabsPrimitive from "@radix-ui/react-tabs" + +import { cn } from "~/components/lib/utils" + +const Tabs = TabsPrimitive.Root + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsList.displayName = TabsPrimitive.List.displayName + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsContent.displayName = TabsPrimitive.Content.displayName + +export { Tabs, TabsList, TabsTrigger, TabsContent } From 072e75609bd860ec20ed6136946fbe1526a156b2 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 17:01:25 +0200 Subject: [PATCH 15/51] Buy tab --- package.json | 1 + pnpm-lock.yaml | 24 +++++++++++++ src/components/ui/input.tsx | 25 ++++++++++++++ src/components/ui/label.tsx | 24 +++++++++++++ src/pages/index.tsx | 67 +++++++++++++++++++++++++++++++++---- 5 files changed, 135 insertions(+), 6 deletions(-) create mode 100644 src/components/ui/input.tsx create mode 100644 src/components/ui/label.tsx diff --git a/package.json b/package.json index bb1c229..d78da2b 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "@fontsource-variable/instrument-sans": "^5.0.3", "@formkit/auto-animate": "^0.8.0", "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-label": "^2.0.2", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.0.4", "@rainbow-me/rainbowkit": "^1.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b97a62..a254577 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ dependencies: '@radix-ui/react-dialog': specifier: ^1.0.5 version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-label': + specifier: ^2.0.2 + version: 2.0.2(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.0.2(@types/react@18.2.31)(react@18.2.0) @@ -659,6 +662,27 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx new file mode 100644 index 0000000..df64f4e --- /dev/null +++ b/src/components/ui/input.tsx @@ -0,0 +1,25 @@ +import * as React from "react" + +import { cn } from "~/components/lib/utils" + +export interface InputProps + extends React.InputHTMLAttributes {} + +const Input = React.forwardRef( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx new file mode 100644 index 0000000..f1e1e7e --- /dev/null +++ b/src/components/ui/label.tsx @@ -0,0 +1,24 @@ +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "~/components/lib/utils" + +const labelVariants = cva( + "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" +) + +const Label = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, ...props }, ref) => ( + +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 3a839c4..33d7c82 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -5,21 +5,43 @@ export default function Home() {
{/* table with bid and asks here */} -
-
+
+
The chart goes here
The Execution history goes here
-
+
); } +import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs"; + +const TradingUi = () => { + return ( + + + + Buy + + + Sell + + + + + + + + + + ); +}; import { Card, CardContent, @@ -28,12 +50,45 @@ import { CardHeader, CardTitle, } from "~/components/ui/card"; +import { Label } from "~/components/ui/label"; +import { Input } from "~/components/ui/input"; +import { Button } from "~/components/ui/button"; -const TradingUi = () => { +const Buy = () => { + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + console.log("submit"); + }; + + return ( +
+
+

Buy

+
+ + + +
+
+ +
+ ); +}; + +const Sell = () => { return ( - + - Card Title + Sell Card Description From a24a27a2aaee7efbbd62cac5a46c13ca76491866 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 17:13:16 +0200 Subject: [PATCH 16/51] add zustand --- package.json | 3 ++- pnpm-lock.yaml | 3 +++ src/components/History.tsx | 35 +++++++++++++++++++++++++++++++++++ src/pages/index.tsx | 7 ++++++- src/stores/history.ts | 13 +++++++++++++ 5 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 src/components/History.tsx create mode 100644 src/stores/history.ts diff --git a/package.json b/package.json index d78da2b..acc3b0b 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "tailwindcss-animate": "^1.0.7", "viem": "^1.16.6", "wagmi": "^1.4.5", - "zod": "^3.22.4" + "zod": "^3.22.4", + "zustand": "^4.4.4" }, "devDependencies": { "@types/eslint": "^8.44.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a254577..651d7eb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,6 +80,9 @@ dependencies: zod: specifier: ^3.22.4 version: 3.22.4 + zustand: + specifier: ^4.4.4 + version: 4.4.4(@types/react@18.2.31)(react@18.2.0) devDependencies: '@types/eslint': diff --git a/src/components/History.tsx b/src/components/History.tsx new file mode 100644 index 0000000..22f510b --- /dev/null +++ b/src/components/History.tsx @@ -0,0 +1,35 @@ +import React from "react"; +import { useAutoAnimate } from "@formkit/auto-animate/react"; +import useHistoryStore from "~/stores/history"; + +const History = () => { + // const [itemsNum, setItemsNum] = React.useState([0]); + const [parent] = useAutoAnimate(/* optional config */); + + const items = useHistoryStore((state) => state.items); + + // const add = () => setItems([...items, items.length]); + return ( + // <> + //
    + // {items.map((item) => ( + //
  • {item}
  • + // ))} + //
+ // + // +
    + {items.map((item, idx) => ( + + ))} +
+ ); +}; + +export default History; + +const Item = () => { + return
  • this is an element
  • ; +}; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 33d7c82..1ef4381 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -10,7 +10,7 @@ export default function Home() { The chart goes here
    - The Execution history goes here +
    @@ -53,10 +53,15 @@ import { import { Label } from "~/components/ui/label"; import { Input } from "~/components/ui/input"; import { Button } from "~/components/ui/button"; +import History from "~/components/History"; +import useHistoryStore from "~/stores/history"; const Buy = () => { + const increase = useHistoryStore((state) => state.addOneItem); + const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); + increase(); console.log("submit"); }; diff --git a/src/stores/history.ts b/src/stores/history.ts new file mode 100644 index 0000000..d9c192f --- /dev/null +++ b/src/stores/history.ts @@ -0,0 +1,13 @@ +import { create } from "zustand"; + +const useHistoryStore = create<{ + items: number[]; + addOneItem: () => void; + removeAllItems: () => void; +}>((set) => ({ + items: [0], + addOneItem: () => set((state) => ({ items: [...state.items, 0] })), + removeAllItems: () => set({ items: [] }), +})); + +export default useHistoryStore; From f8068a33ea203f52b117b48851687ec49e285091 Mon Sep 17 00:00:00 2001 From: AmandineBI Date: Tue, 24 Oct 2023 17:25:56 +0200 Subject: [PATCH 17/51] Create first part of PairHeader --- src/components/Navbar.tsx | 6 ++--- src/components/PairHeader.tsx | 46 +++++++++++++++++++++++++++++++++++ src/interfaces/Pair.tsx | 10 ++++++++ src/pages/index.tsx | 11 +++++++++ 4 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 src/components/PairHeader.tsx create mode 100644 src/interfaces/Pair.tsx diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index f2209e6..6e05069 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -10,9 +10,9 @@ const Navbar = () => { xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" - stroke-linecap="round" - stroke-linejoin="round" - stroke-width="2" + strokeLinecap="round" + strokeLinejoin="round" + strokeWidth="2" className="h-10 w-10 rounded-full bg-green-500 p-2 text-white" viewBox="0 0 24 24" > diff --git a/src/components/PairHeader.tsx b/src/components/PairHeader.tsx new file mode 100644 index 0000000..dad21ee --- /dev/null +++ b/src/components/PairHeader.tsx @@ -0,0 +1,46 @@ +import React, { useState } from "react"; +import type Pair from "~/interfaces/Pair"; + + +interface PairHeaderProps { + pair:Pair +} + +const PairHeader = (props:PairHeaderProps) => { + const [showPairs, setShowPairs] = useState(false); + + function togglePairs() { + setShowPairs(prevShowPairs => !prevShowPairs); + console.log(showPairs); + } + + return ( +
    +
    + + +
    + This is the list of pairs. +
    +
    +
    + Price +
    +
    + 24h Change +
    +
    + 24h High +
    +
    + 24h Low +
    +
    + ); +}; + +export default PairHeader; diff --git a/src/interfaces/Pair.tsx b/src/interfaces/Pair.tsx new file mode 100644 index 0000000..189f42d --- /dev/null +++ b/src/interfaces/Pair.tsx @@ -0,0 +1,10 @@ +interface Pair { + name: string, + price: number, + change: number, + high: number, + low: number + }; + + +export default Pair; \ No newline at end of file diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4302e8f..c7e1077 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,4 +1,5 @@ import AutoanimateTest from "~/components/AutoanimateTest"; +import PairHeader from "~/components/PairHeader"; import { Button } from "~/components/ui/button"; import { Sheet, @@ -8,14 +9,24 @@ import { SheetTitle, SheetTrigger, } from "~/components/ui/sheet"; +import type Pair from "~/interfaces/Pair"; + export default function Home() { // const hello = api.post.hello.useQuery({ text: "from tRPC" }); + const pair: Pair = { + name: "XDCPerp/USDC", + price: 0, + change: 0, + high: 0, + low: 0 + }; return (
    Hello +
    ); } From 6d8beea611708589a7c34d3ac4985840578a934b Mon Sep 17 00:00:00 2001 From: AmandineBI Date: Tue, 24 Oct 2023 17:53:05 +0200 Subject: [PATCH 18/51] Add PairHeader component --- .gitignore | 1 + src/components/PairHeader.tsx | 30 +++++++++++++++++++++++++++--- src/interfaces/Pair.tsx | 10 ---------- src/pages/index.tsx | 13 ++++--------- src/types/index.ts | 3 ++- 5 files changed, 34 insertions(+), 23 deletions(-) delete mode 100644 src/interfaces/Pair.tsx diff --git a/.gitignore b/.gitignore index 2971a0b..b631328 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /node_modules /.pnp .pnp.js +pnpm-lock.yaml # testing /coverage diff --git a/src/components/PairHeader.tsx b/src/components/PairHeader.tsx index dad21ee..6c827ea 100644 --- a/src/components/PairHeader.tsx +++ b/src/components/PairHeader.tsx @@ -1,14 +1,34 @@ import React, { useState } from "react"; -import type Pair from "~/interfaces/Pair"; +import type { Pair } from "~/types"; interface PairHeaderProps { - pair:Pair + pair: Pair } const PairHeader = (props:PairHeaderProps) => { const [showPairs, setShowPairs] = useState(false); + function getPrice(numerator: string, denominator: string) { + console.log(`Get price for ${numerator}Perp/${denominator} pair.`) + return 1000; + } + + function getChange(numerator: string, denominator: string) { + console.log(`Get 24h Change for ${numerator}Perp/${denominator} pair.`) + return "+5%"; + } + + function getHigh(numerator: string, denominator: string) { + console.log(`Get 24h High for ${numerator}Perp/${denominator} pair.`) + return 1200; + } + + function getLow(numerator: string, denominator: string) { + console.log(`Get 24h Low for ${numerator}Perp/${denominator} pair.`) + return 800; + } + function togglePairs() { setShowPairs(prevShowPairs => !prevShowPairs); console.log(showPairs); @@ -19,7 +39,7 @@ const PairHeader = (props:PairHeaderProps) => {
    @@ -29,15 +49,19 @@ const PairHeader = (props:PairHeaderProps) => {
    Price + {getPrice(props.pair.numerator, props.pair.denominator)}
    24h Change + {getChange(props.pair.numerator, props.pair.denominator)}
    24h High + {getHigh(props.pair.numerator, props.pair.denominator)}
    24h Low + {getLow(props.pair.numerator, props.pair.denominator)}
    ); diff --git a/src/interfaces/Pair.tsx b/src/interfaces/Pair.tsx deleted file mode 100644 index 189f42d..0000000 --- a/src/interfaces/Pair.tsx +++ /dev/null @@ -1,10 +0,0 @@ -interface Pair { - name: string, - price: number, - change: number, - high: number, - low: number - }; - - -export default Pair; \ No newline at end of file diff --git a/src/pages/index.tsx b/src/pages/index.tsx index df1d9f9..7a279f8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,22 +1,16 @@ import PairHeader from "~/components/PairHeader"; -import type Pair from "~/interfaces/Pair"; export default function Home() { // const hello = api.post.hello.useQuery({ text: "from tRPC" }); - const pair: Pair = { - name: "XDCPerp/USDC", - price: 0, - change: 0, - high: 0, - low: 0 - }; return (
    {/* table with bid and asks here */} -
    +
    + +
    The chart goes here
    @@ -66,6 +60,7 @@ import { Input } from "~/components/ui/input"; import { Button } from "~/components/ui/button"; import History from "~/components/History"; import useHistoryStore from "~/stores/history"; +import { defaultPair } from "~/utils/constants"; const Buy = () => { const increase = useHistoryStore((state) => state.addOneItem); diff --git a/src/types/index.ts b/src/types/index.ts index b811bdc..f4a2eac 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,4 +1,5 @@ export interface Pair { numerator: string; denominator: string; -} +}; + From 69c69071589559dbbeb43e3e66df2d9136fb47cd Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 18:26:22 +0200 Subject: [PATCH 19/51] change bg --- src/components/History.tsx | 46 +++++++++++++++++------- src/layouts/BaseLayout.tsx | 21 ++++++----- src/pages/index.tsx | 11 +++--- src/styles/globals.css | 73 ++++++++++++++++++++++++++++---------- 4 files changed, 104 insertions(+), 47 deletions(-) diff --git a/src/components/History.tsx b/src/components/History.tsx index 22f510b..de1ae57 100644 --- a/src/components/History.tsx +++ b/src/components/History.tsx @@ -1,25 +1,33 @@ import React from "react"; import { useAutoAnimate } from "@formkit/auto-animate/react"; import useHistoryStore from "~/stores/history"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs"; const History = () => { - // const [itemsNum, setItemsNum] = React.useState([0]); - const [parent] = useAutoAnimate(/* optional config */); + const [parent] = useAutoAnimate(); const items = useHistoryStore((state) => state.items); - // const add = () => setItems([...items, items.length]); return ( - // <> - //
      - // {items.map((item) => ( - //
    • {item}
    • - // ))} - //
    - // - // + + + + Positions + + + Orders + + + + + + + + + + ); + + return (
      {items.map((item, idx) => ( @@ -33,3 +41,15 @@ export default History; const Item = () => { return
    • this is an element
    • ; }; + +const Positions = () => { + return

      positions

      ; +}; + +const Orders = () => { + return

      orders

      ; +}; + +const Trades = () => { + return

      trades

      ; +}; diff --git a/src/layouts/BaseLayout.tsx b/src/layouts/BaseLayout.tsx index 2066f81..41d640d 100644 --- a/src/layouts/BaseLayout.tsx +++ b/src/layouts/BaseLayout.tsx @@ -5,7 +5,8 @@ import { Navbar } from "~/components"; const BaseLayout: React.FC<{ children: React.ReactNode; }> = ({ children }) => { - const bg = "bg-gradient-to-b from-gray-900 to-gray-600 bg-gradient-to-r"; + const bg = ""; + //"bg-[radial-gradient(ellipse_at_center,_var(--tw-gradient-stops))] from-gray-700 via-gray-900 to-black"; return ( <> @@ -14,15 +15,17 @@ const BaseLayout: React.FC<{ -
      - +
      +
      + - {children} + {children} +
      ); diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7a279f8..6fa1bce 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,6 +1,5 @@ import PairHeader from "~/components/PairHeader"; - export default function Home() { // const hello = api.post.hello.useQuery({ text: "from tRPC" }); @@ -8,13 +7,13 @@ export default function Home() {
      {/* table with bid and asks here */} -
      - +
      +
      -
      +
      The chart goes here
      -
      +
      @@ -73,7 +72,7 @@ const Buy = () => { return (
      diff --git a/src/styles/globals.css b/src/styles/globals.css index 6a75725..601ceb5 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,7 +1,7 @@ @tailwind base; @tailwind components; @tailwind utilities; - + @layer base { :root { --background: 0 0% 100%; @@ -9,63 +9,63 @@ --card: 0 0% 100%; --card-foreground: 222.2 84% 4.9%; - + --popover: 0 0% 100%; --popover-foreground: 222.2 84% 4.9%; - + --primary: 222.2 47.4% 11.2%; --primary-foreground: 210 40% 98%; - + --secondary: 210 40% 96.1%; --secondary-foreground: 222.2 47.4% 11.2%; - + --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; - + --accent: 210 40% 96.1%; --accent-foreground: 222.2 47.4% 11.2%; - + --destructive: 0 84.2% 60.2%; --destructive-foreground: 210 40% 98%; --border: 214.3 31.8% 91.4%; --input: 214.3 31.8% 91.4%; --ring: 222.2 84% 4.9%; - + --radius: 0.5rem; } - + .dark { --background: 222.2 84% 4.9%; --foreground: 210 40% 98%; - + --card: 222.2 84% 4.9%; --card-foreground: 210 40% 98%; - + --popover: 222.2 84% 4.9%; --popover-foreground: 210 40% 98%; - + --primary: 210 40% 98%; --primary-foreground: 222.2 47.4% 11.2%; - + --secondary: 217.2 32.6% 17.5%; --secondary-foreground: 210 40% 98%; - + --muted: 217.2 32.6% 17.5%; --muted-foreground: 215 20.2% 65.1%; - + --accent: 217.2 32.6% 17.5%; --accent-foreground: 210 40% 98%; - + --destructive: 0 62.8% 30.6%; --destructive-foreground: 210 40% 98%; - + --border: 217.2 32.6% 17.5%; --input: 217.2 32.6% 17.5%; --ring: 212.7 26.8% 83.9%; } } - + @layer base { * { @apply border-border; @@ -73,4 +73,39 @@ body { @apply bg-background text-foreground; } -} \ No newline at end of file +} + +.cssbackground { + --s: 140px; /* control the size */ + + --_g: #0000 52%, #170409 /* first color */ 54% 57%, #0000 59%; + background: + radial-gradient(farthest-side at -33.33% 50%, var(--_g)) 0 + calc(var(--s) / 2), + radial-gradient(farthest-side at 50% 133.33%, var(--_g)) calc(var(--s) / 2) + 0, + radial-gradient(farthest-side at 133.33% 50%, var(--_g)), + radial-gradient(farthest-side at 50% -33.33%, var(--_g)), + #67917a; /* second color */ + background-size: + calc(var(--s) / 4.667) var(--s), + var(--s) calc(var(--s) / 4.667); +} + +.cssbackground2 { + --s: 200px; /* control the size */ + --c1: #1d1d1d; + --c2: #4e4f51; + --c3: #3c3c3c; + + background: + repeating-conic-gradient(from 30deg, #0000 0 120deg, var(--c3) 0 180deg) + calc(0.5 * var(--s)) calc(0.5 * var(--s) * 0.577), + repeating-conic-gradient( + from 30deg, + var(--c1) 0 60deg, + var(--c2) 0 120deg, + var(--c3) 0 180deg + ); + background-size: var(--s) calc(var(--s) * 0.577); +} From 6fe2c0a2b5bd1b926c5284ac3171d52846c7fccb Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 19:25:14 +0200 Subject: [PATCH 20/51] show mock info on open positions --- components.json | 4 +-- src/components/History.tsx | 39 +++++++++++++++++---- src/layouts/BaseLayout.tsx | 18 +++++----- src/pages/index.tsx | 10 +++--- src/styles/globals.css | 72 +++++++++++++++++++------------------- 5 files changed, 84 insertions(+), 59 deletions(-) diff --git a/components.json b/components.json index def268f..6305a78 100644 --- a/components.json +++ b/components.json @@ -6,11 +6,11 @@ "tailwind": { "config": "tailwind.config.js", "css": "src/styles/globals.css", - "baseColor": "slate", + "baseColor": "stone", "cssVariables": true }, "aliases": { "components": "src/components/", "utils": "~/components/lib/utils" } -} +} \ No newline at end of file diff --git a/src/components/History.tsx b/src/components/History.tsx index de1ae57..b866c7a 100644 --- a/src/components/History.tsx +++ b/src/components/History.tsx @@ -12,7 +12,7 @@ const History = () => { - Positions + Open positions Orders @@ -43,13 +43,40 @@ const Item = () => { }; const Positions = () => { - return

      positions

      ; + const [parent] = useAutoAnimate(); + + const items = useHistoryStore((state) => state.items); + + return ( + + + + + + + + + + + + + + {items.map((item, idx) => ( + + + + + + + + + + ))} + +
      positionpnlsizecollateralentrymark priceliquidation
      BTC/USD+0.000000000.000000000.000000000.000000000.000000000.00000000
      + ); }; const Orders = () => { return

      orders

      ; }; - -const Trades = () => { - return

      trades

      ; -}; diff --git a/src/layouts/BaseLayout.tsx b/src/layouts/BaseLayout.tsx index 41d640d..68fb240 100644 --- a/src/layouts/BaseLayout.tsx +++ b/src/layouts/BaseLayout.tsx @@ -15,17 +15,15 @@ const BaseLayout: React.FC<{ -
      -
      - +
      + - {children} -
      + {children}
      ); diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6fa1bce..5a2fdbb 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -7,13 +7,13 @@ export default function Home() {
      {/* table with bid and asks here */} -
      +
      -
      +
      The chart goes here
      -
      +
      @@ -29,7 +29,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs"; const TradingUi = () => { return ( - + Buy @@ -72,7 +72,7 @@ const Buy = () => { return (
      diff --git a/src/styles/globals.css b/src/styles/globals.css index 601ceb5..f8f1f7a 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -5,77 +5,77 @@ @layer base { :root { --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; + --foreground: 20 14.3% 4.1%; --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; + --card-foreground: 20 14.3% 4.1%; --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; + --popover-foreground: 20 14.3% 4.1%; - --primary: 222.2 47.4% 11.2%; - --primary-foreground: 210 40% 98%; + --primary: 24 9.8% 10%; + --primary-foreground: 60 9.1% 97.8%; - --secondary: 210 40% 96.1%; - --secondary-foreground: 222.2 47.4% 11.2%; + --secondary: 60 4.8% 95.9%; + --secondary-foreground: 24 9.8% 10%; - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; + --muted: 60 4.8% 95.9%; + --muted-foreground: 25 5.3% 44.7%; - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; + --accent: 60 4.8% 95.9%; + --accent-foreground: 24 9.8% 10%; --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 40% 98%; + --destructive-foreground: 60 9.1% 97.8%; - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - --ring: 222.2 84% 4.9%; + --border: 20 5.9% 90%; + --input: 20 5.9% 90%; + --ring: 20 14.3% 4.1%; --radius: 0.5rem; } .dark { - --background: 222.2 84% 4.9%; - --foreground: 210 40% 98%; + --background: 20 14.3% 4.1%; + --foreground: 60 9.1% 97.8%; - --card: 222.2 84% 4.9%; - --card-foreground: 210 40% 98%; + --card: 20 14.3% 4.1%; + --card-foreground: 60 9.1% 97.8%; - --popover: 222.2 84% 4.9%; - --popover-foreground: 210 40% 98%; + --popover: 20 14.3% 4.1%; + --popover-foreground: 60 9.1% 97.8%; - --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 11.2%; + --primary: 60 9.1% 97.8%; + --primary-foreground: 24 9.8% 10%; - --secondary: 217.2 32.6% 17.5%; - --secondary-foreground: 210 40% 98%; + --secondary: 12 6.5% 15.1%; + --secondary-foreground: 60 9.1% 97.8%; - --muted: 217.2 32.6% 17.5%; - --muted-foreground: 215 20.2% 65.1%; + --muted: 12 6.5% 15.1%; + --muted-foreground: 24 5.4% 63.9%; - --accent: 217.2 32.6% 17.5%; - --accent-foreground: 210 40% 98%; + --accent: 12 6.5% 15.1%; + --accent-foreground: 60 9.1% 97.8%; --destructive: 0 62.8% 30.6%; - --destructive-foreground: 210 40% 98%; + --destructive-foreground: 60 9.1% 97.8%; - --border: 217.2 32.6% 17.5%; - --input: 217.2 32.6% 17.5%; - --ring: 212.7 26.8% 83.9%; + --border: 12 6.5% 15.1%; + --input: 12 6.5% 15.1%; + --ring: 24 5.7% 82.9%; } } -@layer base { +/* @layer base { * { @apply border-border; } body { @apply bg-background text-foreground; } -} +} */ -.cssbackground { +html { --s: 140px; /* control the size */ --_g: #0000 52%, #170409 /* first color */ 54% 57%, #0000 59%; From a9e5521856e24acd3e1c0a3bd7adaa92d3fd49b1 Mon Sep 17 00:00:00 2001 From: AmandineBI Date: Tue, 24 Oct 2023 20:27:44 +0200 Subject: [PATCH 21/51] Improve PairHeader --- .gitignore | 1 - src/components/PairHeader.tsx | 65 ++++++++++++++++++++++------------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index b631328..2971a0b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ /node_modules /.pnp .pnp.js -pnpm-lock.yaml # testing /coverage diff --git a/src/components/PairHeader.tsx b/src/components/PairHeader.tsx index 6c827ea..3c31118 100644 --- a/src/components/PairHeader.tsx +++ b/src/components/PairHeader.tsx @@ -1,3 +1,4 @@ +import { ChevronDown } from "lucide-react"; import React, { useState } from "react"; import type { Pair } from "~/types"; @@ -9,59 +10,75 @@ interface PairHeaderProps { const PairHeader = (props:PairHeaderProps) => { const [showPairs, setShowPairs] = useState(false); + const price = getPrice(props.pair.numerator, props.pair.denominator); + const change = getChange(props.pair.numerator, props.pair.denominator); + const high = getHigh(props.pair.numerator, props.pair.denominator); + const low = getLow(props.pair.numerator, props.pair.denominator); + let classHidden = ""; + function getPrice(numerator: string, denominator: string) { - console.log(`Get price for ${numerator}Perp/${denominator} pair.`) - return 1000; + console.log(`Get price for ${numerator}Perp/${denominator} pair.`); + const _price = 1000; // Call API + return new Intl.NumberFormat('us-US', { style: 'currency', currency: 'USD'}).format(_price); } function getChange(numerator: string, denominator: string) { - console.log(`Get 24h Change for ${numerator}Perp/${denominator} pair.`) - return "+5%"; + console.log(`Get 24h Change for ${numerator}Perp/${denominator} pair.`); + const _change = 0.0564; // Call API + if (_change < 0) { + return (_change*100).toFixed(2)+"%"; + } else { + return "+" + (_change*100).toFixed(2)+"%"; + } } function getHigh(numerator: string, denominator: string) { - console.log(`Get 24h High for ${numerator}Perp/${denominator} pair.`) - return 1200; + console.log(`Get 24h High for ${numerator}Perp/${denominator} pair.`); + const _high = 1200; // Call API + return new Intl.NumberFormat('us-US', { style: 'currency', currency: 'USD'}).format(_high); } function getLow(numerator: string, denominator: string) { - console.log(`Get 24h Low for ${numerator}Perp/${denominator} pair.`) - return 800; + console.log(`Get 24h Low for ${numerator}Perp/${denominator} pair.`); + const _low = 800; // Call API + return new Intl.NumberFormat('us-US', { style: 'currency', currency: 'USD'}).format(_low); } function togglePairs() { setShowPairs(prevShowPairs => !prevShowPairs); console.log(showPairs); + classHidden = showPairs? "" : "hidden"; + console.log(classHidden); } return ( -
      -
      - - -
      - This is the list of pairs. +
      + Other pairs soon to come...
      +
      - Price - {getPrice(props.pair.numerator, props.pair.denominator)} +
      Price
      +
      {price}
      - 24h Change - {getChange(props.pair.numerator, props.pair.denominator)} +
      24h Change
      +
      {change}
      - 24h High - {getHigh(props.pair.numerator, props.pair.denominator)} +
      24h High
      +
      {high}
      - 24h Low - {getLow(props.pair.numerator, props.pair.denominator)} +
      24h Low
      +
      {low}
      ); From 655df5ad154f35070788ee182c6c439ca200fed1 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 20:37:36 +0200 Subject: [PATCH 22/51] tradesStore --- src/components/History.tsx | 61 +++++++++++++++++++++----------------- src/components/Navbar.tsx | 11 +++++-- src/pages/_app.tsx | 13 ++++++-- src/pages/index.tsx | 20 +++++++++++-- src/stores/history.ts | 4 ++- src/stores/tradesStore.ts | 36 ++++++++++++++++++++++ src/types/index.ts | 14 ++++++++- 7 files changed, 122 insertions(+), 37 deletions(-) create mode 100644 src/stores/tradesStore.ts diff --git a/src/components/History.tsx b/src/components/History.tsx index b866c7a..c6ed832 100644 --- a/src/components/History.tsx +++ b/src/components/History.tsx @@ -1,13 +1,12 @@ import React from "react"; import { useAutoAnimate } from "@formkit/auto-animate/react"; -import useHistoryStore from "~/stores/history"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs"; +import { Button } from "./ui/button"; +import { XIcon } from "lucide-react"; +import useTradesStore from "~/stores/tradesStore"; +import { Pair } from "~/types"; const History = () => { - const [parent] = useAutoAnimate(); - - const items = useHistoryStore((state) => state.items); - return ( @@ -26,50 +25,56 @@ const History = () => { ); - - return ( -
        - {items.map((item, idx) => ( - - ))} -
      - ); }; export default History; -const Item = () => { - return
    • this is an element
    • ; -}; - const Positions = () => { const [parent] = useAutoAnimate(); - const items = useHistoryStore((state) => state.items); + const trades = useTradesStore((state) => state.trades); + const closeTrade = useTradesStore((state) => state.removeTrade); + + const pairObjToString = (pair: Pair) => { + return `${pair.numerator.toUpperCase()}/${pair.denominator.toUpperCase()}`; + }; return ( - + + - {items.map((item, idx) => ( - - - - - - - - + {trades.map((item) => ( + + + + + + + + + ))} diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 78eb972..649c550 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -14,7 +14,7 @@ const Navbar = () => { strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" - className="h-10 w-10 rounded-full bg-green-500 p-2 text-white" + className="h-10 w-10 rounded-full bg-stone-700 p-2 text-white" viewBox="0 0 24 24" > @@ -22,13 +22,18 @@ const Navbar = () => { AllDex - +
      + +
      ); diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index adbbb64..fd77330 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -10,7 +10,11 @@ import "~/styles/globals.css"; import "@rainbow-me/rainbowkit/styles.css"; // Misc -import { getDefaultWallets, RainbowKitProvider } from "@rainbow-me/rainbowkit"; +import { + getDefaultWallets, + RainbowKitProvider, + darkTheme, +} from "@rainbow-me/rainbowkit"; import { configureChains, createConfig, WagmiConfig } from "wagmi"; import { publicProvider } from "wagmi/providers/public"; import { xdcTestnet } from "viem/chains"; @@ -22,6 +26,11 @@ const MyApp: AppType = ({ Component, pageProps }) => { [publicProvider()], ); + const customRainbowTheme = darkTheme({ + accentColor: "#0D0A09", + accentColorForeground: "#FAFAF9", + }); + const { connectors } = getDefaultWallets({ appName: "MIAO", chains, @@ -36,7 +45,7 @@ const MyApp: AppType = ({ Component, pageProps }) => { return ( - + diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5a2fdbb..4f2190d 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -60,13 +60,29 @@ import { Button } from "~/components/ui/button"; import History from "~/components/History"; import useHistoryStore from "~/stores/history"; import { defaultPair } from "~/utils/constants"; +import useTradesStore from "~/stores/tradesStore"; +import { ExecutedTrade } from "~/types"; const Buy = () => { - const increase = useHistoryStore((state) => state.addOneItem); + const addTransaction = useTradesStore((state) => state.addTrade); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); - increase(); + // create randomized trade + const trade: ExecutedTrade = { + hash: Math.random().toString(), + pair: defaultPair, + collateral: 1110, + entry: 1.21, + liquidation: 0, + markPrice: 1, + pnl: 100, + position: "long", + size: 0, + timestamp: new Date().toISOString(), + }; + + addTransaction(trade); console.log("submit"); }; diff --git a/src/stores/history.ts b/src/stores/history.ts index d9c192f..2d083c8 100644 --- a/src/stores/history.ts +++ b/src/stores/history.ts @@ -6,7 +6,9 @@ const useHistoryStore = create<{ removeAllItems: () => void; }>((set) => ({ items: [0], - addOneItem: () => set((state) => ({ items: [...state.items, 0] })), + addOneItem: () => { + return set((state) => ({ items: [0, ...state.items] })); + }, removeAllItems: () => set({ items: [] }), })); diff --git a/src/stores/tradesStore.ts b/src/stores/tradesStore.ts new file mode 100644 index 0000000..fe7ad76 --- /dev/null +++ b/src/stores/tradesStore.ts @@ -0,0 +1,36 @@ +import { create } from "zustand"; +import type { ExecutedTrade } from "~/types"; + +const useTradesStore = create<{ + trades: ExecutedTrade[]; + addTrade: (trade: ExecutedTrade) => void; + removeTrade: (tradeHash: ExecutedTrade["hash"]) => void; +}>((set) => ({ + trades: [ + { + pair: { + numerator: "BTC", + denominator: "USD", + }, + hash: "0x1234", + timestamp: "2021-01-01T00:00:00.000Z", + position: "long", + pnl: 0, + size: 1, + collateral: 1, + entry: 1, + markPrice: 1, + liquidation: 1, + }, + ], + addTrade: (trade) => { + return set((state) => ({ trades: [trade, ...state.trades] })); + }, + removeTrade: (tradeHash) => { + return set((state) => ({ + trades: state.trades.filter((trade) => trade.hash !== tradeHash), + })); + }, +})); + +export default useTradesStore; diff --git a/src/types/index.ts b/src/types/index.ts index f4a2eac..97a61d6 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,5 +1,17 @@ export interface Pair { numerator: string; denominator: string; -}; +} +export interface ExecutedTrade { + pair: Pair; + hash: string; + timestamp: string; + position: "long" | "short"; + pnl: number; + size: number; + collateral: number; + entry: number; + markPrice: number; + liquidation: number; +} From c491d7a61ebc2ccef22eef28f67a83930f684efa Mon Sep 17 00:00:00 2001 From: Loa212 Date: Tue, 24 Oct 2023 23:43:17 +0200 Subject: [PATCH 23/51] add some wagmi actions --- src/components/History.tsx | 31 ++++--- src/components/PairHeader.tsx | 157 +++++++++++++++++++--------------- src/pages/index.tsx | 34 ++++++-- src/stores/tradesStore.ts | 17 ++-- src/types/index.ts | 3 +- src/utils/helpers.ts | 6 ++ 6 files changed, 154 insertions(+), 94 deletions(-) create mode 100644 src/utils/helpers.ts diff --git a/src/components/History.tsx b/src/components/History.tsx index c6ed832..8dbfc93 100644 --- a/src/components/History.tsx +++ b/src/components/History.tsx @@ -4,7 +4,8 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs"; import { Button } from "./ui/button"; import { XIcon } from "lucide-react"; import useTradesStore from "~/stores/tradesStore"; -import { Pair } from "~/types"; +import type { Pair } from "~/types"; +import { formatPrice } from "~/utils/helpers"; const History = () => { return ( @@ -43,28 +44,38 @@ const Positions = () => {
      positionposition pnl size collateral entry mark price liquidationclose position
      BTC/USD+0.000000000.000000000.000000000.000000000.000000000.00000000
      + {pairObjToString(item.pair)} + {item.pnl}{item.size}{item.collateral}{item.entry}{item.markPrice}{item.liquidation} + +
      - + + - {trades.map((item) => ( - + - - - - - - + + + + + + + + + + - - - - + {positions.map((item) => ( + + + + + + + + + + + ))} + + ); +}; diff --git a/src/components/SellDialog.tsx b/src/components/SellDialog.tsx index c53ecdc..de89b8c 100644 --- a/src/components/SellDialog.tsx +++ b/src/components/SellDialog.tsx @@ -7,16 +7,11 @@ import { DialogTitle, DialogTrigger, } from "./ui/dialog"; -import { testABI } from "~/hooks/wagmi/config"; -import { - useContractEvent, - useContractWrite, - usePrepareContractWrite, -} from "wagmi"; +import { useContractEvent, useContractWrite } from "wagmi"; import toast from "react-hot-toast"; import React from "react"; import { Separator } from "./ui/separator"; -import { formatWholePrice } from "~/utils/helpers"; +import { ABI, formatWholePrice } from "~/utils/helpers"; import { Button } from "./ui/button"; import { contractAddress, currentPrice } from "~/utils/constants"; @@ -63,7 +58,7 @@ const SellDialogContent = ({ }) => { useContractEvent({ address: contractAddress, - abi: testABI, + abi: ABI, eventName: "PositionOpened", listener(_position) { setIsLoading(false); @@ -72,23 +67,36 @@ const SellDialogContent = ({ }, }); - const { config } = usePrepareContractWrite({ + const { writeAsync, isLoading: isPreparing } = useContractWrite({ address: contractAddress, - abi: testABI, + abi: ABI, functionName: "openPosition", // size, entryPrice, side (0 = long, 1 = short) - args: [collateral, currentPrice.toFixed(0), 1], + args: [BigInt(collateral), BigInt(currentPrice.toFixed(0)), 1], }); - const { writeAsync, isLoading: isPreparing } = useContractWrite(config); + + const writeAsyncPromise = async () => { + try { + await writeAsync(); + } catch (_e) { + throw new Error(); + } + }; const submit = async () => { - if (!writeAsync) return; setIsLoading(true); try { - await writeAsync(); + await toast.promise(writeAsyncPromise(), { + loading: "placing order...", + success: order placed! awaiting confirmation..., + error: Could not place order..., + }); + setIsLoading(true); } catch (e) { + console.log("e is ", e); + } finally { setIsLoading(false); - toast.error("Something went wrong"); + closeModal(); } }; diff --git a/src/stores/positionsStore.ts b/src/stores/positionsStore.ts index 3436373..565d8bb 100644 --- a/src/stores/positionsStore.ts +++ b/src/stores/positionsStore.ts @@ -1,10 +1,13 @@ import { create } from "zustand"; import type { Position } from "~/types"; +type positionId = Position["positionId"]; + const usePositionsStore = create<{ positions: Position[]; addPosition: (position: Position) => void; - removePosition: (positionId: Position["positionId"]) => void; + removePosition: (positionId: positionId) => void; + setPositionClosing: (positionId: positionId) => void; }>((set) => ({ positions: [], addPosition: (position) => @@ -17,6 +20,15 @@ const usePositionsStore = create<{ (position) => position.positionId !== positionId, ), })), + setPositionClosing: (positionId: positionId) => + set((state) => ({ + positions: state.positions.map((position) => { + if (position.positionId === positionId) { + return { ...position, closing: true }; + } + return position; + }), + })), })); export default usePositionsStore; diff --git a/src/stores/tradesStore.ts b/src/stores/tradesStore.ts deleted file mode 100644 index b07f00b..0000000 --- a/src/stores/tradesStore.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { create } from "zustand"; -import type { ExecutedTrade } from "~/types"; - -const useTradesStore = create<{ - trades: ExecutedTrade[]; - addTrade: (trade: ExecutedTrade) => void; - removeTrade: (tradeHash: ExecutedTrade["hash"]) => void; -}>((set) => ({ - trades: [ - { - pair: { - numerator: "XDC", - denominator: "USDC", - }, - hash: "0x1234", - timestamp: "2021-01-01T00:00:00.000Z", - side: "long", - pnl: 543.213333, - size: 1003, - collateral: 10000, - entry: 1.1234, - liquidation: 0.43, - }, - ], - addTrade: (trade) => { - return set((state) => ({ trades: [trade, ...state.trades] })); - }, - removeTrade: (tradeHash) => { - return set((state) => ({ - trades: state.trades.filter((trade) => trade.hash !== tradeHash), - })); - }, -})); - -export default useTradesStore; diff --git a/src/types/index.ts b/src/types/index.ts index de5116d..8b0f3e7 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -17,11 +17,13 @@ export interface ExecutedTrade { export type Position = { pair: Pair; + closing: boolean; + pnl: number; // from chain - entryPrice: number; - positionId: `0x${string}`; - side: 0 | 1; // 0 = long, 1 = short - size: number; + entryPrice: bigint; + positionId: bigint; + side: number; + size: bigint; trader: `0x${string}`; }; diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 24f7fc6..112484c 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -6,7 +6,8 @@ const defaultPair: Pair = { }; const contractAddress: `0x${string}` = - "0xf7FF85EB675096Da320eF4a6ad06393c91b07CD1"; + // "0xf7FF85EB675096Da320eF4a6ad06393c91b07CD1"; + "0x17688Bf34f8bce6F6b698da4AE68D92aAB332b05"; const walletConnectProjectId = "f2a8b0c8053e31d62e16f27ad108ea3c"; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 0e2bd25..819bc8b 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -1,14 +1,17 @@ +import type { Position } from "~/types"; +import { currentPrice } from "./constants"; + /** * Format price to display eg. 2.1535322 => 2.15 */ -export const formatPrice = (price: number) => { - return price.toFixed(2); +export const formatPrice = (price: number | bigint) => { + return Number(price).toFixed(2); }; /** * uses formatPrice but if the decimal is 0, it will remove it */ -export const formatWholePrice = (price: number) => { +export const formatWholePrice = (price: number | bigint) => { const formattedPrice = formatPrice(price); return formattedPrice.endsWith(".00") ? formattedPrice.slice(0, -3) @@ -21,3 +24,346 @@ export const formatWholePrice = (price: number) => { export const getMockPosition = (collateral: string): string => { return Number(formatPrice(Number(collateral))) * 1.1 + ""; }; + +/** + * gets the pnl for the position + * @param position + * @returns pnl + */ +export const getPnl = (position: Partial) => { + const { entryPrice, side } = position; + const pnl = + (side === 0 + ? Number(currentPrice) - Number(entryPrice) + : Number(entryPrice) - Number(currentPrice)) * Number(position.size); + return pnl; +}; + +export const ABI = [ + { + inputs: [ + { + internalType: "address", + name: "_collateralToken", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "fundingPayment", + type: "uint256", + }, + ], + name: "FundingPaid", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "trader", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "positionId", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "size", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "entryPrice", + type: "uint256", + }, + { + indexed: false, + internalType: "enum PerpetualDEX.Side", + name: "side", + type: "uint8", + }, + { + indexed: false, + internalType: "uint256", + name: "profit", + type: "uint256", + }, + ], + name: "PositionClosed", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "trader", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "positionId", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "size", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "entryPrice", + type: "uint256", + }, + { + indexed: false, + internalType: "enum PerpetualDEX.Side", + name: "side", + type: "uint8", + }, + ], + name: "PositionOpened", + type: "event", + }, + { + inputs: [], + name: "admin", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "collateralBalances", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "collateralToken", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "feeRate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "fundingRate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "indexPrice", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "lastFundingTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "positions", + outputs: [ + { + internalType: "address", + name: "trader", + type: "address", + }, + { + internalType: "uint256", + name: "size", + type: "uint256", + }, + { + internalType: "uint256", + name: "entryPrice", + type: "uint256", + }, + { + internalType: "enum PerpetualDEX.Side", + name: "side", + type: "uint8", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getPositions", + outputs: [ + { + components: [ + { + internalType: "address", + name: "trader", + type: "address", + }, + { + internalType: "uint256", + name: "size", + type: "uint256", + }, + { + internalType: "uint256", + name: "entryPrice", + type: "uint256", + }, + { + internalType: "enum PerpetualDEX.Side", + name: "side", + type: "uint8", + }, + ], + internalType: "struct PerpetualDEX.Position[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "size", + type: "uint256", + }, + { + internalType: "uint256", + name: "entryPrice", + type: "uint256", + }, + { + internalType: "enum PerpetualDEX.Side", + name: "side", + type: "uint8", + }, + ], + name: "openPosition", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "positionId", + type: "uint256", + }, + ], + name: "closePosition", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "newPrice", + type: "uint256", + }, + ], + name: "updateIndexPrice", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "payFunding", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; From 10c820e0cb7769ab32308ca7af8a42eaf5d9a5ec Mon Sep 17 00:00:00 2001 From: Loa212 Date: Thu, 26 Oct 2023 09:00:04 +0200 Subject: [PATCH 46/51] new ABI --- src/utils/helpers.ts | 120 ++++++++++++++++++++++++++++--------------- 1 file changed, 78 insertions(+), 42 deletions(-) diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 819bc8b..a921be5 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -99,9 +99,9 @@ export const ABI = [ }, { indexed: false, - internalType: "uint256", + internalType: "int256", name: "profit", - type: "uint256", + type: "int256", }, ], name: "PositionClosed", @@ -156,6 +156,7 @@ export const ABI = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -168,30 +169,32 @@ export const ABI = [ name: "collateralBalances", outputs: [ { - internalType: "uint256", + internalType: "int256", name: "", - type: "uint256", + type: "int256", }, ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [], name: "collateralToken", outputs: [ { - internalType: "contract IERC20", + internalType: "contract IXRC20", name: "", type: "address", }, ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [], - name: "feeRate", + name: "currentPrice", outputs: [ { internalType: "uint256", @@ -201,10 +204,11 @@ export const ABI = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [], - name: "fundingRate", + name: "feeRate", outputs: [ { internalType: "uint256", @@ -214,10 +218,11 @@ export const ABI = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [], - name: "indexPrice", + name: "fundingRate", outputs: [ { internalType: "uint256", @@ -227,6 +232,7 @@ export const ABI = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [], @@ -240,6 +246,7 @@ export const ABI = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -271,44 +278,15 @@ export const ABI = [ name: "side", type: "uint8", }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getPositions", - outputs: [ { - components: [ - { - internalType: "address", - name: "trader", - type: "address", - }, - { - internalType: "uint256", - name: "size", - type: "uint256", - }, - { - internalType: "uint256", - name: "entryPrice", - type: "uint256", - }, - { - internalType: "enum PerpetualDEX.Side", - name: "side", - type: "uint8", - }, - ], - internalType: "struct PerpetualDEX.Position[]", - name: "", - type: "tuple[]", + internalType: "enum PerpetualDEX.State", + name: "state", + type: "uint8", }, ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -354,7 +332,7 @@ export const ABI = [ type: "uint256", }, ], - name: "updateIndexPrice", + name: "updatecurrentPrice", outputs: [], stateMutability: "nonpayable", type: "function", @@ -366,4 +344,62 @@ export const ABI = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "transferTokens", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "getTokenBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + constant: true, + }, + { + inputs: [ + { + internalType: "int256", + name: "x", + type: "int256", + }, + ], + name: "absoluteValue", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "pure", + type: "function", + constant: true, + }, ] as const; From 39e64d59b4663b07fbf19f59c5353c024d0e9857 Mon Sep 17 00:00:00 2001 From: AmandineBI Date: Thu, 26 Oct 2023 09:09:45 +0200 Subject: [PATCH 47/51] Add the modal text for placing orders --- src/components/BuyDialog.tsx | 24 ++- src/components/SellDialog.tsx | 24 ++- src/stores/financialDataStore.ts | 5 +- src/utils/constants.ts | 245 +------------------------------ 4 files changed, 38 insertions(+), 260 deletions(-) diff --git a/src/components/BuyDialog.tsx b/src/components/BuyDialog.tsx index 7ad0425..3f2ef79 100644 --- a/src/components/BuyDialog.tsx +++ b/src/components/BuyDialog.tsx @@ -13,7 +13,8 @@ import React from "react"; import { Separator } from "./ui/separator"; import { ABI, formatWholePrice } from "~/utils/helpers"; import { Button } from "./ui/button"; -import { contractAddress, currentPrice } from "~/utils/constants"; +import { allowedSlippage, contractAddress, currentPrice } from "~/utils/constants"; +import useFinancialDataStore from "~/stores/financialDataStore"; const BuyDialog: React.FC<{ children: React.ReactNode; @@ -116,12 +117,21 @@ const BuyDialogContent = ({ -
        -
      • lol
      • -
      • lol
      • -
      • lol
      • -
      • lol
      • -
      +
      +
      +
      Leverage
      1.10x
      +
      Allowed Slippage
      {allowedSlippage*100}%
      + +
      Collateral Spread
      0.00%
      +
      Entry Price
      {useFinancialDataStore((state) => state.getLastPrice)()}
      +
      Price Impact
      Soon
      +
      Acceptable Price
      {Math.round(useFinancialDataStore((state) => state.getLastPrice)()*(1+allowedSlippage)*10000)/10000}
      +
      Liq. Price
      Soon
      + +
      Collateral (USDT)
      {collateral}
      +
      Fees and Price Impact
      Soon
      +
      +
      diff --git a/src/components/History.tsx b/src/components/History.tsx index 53e2890..a69865a 100644 --- a/src/components/History.tsx +++ b/src/components/History.tsx @@ -113,44 +113,51 @@ const Trades = () => { const [parent] = useAutoAnimate(); const positions = usePositionsStore((state) => state.positions); + return ( +
      + {positions.map((position) => ( + + ))} + + ); +}; + +const Trade = ({ position }: { position: Position }) => { const pairObjToString = (pair: Pair) => { return `${pair.numerator.toUpperCase()}/${pair.denominator.toUpperCase()}`; }; return ( - - {positions.map((item) => ( - - - - - - - - - - - ))} - + + + + + + + + + + ); }; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7e26977..ffb5127 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -29,6 +29,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs"; import { ConnectButton } from "@rainbow-me/rainbowkit"; const TradingUi = () => { + const { chains, isLoading: loadingNetwork } = useSwitchNetwork(); const { address, isConnecting: accountLoading, @@ -45,7 +46,7 @@ const TradingUi = () => { const isLoading = accountLoading || balanceLoading; - if (isLoading) + if (isLoading || loadingNetwork) return (

      Loading account data

      @@ -66,6 +67,17 @@ const TradingUi = () => {
      ); + if (chains[0] !== xdcTestnet) { + return ( +
      +

      Wrong network

      +
      + +
      +
      + ); + } + if (balanceError) return (
      @@ -98,7 +110,8 @@ const TradingUi = () => { import History from "~/components/History"; import { defaultPair } from "~/utils/constants"; -import { useAccount, useBalance } from "wagmi"; +import { useAccount, useBalance, useSwitchNetwork } from "wagmi"; import { Loader2 } from "lucide-react"; import React from "react"; import { BuyPanel, SellPanel } from "~/components"; +import { xdcTestnet } from "viem/chains"; diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 112484c..2b70d5d 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -6,8 +6,12 @@ const defaultPair: Pair = { }; const contractAddress: `0x${string}` = - // "0xf7FF85EB675096Da320eF4a6ad06393c91b07CD1"; - "0x17688Bf34f8bce6F6b698da4AE68D92aAB332b05"; + // "0xf7FF85EB675096Da320eF4a6ad06393c91b07CD1"; // v1 + // "0x17688Bf34f8bce6F6b698da4AE68D92aAB332b05"; // v2 + // "0x2F8056184a0a2C7B9571179f3Be1A6793b6C4c3E"; // v3 + // "0x60137e84325B5856567B933FBAa4C5798DB12E25"; // v4 + // "0x0f276486F610f00F3566d0E86Ef7D787f818de51"; // v5 + "0x4cD44b63306C763F16151dbbE1F6237E6CdCC261"; //v6 const walletConnectProjectId = "f2a8b0c8053e31d62e16f27ad108ea3c";
      positionpairside pnl size collateral entrymark price liquidation close position
      {pairObjToString(item.pair)} {item.pnl}{item.size}{item.collateral}{item.entry}{item.markPrice}{item.liquidation}{item.side}= 0 ? "text-green-400" : "text-red-400") + } + > + {formatPrice(item.pnl)} + {formatPrice(item.size)}{formatPrice(item.collateral)}{formatPrice(item.entry)}{formatPrice(item.liquidation)} -
      - Other pairs soon to come... -
      - + return ( +
      +
      + +
      + Other pairs soon to come... +
      +
      -
      -
      Price
      -
      {price}
      -
      -
      -
      24h Change
      -
      {change}
      -
      -
      -
      24h High
      -
      {high}
      -
      -
      -
      24h Low
      -
      {low}
      -
      +
      +
      Price
      +
      {price}
      +
      +
      +
      24h Change
      +
      + {change}
      - ); +
      +
      +
      24h High
      +
      {high}
      +
      +
      +
      24h Low
      +
      {low}
      +
      +
      + ); }; export default PairHeader; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4f2190d..f3556fa 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -58,13 +58,22 @@ import { Label } from "~/components/ui/label"; import { Input } from "~/components/ui/input"; import { Button } from "~/components/ui/button"; import History from "~/components/History"; -import useHistoryStore from "~/stores/history"; import { defaultPair } from "~/utils/constants"; import useTradesStore from "~/stores/tradesStore"; -import { ExecutedTrade } from "~/types"; +import { type ExecutedTrade } from "~/types"; +import { useAccount, useBalance } from "wagmi"; const Buy = () => { const addTransaction = useTradesStore((state) => state.addTrade); + const { address, isConnecting, isDisconnected } = useAccount(); + + const { + data: balance, + isError: balanceError, + isLoading: balanceLoading, + } = useBalance({ + address, + }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); @@ -75,9 +84,9 @@ const Buy = () => { collateral: 1110, entry: 1.21, liquidation: 0, - markPrice: 1, - pnl: 100, - position: "long", + // pnl is a random number between -1000 and 1000 + pnl: Math.floor(Math.random() * 2000) - 1000, + side: "long", size: 0, timestamp: new Date().toISOString(), }; @@ -86,6 +95,13 @@ const Buy = () => { console.log("submit"); }; + const setMaxAmount = () => { + console.log(balance); + if (!balance) return; + const input = document.getElementById("amount") as HTMLInputElement; + alert(balance.formatted); + }; + return ( { diff --git a/src/stores/tradesStore.ts b/src/stores/tradesStore.ts index fe7ad76..b07f00b 100644 --- a/src/stores/tradesStore.ts +++ b/src/stores/tradesStore.ts @@ -9,18 +9,17 @@ const useTradesStore = create<{ trades: [ { pair: { - numerator: "BTC", - denominator: "USD", + numerator: "XDC", + denominator: "USDC", }, hash: "0x1234", timestamp: "2021-01-01T00:00:00.000Z", - position: "long", - pnl: 0, - size: 1, - collateral: 1, - entry: 1, - markPrice: 1, - liquidation: 1, + side: "long", + pnl: 543.213333, + size: 1003, + collateral: 10000, + entry: 1.1234, + liquidation: 0.43, }, ], addTrade: (trade) => { diff --git a/src/types/index.ts b/src/types/index.ts index 97a61d6..312fcf8 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -7,11 +7,10 @@ export interface ExecutedTrade { pair: Pair; hash: string; timestamp: string; - position: "long" | "short"; + side: "long" | "short"; pnl: number; size: number; collateral: number; entry: number; - markPrice: number; liquidation: number; } diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts new file mode 100644 index 0000000..f3b9753 --- /dev/null +++ b/src/utils/helpers.ts @@ -0,0 +1,6 @@ +/** + * Format price to display eg. 2.1535322 => 2.15 + */ +export const formatPrice = (price: number) => { + return price.toFixed(2); +}; From 351e659a414877fab3b5089791cce0998dbd3f9e Mon Sep 17 00:00:00 2001 From: AmandineBI Date: Wed, 25 Oct 2023 09:57:16 +0200 Subject: [PATCH 24/51] Finish PairHeader --- src/components/PairHeader.tsx | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/components/PairHeader.tsx b/src/components/PairHeader.tsx index 3c31118..7f82c65 100644 --- a/src/components/PairHeader.tsx +++ b/src/components/PairHeader.tsx @@ -1,5 +1,4 @@ -import { ChevronDown } from "lucide-react"; -import React, { useState } from "react"; +import React from "react"; import type { Pair } from "~/types"; @@ -8,13 +7,11 @@ interface PairHeaderProps { } const PairHeader = (props:PairHeaderProps) => { - const [showPairs, setShowPairs] = useState(false); const price = getPrice(props.pair.numerator, props.pair.denominator); const change = getChange(props.pair.numerator, props.pair.denominator); const high = getHigh(props.pair.numerator, props.pair.denominator); const low = getLow(props.pair.numerator, props.pair.denominator); - let classHidden = ""; function getPrice(numerator: string, denominator: string) { console.log(`Get price for ${numerator}Perp/${denominator} pair.`); @@ -44,24 +41,13 @@ const PairHeader = (props:PairHeaderProps) => { return new Intl.NumberFormat('us-US', { style: 'currency', currency: 'USD'}).format(_low); } - function togglePairs() { - setShowPairs(prevShowPairs => !prevShowPairs); - console.log(showPairs); - classHidden = showPairs? "" : "hidden"; - console.log(classHidden); - } return (
      - -
      - Other pairs soon to come... -
      From 1cca377a00bd4de982722d0b8c98f42d4ea8a155 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Wed, 25 Oct 2023 10:38:02 +0200 Subject: [PATCH 25/51] format currency --- package.json | 3 + pnpm-lock.yaml | 47 +++++++++- src/components/ui/input.tsx | 19 ++-- src/components/ui/separator.tsx | 29 ++++++ src/components/ui/skeleton.tsx | 15 +++ src/pages/index.tsx | 157 +++++++++++++++++++++++++------- 6 files changed, 223 insertions(+), 47 deletions(-) create mode 100644 src/components/ui/separator.tsx create mode 100644 src/components/ui/skeleton.tsx diff --git a/package.json b/package.json index acc3b0b..cbd74f3 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@formkit/auto-animate": "^0.8.0", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.0.4", "@rainbow-me/rainbowkit": "^1.1.2", @@ -28,6 +29,7 @@ "next": "^13.5.4", "react": "18.2.0", "react-dom": "18.2.0", + "react-text-mask": "^5.5.0", "superjson": "^1.13.1", "tailwind-merge": "^1.14.0", "tailwindcss-animate": "^1.0.7", @@ -41,6 +43,7 @@ "@types/node": "^18.16.0", "@types/react": "^18.2.20", "@types/react-dom": "^18.2.7", + "@types/react-text-mask": "^5.4.13", "@typescript-eslint/eslint-plugin": "^6.3.0", "@typescript-eslint/parser": "^6.3.0", "autoprefixer": "^10.4.14", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 651d7eb..a05c602 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ dependencies: '@radix-ui/react-label': specifier: ^2.0.2 version: 2.0.2(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-separator': + specifier: ^1.0.3 + version: 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.0.2(@types/react@18.2.31)(react@18.2.0) @@ -62,6 +65,9 @@ dependencies: react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) + react-text-mask: + specifier: ^5.5.0 + version: 5.5.0(react@18.2.0) superjson: specifier: ^1.13.1 version: 1.13.3 @@ -97,6 +103,9 @@ devDependencies: '@types/react-dom': specifier: ^18.2.7 version: 18.2.14 + '@types/react-text-mask': + specifier: ^5.4.13 + version: 5.4.13 '@typescript-eslint/eslint-plugin': specifier: ^6.3.0 version: 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2) @@ -779,6 +788,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-slot@1.0.2(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: @@ -1290,6 +1320,12 @@ packages: dependencies: '@types/react': 18.2.31 + /@types/react-text-mask@5.4.13: + resolution: {integrity: sha512-e6JFMpvdu8V9Z06jg/KLcVp1EQE8wbFPQ18uZ3e99gsfXz/CfrSYmNZ1HXjdRKthAr/oEuJ5EbyVZLlEwnXRSA==} + dependencies: + '@types/react': 18.2.31 + dev: true + /@types/react@18.2.31: resolution: {integrity: sha512-c2UnPv548q+5DFh03y8lEDeMfDwBn9G3dRwfkrxQMo/dOtRHUUO57k6pHvBIfH/VF4Nh+98mZ5aaSe+2echD5g==} dependencies: @@ -4255,7 +4291,6 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true /proxy-compare@2.5.1: resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} @@ -4340,7 +4375,6 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true /react-remove-scroll-bar@2.3.4(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} @@ -4421,6 +4455,15 @@ packages: tslib: 2.6.2 dev: false + /react-text-mask@5.5.0(react@18.2.0): + resolution: {integrity: sha512-SLJlJQxa0uonMXsnXRpv5abIepGmHz77ylQcra0GNd7Jtk4Wj2Mtp85uGQHv1avba2uI8ZvRpIEQPpJKsqRGYw==} + peerDependencies: + react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + prop-types: 15.8.1 + react: 18.2.0 + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx index df64f4e..2669dbf 100644 --- a/src/components/ui/input.tsx +++ b/src/components/ui/input.tsx @@ -1,9 +1,8 @@ -import * as React from "react" +import * as React from "react"; -import { cn } from "~/components/lib/utils" +import { cn } from "~/components/lib/utils"; -export interface InputProps - extends React.InputHTMLAttributes {} +export type InputProps = React.InputHTMLAttributes; const Input = React.forwardRef( ({ className, type, ...props }, ref) => { @@ -12,14 +11,14 @@ const Input = React.forwardRef( type={type} className={cn( "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", - className + className, )} ref={ref} {...props} /> - ) - } -) -Input.displayName = "Input" + ); + }, +); +Input.displayName = "Input"; -export { Input } +export { Input }; diff --git a/src/components/ui/separator.tsx b/src/components/ui/separator.tsx new file mode 100644 index 0000000..9f64dcc --- /dev/null +++ b/src/components/ui/separator.tsx @@ -0,0 +1,29 @@ +import * as React from "react" +import * as SeparatorPrimitive from "@radix-ui/react-separator" + +import { cn } from "~/components/lib/utils" + +const Separator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>( + ( + { className, orientation = "horizontal", decorative = true, ...props }, + ref + ) => ( + + ) +) +Separator.displayName = SeparatorPrimitive.Root.displayName + +export { Separator } diff --git a/src/components/ui/skeleton.tsx b/src/components/ui/skeleton.tsx new file mode 100644 index 0000000..1d26b02 --- /dev/null +++ b/src/components/ui/skeleton.tsx @@ -0,0 +1,15 @@ +import { cn } from "~/components/lib/utils" + +function Skeleton({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
      + ) +} + +export { Skeleton } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index f3556fa..c33778f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -25,25 +25,73 @@ export default function Home() { } import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs"; +import { ConnectButton } from "@rainbow-me/rainbowkit"; const TradingUi = () => { + const { + address, + isConnecting: accountLoading, + isDisconnected: accountDisconnected, + } = useAccount(); + + const { + data: balance, + isError: balanceError, + isLoading: balanceLoading, + } = useBalance({ + address, + }); + + const isLoading = accountLoading || balanceLoading; + + if (isLoading) + return ( +
      +

      Loading account data

      +

      + This can take a few seconds, please wait... +

      + +
      + ); + + if (accountDisconnected) + return ( +
      +

      Account not connected

      +
      + +
      +
      + ); + + if (balanceError) + return ( +
      +

      Error loading balance

      +

      Please try again later

      +
      + ); + return ( - - - - Buy - - - Sell - - - - - - - - - +
      + + + + Buy + + + Sell + + + + + + + + + +
      ); }; import { @@ -62,18 +110,16 @@ import { defaultPair } from "~/utils/constants"; import useTradesStore from "~/stores/tradesStore"; import { type ExecutedTrade } from "~/types"; import { useAccount, useBalance } from "wagmi"; +import { Loader2 } from "lucide-react"; +import { Separator } from "~/components/ui/separator"; +import React from "react"; -const Buy = () => { +const Buy = ({ + balance, +}: { + balance: ReturnType["data"]; +}) => { const addTransaction = useTradesStore((state) => state.addTrade); - const { address, isConnecting, isDisconnected } = useAccount(); - - const { - data: balance, - isError: balanceError, - isLoading: balanceLoading, - } = useBalance({ - address, - }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); @@ -96,27 +142,51 @@ const Buy = () => { }; const setMaxAmount = () => { - console.log(balance); if (!balance) return; - const input = document.getElementById("amount") as HTMLInputElement; - alert(balance.formatted); + setAmount(balance.formatted); + }; + + const [amount, setAmount] = React.useState(""); + const [disabled, setDisabled] = React.useState(false); + + const handleAmountChange = (e: React.ChangeEvent) => { + // this need to be formatted as a number with decimals separated by a dot + const value = e.target.value; + const regEx = /^[0-9]+(\.[0-9]{0,2})?$/; + if (value === "" || regEx.test(value)) { + // check if the amount is more than the balance + if (balance && parseFloat(value) > parseFloat(balance.formatted)) { + // if it is disable the buy btn + setDisabled(true); + } else { + // enable the buy btn + setDisabled(false); + } + setAmount(value); + } }; return (
      -

      Buy

      - + +
      - + +
      +
        +
      • + Spread: + 3.50% +
      • +
      • + Volume: + 10000000 +
      • +
      +
      ); }; From f424096928da6493e805c1680534e4981d2b4a61 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Wed, 25 Oct 2023 10:50:15 +0200 Subject: [PATCH 26/51] parseToWholeNumbers --- src/components/History.tsx | 14 ++++++++------ src/pages/index.tsx | 2 +- src/utils/helpers.ts | 10 ++++++++++ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/components/History.tsx b/src/components/History.tsx index 8dbfc93..9d43c35 100644 --- a/src/components/History.tsx +++ b/src/components/History.tsx @@ -5,7 +5,7 @@ import { Button } from "./ui/button"; import { XIcon } from "lucide-react"; import useTradesStore from "~/stores/tradesStore"; import type { Pair } from "~/types"; -import { formatPrice } from "~/utils/helpers"; +import { formatWholePrice } from "~/utils/helpers"; const History = () => { return ( @@ -70,12 +70,14 @@ const Positions = () => { (item.pnl >= 0 ? "text-green-400" : "text-red-400") } > - {formatPrice(item.pnl)} + {formatWholePrice(item.pnl)} +
      {formatWholePrice(item.size)}{formatWholePrice(item.collateral)}{formatWholePrice(item.entry)} + {formatWholePrice(item.liquidation)} {formatPrice(item.size)}{formatPrice(item.collateral)}{formatPrice(item.entry)}{formatPrice(item.liquidation)} + + + +
      + + +
      + + + +
      +
        +
      • + Spread: + 3.50% +
      • +
      • + Volume: + 10000000 +
      • +
      +
      + + ); +}; + +export default BuyPanel; diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 649c550..b37f71e 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -32,7 +32,7 @@ const Navbar = () => {
      - +
      diff --git a/src/components/PairHeader.tsx b/src/components/PairHeader.tsx index b9ac52d..d4f4d7b 100644 --- a/src/components/PairHeader.tsx +++ b/src/components/PairHeader.tsx @@ -5,19 +5,16 @@ interface PairHeaderProps { pair: Pair; } - - -const PairHeader = (props:PairHeaderProps) => { - - const price = getPrice(props.pair.numerator, props.pair.denominator); - const change = getChange(props.pair.numerator, props.pair.denominator); - const high = getHigh(props.pair.numerator, props.pair.denominator); - const low = getLow(props.pair.numerator, props.pair.denominator); +const PairHeader = (props: PairHeaderProps) => { + const price = getPrice(props.pair.numerator, props.pair.denominator); + const change = getChange(props.pair.numerator, props.pair.denominator); + const high = getHigh(props.pair.numerator, props.pair.denominator); + const low = getLow(props.pair.numerator, props.pair.denominator); function getPrice(numerator: string, denominator: string) { console.log(`Get price for ${numerator}Perp/${denominator} pair.`); const _price = 1000; // Call API - return new Intl.NumberFormat("us-US", { + return new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", }).format(_price); @@ -36,7 +33,7 @@ const PairHeader = (props:PairHeaderProps) => { function getHigh(numerator: string, denominator: string) { console.log(`Get 24h High for ${numerator}Perp/${denominator} pair.`); const _high = 1200; // Call API - return new Intl.NumberFormat("us-US", { + return new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", }).format(_high); @@ -45,19 +42,21 @@ const PairHeader = (props:PairHeaderProps) => { function getLow(numerator: string, denominator: string) { console.log(`Get 24h Low for ${numerator}Perp/${denominator} pair.`); const _low = 800; // Call API - return new Intl.NumberFormat("us-US", { + return new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", }).format(_low); } - return ( -
      -
      - -
      + return ( +
      +
      + +
      Price
      diff --git a/src/components/SellPanel.tsx b/src/components/SellPanel.tsx new file mode 100644 index 0000000..a1baa74 --- /dev/null +++ b/src/components/SellPanel.tsx @@ -0,0 +1,148 @@ +import { Label } from "~/components/ui/label"; +import { Input } from "~/components/ui/input"; +import { Button } from "~/components/ui/button"; +import { defaultPair } from "~/utils/constants"; +import useTradesStore from "~/stores/tradesStore"; +import { type ExecutedTrade } from "~/types"; +import { type useBalance } from "wagmi"; +import { Separator } from "~/components/ui/separator"; +import React from "react"; +import { Usdt, Xdc } from "~/components/icons"; +import { getMockPosition } from "~/utils/helpers"; + +const SellPanel = ({ + balance, +}: { + balance: ReturnType["data"]; +}) => { + const addTransaction = useTradesStore((state) => state.addTrade); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + // create randomized trade + const trade: ExecutedTrade = { + hash: Math.random().toString(), + pair: defaultPair, + collateral: parseFloat(collateral), + entry: 1.21, + liquidation: 0, + // pnl is a random number between -1000 and 1000 + pnl: Math.floor(Math.random() * 2000) - 1000, + side: "short", + size: parseFloat(amount), + timestamp: new Date().toISOString(), + }; + + addTransaction(trade); + console.log("submit"); + }; + + const setMaxAmount = () => { + if (!balance) return; + setCollateral(balance.formatted); + setAmount(getMockPosition(balance.formatted)); + }; + + const [collateral, setCollateral] = React.useState(""); + const [amount, setAmount] = React.useState(""); + const [disabled, setDisabled] = React.useState(false); + + const handleCollateralChange = (e: React.ChangeEvent) => { + // this need to be formatted as a number with decimals separated by a dot + const value = e.target.value; + const regEx = /^[0-9]+(\.[0-9]{0,2})?$/; + if (value === "" || regEx.test(value)) { + // check if the amount is more than the balance + if (balance && parseFloat(value) > parseFloat(balance.formatted)) { + // if it is disable the buy btn + setDisabled(true); + } else { + // enable the buy btn + setDisabled(false); + } + setCollateral(value); + // calculate the amount + setAmount(getMockPosition(value)); + } + }; + + return ( +
      +
      +
      + + + + +
      + +
      + + +
      +
      + + +
      +
        +
      • + Spread: + 3.50% +
      • +
      • + Volume: + 10000000 +
      • +
      +
      + + ); +}; + +export default SellPanel; diff --git a/src/components/icons/Usdt.tsx b/src/components/icons/Usdt.tsx new file mode 100644 index 0000000..cc3c2ea --- /dev/null +++ b/src/components/icons/Usdt.tsx @@ -0,0 +1,21 @@ +export default function CryptocurrencyColorUsdt( + props: React.SVGProps, +) { + return ( + + + + + + + ); +} diff --git a/src/components/icons/Xdc.tsx b/src/components/icons/Xdc.tsx new file mode 100644 index 0000000..124618b --- /dev/null +++ b/src/components/icons/Xdc.tsx @@ -0,0 +1,17 @@ +import Image from "next/image"; +import React from "react"; +import XDC from "../../assets/XDCWhite.png"; + +const Xdc = ({ height = 24, width = 24, classNames = "" }) => { + return ( + XDC + ); +}; + +export default Xdc; diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts new file mode 100644 index 0000000..bfb74e7 --- /dev/null +++ b/src/components/icons/index.ts @@ -0,0 +1,8 @@ +import Usdt from "./Usdt"; +import Xdc from "./Xdc"; + +export { + Usdt, + Xdc, + // more icons here +}; diff --git a/src/components/index.ts b/src/components/index.ts index 4a00deb..3beb80a 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,6 +1,10 @@ +import BuyPanel from "./BuyPanel"; import Navbar from "./Navbar"; +import SellPanel from "./SellPanel"; export { Navbar, + BuyPanel, + SellPanel, // other components }; diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx new file mode 100644 index 0000000..ddcaccb --- /dev/null +++ b/src/components/ui/dialog.tsx @@ -0,0 +1,120 @@ +import * as React from "react" +import * as DialogPrimitive from "@radix-ui/react-dialog" +import { X } from "lucide-react" + +import { cn } from "~/components/lib/utils" + +const Dialog = DialogPrimitive.Root + +const DialogTrigger = DialogPrimitive.Trigger + +const DialogPortal = DialogPrimitive.Portal + +const DialogClose = DialogPrimitive.Close + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)) +DialogContent.displayName = DialogPrimitive.Content.displayName + +const DialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
      +) +DialogHeader.displayName = "DialogHeader" + +const DialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
      +) +DialogFooter.displayName = "DialogFooter" + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogTitle.displayName = DialogPrimitive.Title.displayName + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogDescription.displayName = DialogPrimitive.Description.displayName + +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogClose, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index dc03af6..4b41f3f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -12,6 +12,8 @@ export default function Home() {
      The chart goes here + +
      @@ -60,7 +62,7 @@ const TradingUi = () => {

      Account not connected

      - +
      ); @@ -85,153 +87,20 @@ const TradingUi = () => { - + - +
      ); }; -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from "~/components/ui/card"; -import { Label } from "~/components/ui/label"; -import { Input } from "~/components/ui/input"; -import { Button } from "~/components/ui/button"; + import History from "~/components/History"; import { defaultPair } from "~/utils/constants"; -import useTradesStore from "~/stores/tradesStore"; -import { type ExecutedTrade } from "~/types"; import { useAccount, useBalance } from "wagmi"; import { Loader2 } from "lucide-react"; -import { Separator } from "~/components/ui/separator"; import React from "react"; - -const Buy = ({ - balance, -}: { - balance: ReturnType["data"]; -}) => { - const addTransaction = useTradesStore((state) => state.addTrade); - - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - // create randomized trade - const trade: ExecutedTrade = { - hash: Math.random().toString(), - pair: defaultPair, - collateral: 1110, - entry: 1.21, - liquidation: 0, - // pnl is a random number between -1000 and 1000 - pnl: Math.floor(Math.random() * 2000) - 1000, - side: "long", - size: parseFloat(amount), - timestamp: new Date().toISOString(), - }; - - addTransaction(trade); - console.log("submit"); - }; - - const setMaxAmount = () => { - if (!balance) return; - setAmount(balance.formatted); - }; - - const [amount, setAmount] = React.useState(""); - const [disabled, setDisabled] = React.useState(false); - - const handleAmountChange = (e: React.ChangeEvent) => { - // this need to be formatted as a number with decimals separated by a dot - const value = e.target.value; - const regEx = /^[0-9]+(\.[0-9]{0,2})?$/; - if (value === "" || regEx.test(value)) { - // check if the amount is more than the balance - if (balance && parseFloat(value) > parseFloat(balance.formatted)) { - // if it is disable the buy btn - setDisabled(true); - } else { - // enable the buy btn - setDisabled(false); - } - setAmount(value); - } - }; - - return ( -
      -
      -
      - - - - -
      -
      - - -
      -
        -
      • - Spread: - 3.50% -
      • -
      • - Volume: - 10000000 -
      • -
      -
      - - ); -}; - -const Sell = () => { - return ( - - - Sell - Card Description - - -

      Card Content

      -
      - -

      Card Footer

      -
      -
      - ); -}; +import { Usdt, Xdc } from "~/components/icons"; +import { BuyPanel, SellPanel } from "~/components"; diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 9c39ed0..e5e43e2 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -2,7 +2,7 @@ import type { Pair } from "~/types"; const defaultPair: Pair = { numerator: "XDC", - denominator: "USDC", + denominator: "USDT", }; export { defaultPair }; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 09a1f53..c76a61e 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -14,3 +14,10 @@ export const formatWholePrice = (price: number) => { ? formattedPrice.slice(0, -3) : formattedPrice; }; + +/** + * gets a mock for the position given the collateral x1.1 + */ +export const getMockPosition = (collateral: string): string => { + return parseFloat(collateral) * 1.1 + ""; +}; From 8fda987c4fa2139bb268f4d4529511c92a6bdb3a Mon Sep 17 00:00:00 2001 From: AmandineBI Date: Wed, 25 Oct 2023 14:00:21 +0200 Subject: [PATCH 28/51] ApexCharts integration with candlestick chart --- package.json | 2 + pnpm-lock.yaml | 87 ++++++++++ src/components/FinancialChart.tsx | 279 ++++++++++++++++++++++++++++++ src/pages/index.tsx | 2 + 4 files changed, 370 insertions(+) create mode 100644 src/components/FinancialChart.tsx diff --git a/package.json b/package.json index cbd74f3..63308d9 100644 --- a/package.json +++ b/package.json @@ -23,11 +23,13 @@ "@trpc/next": "^10.37.1", "@trpc/react-query": "^10.37.1", "@trpc/server": "^10.37.1", + "apexcharts": "^3.44.0", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.288.0", "next": "^13.5.4", "react": "18.2.0", + "react-apexcharts": "^1.4.1", "react-dom": "18.2.0", "react-text-mask": "^5.5.0", "superjson": "^1.13.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a05c602..b995257 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,6 +47,9 @@ dependencies: '@trpc/server': specifier: ^10.37.1 version: 10.41.0 + apexcharts: + specifier: ^3.44.0 + version: 3.44.0 class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -62,6 +65,9 @@ dependencies: react: specifier: 18.2.0 version: 18.2.0 + react-apexcharts: + specifier: ^1.4.1 + version: 1.4.1(apexcharts@3.44.0)(react@18.2.0) react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) @@ -1956,6 +1962,10 @@ packages: tslib: 1.14.1 dev: false + /@yr/monotone-cubic-spline@1.0.3: + resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} + dev: false + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -2050,6 +2060,18 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 + /apexcharts@3.44.0: + resolution: {integrity: sha512-u7Xzrbcxc2yWznN78Jh5NMCYVAsWDfBjRl5ea++rVzFAqjU2hLz4RgKIFwYOBDRQtW1e/Qz8azJTqIJ1+Vu9Qg==} + dependencies: + '@yr/monotone-cubic-spline': 1.0.3 + svg.draggable.js: 2.2.2 + svg.easing.js: 2.0.0 + svg.filter.js: 2.0.2 + svg.pathmorphing.js: 0.1.3 + svg.resize.js: 1.4.3 + svg.select.js: 3.0.1 + dev: false + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -4363,6 +4385,17 @@ packages: safe-buffer: 5.2.1 dev: false + /react-apexcharts@1.4.1(apexcharts@3.44.0)(react@18.2.0): + resolution: {integrity: sha512-G14nVaD64Bnbgy8tYxkjuXEUp/7h30Q0U33xc3AwtGFijJB9nHqOt1a6eG0WBn055RgRg+NwqbKGtqPxy15d0Q==} + peerDependencies: + apexcharts: ^3.41.0 + react: '>=0.13' + dependencies: + apexcharts: 3.44.0 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -4860,6 +4893,60 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + /svg.draggable.js@2.2.2: + resolution: {integrity: sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.easing.js@2.0.0: + resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.filter.js@2.0.2: + resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.js@2.7.1: + resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} + dev: false + + /svg.pathmorphing.js@0.1.3: + resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.resize.js@1.4.3: + resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + svg.select.js: 2.1.2 + dev: false + + /svg.select.js@2.1.2: + resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.select.js@3.0.1: + resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + /tailwind-merge@1.14.0: resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} dev: false diff --git a/src/components/FinancialChart.tsx b/src/components/FinancialChart.tsx new file mode 100644 index 0000000..e062e05 --- /dev/null +++ b/src/components/FinancialChart.tsx @@ -0,0 +1,279 @@ +import React from "react"; +import dynamic from 'next/dynamic'; +const ReactApexChart = dynamic(() => import('react-apexcharts'), { + ssr: false, +}); + +const FinancialChart = () => { + + const state ={ + options: { + series: [{ + data: [{ + x: new Date(1538778600000), + y: [6629.81, 6650.5, 6623.04, 6633.33] + }, + { + x: new Date(1538780400000), + y: [6632.01, 6643.59, 6620, 6630.11] + }, + { + x: new Date(1538782200000), + y: [6630.71, 6648.95, 6623.34, 6635.65] + }, + { + x: new Date(1538784000000), + y: [6635.65, 6651, 6629.67, 6638.24] + }, + { + x: new Date(1538785800000), + y: [6638.24, 6640, 6620, 6624.47] + }, + { + x: new Date(1538787600000), + y: [6624.53, 6636.03, 6621.68, 6624.31] + }, + { + x: new Date(1538789400000), + y: [6624.61, 6632.2, 6617, 6626.02] + }, + { + x: new Date(1538791200000), + y: [6627, 6627.62, 6584.22, 6603.02] + }, + { + x: new Date(1538793000000), + y: [6605, 6608.03, 6598.95, 6604.01] + }, + { + x: new Date(1538794800000), + y: [6604.5, 6614.4, 6602.26, 6608.02] + }, + { + x: new Date(1538796600000), + y: [6608.02, 6610.68, 6601.99, 6608.91] + }, + { + x: new Date(1538798400000), + y: [6608.91, 6618.99, 6608.01, 6612] + }, + { + x: new Date(1538800200000), + y: [6612, 6615.13, 6605.09, 6612] + }, + { + x: new Date(1538802000000), + y: [6612, 6624.12, 6608.43, 6622.95] + }, + { + x: new Date(1538803800000), + y: [6623.91, 6623.91, 6615, 6615.67] + }, + { + x: new Date(1538805600000), + y: [6618.69, 6618.74, 6610, 6610.4] + }, + { + x: new Date(1538807400000), + y: [6611, 6622.78, 6610.4, 6614.9] + }, + { + x: new Date(1538809200000), + y: [6614.9, 6626.2, 6613.33, 6623.45] + }, + { + x: new Date(1538811000000), + y: [6623.48, 6627, 6618.38, 6620.35] + }, + { + x: new Date(1538812800000), + y: [6619.43, 6620.35, 6610.05, 6615.53] + }, + { + x: new Date(1538814600000), + y: [6615.53, 6617.93, 6610, 6615.19] + }, + { + x: new Date(1538816400000), + y: [6615.19, 6621.6, 6608.2, 6620] + }, + { + x: new Date(1538818200000), + y: [6619.54, 6625.17, 6614.15, 6620] + }, + { + x: new Date(1538820000000), + y: [6620.33, 6634.15, 6617.24, 6624.61] + }, + { + x: new Date(1538821800000), + y: [6625.95, 6626, 6611.66, 6617.58] + }, + { + x: new Date(1538823600000), + y: [6619, 6625.97, 6595.27, 6598.86] + }, + { + x: new Date(1538825400000), + y: [6598.86, 6598.88, 6570, 6587.16] + }, + { + x: new Date(1538827200000), + y: [6588.86, 6600, 6580, 6593.4] + }, + { + x: new Date(1538829000000), + y: [6593.99, 6598.89, 6585, 6587.81] + }, + { + x: new Date(1538830800000), + y: [6587.81, 6592.73, 6567.14, 6578] + }, + { + x: new Date(1538832600000), + y: [6578.35, 6581.72, 6567.39, 6579] + }, + { + x: new Date(1538834400000), + y: [6579.38, 6580.92, 6566.77, 6575.96] + }, + { + x: new Date(1538836200000), + y: [6575.96, 6589, 6571.77, 6588.92] + }, + { + x: new Date(1538838000000), + y: [6588.92, 6594, 6577.55, 6589.22] + }, + { + x: new Date(1538839800000), + y: [6589.3, 6598.89, 6589.1, 6596.08] + }, + { + x: new Date(1538841600000), + y: [6597.5, 6600, 6588.39, 6596.25] + }, + { + x: new Date(1538843400000), + y: [6598.03, 6600, 6588.73, 6595.97] + }, + { + x: new Date(1538845200000), + y: [6595.97, 6602.01, 6588.17, 6602] + }, + { + x: new Date(1538847000000), + y: [6602, 6607, 6596.51, 6599.95] + }, + { + x: new Date(1538848800000), + y: [6600.63, 6601.21, 6590.39, 6591.02] + }, + { + x: new Date(1538850600000), + y: [6591.02, 6603.08, 6591, 6591] + }, + { + x: new Date(1538852400000), + y: [6591, 6601.32, 6585, 6592] + }, + { + x: new Date(1538854200000), + y: [6593.13, 6596.01, 6590, 6593.34] + }, + { + x: new Date(1538856000000), + y: [6593.34, 6604.76, 6582.63, 6593.86] + }, + { + x: new Date(1538857800000), + y: [6593.86, 6604.28, 6586.57, 6600.01] + }, + { + x: new Date(1538859600000), + y: [6601.81, 6603.21, 6592.78, 6596.25] + }, + { + x: new Date(1538861400000), + y: [6596.25, 6604.2, 6590, 6602.99] + }, + { + x: new Date(1538863200000), + y: [6602.99, 6606, 6584.99, 6587.81] + }, + { + x: new Date(1538865000000), + y: [6587.81, 6595, 6583.27, 6591.96] + }, + { + x: new Date(1538866800000), + y: [6591.97, 6596.07, 6585, 6588.39] + }, + { + x: new Date(1538868600000), + y: [6587.6, 6598.21, 6587.6, 6594.27] + }, + { + x: new Date(1538870400000), + y: [6596.44, 6601, 6590, 6596.55] + }, + { + x: new Date(1538872200000), + y: [6598.91, 6605, 6596.61, 6600.02] + }, + { + x: new Date(1538874000000), + y: [6600.55, 6605, 6589.14, 6593.01] + }, + { + x: new Date(1538875800000), + y: [6593.15, 6605, 6592, 6603.06] + }, + { + x: new Date(1538877600000), + y: [6603.07, 6604.5, 6599.09, 6603.89] + }, + { + x: new Date(1538879400000), + y: [6604.44, 6604.44, 6600, 6603.5] + }, + { + x: new Date(1538881200000), + y: [6603.5, 6603.99, 6597.5, 6603.86] + }, + { + x: new Date(1538883000000), + y: [6603.85, 6605, 6600, 6604.07] + }, + { + x: new Date(1538884800000), + y: [6604.98, 6606, 6604.07, 6606] + }, + ] + }], + chart: { + type: 'candlestick', + height: 350 + }, + title: { + text: 'CandleStick Chart', + align: 'left' + }, + xaxis: { + type: 'datetime' + }, + yaxis: { + tooltip: { + enabled: true + } + + } + } + }; + + return ( + + ); + }; + + export default FinancialChart; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index dc03af6..df5f226 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,4 +1,5 @@ import PairHeader from "~/components/PairHeader"; +import FinancialChart from '~/components/FinancialChart' export default function Home() { // const hello = api.post.hello.useQuery({ text: "from tRPC" }); @@ -12,6 +13,7 @@ export default function Home() {
      The chart goes here +
      From ab469c1b793350730037bff75aefef123d27134c Mon Sep 17 00:00:00 2001 From: Loa212 Date: Wed, 25 Oct 2023 14:31:48 +0200 Subject: [PATCH 29/51] add test transaction --- src/components/BuyPanel.tsx | 83 +- src/components/ui/dialog.tsx | 60 +- src/hooks/wagmi/config/index.ts | 3 + src/hooks/wagmi/config/testABI.json | 293 + src/hooks/wagmi/index.ts | 0 src/utils/PerpetualDEX.json | 14690 ++++++++++++++++++++++++++ 6 files changed, 15091 insertions(+), 38 deletions(-) create mode 100644 src/hooks/wagmi/config/index.ts create mode 100644 src/hooks/wagmi/config/testABI.json create mode 100644 src/hooks/wagmi/index.ts create mode 100644 src/utils/PerpetualDEX.json diff --git a/src/components/BuyPanel.tsx b/src/components/BuyPanel.tsx index a517d23..a59dbc1 100644 --- a/src/components/BuyPanel.tsx +++ b/src/components/BuyPanel.tsx @@ -4,7 +4,7 @@ import { Button } from "~/components/ui/button"; import { defaultPair } from "~/utils/constants"; import useTradesStore from "~/stores/tradesStore"; import { type ExecutedTrade } from "~/types"; -import { type useBalance } from "wagmi"; +import { useContractWrite, type useBalance, useAccount } from "wagmi"; import { Separator } from "~/components/ui/separator"; import React from "react"; import { Usdt, Xdc } from "~/components/icons"; @@ -121,13 +121,15 @@ const BuyPanel = ({ />
      - + + +
        @@ -146,3 +148,68 @@ const BuyPanel = ({ }; export default BuyPanel; + +import { ArrowDown, Copy } from "lucide-react"; +import { + Dialog, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "./ui/dialog"; +import { testABI } from "~/hooks/wagmi/config"; + +const BuyDialog: React.FC<{ + children: React.ReactNode; +}> = ({ children }) => { + const { + address, + isConnecting: accountLoading, + isDisconnected: accountDisconnected, + } = useAccount(); + + const { data, isLoading, isSuccess, write } = useContractWrite({ + address: "0xf5A822562999C7951Ac13DdD1f2B0AfA8004dE9F", + abi: testABI, + functionName: "openPosition", + }); + + // const miao = write({ + // args: [10 , 35000 , 0], + // from: address, + // }) + + return ( + + {children} + + + Confirm Buy / Long + + +
        +
        +

        From this

        + +

        To that

        +
        +
        + + + +
        +
        + ); +}; diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx index ddcaccb..dc573c5 100644 --- a/src/components/ui/dialog.tsx +++ b/src/components/ui/dialog.tsx @@ -1,16 +1,16 @@ -import * as React from "react" -import * as DialogPrimitive from "@radix-ui/react-dialog" -import { X } from "lucide-react" +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { X } from "lucide-react"; -import { cn } from "~/components/lib/utils" +import { cn } from "~/components/lib/utils"; -const Dialog = DialogPrimitive.Root +const Dialog = DialogPrimitive.Root; -const DialogTrigger = DialogPrimitive.Trigger +const DialogTrigger = DialogPrimitive.Trigger; -const DialogPortal = DialogPrimitive.Portal +const DialogPortal = DialogPrimitive.Portal; -const DialogClose = DialogPrimitive.Close +const DialogClose = DialogPrimitive.Close; const DialogOverlay = React.forwardRef< React.ElementRef, @@ -19,13 +19,13 @@ const DialogOverlay = React.forwardRef< -)) -DialogOverlay.displayName = DialogPrimitive.Overlay.displayName +)); +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; const DialogContent = React.forwardRef< React.ElementRef, @@ -36,20 +36,20 @@ const DialogContent = React.forwardRef< {children} - + Close -)) -DialogContent.displayName = DialogPrimitive.Content.displayName +)); +DialogContent.displayName = DialogPrimitive.Content.displayName; const DialogHeader = ({ className, @@ -58,12 +58,12 @@ const DialogHeader = ({
        -) -DialogHeader.displayName = "DialogHeader" +); +DialogHeader.displayName = "DialogHeader"; const DialogFooter = ({ className, @@ -72,12 +72,12 @@ const DialogFooter = ({
        -) -DialogFooter.displayName = "DialogFooter" +); +DialogFooter.displayName = "DialogFooter"; const DialogTitle = React.forwardRef< React.ElementRef, @@ -86,13 +86,13 @@ const DialogTitle = React.forwardRef< -)) -DialogTitle.displayName = DialogPrimitive.Title.displayName +)); +DialogTitle.displayName = DialogPrimitive.Title.displayName; const DialogDescription = React.forwardRef< React.ElementRef, @@ -103,8 +103,8 @@ const DialogDescription = React.forwardRef< className={cn("text-sm text-muted-foreground", className)} {...props} /> -)) -DialogDescription.displayName = DialogPrimitive.Description.displayName +)); +DialogDescription.displayName = DialogPrimitive.Description.displayName; export { Dialog, @@ -117,4 +117,4 @@ export { DialogFooter, DialogTitle, DialogDescription, -} +}; diff --git a/src/hooks/wagmi/config/index.ts b/src/hooks/wagmi/config/index.ts new file mode 100644 index 0000000..1889cc3 --- /dev/null +++ b/src/hooks/wagmi/config/index.ts @@ -0,0 +1,3 @@ +import testABI from "./testABI.json"; + +export { testABI }; diff --git a/src/hooks/wagmi/config/testABI.json b/src/hooks/wagmi/config/testABI.json new file mode 100644 index 0000000..08fd224 --- /dev/null +++ b/src/hooks/wagmi/config/testABI.json @@ -0,0 +1,293 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_collateralToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "fundingPayment", + "type": "uint256" + } + ], + "name": "FundingPaid", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "positionId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "size", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "entryPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "enum PerpetualDEX.Side", + "name": "side", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "profit", + "type": "uint256" + } + ], + "name": "PositionClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "positionId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "size", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "entryPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "enum PerpetualDEX.Side", + "name": "side", + "type": "uint8" + } + ], + "name": "PositionOpened", + "type": "event" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "collateralBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "collateralToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fundingRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "indexPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastFundingTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "positions", + "outputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "uint256", + "name": "size", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "entryPrice", + "type": "uint256" + }, + { + "internalType": "enum PerpetualDEX.Side", + "name": "side", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "size", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "entryPrice", + "type": "uint256" + }, + { + "internalType": "enum PerpetualDEX.Side", + "name": "side", + "type": "uint8" + } + ], + "name": "openPosition", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "positionId", + "type": "uint256" + } + ], + "name": "closePosition", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "updateIndexPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "payFunding", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/src/hooks/wagmi/index.ts b/src/hooks/wagmi/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/utils/PerpetualDEX.json b/src/utils/PerpetualDEX.json new file mode 100644 index 0000000..2b02f37 --- /dev/null +++ b/src/utils/PerpetualDEX.json @@ -0,0 +1,14690 @@ +{ + "contractName": "PerpetualDEX", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_collateralToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "fundingPayment", + "type": "uint256" + } + ], + "name": "FundingPaid", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "positionId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "size", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "entryPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "enum PerpetualDEX.Side", + "name": "side", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "profit", + "type": "uint256" + } + ], + "name": "PositionClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "positionId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "size", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "entryPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "enum PerpetualDEX.Side", + "name": "side", + "type": "uint8" + } + ], + "name": "PositionOpened", + "type": "event" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "collateralBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, + { + "inputs": [], + "name": "collateralToken", + "outputs": [ + { + "internalType": "contract IXRC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, + { + "inputs": [], + "name": "feeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, + { + "inputs": [], + "name": "fundingRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, + { + "inputs": [], + "name": "indexPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, + { + "inputs": [], + "name": "lastFundingTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "positions", + "outputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "uint256", + "name": "size", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "entryPrice", + "type": "uint256" + }, + { + "internalType": "enum PerpetualDEX.Side", + "name": "side", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "size", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "entryPrice", + "type": "uint256" + }, + { + "internalType": "enum PerpetualDEX.Side", + "name": "side", + "type": "uint8" + } + ], + "name": "openPosition", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "positionId", + "type": "uint256" + } + ], + "name": "closePosition", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "updateIndexPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "payFunding", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateralToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fundingPayment\",\"type\":\"uint256\"}],\"name\":\"FundingPaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"positionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"entryPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum PerpetualDEX.Side\",\"name\":\"side\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"}],\"name\":\"PositionClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"positionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"entryPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum PerpetualDEX.Side\",\"name\":\"side\",\"type\":\"uint8\"}],\"name\":\"PositionOpened\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"positionId\",\"type\":\"uint256\"}],\"name\":\"closePosition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"collateralBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralToken\",\"outputs\":[{\"internalType\":\"contract IXRC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fundingRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"indexPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFundingTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"entryPrice\",\"type\":\"uint256\"},{\"internalType\":\"enum PerpetualDEX.Side\",\"name\":\"side\",\"type\":\"uint8\"}],\"name\":\"openPosition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"entryPrice\",\"type\":\"uint256\"},{\"internalType\":\"enum PerpetualDEX.Side\",\"name\":\"side\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPrice\",\"type\":\"uint256\"}],\"name\":\"updateIndexPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/PerpectualDex.sol\":\"PerpetualDEX\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/IXRC20.sol\":{\"keccak256\":\"0xd30f2cd85926c09f870b5bb76929907b3215d10acadf7d6c22d72aad75b9e89c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c137b12bf5461011dafebf7f6617cd6dc696313992fb82050a0a6cf9041856b0\",\"dweb:/ipfs/QmPD5ujk4bBEm8u1rhrnfTYwJzTLbmAxcBeF5u2Qixvudw\"]},\"project:/contracts/PerpectualDex.sol\":{\"keccak256\":\"0xbdef744f1a567e97ef8cfbff76baa1e62815ed6eab786850032554c4d02fc444\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec848b07093a2323bb4c070172ba596ccdec9caedee27d0611c65290498b96bd\",\"dweb:/ipfs/QmSbui8eFVJWYbPyXdQyMNP8DEPsc3q9L33Fvnt5Ts2HNa\"]}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620019213803806200192183398181016040528101906200003791906200014a565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260028190555060006003819055506103e86004819055506101f4600581905550506200017c565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200011282620000e5565b9050919050565b620001248162000105565b81146200013057600080fd5b50565b600081519050620001448162000119565b92915050565b600060208284031215620001635762000162620000e0565b5b6000620001738482850162000133565b91505092915050565b611795806200018c6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063978bbdb911610071578063978bbdb91461017b57806399fbab8814610199578063a126d601146101cc578063aaa5a2ad146101e8578063b2016bd4146101f2578063f851a44014610210576100b4565b80630ac02555146100b957806310bace8c146100d557806329bc969d146100f357806341d3c84c146101235780635fbf81cc1461014157806393ca34151461015d575b600080fd5b6100d360048036038101906100ce9190610e93565b61022e565b005b6100dd6102f3565b6040516100ea9190610ecf565b60405180910390f35b61010d60048036038101906101089190610f48565b6102f9565b60405161011a9190610ecf565b60405180910390f35b61012b610311565b6040516101389190610ecf565b60405180910390f35b61015b60048036038101906101569190610f9a565b610317565b005b6101656106ac565b6040516101729190610ecf565b60405180910390f35b6101836106b2565b6040516101909190610ecf565b60405180910390f35b6101b360048036038101906101ae9190610e93565b6106b8565b6040516101c39493929190611073565b60405180910390f35b6101e660048036038101906101e19190610e93565b610725565b005b6101f0610b66565b005b6101fa610ca4565b6040516102079190611117565b60405180910390f35b610218610cca565b6040516102259190611132565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b3906111d0565b60405180910390fd5b806004819055506000600254426102d3919061121f565b905060008111156102ef576102e781610cee565b426002819055505b5050565b60045481565b60076020528060005260406000206000915090505481565b60035481565b6000831161035a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103519061129f565b60405180910390fd5b6000821161039d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039490611331565b60405180910390fd5b600060018111156103b1576103b0610ffc565b5b8160018111156103c4576103c3610ffc565b5b14806103f357506001808111156103de576103dd610ffc565b5b8160018111156103f1576103f0610ffc565b5b145b610432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061139d565b60405180910390fd5b6000670de0b6b3a7640000600454848661044c91906113bd565b61045691906113bd565b610460919061142e565b905080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156104e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104db906114ab565b60405180910390fd5b600660405180608001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184600181111561052c5761052b610ffc565b5b815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030160006101000a81548160ff021916908360018111156105de576105dd610ffc565b5b0217905550505080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610634919061121f565b925050819055506000600160068054905061064f919061121f565b90503373ffffffffffffffffffffffffffffffffffffffff167f22525261af7a4917e8be47f89149ad7abb0d81058d0a105e9756a4e40bd5b2e88287878760405161069d94939291906114cb565b60405180910390a25050505050565b60025481565b60055481565b600681815481106106c857600080fd5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b600680549050811061076c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107639061155c565b60405180910390fd5b6000600682815481106107825761078161157c565b5b906000526020600020906004020190503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081b9061161d565b60405180910390fd5b60008160010154905060008260020154905060008360030160009054906101000a900460ff169050600061085786610d53565b905060006127106005548361086c91906113bd565b610876919061142e565b905060008183610886919061121f565b9050670de0b6b3a764000060045487876108a091906113bd565b6108aa91906113bd565b6108b4919061142e565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610902919061163d565b9250508190555081600760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610979919061163d565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f3c35f9aeba0e938ec1359b8abda46ace45b198167ad7fea0dd1fca374224427489888888866040516109ce959493929190611671565b60405180910390a2600660016006805490506109ea919061121f565b815481106109fb576109fa61157c565b5b906000526020600020906004020160068981548110610a1d57610a1c61157c565b5b90600052602060002090600402016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820160009054906101000a900460ff168160030160006101000a81548160ff02191690836001811115610ade57610add610ffc565b5b02179055509050506006805480610af857610af76116c4565b5b6001900381819060005260206000209060040201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905560028201600090556003820160006101000a81549060ff0219169055505090555050505050505050565b600060025442610b76919061121f565b905060008111610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb29061173f565b60405180910390fd5b60006201518082600354600680549050610bd591906113bd565b610bdf91906113bd565b610be9919061142e565b905080600760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c5b919061163d565b925050819055507f7052e674e5d83ba741a3bc9f3675ddb61e9472cf8470386d1c2a21ed9c0b87fc81604051610c919190610ecf565b60405180910390a1426002819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6004548162015180670de0b6b3a7640000600454610d0c91906113bd565b670de0b6b3a7640000600454610d2291906113bd565b610d2c919061121f565b610d3691906113bd565b610d40919061142e565b610d4a919061142e565b60038190555050565b60008060068381548110610d6a57610d6961157c565b5b9060005260206000209060040201905060008160010154905060008260020154905060008360030160009054906101000a900460ff1690506000600454905060006001811115610dbd57610dbc610ffc565b5b826001811115610dd057610dcf610ffc565b5b03610e1657670de0b6b3a76400008484610dea91906113bd565b8583610df691906113bd565b610e00919061121f565b610e0a919061142e565b95505050505050610e53565b670de0b6b3a76400008482610e2b91906113bd565b8585610e3791906113bd565b610e41919061121f565b610e4b919061142e565b955050505050505b919050565b600080fd5b6000819050919050565b610e7081610e5d565b8114610e7b57600080fd5b50565b600081359050610e8d81610e67565b92915050565b600060208284031215610ea957610ea8610e58565b5b6000610eb784828501610e7e565b91505092915050565b610ec981610e5d565b82525050565b6000602082019050610ee46000830184610ec0565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f1582610eea565b9050919050565b610f2581610f0a565b8114610f3057600080fd5b50565b600081359050610f4281610f1c565b92915050565b600060208284031215610f5e57610f5d610e58565b5b6000610f6c84828501610f33565b91505092915050565b60028110610f8257600080fd5b50565b600081359050610f9481610f75565b92915050565b600080600060608486031215610fb357610fb2610e58565b5b6000610fc186828701610e7e565b9350506020610fd286828701610e7e565b9250506040610fe386828701610f85565b9150509250925092565b610ff681610f0a565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811061103c5761103b610ffc565b5b50565b600081905061104d8261102b565b919050565b600061105d8261103f565b9050919050565b61106d81611052565b82525050565b60006080820190506110886000830187610fed565b6110956020830186610ec0565b6110a26040830185610ec0565b6110af6060830184611064565b95945050505050565b6000819050919050565b60006110dd6110d86110d384610eea565b6110b8565b610eea565b9050919050565b60006110ef826110c2565b9050919050565b6000611101826110e4565b9050919050565b611111816110f6565b82525050565b600060208201905061112c6000830184611108565b92915050565b60006020820190506111476000830184610fed565b92915050565b600082825260208201905092915050565b7f4f6e6c792061646d696e2063616e2075706461746520696e646578207072696360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006111ba60218361114d565b91506111c58261115e565b604082019050919050565b600060208201905081810360008301526111e9816111ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061122a82610e5d565b915061123583610e5d565b925082820390508181111561124d5761124c6111f0565b5b92915050565b7f53697a65206d7573742062652067726561746572207468616e20300000000000600082015250565b6000611289601b8361114d565b915061129482611253565b602082019050919050565b600060208201905081810360008301526112b88161127c565b9050919050565b7f456e747279207072696365206d7573742062652067726561746572207468616e60008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b600061131b60228361114d565b9150611326826112bf565b604082019050919050565b6000602082019050818103600083015261134a8161130e565b9050919050565b7f496e76616c696420736964650000000000000000000000000000000000000000600082015250565b6000611387600c8361114d565b915061139282611351565b602082019050919050565b600060208201905081810360008301526113b68161137a565b9050919050565b60006113c882610e5d565b91506113d383610e5d565b92508282026113e181610e5d565b915082820484148315176113f8576113f76111f0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061143982610e5d565b915061144483610e5d565b925082611454576114536113ff565b5b828204905092915050565b7f496e73756666696369656e7420636f6c6c61746572616c000000000000000000600082015250565b600061149560178361114d565b91506114a08261145f565b602082019050919050565b600060208201905081810360008301526114c481611488565b9050919050565b60006080820190506114e06000830187610ec0565b6114ed6020830186610ec0565b6114fa6040830185610ec0565b6115076060830184611064565b95945050505050565b7f506f736974696f6e20646f6573206e6f74206578697374000000000000000000600082015250565b600061154660178361114d565b915061155182611510565b602082019050919050565b6000602082019050818103600083015261157581611539565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f6e6c7920746865206f776e65722063616e20636c6f73652074686520706f7360008201527f6974696f6e000000000000000000000000000000000000000000000000000000602082015250565b600061160760258361114d565b9150611612826115ab565b604082019050919050565b60006020820190508181036000830152611636816115fa565b9050919050565b600061164882610e5d565b915061165383610e5d565b925082820190508082111561166b5761166a6111f0565b5b92915050565b600060a0820190506116866000830188610ec0565b6116936020830187610ec0565b6116a06040830186610ec0565b6116ad6060830185611064565b6116ba6080830184610ec0565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e6f742074696d6520666f722066756e64696e67207061796d656e7420796574600082015250565b600061172960208361114d565b9150611734826116f3565b602082019050919050565b600060208201905081810360008301526117588161171c565b905091905056fea264697066735822122099a62993f6597019ce8fb805b97cb23714b75b09d1e9b05bafd43a8d5213967f64736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063978bbdb911610071578063978bbdb91461017b57806399fbab8814610199578063a126d601146101cc578063aaa5a2ad146101e8578063b2016bd4146101f2578063f851a44014610210576100b4565b80630ac02555146100b957806310bace8c146100d557806329bc969d146100f357806341d3c84c146101235780635fbf81cc1461014157806393ca34151461015d575b600080fd5b6100d360048036038101906100ce9190610e93565b61022e565b005b6100dd6102f3565b6040516100ea9190610ecf565b60405180910390f35b61010d60048036038101906101089190610f48565b6102f9565b60405161011a9190610ecf565b60405180910390f35b61012b610311565b6040516101389190610ecf565b60405180910390f35b61015b60048036038101906101569190610f9a565b610317565b005b6101656106ac565b6040516101729190610ecf565b60405180910390f35b6101836106b2565b6040516101909190610ecf565b60405180910390f35b6101b360048036038101906101ae9190610e93565b6106b8565b6040516101c39493929190611073565b60405180910390f35b6101e660048036038101906101e19190610e93565b610725565b005b6101f0610b66565b005b6101fa610ca4565b6040516102079190611117565b60405180910390f35b610218610cca565b6040516102259190611132565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b3906111d0565b60405180910390fd5b806004819055506000600254426102d3919061121f565b905060008111156102ef576102e781610cee565b426002819055505b5050565b60045481565b60076020528060005260406000206000915090505481565b60035481565b6000831161035a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103519061129f565b60405180910390fd5b6000821161039d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039490611331565b60405180910390fd5b600060018111156103b1576103b0610ffc565b5b8160018111156103c4576103c3610ffc565b5b14806103f357506001808111156103de576103dd610ffc565b5b8160018111156103f1576103f0610ffc565b5b145b610432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061139d565b60405180910390fd5b6000670de0b6b3a7640000600454848661044c91906113bd565b61045691906113bd565b610460919061142e565b905080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156104e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104db906114ab565b60405180910390fd5b600660405180608001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184600181111561052c5761052b610ffc565b5b815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030160006101000a81548160ff021916908360018111156105de576105dd610ffc565b5b0217905550505080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610634919061121f565b925050819055506000600160068054905061064f919061121f565b90503373ffffffffffffffffffffffffffffffffffffffff167f22525261af7a4917e8be47f89149ad7abb0d81058d0a105e9756a4e40bd5b2e88287878760405161069d94939291906114cb565b60405180910390a25050505050565b60025481565b60055481565b600681815481106106c857600080fd5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b600680549050811061076c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107639061155c565b60405180910390fd5b6000600682815481106107825761078161157c565b5b906000526020600020906004020190503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081b9061161d565b60405180910390fd5b60008160010154905060008260020154905060008360030160009054906101000a900460ff169050600061085786610d53565b905060006127106005548361086c91906113bd565b610876919061142e565b905060008183610886919061121f565b9050670de0b6b3a764000060045487876108a091906113bd565b6108aa91906113bd565b6108b4919061142e565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610902919061163d565b9250508190555081600760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610979919061163d565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f3c35f9aeba0e938ec1359b8abda46ace45b198167ad7fea0dd1fca374224427489888888866040516109ce959493929190611671565b60405180910390a2600660016006805490506109ea919061121f565b815481106109fb576109fa61157c565b5b906000526020600020906004020160068981548110610a1d57610a1c61157c565b5b90600052602060002090600402016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820160009054906101000a900460ff168160030160006101000a81548160ff02191690836001811115610ade57610add610ffc565b5b02179055509050506006805480610af857610af76116c4565b5b6001900381819060005260206000209060040201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905560028201600090556003820160006101000a81549060ff0219169055505090555050505050505050565b600060025442610b76919061121f565b905060008111610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb29061173f565b60405180910390fd5b60006201518082600354600680549050610bd591906113bd565b610bdf91906113bd565b610be9919061142e565b905080600760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c5b919061163d565b925050819055507f7052e674e5d83ba741a3bc9f3675ddb61e9472cf8470386d1c2a21ed9c0b87fc81604051610c919190610ecf565b60405180910390a1426002819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6004548162015180670de0b6b3a7640000600454610d0c91906113bd565b670de0b6b3a7640000600454610d2291906113bd565b610d2c919061121f565b610d3691906113bd565b610d40919061142e565b610d4a919061142e565b60038190555050565b60008060068381548110610d6a57610d6961157c565b5b9060005260206000209060040201905060008160010154905060008260020154905060008360030160009054906101000a900460ff1690506000600454905060006001811115610dbd57610dbc610ffc565b5b826001811115610dd057610dcf610ffc565b5b03610e1657670de0b6b3a76400008484610dea91906113bd565b8583610df691906113bd565b610e00919061121f565b610e0a919061142e565b95505050505050610e53565b670de0b6b3a76400008482610e2b91906113bd565b8585610e3791906113bd565b610e41919061121f565b610e4b919061142e565b955050505050505b919050565b600080fd5b6000819050919050565b610e7081610e5d565b8114610e7b57600080fd5b50565b600081359050610e8d81610e67565b92915050565b600060208284031215610ea957610ea8610e58565b5b6000610eb784828501610e7e565b91505092915050565b610ec981610e5d565b82525050565b6000602082019050610ee46000830184610ec0565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f1582610eea565b9050919050565b610f2581610f0a565b8114610f3057600080fd5b50565b600081359050610f4281610f1c565b92915050565b600060208284031215610f5e57610f5d610e58565b5b6000610f6c84828501610f33565b91505092915050565b60028110610f8257600080fd5b50565b600081359050610f9481610f75565b92915050565b600080600060608486031215610fb357610fb2610e58565b5b6000610fc186828701610e7e565b9350506020610fd286828701610e7e565b9250506040610fe386828701610f85565b9150509250925092565b610ff681610f0a565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811061103c5761103b610ffc565b5b50565b600081905061104d8261102b565b919050565b600061105d8261103f565b9050919050565b61106d81611052565b82525050565b60006080820190506110886000830187610fed565b6110956020830186610ec0565b6110a26040830185610ec0565b6110af6060830184611064565b95945050505050565b6000819050919050565b60006110dd6110d86110d384610eea565b6110b8565b610eea565b9050919050565b60006110ef826110c2565b9050919050565b6000611101826110e4565b9050919050565b611111816110f6565b82525050565b600060208201905061112c6000830184611108565b92915050565b60006020820190506111476000830184610fed565b92915050565b600082825260208201905092915050565b7f4f6e6c792061646d696e2063616e2075706461746520696e646578207072696360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006111ba60218361114d565b91506111c58261115e565b604082019050919050565b600060208201905081810360008301526111e9816111ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061122a82610e5d565b915061123583610e5d565b925082820390508181111561124d5761124c6111f0565b5b92915050565b7f53697a65206d7573742062652067726561746572207468616e20300000000000600082015250565b6000611289601b8361114d565b915061129482611253565b602082019050919050565b600060208201905081810360008301526112b88161127c565b9050919050565b7f456e747279207072696365206d7573742062652067726561746572207468616e60008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b600061131b60228361114d565b9150611326826112bf565b604082019050919050565b6000602082019050818103600083015261134a8161130e565b9050919050565b7f496e76616c696420736964650000000000000000000000000000000000000000600082015250565b6000611387600c8361114d565b915061139282611351565b602082019050919050565b600060208201905081810360008301526113b68161137a565b9050919050565b60006113c882610e5d565b91506113d383610e5d565b92508282026113e181610e5d565b915082820484148315176113f8576113f76111f0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061143982610e5d565b915061144483610e5d565b925082611454576114536113ff565b5b828204905092915050565b7f496e73756666696369656e7420636f6c6c61746572616c000000000000000000600082015250565b600061149560178361114d565b91506114a08261145f565b602082019050919050565b600060208201905081810360008301526114c481611488565b9050919050565b60006080820190506114e06000830187610ec0565b6114ed6020830186610ec0565b6114fa6040830185610ec0565b6115076060830184611064565b95945050505050565b7f506f736974696f6e20646f6573206e6f74206578697374000000000000000000600082015250565b600061154660178361114d565b915061155182611510565b602082019050919050565b6000602082019050818103600083015261157581611539565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f6e6c7920746865206f776e65722063616e20636c6f73652074686520706f7360008201527f6974696f6e000000000000000000000000000000000000000000000000000000602082015250565b600061160760258361114d565b9150611612826115ab565b604082019050919050565b60006020820190508181036000830152611636816115fa565b9050919050565b600061164882610e5d565b915061165383610e5d565b925082820190508082111561166b5761166a6111f0565b5b92915050565b600060a0820190506116866000830188610ec0565b6116936020830187610ec0565b6116a06040830186610ec0565b6116ad6060830185611064565b6116ba6080830184610ec0565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e6f742074696d6520666f722066756e64696e67207061796d656e7420796574600082015250565b600061172960208361114d565b9150611734826116f3565b602082019050919050565b600060208201905081810360008301526117588161171c565b905091905056fea264697066735822122099a62993f6597019ce8fb805b97cb23714b75b09d1e9b05bafd43a8d5213967f64736f6c63430008110033", + "immutableReferences": {}, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1199:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:2", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:2" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:2" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:2" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:2", + "type": "" + } + ], + "src": "7:75:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:2" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:2" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:81:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:65:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "404:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "411:42:2", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "400:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "400:54:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:2", + "type": "" + } + ], + "src": "334:126:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "511:51:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "521:35:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "550:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "532:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "532:24:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "521:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "493:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "503:7:2", + "type": "" + } + ], + "src": "466:96:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "611:79:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "668:16:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "677:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "680:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "670:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "670:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "670:12:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "634:5:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "659:5:2" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "641:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "641:24:2" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "631:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "631:35:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "624:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "624:43:2" + }, + "nodeType": "YulIf", + "src": "621:63:2" + } + ] + }, + "name": "validator_revert_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "604:5:2", + "type": "" + } + ], + "src": "568:122:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "759:80:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "769:22:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "784:6:2" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "778:5:2" + }, + "nodeType": "YulFunctionCall", + "src": "778:13:2" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "769:5:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "827:5:2" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "800:26:2" + }, + "nodeType": "YulFunctionCall", + "src": "800:33:2" + }, + "nodeType": "YulExpressionStatement", + "src": "800:33:2" + } + ] + }, + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "737:6:2", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "745:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "753:5:2", + "type": "" + } + ], + "src": "696:143:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "922:274:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "968:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "970:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "970:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "970:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "943:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "952:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "939:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "939:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "964:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "935:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "935:32:2" + }, + "nodeType": "YulIf", + "src": "932:119:2" + }, + { + "nodeType": "YulBlock", + "src": "1061:128:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1076:15:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1090:1:2", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1080:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1105:74:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1151:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1162:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1147:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1147:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1171:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "1115:31:2" + }, + "nodeType": "YulFunctionCall", + "src": "1115:64:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1105:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "892:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "903:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "915:6:2", + "type": "" + } + ], + "src": "845:351:2" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", + "id": 2, + "language": "Yul", + "name": "#utility.yul" + } + ], + "deployedGeneratedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:16796:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:2", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:2" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:2" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:2" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:2", + "type": "" + } + ], + "src": "7:75:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:2" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:2" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:32:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:16:2", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "400:5:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:2", + "type": "" + } + ], + "src": "334:77:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "460:79:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "517:16:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "526:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "529:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "519:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "519:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "519:12:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "483:5:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "490:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "490:24:2" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "480:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "480:35:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "473:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "473:43:2" + }, + "nodeType": "YulIf", + "src": "470:63:2" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "453:5:2", + "type": "" + } + ], + "src": "417:122:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "597:87:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "607:29:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "629:6:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "616:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "616:20:2" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "607:5:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "672:5:2" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "645:26:2" + }, + "nodeType": "YulFunctionCall", + "src": "645:33:2" + }, + "nodeType": "YulExpressionStatement", + "src": "645:33:2" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "575:6:2", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "583:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "591:5:2", + "type": "" + } + ], + "src": "545:139:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "756:263:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "802:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "804:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "804:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "804:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "777:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "786:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "773:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "773:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "798:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "769:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "769:32:2" + }, + "nodeType": "YulIf", + "src": "766:119:2" + }, + { + "nodeType": "YulBlock", + "src": "895:117:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "910:15:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "924:1:2", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "914:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "939:63:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "974:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "985:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "970:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "970:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "994:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "949:20:2" + }, + "nodeType": "YulFunctionCall", + "src": "949:53:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "939:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "726:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "737:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "749:6:2", + "type": "" + } + ], + "src": "690:329:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1090:53:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1107:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1130:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1112:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1112:24:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1100:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "1100:37:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1100:37:2" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1078:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1085:3:2", + "type": "" + } + ], + "src": "1025:118:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1247:124:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1257:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1269:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1280:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1265:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1265:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1257:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1337:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1350:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1361:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1346:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1346:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "1293:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "1293:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1293:71:2" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1219:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1231:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1242:4:2", + "type": "" + } + ], + "src": "1149:222:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1422:81:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1432:65:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1447:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1454:42:2", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1443:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1443:54:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1432:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1404:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1414:7:2", + "type": "" + } + ], + "src": "1377:126:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1554:51:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1564:35:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1593:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "1575:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1575:24:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1564:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1536:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1546:7:2", + "type": "" + } + ], + "src": "1509:96:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1654:79:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1711:16:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1720:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1723:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1713:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "1713:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1713:12:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1677:5:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1702:5:2" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "1684:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1684:24:2" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "1674:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "1674:35:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1667:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "1667:43:2" + }, + "nodeType": "YulIf", + "src": "1664:63:2" + } + ] + }, + "name": "validator_revert_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1647:5:2", + "type": "" + } + ], + "src": "1611:122:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1791:87:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1801:29:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1823:6:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "1810:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "1810:20:2" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1801:5:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1866:5:2" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "1839:26:2" + }, + "nodeType": "YulFunctionCall", + "src": "1839:33:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1839:33:2" + } + ] + }, + "name": "abi_decode_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1769:6:2", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1777:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1785:5:2", + "type": "" + } + ], + "src": "1739:139:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1950:263:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1996:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1998:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "1998:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1998:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1971:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1980:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1967:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1967:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1992:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1963:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1963:32:2" + }, + "nodeType": "YulIf", + "src": "1960:119:2" + }, + { + "nodeType": "YulBlock", + "src": "2089:117:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2104:15:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2118:1:2", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2108:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2133:63:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2168:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2179:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2164:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2164:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2188:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "2143:20:2" + }, + "nodeType": "YulFunctionCall", + "src": "2143:53:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2133:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1920:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "1931:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1943:6:2", + "type": "" + } + ], + "src": "1884:329:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2269:56:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2303:16:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2312:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2315:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2305:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "2305:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "2305:12:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2292:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2299:1:2", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "2289:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "2289:12:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "2282:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "2282:20:2" + }, + "nodeType": "YulIf", + "src": "2279:40:2" + } + ] + }, + "name": "validator_revert_t_enum$_Side_$96", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2262:5:2", + "type": "" + } + ], + "src": "2219:106:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2390:94:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2400:29:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2422:6:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "2409:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "2409:20:2" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2400:5:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2472:5:2" + } + ], + "functionName": { + "name": "validator_revert_t_enum$_Side_$96", + "nodeType": "YulIdentifier", + "src": "2438:33:2" + }, + "nodeType": "YulFunctionCall", + "src": "2438:40:2" + }, + "nodeType": "YulExpressionStatement", + "src": "2438:40:2" + } + ] + }, + "name": "abi_decode_t_enum$_Side_$96", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2368:6:2", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2376:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2384:5:2", + "type": "" + } + ], + "src": "2331:153:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2597:526:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2643:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "2645:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "2645:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "2645:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2618:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2627:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "2614:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2614:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2639:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2610:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2610:32:2" + }, + "nodeType": "YulIf", + "src": "2607:119:2" + }, + { + "nodeType": "YulBlock", + "src": "2736:117:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2751:15:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2765:1:2", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2755:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2780:63:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2815:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2826:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2811:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2811:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2835:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "2790:20:2" + }, + "nodeType": "YulFunctionCall", + "src": "2790:53:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2780:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "2863:118:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2878:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2892:2:2", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2882:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2908:63:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2943:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2954:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2939:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2939:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2963:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "2918:20:2" + }, + "nodeType": "YulFunctionCall", + "src": "2918:53:2" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "2908:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "2991:125:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "3006:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3020:2:2", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "3010:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3036:70:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3078:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3089:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3074:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3074:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "3098:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Side_$96", + "nodeType": "YulIdentifier", + "src": "3046:27:2" + }, + "nodeType": "YulFunctionCall", + "src": "3046:60:2" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "3036:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint256t_enum$_Side_$96", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "2551:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "2562:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "2574:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "2582:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "2590:6:2", + "type": "" + } + ], + "src": "2490:633:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3194:53:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3211:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3234:5:2" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "3216:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "3216:24:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3204:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "3204:37:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3204:37:2" + } + ] + }, + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3182:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "3189:3:2", + "type": "" + } + ], + "src": "3129:118:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3281:152:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3298:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3301:77:2", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3291:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "3291:88:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3291:88:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3395:1:2", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3398:4:2", + "type": "", + "value": "0x21" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3388:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "3388:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3388:15:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3419:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3422:4:2", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3412:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "3412:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3412:15:2" + } + ] + }, + "name": "panic_error_0x21", + "nodeType": "YulFunctionDefinition", + "src": "3253:180:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3489:62:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3523:22:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x21", + "nodeType": "YulIdentifier", + "src": "3525:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "3525:18:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3525:18:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3512:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3519:1:2", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "3509:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "3509:12:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "3502:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "3502:20:2" + }, + "nodeType": "YulIf", + "src": "3499:46:2" + } + ] + }, + "name": "validator_assert_t_enum$_Side_$96", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3482:5:2", + "type": "" + } + ], + "src": "3439:112:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3609:73:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3619:16:2", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3630:5:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "3619:7:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3670:5:2" + } + ], + "functionName": { + "name": "validator_assert_t_enum$_Side_$96", + "nodeType": "YulIdentifier", + "src": "3636:33:2" + }, + "nodeType": "YulFunctionCall", + "src": "3636:40:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3636:40:2" + } + ] + }, + "name": "cleanup_t_enum$_Side_$96", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3591:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "3601:7:2", + "type": "" + } + ], + "src": "3557:125:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3753:60:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3763:44:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3801:5:2" + } + ], + "functionName": { + "name": "cleanup_t_enum$_Side_$96", + "nodeType": "YulIdentifier", + "src": "3776:24:2" + }, + "nodeType": "YulFunctionCall", + "src": "3776:31:2" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "3763:9:2" + } + ] + } + ] + }, + "name": "convert_t_enum$_Side_$96_to_t_uint8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3733:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "3743:9:2", + "type": "" + } + ], + "src": "3688:125:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3889:71:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3906:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3947:5:2" + } + ], + "functionName": { + "name": "convert_t_enum$_Side_$96_to_t_uint8", + "nodeType": "YulIdentifier", + "src": "3911:35:2" + }, + "nodeType": "YulFunctionCall", + "src": "3911:42:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3899:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "3899:55:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3899:55:2" + } + ] + }, + "name": "abi_encode_t_enum$_Side_$96_to_t_uint8_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3877:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "3884:3:2", + "type": "" + } + ], + "src": "3819:141:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4153:376:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4163:27:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4175:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4186:3:2", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4171:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "4171:19:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "4163:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "4244:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4257:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4268:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4253:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "4253:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "4200:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "4200:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "4200:71:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "4325:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4338:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4349:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4334:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "4334:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "4281:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "4281:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "4281:72:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "4407:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4420:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4431:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4416:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "4416:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "4363:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "4363:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "4363:72:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "4494:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4507:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4518:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4503:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "4503:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_enum$_Side_$96_to_t_uint8_fromStack", + "nodeType": "YulIdentifier", + "src": "4445:48:2" + }, + "nodeType": "YulFunctionCall", + "src": "4445:77:2" + }, + "nodeType": "YulExpressionStatement", + "src": "4445:77:2" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256_t_uint256_t_enum$_Side_$96__to_t_address_t_uint256_t_uint256_t_uint8__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "4101:9:2", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "4113:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "4121:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "4129:6:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "4137:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "4148:4:2", + "type": "" + } + ], + "src": "3966:563:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4567:28:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4577:12:2", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4584:5:2" + }, + "variableNames": [ + { + "name": "ret", + "nodeType": "YulIdentifier", + "src": "4577:3:2" + } + ] + } + ] + }, + "name": "identity", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "4553:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "ret", + "nodeType": "YulTypedName", + "src": "4563:3:2", + "type": "" + } + ], + "src": "4535:60:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4661:82:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4671:66:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4729:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "4711:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "4711:24:2" + } + ], + "functionName": { + "name": "identity", + "nodeType": "YulIdentifier", + "src": "4702:8:2" + }, + "nodeType": "YulFunctionCall", + "src": "4702:34:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "4684:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "4684:53:2" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "4671:9:2" + } + ] + } + ] + }, + "name": "convert_t_uint160_to_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "4641:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "4651:9:2", + "type": "" + } + ], + "src": "4601:142:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4809:66:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4819:50:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4863:5:2" + } + ], + "functionName": { + "name": "convert_t_uint160_to_t_uint160", + "nodeType": "YulIdentifier", + "src": "4832:30:2" + }, + "nodeType": "YulFunctionCall", + "src": "4832:37:2" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "4819:9:2" + } + ] + } + ] + }, + "name": "convert_t_uint160_to_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "4789:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "4799:9:2", + "type": "" + } + ], + "src": "4749:126:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4954:66:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4964:50:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5008:5:2" + } + ], + "functionName": { + "name": "convert_t_uint160_to_t_address", + "nodeType": "YulIdentifier", + "src": "4977:30:2" + }, + "nodeType": "YulFunctionCall", + "src": "4977:37:2" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "4964:9:2" + } + ] + } + ] + }, + "name": "convert_t_contract$_IXRC20_$77_to_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "4934:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "4944:9:2", + "type": "" + } + ], + "src": "4881:139:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5104:79:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5121:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5170:5:2" + } + ], + "functionName": { + "name": "convert_t_contract$_IXRC20_$77_to_t_address", + "nodeType": "YulIdentifier", + "src": "5126:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "5126:50:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5114:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "5114:63:2" + }, + "nodeType": "YulExpressionStatement", + "src": "5114:63:2" + } + ] + }, + "name": "abi_encode_t_contract$_IXRC20_$77_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5092:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "5099:3:2", + "type": "" + } + ], + "src": "5026:157:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5300:137:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5310:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5322:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5333:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5318:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "5318:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "5310:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "5403:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5416:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5427:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5412:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "5412:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_contract$_IXRC20_$77_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "5346:56:2" + }, + "nodeType": "YulFunctionCall", + "src": "5346:84:2" + }, + "nodeType": "YulExpressionStatement", + "src": "5346:84:2" + } + ] + }, + "name": "abi_encode_tuple_t_contract$_IXRC20_$77__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "5272:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "5284:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "5295:4:2", + "type": "" + } + ], + "src": "5189:248:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5541:124:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5551:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5563:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5574:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5559:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "5559:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "5551:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "5631:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5644:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5655:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5640:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "5640:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "5587:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "5587:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "5587:71:2" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "5513:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "5525:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "5536:4:2", + "type": "" + } + ], + "src": "5443:222:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5767:73:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5784:3:2" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5789:6:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5777:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "5777:19:2" + }, + "nodeType": "YulExpressionStatement", + "src": "5777:19:2" + }, + { + "nodeType": "YulAssignment", + "src": "5805:29:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5824:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5829:4:2", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5820:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "5820:14:2" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "5805:11:2" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "5739:3:2", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "5744:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "5755:11:2", + "type": "" + } + ], + "src": "5671:169:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5952:114:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "5974:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5982:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5970:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "5970:14:2" + }, + { + "hexValue": "4f6e6c792061646d696e2063616e2075706461746520696e6465782070726963", + "kind": "string", + "nodeType": "YulLiteral", + "src": "5986:34:2", + "type": "", + "value": "Only admin can update index pric" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5963:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "5963:58:2" + }, + "nodeType": "YulExpressionStatement", + "src": "5963:58:2" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "6042:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6050:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6038:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "6038:15:2" + }, + { + "hexValue": "65", + "kind": "string", + "nodeType": "YulLiteral", + "src": "6055:3:2", + "type": "", + "value": "e" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6031:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "6031:28:2" + }, + "nodeType": "YulExpressionStatement", + "src": "6031:28:2" + } + ] + }, + "name": "store_literal_in_memory_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "5944:6:2", + "type": "" + } + ], + "src": "5846:220:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6218:220:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6228:74:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6294:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6299:2:2", + "type": "", + "value": "33" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "6235:58:2" + }, + "nodeType": "YulFunctionCall", + "src": "6235:67:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6228:3:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6400:3:2" + } + ], + "functionName": { + "name": "store_literal_in_memory_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259", + "nodeType": "YulIdentifier", + "src": "6311:88:2" + }, + "nodeType": "YulFunctionCall", + "src": "6311:93:2" + }, + "nodeType": "YulExpressionStatement", + "src": "6311:93:2" + }, + { + "nodeType": "YulAssignment", + "src": "6413:19:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6424:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6429:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6420:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "6420:12:2" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "6413:3:2" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "6206:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "6214:3:2", + "type": "" + } + ], + "src": "6072:366:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6615:248:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6625:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6637:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6648:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6633:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "6633:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "6625:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6672:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6683:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6668:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "6668:17:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "6691:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6697:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "6687:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "6687:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6661:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "6661:47:2" + }, + "nodeType": "YulExpressionStatement", + "src": "6661:47:2" + }, + { + "nodeType": "YulAssignment", + "src": "6717:139:2", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "6851:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "6725:124:2" + }, + "nodeType": "YulFunctionCall", + "src": "6725:131:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "6717:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "6595:9:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "6610:4:2", + "type": "" + } + ], + "src": "6444:419:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6897:152:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6914:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6917:77:2", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6907:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "6907:88:2" + }, + "nodeType": "YulExpressionStatement", + "src": "6907:88:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7011:1:2", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7014:4:2", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7004:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "7004:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "7004:15:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7035:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7038:4:2", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7028:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "7028:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "7028:15:2" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "6869:180:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7100:149:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7110:25:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "7133:1:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "7115:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "7115:20:2" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "7110:1:2" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "7144:25:2", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "7167:1:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "7149:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "7149:20:2" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "7144:1:2" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "7178:17:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "7190:1:2" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "7193:1:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "7186:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "7186:9:2" + }, + "variableNames": [ + { + "name": "diff", + "nodeType": "YulIdentifier", + "src": "7178:4:2" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7220:22:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "7222:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "7222:18:2" + }, + "nodeType": "YulExpressionStatement", + "src": "7222:18:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "diff", + "nodeType": "YulIdentifier", + "src": "7211:4:2" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "7217:1:2" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "7208:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "7208:11:2" + }, + "nodeType": "YulIf", + "src": "7205:37:2" + } + ] + }, + "name": "checked_sub_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "7086:1:2", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "7089:1:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "diff", + "nodeType": "YulTypedName", + "src": "7095:4:2", + "type": "" + } + ], + "src": "7055:194:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7361:71:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "7383:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7391:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7379:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "7379:14:2" + }, + { + "hexValue": "53697a65206d7573742062652067726561746572207468616e2030", + "kind": "string", + "nodeType": "YulLiteral", + "src": "7395:29:2", + "type": "", + "value": "Size must be greater than 0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7372:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "7372:53:2" + }, + "nodeType": "YulExpressionStatement", + "src": "7372:53:2" + } + ] + }, + "name": "store_literal_in_memory_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "7353:6:2", + "type": "" + } + ], + "src": "7255:177:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7584:220:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7594:74:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7660:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7665:2:2", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "7601:58:2" + }, + "nodeType": "YulFunctionCall", + "src": "7601:67:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7594:3:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7766:3:2" + } + ], + "functionName": { + "name": "store_literal_in_memory_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83", + "nodeType": "YulIdentifier", + "src": "7677:88:2" + }, + "nodeType": "YulFunctionCall", + "src": "7677:93:2" + }, + "nodeType": "YulExpressionStatement", + "src": "7677:93:2" + }, + { + "nodeType": "YulAssignment", + "src": "7779:19:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7790:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7795:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7786:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "7786:12:2" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "7779:3:2" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "7572:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "7580:3:2", + "type": "" + } + ], + "src": "7438:366:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7981:248:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7991:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8003:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8014:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7999:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "7999:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "7991:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8038:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8049:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8034:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "8034:17:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "8057:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8063:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "8053:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "8053:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8027:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "8027:47:2" + }, + "nodeType": "YulExpressionStatement", + "src": "8027:47:2" + }, + { + "nodeType": "YulAssignment", + "src": "8083:139:2", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "8217:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "8091:124:2" + }, + "nodeType": "YulFunctionCall", + "src": "8091:131:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "8083:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "7961:9:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "7976:4:2", + "type": "" + } + ], + "src": "7810:419:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8341:115:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "8363:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8371:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8359:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "8359:14:2" + }, + { + "hexValue": "456e747279207072696365206d7573742062652067726561746572207468616e", + "kind": "string", + "nodeType": "YulLiteral", + "src": "8375:34:2", + "type": "", + "value": "Entry price must be greater than" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8352:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "8352:58:2" + }, + "nodeType": "YulExpressionStatement", + "src": "8352:58:2" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "8431:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8439:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8427:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "8427:15:2" + }, + { + "hexValue": "2030", + "kind": "string", + "nodeType": "YulLiteral", + "src": "8444:4:2", + "type": "", + "value": " 0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8420:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "8420:29:2" + }, + "nodeType": "YulExpressionStatement", + "src": "8420:29:2" + } + ] + }, + "name": "store_literal_in_memory_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "8333:6:2", + "type": "" + } + ], + "src": "8235:221:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8608:220:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "8618:74:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "8684:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8689:2:2", + "type": "", + "value": "34" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "8625:58:2" + }, + "nodeType": "YulFunctionCall", + "src": "8625:67:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "8618:3:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "8790:3:2" + } + ], + "functionName": { + "name": "store_literal_in_memory_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd", + "nodeType": "YulIdentifier", + "src": "8701:88:2" + }, + "nodeType": "YulFunctionCall", + "src": "8701:93:2" + }, + "nodeType": "YulExpressionStatement", + "src": "8701:93:2" + }, + { + "nodeType": "YulAssignment", + "src": "8803:19:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "8814:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8819:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8810:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "8810:12:2" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "8803:3:2" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "8596:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "8604:3:2", + "type": "" + } + ], + "src": "8462:366:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9005:248:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9015:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9027:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9038:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9023:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "9023:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "9015:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9062:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9073:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9058:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "9058:17:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "9081:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9087:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "9077:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "9077:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9051:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "9051:47:2" + }, + "nodeType": "YulExpressionStatement", + "src": "9051:47:2" + }, + { + "nodeType": "YulAssignment", + "src": "9107:139:2", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "9241:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "9115:124:2" + }, + "nodeType": "YulFunctionCall", + "src": "9115:131:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "9107:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "8985:9:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "9000:4:2", + "type": "" + } + ], + "src": "8834:419:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9365:56:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "9387:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9395:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9383:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "9383:14:2" + }, + { + "hexValue": "496e76616c69642073696465", + "kind": "string", + "nodeType": "YulLiteral", + "src": "9399:14:2", + "type": "", + "value": "Invalid side" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9376:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "9376:38:2" + }, + "nodeType": "YulExpressionStatement", + "src": "9376:38:2" + } + ] + }, + "name": "store_literal_in_memory_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "9357:6:2", + "type": "" + } + ], + "src": "9259:162:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9573:220:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9583:74:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "9649:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9654:2:2", + "type": "", + "value": "12" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "9590:58:2" + }, + "nodeType": "YulFunctionCall", + "src": "9590:67:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "9583:3:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "9755:3:2" + } + ], + "functionName": { + "name": "store_literal_in_memory_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda", + "nodeType": "YulIdentifier", + "src": "9666:88:2" + }, + "nodeType": "YulFunctionCall", + "src": "9666:93:2" + }, + "nodeType": "YulExpressionStatement", + "src": "9666:93:2" + }, + { + "nodeType": "YulAssignment", + "src": "9768:19:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "9779:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9784:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9775:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "9775:12:2" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "9768:3:2" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "9561:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "9569:3:2", + "type": "" + } + ], + "src": "9427:366:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9970:248:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9980:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9992:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10003:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9988:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "9988:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "9980:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "10027:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10038:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10023:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "10023:17:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "10046:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "10052:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "10042:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "10042:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10016:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "10016:47:2" + }, + "nodeType": "YulExpressionStatement", + "src": "10016:47:2" + }, + { + "nodeType": "YulAssignment", + "src": "10072:139:2", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "10206:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "10080:124:2" + }, + "nodeType": "YulFunctionCall", + "src": "10080:131:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "10072:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "9950:9:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "9965:4:2", + "type": "" + } + ], + "src": "9799:419:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10272:362:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "10282:25:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10305:1:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "10287:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "10287:20:2" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10282:1:2" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10316:25:2", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10339:1:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "10321:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "10321:20:2" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10316:1:2" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10350:28:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10373:1:2" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10376:1:2" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "10369:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "10369:9:2" + }, + "variables": [ + { + "name": "product_raw", + "nodeType": "YulTypedName", + "src": "10354:11:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10387:41:2", + "value": { + "arguments": [ + { + "name": "product_raw", + "nodeType": "YulIdentifier", + "src": "10416:11:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "10398:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "10398:30:2" + }, + "variableNames": [ + { + "name": "product", + "nodeType": "YulIdentifier", + "src": "10387:7:2" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10605:22:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "10607:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "10607:18:2" + }, + "nodeType": "YulExpressionStatement", + "src": "10607:18:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10538:1:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "10531:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "10531:9:2" + }, + { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10561:1:2" + }, + { + "arguments": [ + { + "name": "product", + "nodeType": "YulIdentifier", + "src": "10568:7:2" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10577:1:2" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "10564:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "10564:15:2" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "10558:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "10558:22:2" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "10511:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "10511:83:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "10491:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "10491:113:2" + }, + "nodeType": "YulIf", + "src": "10488:139:2" + } + ] + }, + "name": "checked_mul_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "10255:1:2", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "10258:1:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "product", + "nodeType": "YulTypedName", + "src": "10264:7:2", + "type": "" + } + ], + "src": "10224:410:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10668:152:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10685:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10688:77:2", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10678:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "10678:88:2" + }, + "nodeType": "YulExpressionStatement", + "src": "10678:88:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10782:1:2", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10785:4:2", + "type": "", + "value": "0x12" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10775:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "10775:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "10775:15:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10806:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10809:4:2", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10799:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "10799:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "10799:15:2" + } + ] + }, + "name": "panic_error_0x12", + "nodeType": "YulFunctionDefinition", + "src": "10640:180:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10868:143:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "10878:25:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10901:1:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "10883:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "10883:20:2" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10878:1:2" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10912:25:2", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10935:1:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "10917:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "10917:20:2" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10912:1:2" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10959:22:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x12", + "nodeType": "YulIdentifier", + "src": "10961:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "10961:18:2" + }, + "nodeType": "YulExpressionStatement", + "src": "10961:18:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10956:1:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "10949:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "10949:9:2" + }, + "nodeType": "YulIf", + "src": "10946:35:2" + }, + { + "nodeType": "YulAssignment", + "src": "10991:14:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "11000:1:2" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "11003:1:2" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "10996:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "10996:9:2" + }, + "variableNames": [ + { + "name": "r", + "nodeType": "YulIdentifier", + "src": "10991:1:2" + } + ] + } + ] + }, + "name": "checked_div_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "10857:1:2", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "10860:1:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "r", + "nodeType": "YulTypedName", + "src": "10866:1:2", + "type": "" + } + ], + "src": "10826:185:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11123:67:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "11145:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11153:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11141:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "11141:14:2" + }, + { + "hexValue": "496e73756666696369656e7420636f6c6c61746572616c", + "kind": "string", + "nodeType": "YulLiteral", + "src": "11157:25:2", + "type": "", + "value": "Insufficient collateral" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11134:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "11134:49:2" + }, + "nodeType": "YulExpressionStatement", + "src": "11134:49:2" + } + ] + }, + "name": "store_literal_in_memory_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "11115:6:2", + "type": "" + } + ], + "src": "11017:173:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11342:220:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11352:74:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11418:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11423:2:2", + "type": "", + "value": "23" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "11359:58:2" + }, + "nodeType": "YulFunctionCall", + "src": "11359:67:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11352:3:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11524:3:2" + } + ], + "functionName": { + "name": "store_literal_in_memory_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa", + "nodeType": "YulIdentifier", + "src": "11435:88:2" + }, + "nodeType": "YulFunctionCall", + "src": "11435:93:2" + }, + "nodeType": "YulExpressionStatement", + "src": "11435:93:2" + }, + { + "nodeType": "YulAssignment", + "src": "11537:19:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11548:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11553:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11544:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "11544:12:2" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "11537:3:2" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "11330:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "11338:3:2", + "type": "" + } + ], + "src": "11196:366:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11739:248:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11749:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11761:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11772:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11757:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "11757:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "11749:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11796:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11807:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11792:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "11792:17:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "11815:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11821:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "11811:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "11811:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11785:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "11785:47:2" + }, + "nodeType": "YulExpressionStatement", + "src": "11785:47:2" + }, + { + "nodeType": "YulAssignment", + "src": "11841:139:2", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "11975:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "11849:124:2" + }, + "nodeType": "YulFunctionCall", + "src": "11849:131:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "11841:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "11719:9:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "11734:4:2", + "type": "" + } + ], + "src": "11568:419:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12180:376:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "12190:27:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12202:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12213:3:2", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12198:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "12198:19:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "12190:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "12271:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12284:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12295:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12280:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "12280:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "12227:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "12227:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "12227:71:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "12352:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12365:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12376:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12361:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "12361:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "12308:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "12308:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "12308:72:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "12434:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12447:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12458:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12443:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "12443:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "12390:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "12390:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "12390:72:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "12521:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12534:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12545:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12530:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "12530:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_enum$_Side_$96_to_t_uint8_fromStack", + "nodeType": "YulIdentifier", + "src": "12472:48:2" + }, + "nodeType": "YulFunctionCall", + "src": "12472:77:2" + }, + "nodeType": "YulExpressionStatement", + "src": "12472:77:2" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_enum$_Side_$96__to_t_uint256_t_uint256_t_uint256_t_uint8__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "12128:9:2", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "12140:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "12148:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "12156:6:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "12164:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "12175:4:2", + "type": "" + } + ], + "src": "11993:563:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12668:67:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "12690:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12698:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12686:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "12686:14:2" + }, + { + "hexValue": "506f736974696f6e20646f6573206e6f74206578697374", + "kind": "string", + "nodeType": "YulLiteral", + "src": "12702:25:2", + "type": "", + "value": "Position does not exist" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12679:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "12679:49:2" + }, + "nodeType": "YulExpressionStatement", + "src": "12679:49:2" + } + ] + }, + "name": "store_literal_in_memory_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "12660:6:2", + "type": "" + } + ], + "src": "12562:173:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12887:220:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "12897:74:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12963:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12968:2:2", + "type": "", + "value": "23" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "12904:58:2" + }, + "nodeType": "YulFunctionCall", + "src": "12904:67:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12897:3:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13069:3:2" + } + ], + "functionName": { + "name": "store_literal_in_memory_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c", + "nodeType": "YulIdentifier", + "src": "12980:88:2" + }, + "nodeType": "YulFunctionCall", + "src": "12980:93:2" + }, + "nodeType": "YulExpressionStatement", + "src": "12980:93:2" + }, + { + "nodeType": "YulAssignment", + "src": "13082:19:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13093:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13098:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13089:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "13089:12:2" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "13082:3:2" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "12875:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "12883:3:2", + "type": "" + } + ], + "src": "12741:366:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13284:248:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "13294:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13306:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13317:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13302:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "13302:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13294:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13341:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13352:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13337:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "13337:17:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13360:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13366:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "13356:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "13356:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13330:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "13330:47:2" + }, + "nodeType": "YulExpressionStatement", + "src": "13330:47:2" + }, + { + "nodeType": "YulAssignment", + "src": "13386:139:2", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13520:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "13394:124:2" + }, + "nodeType": "YulFunctionCall", + "src": "13394:131:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13386:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "13264:9:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "13279:4:2", + "type": "" + } + ], + "src": "13113:419:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13566:152:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13583:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13586:77:2", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13576:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "13576:88:2" + }, + "nodeType": "YulExpressionStatement", + "src": "13576:88:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13680:1:2", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13683:4:2", + "type": "", + "value": "0x32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13673:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "13673:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "13673:15:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13704:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13707:4:2", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "13697:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "13697:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "13697:15:2" + } + ] + }, + "name": "panic_error_0x32", + "nodeType": "YulFunctionDefinition", + "src": "13538:180:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13830:118:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "13852:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13860:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13848:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "13848:14:2" + }, + { + "hexValue": "4f6e6c7920746865206f776e65722063616e20636c6f73652074686520706f73", + "kind": "string", + "nodeType": "YulLiteral", + "src": "13864:34:2", + "type": "", + "value": "Only the owner can close the pos" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13841:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "13841:58:2" + }, + "nodeType": "YulExpressionStatement", + "src": "13841:58:2" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "13920:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13928:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13916:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "13916:15:2" + }, + { + "hexValue": "6974696f6e", + "kind": "string", + "nodeType": "YulLiteral", + "src": "13933:7:2", + "type": "", + "value": "ition" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13909:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "13909:32:2" + }, + "nodeType": "YulExpressionStatement", + "src": "13909:32:2" + } + ] + }, + "name": "store_literal_in_memory_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "13822:6:2", + "type": "" + } + ], + "src": "13724:224:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14100:220:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "14110:74:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "14176:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14181:2:2", + "type": "", + "value": "37" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "14117:58:2" + }, + "nodeType": "YulFunctionCall", + "src": "14117:67:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "14110:3:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "14282:3:2" + } + ], + "functionName": { + "name": "store_literal_in_memory_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126", + "nodeType": "YulIdentifier", + "src": "14193:88:2" + }, + "nodeType": "YulFunctionCall", + "src": "14193:93:2" + }, + "nodeType": "YulExpressionStatement", + "src": "14193:93:2" + }, + { + "nodeType": "YulAssignment", + "src": "14295:19:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "14306:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14311:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14302:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "14302:12:2" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "14295:3:2" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "14088:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "14096:3:2", + "type": "" + } + ], + "src": "13954:366:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14497:248:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "14507:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14519:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14530:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14515:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "14515:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "14507:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14554:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14565:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14550:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "14550:17:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "14573:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14579:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "14569:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "14569:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14543:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "14543:47:2" + }, + "nodeType": "YulExpressionStatement", + "src": "14543:47:2" + }, + { + "nodeType": "YulAssignment", + "src": "14599:139:2", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "14733:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "14607:124:2" + }, + "nodeType": "YulFunctionCall", + "src": "14607:131:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "14599:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "14477:9:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "14492:4:2", + "type": "" + } + ], + "src": "14326:419:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14795:147:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "14805:25:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "14828:1:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "14810:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "14810:20:2" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "14805:1:2" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "14839:25:2", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "14862:1:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "14844:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "14844:20:2" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "14839:1:2" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "14873:16:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "14884:1:2" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "14887:1:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14880:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "14880:9:2" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "14873:3:2" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14913:22:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "14915:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "14915:18:2" + }, + "nodeType": "YulExpressionStatement", + "src": "14915:18:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "14905:1:2" + }, + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "14908:3:2" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "14902:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "14902:10:2" + }, + "nodeType": "YulIf", + "src": "14899:36:2" + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "14782:1:2", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "14785:1:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "14791:3:2", + "type": "" + } + ], + "src": "14751:191:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15163:459:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "15173:27:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15185:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15196:3:2", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15181:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "15181:19:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "15173:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "15254:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15267:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15278:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15263:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "15263:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "15210:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "15210:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "15210:71:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "15335:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15348:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15359:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15344:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "15344:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "15291:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "15291:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "15291:72:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "15417:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15430:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15441:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15426:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "15426:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "15373:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "15373:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "15373:72:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "15504:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15517:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15528:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15513:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "15513:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_enum$_Side_$96_to_t_uint8_fromStack", + "nodeType": "YulIdentifier", + "src": "15455:48:2" + }, + "nodeType": "YulFunctionCall", + "src": "15455:77:2" + }, + "nodeType": "YulExpressionStatement", + "src": "15455:77:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "15586:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15599:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15610:3:2", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15595:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "15595:19:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "15542:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "15542:73:2" + }, + "nodeType": "YulExpressionStatement", + "src": "15542:73:2" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_enum$_Side_$96_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint8_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "15103:9:2", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "15115:6:2", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "15123:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "15131:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "15139:6:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "15147:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "15158:4:2", + "type": "" + } + ], + "src": "14948:674:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15656:152:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15673:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15676:77:2", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15666:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "15666:88:2" + }, + "nodeType": "YulExpressionStatement", + "src": "15666:88:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15770:1:2", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15773:4:2", + "type": "", + "value": "0x31" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15763:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "15763:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "15763:15:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15794:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15797:4:2", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "15787:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "15787:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "15787:15:2" + } + ] + }, + "name": "panic_error_0x31", + "nodeType": "YulFunctionDefinition", + "src": "15628:180:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15920:76:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "15942:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15950:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15938:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "15938:14:2" + }, + { + "hexValue": "4e6f742074696d6520666f722066756e64696e67207061796d656e7420796574", + "kind": "string", + "nodeType": "YulLiteral", + "src": "15954:34:2", + "type": "", + "value": "Not time for funding payment yet" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15931:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "15931:58:2" + }, + "nodeType": "YulExpressionStatement", + "src": "15931:58:2" + } + ] + }, + "name": "store_literal_in_memory_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "15912:6:2", + "type": "" + } + ], + "src": "15814:182:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16148:220:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "16158:74:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "16224:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16229:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "16165:58:2" + }, + "nodeType": "YulFunctionCall", + "src": "16165:67:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "16158:3:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "16330:3:2" + } + ], + "functionName": { + "name": "store_literal_in_memory_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d", + "nodeType": "YulIdentifier", + "src": "16241:88:2" + }, + "nodeType": "YulFunctionCall", + "src": "16241:93:2" + }, + "nodeType": "YulExpressionStatement", + "src": "16241:93:2" + }, + { + "nodeType": "YulAssignment", + "src": "16343:19:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "16354:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16359:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16350:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "16350:12:2" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "16343:3:2" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "16136:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "16144:3:2", + "type": "" + } + ], + "src": "16002:366:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16545:248:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "16555:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16567:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16578:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16563:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "16563:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "16555:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16602:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16613:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16598:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "16598:17:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "16621:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16627:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "16617:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "16617:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16591:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "16591:47:2" + }, + "nodeType": "YulExpressionStatement", + "src": "16591:47:2" + }, + { + "nodeType": "YulAssignment", + "src": "16647:139:2", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "16781:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "16655:124:2" + }, + "nodeType": "YulFunctionCall", + "src": "16655:131:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "16647:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "16525:9:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "16540:4:2", + "type": "" + } + ], + "src": "16374:419:2" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function validator_revert_t_enum$_Side_$96(value) {\n if iszero(lt(value, 2)) { revert(0, 0) }\n }\n\n function abi_decode_t_enum$_Side_$96(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_enum$_Side_$96(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256t_enum$_Side_$96(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_enum$_Side_$96(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function panic_error_0x21() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n\n function validator_assert_t_enum$_Side_$96(value) {\n if iszero(lt(value, 2)) { panic_error_0x21() }\n }\n\n function cleanup_t_enum$_Side_$96(value) -> cleaned {\n cleaned := value validator_assert_t_enum$_Side_$96(value)\n }\n\n function convert_t_enum$_Side_$96_to_t_uint8(value) -> converted {\n converted := cleanup_t_enum$_Side_$96(value)\n }\n\n function abi_encode_t_enum$_Side_$96_to_t_uint8_fromStack(value, pos) {\n mstore(pos, convert_t_enum$_Side_$96_to_t_uint8(value))\n }\n\n function abi_encode_tuple_t_address_t_uint256_t_uint256_t_enum$_Side_$96__to_t_address_t_uint256_t_uint256_t_uint8__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n abi_encode_t_enum$_Side_$96_to_t_uint8_fromStack(value3, add(headStart, 96))\n\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_IXRC20_$77_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_IXRC20_$77_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_IXRC20_$77_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_IXRC20_$77__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_IXRC20_$77_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259(memPtr) {\n\n mstore(add(memPtr, 0), \"Only admin can update index pric\")\n\n mstore(add(memPtr, 32), \"e\")\n\n }\n\n function abi_encode_t_stringliteral_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 33)\n store_literal_in_memory_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_sub_t_uint256(x, y) -> diff {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n diff := sub(x, y)\n\n if gt(diff, x) { panic_error_0x11() }\n\n }\n\n function store_literal_in_memory_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83(memPtr) {\n\n mstore(add(memPtr, 0), \"Size must be greater than 0\")\n\n }\n\n function abi_encode_t_stringliteral_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 27)\n store_literal_in_memory_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd(memPtr) {\n\n mstore(add(memPtr, 0), \"Entry price must be greater than\")\n\n mstore(add(memPtr, 32), \" 0\")\n\n }\n\n function abi_encode_t_stringliteral_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n store_literal_in_memory_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda(memPtr) {\n\n mstore(add(memPtr, 0), \"Invalid side\")\n\n }\n\n function abi_encode_t_stringliteral_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 12)\n store_literal_in_memory_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n let product_raw := mul(x, y)\n product := cleanup_t_uint256(product_raw)\n\n // overflow, if x != 0 and y != product/x\n if iszero(\n or(\n iszero(x),\n eq(y, div(product, x))\n )\n ) { panic_error_0x11() }\n\n }\n\n function panic_error_0x12() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n\n function checked_div_t_uint256(x, y) -> r {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n if iszero(y) { panic_error_0x12() }\n\n r := div(x, y)\n }\n\n function store_literal_in_memory_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa(memPtr) {\n\n mstore(add(memPtr, 0), \"Insufficient collateral\")\n\n }\n\n function abi_encode_t_stringliteral_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 23)\n store_literal_in_memory_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_enum$_Side_$96__to_t_uint256_t_uint256_t_uint256_t_uint8__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n abi_encode_t_enum$_Side_$96_to_t_uint8_fromStack(value3, add(headStart, 96))\n\n }\n\n function store_literal_in_memory_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c(memPtr) {\n\n mstore(add(memPtr, 0), \"Position does not exist\")\n\n }\n\n function abi_encode_t_stringliteral_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 23)\n store_literal_in_memory_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function panic_error_0x32() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n\n function store_literal_in_memory_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126(memPtr) {\n\n mstore(add(memPtr, 0), \"Only the owner can close the pos\")\n\n mstore(add(memPtr, 32), \"ition\")\n\n }\n\n function abi_encode_t_stringliteral_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n store_literal_in_memory_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n sum := add(x, y)\n\n if gt(x, sum) { panic_error_0x11() }\n\n }\n\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_enum$_Side_$96_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint8_t_uint256__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n abi_encode_t_enum$_Side_$96_to_t_uint8_fromStack(value3, add(headStart, 96))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value4, add(headStart, 128))\n\n }\n\n function panic_error_0x31() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x31)\n revert(0, 0x24)\n }\n\n function store_literal_in_memory_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d(memPtr) {\n\n mstore(add(memPtr, 0), \"Not time for funding payment yet\")\n\n }\n\n function abi_encode_t_stringliteral_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n store_literal_in_memory_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n}\n", + "id": 2, + "language": "Yul", + "name": "#utility.yul" + } + ], + "sourceMap": "87:4826:1:-:0;;;915:290;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;972:10;964:5;;:18;;;;;;;;;;;;;;;;;;1018:16;993:15;;:42;;;;;;;;;;;;;;;;;;1069:15;1046:20;:38;;;;1109:1;1095:11;:15;;;;1134:4;1121:10;:17;;;;1182:3;1172:7;:13;;;;915:290;87:4826;;88:117:2;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;;:::i;:::-;932:119;1090:1;1115:64;1171:7;1162:6;1151:9;1147:22;1115:64;:::i;:::-;1105:74;;1061:128;845:351;;;;:::o;87:4826:1:-;;;;;;;", + "deployedSourceMap": "87:4826:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3663:381;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;254:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;555:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;221:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1213:881;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;179:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;286:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;521:27;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;2102:979;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4493:417;;;:::i;:::-;;143:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;116:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3663:381;3749:5;;;;;;;;;;3735:19;;:10;:19;;;3727:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;3816:8;3803:10;:21;;;;3835:19;3875:20;;3857:15;:38;;;;:::i;:::-;3835:60;;3924:1;3910:11;:15;3906:131;;;3942:30;3960:11;3942:17;:30::i;:::-;4010:15;3987:20;:38;;;;3906:131;3716:328;3663:381;:::o;254:25::-;;;;:::o;555:53::-;;;;;;;;;;;;;;;;;:::o;221:26::-;;;;:::o;1213:881::-;1315:1;1308:4;:8;1300:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;1380:1;1367:10;:14;1359:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;1447:9;1439:17;;;;;;;;:::i;:::-;;:4;:17;;;;;;;;:::i;:::-;;;:39;;;;1468:10;1460:18;;;;;;;;:::i;:::-;;:4;:18;;;;;;;;:::i;:::-;;;1439:39;1431:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;1550:26;1614:4;1601:10;;1587;1580:4;:17;;;;:::i;:::-;1579:32;;;;:::i;:::-;:39;;;;:::i;:::-;1550:68;;1673:18;1639;:30;1658:10;1639:30;;;;;;;;;;;;;;;;:52;;1631:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:9;1747:141;;;;;;;;1779:10;1747:141;;;;;;1810:4;1747:141;;;;1841:10;1747:141;;;;1872:4;1747:141;;;;;;;;:::i;:::-;;;;;1732:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;1936:18;1902;:30;1921:10;1902:30;;;;;;;;;;;;;;;;:52;;;;;;;:::i;:::-;;;;;;;;1967:18;2007:1;1988:9;:16;;;;:20;;;;:::i;:::-;1967:41;;2039:10;2024:62;;;2051:10;2063:4;2069:10;2081:4;2024:62;;;;;;;;;:::i;:::-;;;;;;;;1289:805;;1213:881;;;:::o;179:35::-;;;;:::o;286:22::-;;;;:::o;521:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2102:979::-;2186:9;:16;;;;2173:10;:29;2165:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;2243:25;2271:9;2281:10;2271:21;;;;;;;;:::i;:::-;;;;;;;;;;;;2243:49;;2330:10;2311:29;;:8;:15;;;;;;;;;;;;:29;;;2303:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;2395:12;2410:8;:13;;;2395:28;;2434:18;2455:8;:19;;;2434:40;;2485:9;2497:8;:13;;;;;;;;;;;;2485:25;;2523:11;2537:34;2560:10;2537:22;:34::i;:::-;2523:48;;2584:11;2616:3;2605:7;;2599:3;:13;;;;:::i;:::-;2598:21;;;;:::i;:::-;2584:35;;2630:14;2653:3;2647;:9;;;;:::i;:::-;2630:26;;2738:4;2724:10;;2717:4;2704:10;:17;;;;:::i;:::-;:30;;;;:::i;:::-;2703:39;;;;:::i;:::-;2669:18;:30;2688:10;2669:30;;;;;;;;;;;;;;;;:73;;;;;;;:::i;:::-;;;;;;;;2782:3;2753:18;:25;2772:5;;;;;;;;;;;2753:25;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;2818:10;2803:70;;;2830:10;2842:4;2848:10;2860:4;2866:6;2803:70;;;;;;;;;;:::i;:::-;;;;;;;;3016:9;3045:1;3026:9;:16;;;;:20;;;;:::i;:::-;3016:31;;;;;;;;:::i;:::-;;;;;;;;;;;;2992:9;3002:10;2992:21;;;;;;;;:::i;:::-;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3058:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2154:927;;;;;;;2102:979;:::o;4493:417::-;4535:19;4575:20;;4557:15;:38;;;;:::i;:::-;4535:60;;4628:1;4614:11;:15;4606:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;4677:22;4751:5;4736:11;4722;;4703:9;:16;;;;:30;;;;:::i;:::-;:44;;;;:::i;:::-;4702:54;;;;:::i;:::-;4677:79;;4796:14;4767:18;:25;4786:5;;;;;;;;;;;4767:25;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;4826:27;4838:14;4826:27;;;;;;:::i;:::-;;;;;;;;4887:15;4864:20;:38;;;;4524:386;;4493:417::o;143:29::-;;;;;;;;;;;;;:::o;116:20::-;;;;;;;;;;;;:::o;4052:433::-;4467:10;;4453:11;4445:5;4437:4;4424:10;;:17;;;;:::i;:::-;4417:4;4404:10;;:17;;;;:::i;:::-;:37;;;;:::i;:::-;4403:47;;;;:::i;:::-;:61;;;;:::i;:::-;:74;;;;:::i;:::-;4389:11;:88;;;;4052:433;:::o;3089:566::-;3164:7;3184:25;3212:9;3222:10;3212:21;;;;;;;;:::i;:::-;;;;;;;;;;;;3184:49;;3244:12;3259:8;:13;;;3244:28;;3283:18;3304:8;:19;;;3283:40;;3334:9;3346:8;:13;;;;;;;;;;;;3334:25;;3372:20;3395:10;;3372:33;;3467:9;3459:17;;;;;;;;:::i;:::-;;:4;:17;;;;;;;;:::i;:::-;;;3455:193;;3544:4;3536;3523:10;:17;;;;:::i;:::-;3516:4;3501:12;:19;;;;:::i;:::-;:39;;;;:::i;:::-;3500:48;;;;:::i;:::-;3493:55;;;;;;;;;3455:193;3632:4;3624;3609:12;:19;;;;:::i;:::-;3602:4;3589:10;:17;;;;:::i;:::-;:39;;;;:::i;:::-;3588:48;;;;:::i;:::-;3581:55;;;;;;;3089:566;;;;:::o;88:117:2:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:222::-;1242:4;1280:2;1269:9;1265:18;1257:26;;1293:71;1361:1;1350:9;1346:17;1337:6;1293:71;:::i;:::-;1149:222;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:96::-;1546:7;1575:24;1593:5;1575:24;:::i;:::-;1564:35;;1509:96;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:329::-;1943:6;1992:2;1980:9;1971:7;1967:23;1963:32;1960:119;;;1998:79;;:::i;:::-;1960:119;2118:1;2143:53;2188:7;2179:6;2168:9;2164:22;2143:53;:::i;:::-;2133:63;;2089:117;1884:329;;;;:::o;2219:106::-;2299:1;2292:5;2289:12;2279:40;;2315:1;2312;2305:12;2279:40;2219:106;:::o;2331:153::-;2384:5;2422:6;2409:20;2400:29;;2438:40;2472:5;2438:40;:::i;:::-;2331:153;;;;:::o;2490:633::-;2574:6;2582;2590;2639:2;2627:9;2618:7;2614:23;2610:32;2607:119;;;2645:79;;:::i;:::-;2607:119;2765:1;2790:53;2835:7;2826:6;2815:9;2811:22;2790:53;:::i;:::-;2780:63;;2736:117;2892:2;2918:53;2963:7;2954:6;2943:9;2939:22;2918:53;:::i;:::-;2908:63;;2863:118;3020:2;3046:60;3098:7;3089:6;3078:9;3074:22;3046:60;:::i;:::-;3036:70;;2991:125;2490:633;;;;;:::o;3129:118::-;3216:24;3234:5;3216:24;:::i;:::-;3211:3;3204:37;3129:118;;:::o;3253:180::-;3301:77;3298:1;3291:88;3398:4;3395:1;3388:15;3422:4;3419:1;3412:15;3439:112;3519:1;3512:5;3509:12;3499:46;;3525:18;;:::i;:::-;3499:46;3439:112;:::o;3557:125::-;3601:7;3630:5;3619:16;;3636:40;3670:5;3636:40;:::i;:::-;3557:125;;;:::o;3688:::-;3743:9;3776:31;3801:5;3776:31;:::i;:::-;3763:44;;3688:125;;;:::o;3819:141::-;3911:42;3947:5;3911:42;:::i;:::-;3906:3;3899:55;3819:141;;:::o;3966:563::-;4148:4;4186:3;4175:9;4171:19;4163:27;;4200:71;4268:1;4257:9;4253:17;4244:6;4200:71;:::i;:::-;4281:72;4349:2;4338:9;4334:18;4325:6;4281:72;:::i;:::-;4363;4431:2;4420:9;4416:18;4407:6;4363:72;:::i;:::-;4445:77;4518:2;4507:9;4503:18;4494:6;4445:77;:::i;:::-;3966:563;;;;;;;:::o;4535:60::-;4563:3;4584:5;4577:12;;4535:60;;;:::o;4601:142::-;4651:9;4684:53;4702:34;4711:24;4729:5;4711:24;:::i;:::-;4702:34;:::i;:::-;4684:53;:::i;:::-;4671:66;;4601:142;;;:::o;4749:126::-;4799:9;4832:37;4863:5;4832:37;:::i;:::-;4819:50;;4749:126;;;:::o;4881:139::-;4944:9;4977:37;5008:5;4977:37;:::i;:::-;4964:50;;4881:139;;;:::o;5026:157::-;5126:50;5170:5;5126:50;:::i;:::-;5121:3;5114:63;5026:157;;:::o;5189:248::-;5295:4;5333:2;5322:9;5318:18;5310:26;;5346:84;5427:1;5416:9;5412:17;5403:6;5346:84;:::i;:::-;5189:248;;;;:::o;5443:222::-;5536:4;5574:2;5563:9;5559:18;5551:26;;5587:71;5655:1;5644:9;5640:17;5631:6;5587:71;:::i;:::-;5443:222;;;;:::o;5671:169::-;5755:11;5789:6;5784:3;5777:19;5829:4;5824:3;5820:14;5805:29;;5671:169;;;;:::o;5846:220::-;5986:34;5982:1;5974:6;5970:14;5963:58;6055:3;6050:2;6042:6;6038:15;6031:28;5846:220;:::o;6072:366::-;6214:3;6235:67;6299:2;6294:3;6235:67;:::i;:::-;6228:74;;6311:93;6400:3;6311:93;:::i;:::-;6429:2;6424:3;6420:12;6413:19;;6072:366;;;:::o;6444:419::-;6610:4;6648:2;6637:9;6633:18;6625:26;;6697:9;6691:4;6687:20;6683:1;6672:9;6668:17;6661:47;6725:131;6851:4;6725:131;:::i;:::-;6717:139;;6444:419;;;:::o;6869:180::-;6917:77;6914:1;6907:88;7014:4;7011:1;7004:15;7038:4;7035:1;7028:15;7055:194;7095:4;7115:20;7133:1;7115:20;:::i;:::-;7110:25;;7149:20;7167:1;7149:20;:::i;:::-;7144:25;;7193:1;7190;7186:9;7178:17;;7217:1;7211:4;7208:11;7205:37;;;7222:18;;:::i;:::-;7205:37;7055:194;;;;:::o;7255:177::-;7395:29;7391:1;7383:6;7379:14;7372:53;7255:177;:::o;7438:366::-;7580:3;7601:67;7665:2;7660:3;7601:67;:::i;:::-;7594:74;;7677:93;7766:3;7677:93;:::i;:::-;7795:2;7790:3;7786:12;7779:19;;7438:366;;;:::o;7810:419::-;7976:4;8014:2;8003:9;7999:18;7991:26;;8063:9;8057:4;8053:20;8049:1;8038:9;8034:17;8027:47;8091:131;8217:4;8091:131;:::i;:::-;8083:139;;7810:419;;;:::o;8235:221::-;8375:34;8371:1;8363:6;8359:14;8352:58;8444:4;8439:2;8431:6;8427:15;8420:29;8235:221;:::o;8462:366::-;8604:3;8625:67;8689:2;8684:3;8625:67;:::i;:::-;8618:74;;8701:93;8790:3;8701:93;:::i;:::-;8819:2;8814:3;8810:12;8803:19;;8462:366;;;:::o;8834:419::-;9000:4;9038:2;9027:9;9023:18;9015:26;;9087:9;9081:4;9077:20;9073:1;9062:9;9058:17;9051:47;9115:131;9241:4;9115:131;:::i;:::-;9107:139;;8834:419;;;:::o;9259:162::-;9399:14;9395:1;9387:6;9383:14;9376:38;9259:162;:::o;9427:366::-;9569:3;9590:67;9654:2;9649:3;9590:67;:::i;:::-;9583:74;;9666:93;9755:3;9666:93;:::i;:::-;9784:2;9779:3;9775:12;9768:19;;9427:366;;;:::o;9799:419::-;9965:4;10003:2;9992:9;9988:18;9980:26;;10052:9;10046:4;10042:20;10038:1;10027:9;10023:17;10016:47;10080:131;10206:4;10080:131;:::i;:::-;10072:139;;9799:419;;;:::o;10224:410::-;10264:7;10287:20;10305:1;10287:20;:::i;:::-;10282:25;;10321:20;10339:1;10321:20;:::i;:::-;10316:25;;10376:1;10373;10369:9;10398:30;10416:11;10398:30;:::i;:::-;10387:41;;10577:1;10568:7;10564:15;10561:1;10558:22;10538:1;10531:9;10511:83;10488:139;;10607:18;;:::i;:::-;10488:139;10272:362;10224:410;;;;:::o;10640:180::-;10688:77;10685:1;10678:88;10785:4;10782:1;10775:15;10809:4;10806:1;10799:15;10826:185;10866:1;10883:20;10901:1;10883:20;:::i;:::-;10878:25;;10917:20;10935:1;10917:20;:::i;:::-;10912:25;;10956:1;10946:35;;10961:18;;:::i;:::-;10946:35;11003:1;11000;10996:9;10991:14;;10826:185;;;;:::o;11017:173::-;11157:25;11153:1;11145:6;11141:14;11134:49;11017:173;:::o;11196:366::-;11338:3;11359:67;11423:2;11418:3;11359:67;:::i;:::-;11352:74;;11435:93;11524:3;11435:93;:::i;:::-;11553:2;11548:3;11544:12;11537:19;;11196:366;;;:::o;11568:419::-;11734:4;11772:2;11761:9;11757:18;11749:26;;11821:9;11815:4;11811:20;11807:1;11796:9;11792:17;11785:47;11849:131;11975:4;11849:131;:::i;:::-;11841:139;;11568:419;;;:::o;11993:563::-;12175:4;12213:3;12202:9;12198:19;12190:27;;12227:71;12295:1;12284:9;12280:17;12271:6;12227:71;:::i;:::-;12308:72;12376:2;12365:9;12361:18;12352:6;12308:72;:::i;:::-;12390;12458:2;12447:9;12443:18;12434:6;12390:72;:::i;:::-;12472:77;12545:2;12534:9;12530:18;12521:6;12472:77;:::i;:::-;11993:563;;;;;;;:::o;12562:173::-;12702:25;12698:1;12690:6;12686:14;12679:49;12562:173;:::o;12741:366::-;12883:3;12904:67;12968:2;12963:3;12904:67;:::i;:::-;12897:74;;12980:93;13069:3;12980:93;:::i;:::-;13098:2;13093:3;13089:12;13082:19;;12741:366;;;:::o;13113:419::-;13279:4;13317:2;13306:9;13302:18;13294:26;;13366:9;13360:4;13356:20;13352:1;13341:9;13337:17;13330:47;13394:131;13520:4;13394:131;:::i;:::-;13386:139;;13113:419;;;:::o;13538:180::-;13586:77;13583:1;13576:88;13683:4;13680:1;13673:15;13707:4;13704:1;13697:15;13724:224;13864:34;13860:1;13852:6;13848:14;13841:58;13933:7;13928:2;13920:6;13916:15;13909:32;13724:224;:::o;13954:366::-;14096:3;14117:67;14181:2;14176:3;14117:67;:::i;:::-;14110:74;;14193:93;14282:3;14193:93;:::i;:::-;14311:2;14306:3;14302:12;14295:19;;13954:366;;;:::o;14326:419::-;14492:4;14530:2;14519:9;14515:18;14507:26;;14579:9;14573:4;14569:20;14565:1;14554:9;14550:17;14543:47;14607:131;14733:4;14607:131;:::i;:::-;14599:139;;14326:419;;;:::o;14751:191::-;14791:3;14810:20;14828:1;14810:20;:::i;:::-;14805:25;;14844:20;14862:1;14844:20;:::i;:::-;14839:25;;14887:1;14884;14880:9;14873:16;;14908:3;14905:1;14902:10;14899:36;;;14915:18;;:::i;:::-;14899:36;14751:191;;;;:::o;14948:674::-;15158:4;15196:3;15185:9;15181:19;15173:27;;15210:71;15278:1;15267:9;15263:17;15254:6;15210:71;:::i;:::-;15291:72;15359:2;15348:9;15344:18;15335:6;15291:72;:::i;:::-;15373;15441:2;15430:9;15426:18;15417:6;15373:72;:::i;:::-;15455:77;15528:2;15517:9;15513:18;15504:6;15455:77;:::i;:::-;15542:73;15610:3;15599:9;15595:19;15586:6;15542:73;:::i;:::-;14948:674;;;;;;;;:::o;15628:180::-;15676:77;15673:1;15666:88;15773:4;15770:1;15763:15;15797:4;15794:1;15787:15;15814:182;15954:34;15950:1;15942:6;15938:14;15931:58;15814:182;:::o;16002:366::-;16144:3;16165:67;16229:2;16224:3;16165:67;:::i;:::-;16158:74;;16241:93;16330:3;16241:93;:::i;:::-;16359:2;16354:3;16350:12;16343:19;;16002:366;;;:::o;16374:419::-;16540:4;16578:2;16567:9;16563:18;16555:26;;16627:9;16621:4;16617:20;16613:1;16602:9;16598:17;16591:47;16655:131;16781:4;16655:131;:::i;:::-;16647:139;;16374:419;;;:::o", + "source": "// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.17;\r\n\r\nimport \"./IXRC20.sol\";\r\n\r\ncontract PerpetualDEX {\r\n address public admin;\r\n IXRC20 public collateralToken;\r\n uint256 public lastFundingTimestamp;\r\n uint256 public fundingRate;\r\n uint256 public indexPrice;\r\n uint256 public feeRate; // Trading fee rate, e.g., 0.005 for 0.5%\r\n\r\n enum Side { LONG, SHORT }\r\n\r\n struct Position {\r\n address trader;\r\n uint256 size;\r\n uint256 entryPrice;\r\n Side side;\r\n }\r\n\r\n Position[] public positions;\r\n mapping(address => uint256) public collateralBalances;\r\n\r\n event PositionOpened(address indexed trader, uint256 positionId, uint256 size, uint256 entryPrice, Side side);\r\n event PositionClosed(address indexed trader, uint256 positionId, uint256 size, uint256 entryPrice, Side side, uint256 profit);\r\n event FundingPaid(uint256 fundingPayment);\r\n\r\n constructor(address _collateralToken) {\r\n admin = msg.sender;\r\n collateralToken = IXRC20(_collateralToken);\r\n lastFundingTimestamp = block.timestamp;\r\n fundingRate = 0;\r\n indexPrice = 1000; // Initial index price\r\n feeRate = 500; // 0.5% fee\r\n }\r\n\r\n function openPosition(uint256 size, uint256 entryPrice, Side side) external {\r\n require(size > 0, \"Size must be greater than 0\");\r\n require(entryPrice > 0, \"Entry price must be greater than 0\");\r\n require(side == Side.LONG || side == Side.SHORT, \"Invalid side\");\r\n\r\n // Calculate collateral required\r\n uint256 collateralRequired = (size * entryPrice) * indexPrice / 1e18;\r\n\r\n require(collateralBalances[msg.sender] >= collateralRequired, \"Insufficient collateral\");\r\n\r\n positions.push(Position({\r\n trader: msg.sender,\r\n size: size,\r\n entryPrice: entryPrice,\r\n side: side\r\n }));\r\n\r\n collateralBalances[msg.sender] -= collateralRequired;\r\n\r\n uint256 positionId = positions.length - 1;\r\n emit PositionOpened(msg.sender, positionId, size, entryPrice, side);\r\n }\r\n\r\n function closePosition(uint256 positionId) external {\r\n require(positionId < positions.length, \"Position does not exist\");\r\n\r\n Position storage position = positions[positionId];\r\n require(position.trader == msg.sender, \"Only the owner can close the position\");\r\n\r\n uint256 size = position.size;\r\n uint256 entryPrice = position.entryPrice;\r\n Side side = position.side;\r\n\r\n uint256 pnl = calculateProfitAndLoss(positionId);\r\n\r\n uint256 fee = (pnl * feeRate) / 1e4;\r\n uint256 profit = pnl - fee;\r\n\r\n collateralBalances[msg.sender] += (entryPrice * size * indexPrice) / 1e18;\r\n collateralBalances[admin] += fee;\r\n\r\n emit PositionClosed(msg.sender, positionId, size, entryPrice, side, profit);\r\n\r\n // Remove the closed position by moving the last position to this index and truncating the array\r\n positions[positionId] = positions[positions.length - 1];\r\n positions.pop();\r\n }\r\n\r\n function calculateProfitAndLoss(uint256 positionId) internal view returns (uint256) {\r\n Position storage position = positions[positionId];\r\n uint256 size = position.size;\r\n uint256 entryPrice = position.entryPrice;\r\n Side side = position.side;\r\n\r\n uint256 currentPrice = indexPrice; // Replace with a real price source.\r\n\r\n if (side == Side.LONG) {\r\n return (currentPrice * size - entryPrice * size) / 1e18;\r\n } else {\r\n return (entryPrice * size - currentPrice * size) / 1e18;\r\n }\r\n }\r\n\r\n function updateIndexPrice(uint256 newPrice) external {\r\n require(msg.sender == admin, \"Only admin can update index price\");\r\n indexPrice = newPrice;\r\n uint256 timeElapsed = block.timestamp - lastFundingTimestamp;\r\n if (timeElapsed > 0) {\r\n updateFundingRate(timeElapsed);\r\n lastFundingTimestamp = block.timestamp;\r\n }\r\n }\r\n\r\n function updateFundingRate(uint256 timeElapsed) internal {\r\n // Implement a mechanism to calculate and update the funding rate based on timeElapsed.\r\n // This is a placeholder for educational purposes.\r\n // Formula: fundingRate = (indexPrice - previousIndexPrice) / previousIndexPrice * 86400 / timeElapsed\r\n fundingRate = (indexPrice * 1e18 - indexPrice * 1e18) * 86400 / timeElapsed / indexPrice;\r\n }\r\n\r\n function payFunding() external {\r\n uint256 timeElapsed = block.timestamp - lastFundingTimestamp;\r\n require(timeElapsed > 0, \"Not time for funding payment yet\");\r\n uint256 fundingPayment = (positions.length * fundingRate * timeElapsed) / 86400;\r\n collateralBalances[admin] += fundingPayment;\r\n emit FundingPaid(fundingPayment);\r\n lastFundingTimestamp = block.timestamp;\r\n }\r\n}", + "sourcePath": "C:\\development\\ebc\\blockchain-contracts\\contracts\\PerpectualDex.sol", + "ast": { + "absolutePath": "project:/contracts/PerpectualDex.sol", + "exportedSymbols": { + "IXRC20": [ + 77 + ], + "PerpetualDEX": [ + 559 + ] + }, + "id": 560, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 79, + "literals": [ + "solidity", + "^", + "0.8", + ".17" + ], + "nodeType": "PragmaDirective", + "src": "33:24:1" + }, + { + "absolutePath": "project:/contracts/IXRC20.sol", + "file": "./IXRC20.sol", + "id": 80, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 560, + "sourceUnit": 78, + "src": "61:22:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "PerpetualDEX", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 559, + "linearizedBaseContracts": [ + 559 + ], + "name": "PerpetualDEX", + "nameLocation": "96:12:1", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "functionSelector": "f851a440", + "id": 82, + "mutability": "mutable", + "name": "admin", + "nameLocation": "131:5:1", + "nodeType": "VariableDeclaration", + "scope": 559, + "src": "116:20:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 81, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "116:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "b2016bd4", + "id": 85, + "mutability": "mutable", + "name": "collateralToken", + "nameLocation": "157:15:1", + "nodeType": "VariableDeclaration", + "scope": 559, + "src": "143:29:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IXRC20_$77", + "typeString": "contract IXRC20" + }, + "typeName": { + "id": 84, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 83, + "name": "IXRC20", + "nameLocations": [ + "143:6:1" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 77, + "src": "143:6:1" + }, + "referencedDeclaration": 77, + "src": "143:6:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IXRC20_$77", + "typeString": "contract IXRC20" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "93ca3415", + "id": 87, + "mutability": "mutable", + "name": "lastFundingTimestamp", + "nameLocation": "194:20:1", + "nodeType": "VariableDeclaration", + "scope": 559, + "src": "179:35:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 86, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "179:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "41d3c84c", + "id": 89, + "mutability": "mutable", + "name": "fundingRate", + "nameLocation": "236:11:1", + "nodeType": "VariableDeclaration", + "scope": 559, + "src": "221:26:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 88, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "221:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "10bace8c", + "id": 91, + "mutability": "mutable", + "name": "indexPrice", + "nameLocation": "269:10:1", + "nodeType": "VariableDeclaration", + "scope": 559, + "src": "254:25:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 90, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "254:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "978bbdb9", + "id": 93, + "mutability": "mutable", + "name": "feeRate", + "nameLocation": "301:7:1", + "nodeType": "VariableDeclaration", + "scope": 559, + "src": "286:22:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 92, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "286:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "canonicalName": "PerpetualDEX.Side", + "id": 96, + "members": [ + { + "id": 94, + "name": "LONG", + "nameLocation": "371:4:1", + "nodeType": "EnumValue", + "src": "371:4:1" + }, + { + "id": 95, + "name": "SHORT", + "nameLocation": "377:5:1", + "nodeType": "EnumValue", + "src": "377:5:1" + } + ], + "name": "Side", + "nameLocation": "364:4:1", + "nodeType": "EnumDefinition", + "src": "359:25:1" + }, + { + "canonicalName": "PerpetualDEX.Position", + "id": 106, + "members": [ + { + "constant": false, + "id": 98, + "mutability": "mutable", + "name": "trader", + "nameLocation": "427:6:1", + "nodeType": "VariableDeclaration", + "scope": 106, + "src": "419:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 97, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "419:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 100, + "mutability": "mutable", + "name": "size", + "nameLocation": "452:4:1", + "nodeType": "VariableDeclaration", + "scope": 106, + "src": "444:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 99, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "444:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 102, + "mutability": "mutable", + "name": "entryPrice", + "nameLocation": "475:10:1", + "nodeType": "VariableDeclaration", + "scope": 106, + "src": "467:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 101, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "467:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 105, + "mutability": "mutable", + "name": "side", + "nameLocation": "501:4:1", + "nodeType": "VariableDeclaration", + "scope": 106, + "src": "496:9:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + }, + "typeName": { + "id": 104, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 103, + "name": "Side", + "nameLocations": [ + "496:4:1" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 96, + "src": "496:4:1" + }, + "referencedDeclaration": 96, + "src": "496:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "visibility": "internal" + } + ], + "name": "Position", + "nameLocation": "399:8:1", + "nodeType": "StructDefinition", + "scope": 559, + "src": "392:121:1", + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "99fbab88", + "id": 110, + "mutability": "mutable", + "name": "positions", + "nameLocation": "539:9:1", + "nodeType": "VariableDeclaration", + "scope": 559, + "src": "521:27:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position[]" + }, + "typeName": { + "baseType": { + "id": 108, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 107, + "name": "Position", + "nameLocations": [ + "521:8:1" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 106, + "src": "521:8:1" + }, + "referencedDeclaration": 106, + "src": "521:8:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position" + } + }, + "id": 109, + "nodeType": "ArrayTypeName", + "src": "521:10:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage_ptr", + "typeString": "struct PerpetualDEX.Position[]" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "29bc969d", + "id": 114, + "mutability": "mutable", + "name": "collateralBalances", + "nameLocation": "590:18:1", + "nodeType": "VariableDeclaration", + "scope": 559, + "src": "555:53:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 113, + "keyType": { + "id": 111, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "563:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "555:27:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 112, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "574:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "public" + }, + { + "anonymous": false, + "eventSelector": "22525261af7a4917e8be47f89149ad7abb0d81058d0a105e9756a4e40bd5b2e8", + "id": 127, + "name": "PositionOpened", + "nameLocation": "623:14:1", + "nodeType": "EventDefinition", + "parameters": { + "id": 126, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 116, + "indexed": true, + "mutability": "mutable", + "name": "trader", + "nameLocation": "654:6:1", + "nodeType": "VariableDeclaration", + "scope": 127, + "src": "638:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 115, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "638:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 118, + "indexed": false, + "mutability": "mutable", + "name": "positionId", + "nameLocation": "670:10:1", + "nodeType": "VariableDeclaration", + "scope": 127, + "src": "662:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 117, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "662:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 120, + "indexed": false, + "mutability": "mutable", + "name": "size", + "nameLocation": "690:4:1", + "nodeType": "VariableDeclaration", + "scope": 127, + "src": "682:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 119, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "682:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 122, + "indexed": false, + "mutability": "mutable", + "name": "entryPrice", + "nameLocation": "704:10:1", + "nodeType": "VariableDeclaration", + "scope": 127, + "src": "696:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 121, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "696:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 125, + "indexed": false, + "mutability": "mutable", + "name": "side", + "nameLocation": "721:4:1", + "nodeType": "VariableDeclaration", + "scope": 127, + "src": "716:9:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + }, + "typeName": { + "id": 124, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 123, + "name": "Side", + "nameLocations": [ + "716:4:1" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 96, + "src": "716:4:1" + }, + "referencedDeclaration": 96, + "src": "716:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "visibility": "internal" + } + ], + "src": "637:89:1" + }, + "src": "617:110:1" + }, + { + "anonymous": false, + "eventSelector": "3c35f9aeba0e938ec1359b8abda46ace45b198167ad7fea0dd1fca3742244274", + "id": 142, + "name": "PositionClosed", + "nameLocation": "739:14:1", + "nodeType": "EventDefinition", + "parameters": { + "id": 141, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 129, + "indexed": true, + "mutability": "mutable", + "name": "trader", + "nameLocation": "770:6:1", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "754:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 128, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "754:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 131, + "indexed": false, + "mutability": "mutable", + "name": "positionId", + "nameLocation": "786:10:1", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "778:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 130, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "778:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 133, + "indexed": false, + "mutability": "mutable", + "name": "size", + "nameLocation": "806:4:1", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "798:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 132, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "798:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 135, + "indexed": false, + "mutability": "mutable", + "name": "entryPrice", + "nameLocation": "820:10:1", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "812:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 134, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "812:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 138, + "indexed": false, + "mutability": "mutable", + "name": "side", + "nameLocation": "837:4:1", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "832:9:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + }, + "typeName": { + "id": 137, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 136, + "name": "Side", + "nameLocations": [ + "832:4:1" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 96, + "src": "832:4:1" + }, + "referencedDeclaration": 96, + "src": "832:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 140, + "indexed": false, + "mutability": "mutable", + "name": "profit", + "nameLocation": "851:6:1", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "843:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 139, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "843:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "753:105:1" + }, + "src": "733:126:1" + }, + { + "anonymous": false, + "eventSelector": "7052e674e5d83ba741a3bc9f3675ddb61e9472cf8470386d1c2a21ed9c0b87fc", + "id": 146, + "name": "FundingPaid", + "nameLocation": "871:11:1", + "nodeType": "EventDefinition", + "parameters": { + "id": 145, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 144, + "indexed": false, + "mutability": "mutable", + "name": "fundingPayment", + "nameLocation": "891:14:1", + "nodeType": "VariableDeclaration", + "scope": 146, + "src": "883:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 143, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "883:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "882:24:1" + }, + "src": "865:42:1" + }, + { + "body": { + "id": 179, + "nodeType": "Block", + "src": "953:252:1", + "statements": [ + { + "expression": { + "id": 154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 151, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 82, + "src": "964:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 152, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "972:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "976:6:1", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "972:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "964:18:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 155, + "nodeType": "ExpressionStatement", + "src": "964:18:1" + }, + { + "expression": { + "id": 160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 156, + "name": "collateralToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "993:15:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IXRC20_$77", + "typeString": "contract IXRC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 158, + "name": "_collateralToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 148, + "src": "1018:16:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 157, + "name": "IXRC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "1011:6:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IXRC20_$77_$", + "typeString": "type(contract IXRC20)" + } + }, + "id": 159, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1011:24:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IXRC20_$77", + "typeString": "contract IXRC20" + } + }, + "src": "993:42:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IXRC20_$77", + "typeString": "contract IXRC20" + } + }, + "id": 161, + "nodeType": "ExpressionStatement", + "src": "993:42:1" + }, + { + "expression": { + "id": 165, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 162, + "name": "lastFundingTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 87, + "src": "1046:20:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 163, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967292, + "src": "1069:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1075:9:1", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "1069:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1046:38:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 166, + "nodeType": "ExpressionStatement", + "src": "1046:38:1" + }, + { + "expression": { + "id": 169, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 167, + "name": "fundingRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 89, + "src": "1095:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "30", + "id": 168, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1109:1:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1095:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 170, + "nodeType": "ExpressionStatement", + "src": "1095:15:1" + }, + { + "expression": { + "id": 173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 171, + "name": "indexPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 91, + "src": "1121:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "31303030", + "id": 172, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1134:4:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000_by_1", + "typeString": "int_const 1000" + }, + "value": "1000" + }, + "src": "1121:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 174, + "nodeType": "ExpressionStatement", + "src": "1121:17:1" + }, + { + "expression": { + "id": 177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 175, + "name": "feeRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 93, + "src": "1172:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "353030", + "id": 176, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1182:3:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_500_by_1", + "typeString": "int_const 500" + }, + "value": "500" + }, + "src": "1172:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 178, + "nodeType": "ExpressionStatement", + "src": "1172:13:1" + } + ] + }, + "id": 180, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 149, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 148, + "mutability": "mutable", + "name": "_collateralToken", + "nameLocation": "935:16:1", + "nodeType": "VariableDeclaration", + "scope": 180, + "src": "927:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 147, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "927:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "926:26:1" + }, + "returnParameters": { + "id": 150, + "nodeType": "ParameterList", + "parameters": [], + "src": "953:0:1" + }, + "scope": 559, + "src": "915:290:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 273, + "nodeType": "Block", + "src": "1289:805:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 193, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 191, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 182, + "src": "1308:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 192, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1315:1:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1308:8:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "53697a65206d7573742062652067726561746572207468616e2030", + "id": 194, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1318:29:1", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83", + "typeString": "literal_string \"Size must be greater than 0\"" + }, + "value": "Size must be greater than 0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_c45c9481c4731fb9f06ca008ff46a4ecae0c3aba43e491c104f41a189b798d83", + "typeString": "literal_string \"Size must be greater than 0\"" + } + ], + "id": 190, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "1300:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 195, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1300:48:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 196, + "nodeType": "ExpressionStatement", + "src": "1300:48:1" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 198, + "name": "entryPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 184, + "src": "1367:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 199, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1380:1:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1367:14:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "456e747279207072696365206d7573742062652067726561746572207468616e2030", + "id": 201, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1383:36:1", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd", + "typeString": "literal_string \"Entry price must be greater than 0\"" + }, + "value": "Entry price must be greater than 0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_66e82f5abd8b28ce176992cda2c45c1976c27f5e9a24220f8a799c54da0ab8dd", + "typeString": "literal_string \"Entry price must be greater than 0\"" + } + ], + "id": 197, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "1359:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1359:61:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 203, + "nodeType": "ExpressionStatement", + "src": "1359:61:1" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + }, + "id": 208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 205, + "name": "side", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 187, + "src": "1439:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 206, + "name": "Side", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 96, + "src": "1447:4:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Side_$96_$", + "typeString": "type(enum PerpetualDEX.Side)" + } + }, + "id": 207, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1452:4:1", + "memberName": "LONG", + "nodeType": "MemberAccess", + "referencedDeclaration": 94, + "src": "1447:9:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "src": "1439:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + }, + "id": 212, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 209, + "name": "side", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 187, + "src": "1460:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 210, + "name": "Side", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 96, + "src": "1468:4:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Side_$96_$", + "typeString": "type(enum PerpetualDEX.Side)" + } + }, + "id": 211, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1473:5:1", + "memberName": "SHORT", + "nodeType": "MemberAccess", + "referencedDeclaration": 95, + "src": "1468:10:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "src": "1460:18:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1439:39:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c69642073696465", + "id": 214, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1480:14:1", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda", + "typeString": "literal_string \"Invalid side\"" + }, + "value": "Invalid side" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_928564e8be5d3bf86a65990cd3a02bbae772cd5f231962b4c92229e7addd0cda", + "typeString": "literal_string \"Invalid side\"" + } + ], + "id": 204, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "1431:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1431:64:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 216, + "nodeType": "ExpressionStatement", + "src": "1431:64:1" + }, + { + "assignments": [ + 218 + ], + "declarations": [ + { + "constant": false, + "id": 218, + "mutability": "mutable", + "name": "collateralRequired", + "nameLocation": "1558:18:1", + "nodeType": "VariableDeclaration", + "scope": 273, + "src": "1550:26:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 217, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1550:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 227, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 224, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 219, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 182, + "src": "1580:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 220, + "name": "entryPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 184, + "src": "1587:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1580:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 222, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1579:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 223, + "name": "indexPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 91, + "src": "1601:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1579:32:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "31653138", + "id": 225, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1614:4:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "src": "1579:39:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1550:68:1" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 229, + "name": "collateralBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 114, + "src": "1639:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 232, + "indexExpression": { + "expression": { + "id": 230, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "1658:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1662:6:1", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1658:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1639:30:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 233, + "name": "collateralRequired", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "1673:18:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1639:52:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e73756666696369656e7420636f6c6c61746572616c", + "id": 235, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1693:25:1", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa", + "typeString": "literal_string \"Insufficient collateral\"" + }, + "value": "Insufficient collateral" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa", + "typeString": "literal_string \"Insufficient collateral\"" + } + ], + "id": 228, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "1631:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1631:88:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 237, + "nodeType": "ExpressionStatement", + "src": "1631:88:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 242, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "1779:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1783:6:1", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1779:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 244, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 182, + "src": "1810:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 245, + "name": "entryPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 184, + "src": "1841:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 246, + "name": "side", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 187, + "src": "1872:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + ], + "id": 241, + "name": "Position", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 106, + "src": "1747:8:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Position_$106_storage_ptr_$", + "typeString": "type(struct PerpetualDEX.Position storage pointer)" + } + }, + "id": 247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "1771:6:1", + "1804:4:1", + "1829:10:1", + "1866:4:1" + ], + "names": [ + "trader", + "size", + "entryPrice", + "side" + ], + "nodeType": "FunctionCall", + "src": "1747:141:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_memory_ptr", + "typeString": "struct PerpetualDEX.Position memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Position_$106_memory_ptr", + "typeString": "struct PerpetualDEX.Position memory" + } + ], + "expression": { + "id": 238, + "name": "positions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "1732:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position storage ref[] storage ref" + } + }, + "id": 240, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1742:4:1", + "memberName": "push", + "nodeType": "MemberAccess", + "src": "1732:14:1", + "typeDescriptions": { + "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_Position_$106_storage_$dyn_storage_ptr_$_t_struct$_Position_$106_storage_$returns$__$bound_to$_t_array$_t_struct$_Position_$106_storage_$dyn_storage_ptr_$", + "typeString": "function (struct PerpetualDEX.Position storage ref[] storage pointer,struct PerpetualDEX.Position storage ref)" + } + }, + "id": 248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1732:157:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 249, + "nodeType": "ExpressionStatement", + "src": "1732:157:1" + }, + { + "expression": { + "id": 255, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 250, + "name": "collateralBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 114, + "src": "1902:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 253, + "indexExpression": { + "expression": { + "id": 251, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "1921:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1925:6:1", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1921:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1902:30:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 254, + "name": "collateralRequired", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "1936:18:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1902:52:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 256, + "nodeType": "ExpressionStatement", + "src": "1902:52:1" + }, + { + "assignments": [ + 258 + ], + "declarations": [ + { + "constant": false, + "id": 258, + "mutability": "mutable", + "name": "positionId", + "nameLocation": "1975:10:1", + "nodeType": "VariableDeclaration", + "scope": 273, + "src": "1967:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 257, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1967:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 263, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 262, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 259, + "name": "positions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "1988:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position storage ref[] storage ref" + } + }, + "id": 260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1998:6:1", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1988:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 261, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2007:1:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1988:20:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1967:41:1" + }, + { + "eventCall": { + "arguments": [ + { + "expression": { + "id": 265, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "2039:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2043:6:1", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2039:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 267, + "name": "positionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 258, + "src": "2051:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 268, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 182, + "src": "2063:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 269, + "name": "entryPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 184, + "src": "2069:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 270, + "name": "side", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 187, + "src": "2081:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + ], + "id": 264, + "name": "PositionOpened", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 127, + "src": "2024:14:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_enum$_Side_$96_$returns$__$", + "typeString": "function (address,uint256,uint256,uint256,enum PerpetualDEX.Side)" + } + }, + "id": 271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2024:62:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 272, + "nodeType": "EmitStatement", + "src": "2019:67:1" + } + ] + }, + "functionSelector": "5fbf81cc", + "id": 274, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "openPosition", + "nameLocation": "1222:12:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 188, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 182, + "mutability": "mutable", + "name": "size", + "nameLocation": "1243:4:1", + "nodeType": "VariableDeclaration", + "scope": 274, + "src": "1235:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 181, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1235:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 184, + "mutability": "mutable", + "name": "entryPrice", + "nameLocation": "1257:10:1", + "nodeType": "VariableDeclaration", + "scope": 274, + "src": "1249:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 183, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1249:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 187, + "mutability": "mutable", + "name": "side", + "nameLocation": "1274:4:1", + "nodeType": "VariableDeclaration", + "scope": 274, + "src": "1269:9:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + }, + "typeName": { + "id": 186, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 185, + "name": "Side", + "nameLocations": [ + "1269:4:1" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 96, + "src": "1269:4:1" + }, + "referencedDeclaration": 96, + "src": "1269:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "visibility": "internal" + } + ], + "src": "1234:45:1" + }, + "returnParameters": { + "id": 189, + "nodeType": "ParameterList", + "parameters": [], + "src": "1289:0:1" + }, + "scope": 559, + "src": "1213:881:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 386, + "nodeType": "Block", + "src": "2154:927:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 280, + "name": "positionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 276, + "src": "2173:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 281, + "name": "positions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "2186:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position storage ref[] storage ref" + } + }, + "id": 282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2196:6:1", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2186:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2173:29:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "506f736974696f6e20646f6573206e6f74206578697374", + "id": 284, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2204:25:1", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c", + "typeString": "literal_string \"Position does not exist\"" + }, + "value": "Position does not exist" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_87a8dc6d9db12a6ceec797b2f42e4efa66f9795fe22979847f8a86f8173d3f1c", + "typeString": "literal_string \"Position does not exist\"" + } + ], + "id": 279, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "2165:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 285, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2165:65:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 286, + "nodeType": "ExpressionStatement", + "src": "2165:65:1" + }, + { + "assignments": [ + 289 + ], + "declarations": [ + { + "constant": false, + "id": 289, + "mutability": "mutable", + "name": "position", + "nameLocation": "2260:8:1", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "2243:25:1", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position" + }, + "typeName": { + "id": 288, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 287, + "name": "Position", + "nameLocations": [ + "2243:8:1" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 106, + "src": "2243:8:1" + }, + "referencedDeclaration": 106, + "src": "2243:8:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position" + } + }, + "visibility": "internal" + } + ], + "id": 293, + "initialValue": { + "baseExpression": { + "id": 290, + "name": "positions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "2271:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position storage ref[] storage ref" + } + }, + "id": 292, + "indexExpression": { + "id": 291, + "name": "positionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 276, + "src": "2281:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2271:21:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage", + "typeString": "struct PerpetualDEX.Position storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2243:49:1" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 295, + "name": "position", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 289, + "src": "2311:8:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position storage pointer" + } + }, + "id": 296, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2320:6:1", + "memberName": "trader", + "nodeType": "MemberAccess", + "referencedDeclaration": 98, + "src": "2311:15:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 297, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "2330:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2334:6:1", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2330:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2311:29:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4f6e6c7920746865206f776e65722063616e20636c6f73652074686520706f736974696f6e", + "id": 300, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2342:39:1", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126", + "typeString": "literal_string \"Only the owner can close the position\"" + }, + "value": "Only the owner can close the position" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e4db7875c3f42bcd89cdac9a091239355daf65c88ad090edcc38987803126126", + "typeString": "literal_string \"Only the owner can close the position\"" + } + ], + "id": 294, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "2303:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 301, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2303:79:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 302, + "nodeType": "ExpressionStatement", + "src": "2303:79:1" + }, + { + "assignments": [ + 304 + ], + "declarations": [ + { + "constant": false, + "id": 304, + "mutability": "mutable", + "name": "size", + "nameLocation": "2403:4:1", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "2395:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 303, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2395:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 307, + "initialValue": { + "expression": { + "id": 305, + "name": "position", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 289, + "src": "2410:8:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position storage pointer" + } + }, + "id": 306, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2419:4:1", + "memberName": "size", + "nodeType": "MemberAccess", + "referencedDeclaration": 100, + "src": "2410:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2395:28:1" + }, + { + "assignments": [ + 309 + ], + "declarations": [ + { + "constant": false, + "id": 309, + "mutability": "mutable", + "name": "entryPrice", + "nameLocation": "2442:10:1", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "2434:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 308, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2434:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 312, + "initialValue": { + "expression": { + "id": 310, + "name": "position", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 289, + "src": "2455:8:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position storage pointer" + } + }, + "id": 311, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2464:10:1", + "memberName": "entryPrice", + "nodeType": "MemberAccess", + "referencedDeclaration": 102, + "src": "2455:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2434:40:1" + }, + { + "assignments": [ + 315 + ], + "declarations": [ + { + "constant": false, + "id": 315, + "mutability": "mutable", + "name": "side", + "nameLocation": "2490:4:1", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "2485:9:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + }, + "typeName": { + "id": 314, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 313, + "name": "Side", + "nameLocations": [ + "2485:4:1" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 96, + "src": "2485:4:1" + }, + "referencedDeclaration": 96, + "src": "2485:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "visibility": "internal" + } + ], + "id": 318, + "initialValue": { + "expression": { + "id": 316, + "name": "position", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 289, + "src": "2497:8:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position storage pointer" + } + }, + "id": 317, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2506:4:1", + "memberName": "side", + "nodeType": "MemberAccess", + "referencedDeclaration": 105, + "src": "2497:13:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2485:25:1" + }, + { + "assignments": [ + 320 + ], + "declarations": [ + { + "constant": false, + "id": 320, + "mutability": "mutable", + "name": "pnl", + "nameLocation": "2531:3:1", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "2523:11:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 319, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2523:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 324, + "initialValue": { + "arguments": [ + { + "id": 322, + "name": "positionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 276, + "src": "2560:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 321, + "name": "calculateProfitAndLoss", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 451, + "src": "2537:22:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2537:34:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2523:48:1" + }, + { + "assignments": [ + 326 + ], + "declarations": [ + { + "constant": false, + "id": 326, + "mutability": "mutable", + "name": "fee", + "nameLocation": "2592:3:1", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "2584:11:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 325, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2584:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 333, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 329, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 327, + "name": "pnl", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "2599:3:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 328, + "name": "feeRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 93, + "src": "2605:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2599:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 330, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2598:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "316534", + "id": 331, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2616:3:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000_by_1", + "typeString": "int_const 10000" + }, + "value": "1e4" + }, + "src": "2598:21:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2584:35:1" + }, + { + "assignments": [ + 335 + ], + "declarations": [ + { + "constant": false, + "id": 335, + "mutability": "mutable", + "name": "profit", + "nameLocation": "2638:6:1", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "2630:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 334, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2630:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 339, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 338, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 336, + "name": "pnl", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "2647:3:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 337, + "name": "fee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 326, + "src": "2653:3:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2647:9:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2630:26:1" + }, + { + "expression": { + "id": 352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 340, + "name": "collateralBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 114, + "src": "2669:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 343, + "indexExpression": { + "expression": { + "id": 341, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "2688:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 342, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2692:6:1", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2688:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2669:30:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 348, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 344, + "name": "entryPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 309, + "src": "2704:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 345, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 304, + "src": "2717:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2704:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 347, + "name": "indexPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 91, + "src": "2724:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2704:30:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 349, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2703:32:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "31653138", + "id": 350, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2738:4:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "src": "2703:39:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2669:73:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 353, + "nodeType": "ExpressionStatement", + "src": "2669:73:1" + }, + { + "expression": { + "id": 358, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 354, + "name": "collateralBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 114, + "src": "2753:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 356, + "indexExpression": { + "id": 355, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 82, + "src": "2772:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2753:25:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 357, + "name": "fee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 326, + "src": "2782:3:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2753:32:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 359, + "nodeType": "ExpressionStatement", + "src": "2753:32:1" + }, + { + "eventCall": { + "arguments": [ + { + "expression": { + "id": 361, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "2818:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2822:6:1", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2818:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 363, + "name": "positionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 276, + "src": "2830:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 364, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 304, + "src": "2842:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 365, + "name": "entryPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 309, + "src": "2848:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 366, + "name": "side", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 315, + "src": "2860:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + { + "id": 367, + "name": "profit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 335, + "src": "2866:6:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 360, + "name": "PositionClosed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 142, + "src": "2803:14:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_enum$_Side_$96_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256,uint256,uint256,enum PerpetualDEX.Side,uint256)" + } + }, + "id": 368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2803:70:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 369, + "nodeType": "EmitStatement", + "src": "2798:75:1" + }, + { + "expression": { + "id": 379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 370, + "name": "positions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "2992:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position storage ref[] storage ref" + } + }, + "id": 372, + "indexExpression": { + "id": 371, + "name": "positionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 276, + "src": "3002:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2992:21:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage", + "typeString": "struct PerpetualDEX.Position storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 373, + "name": "positions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "3016:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position storage ref[] storage ref" + } + }, + "id": 378, + "indexExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 374, + "name": "positions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "3026:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position storage ref[] storage ref" + } + }, + "id": 375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3036:6:1", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "3026:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 376, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3045:1:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3026:20:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3016:31:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage", + "typeString": "struct PerpetualDEX.Position storage ref" + } + }, + "src": "2992:55:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage", + "typeString": "struct PerpetualDEX.Position storage ref" + } + }, + "id": 380, + "nodeType": "ExpressionStatement", + "src": "2992:55:1" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 381, + "name": "positions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "3058:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position storage ref[] storage ref" + } + }, + "id": 383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3068:3:1", + "memberName": "pop", + "nodeType": "MemberAccess", + "src": "3058:13:1", + "typeDescriptions": { + "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_struct$_Position_$106_storage_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_struct$_Position_$106_storage_$dyn_storage_ptr_$", + "typeString": "function (struct PerpetualDEX.Position storage ref[] storage pointer)" + } + }, + "id": 384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3058:15:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 385, + "nodeType": "ExpressionStatement", + "src": "3058:15:1" + } + ] + }, + "functionSelector": "a126d601", + "id": 387, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "closePosition", + "nameLocation": "2111:13:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 277, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 276, + "mutability": "mutable", + "name": "positionId", + "nameLocation": "2133:10:1", + "nodeType": "VariableDeclaration", + "scope": 387, + "src": "2125:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 275, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2125:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2124:20:1" + }, + "returnParameters": { + "id": 278, + "nodeType": "ParameterList", + "parameters": [], + "src": "2154:0:1" + }, + "scope": 559, + "src": "2102:979:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 450, + "nodeType": "Block", + "src": "3173:482:1", + "statements": [ + { + "assignments": [ + 396 + ], + "declarations": [ + { + "constant": false, + "id": 396, + "mutability": "mutable", + "name": "position", + "nameLocation": "3201:8:1", + "nodeType": "VariableDeclaration", + "scope": 450, + "src": "3184:25:1", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position" + }, + "typeName": { + "id": 395, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 394, + "name": "Position", + "nameLocations": [ + "3184:8:1" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 106, + "src": "3184:8:1" + }, + "referencedDeclaration": 106, + "src": "3184:8:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position" + } + }, + "visibility": "internal" + } + ], + "id": 400, + "initialValue": { + "baseExpression": { + "id": 397, + "name": "positions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "3212:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position storage ref[] storage ref" + } + }, + "id": 399, + "indexExpression": { + "id": 398, + "name": "positionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 389, + "src": "3222:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3212:21:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage", + "typeString": "struct PerpetualDEX.Position storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3184:49:1" + }, + { + "assignments": [ + 402 + ], + "declarations": [ + { + "constant": false, + "id": 402, + "mutability": "mutable", + "name": "size", + "nameLocation": "3252:4:1", + "nodeType": "VariableDeclaration", + "scope": 450, + "src": "3244:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 401, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3244:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 405, + "initialValue": { + "expression": { + "id": 403, + "name": "position", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 396, + "src": "3259:8:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position storage pointer" + } + }, + "id": 404, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3268:4:1", + "memberName": "size", + "nodeType": "MemberAccess", + "referencedDeclaration": 100, + "src": "3259:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3244:28:1" + }, + { + "assignments": [ + 407 + ], + "declarations": [ + { + "constant": false, + "id": 407, + "mutability": "mutable", + "name": "entryPrice", + "nameLocation": "3291:10:1", + "nodeType": "VariableDeclaration", + "scope": 450, + "src": "3283:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 406, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3283:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 410, + "initialValue": { + "expression": { + "id": 408, + "name": "position", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 396, + "src": "3304:8:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position storage pointer" + } + }, + "id": 409, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3313:10:1", + "memberName": "entryPrice", + "nodeType": "MemberAccess", + "referencedDeclaration": 102, + "src": "3304:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3283:40:1" + }, + { + "assignments": [ + 413 + ], + "declarations": [ + { + "constant": false, + "id": 413, + "mutability": "mutable", + "name": "side", + "nameLocation": "3339:4:1", + "nodeType": "VariableDeclaration", + "scope": 450, + "src": "3334:9:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + }, + "typeName": { + "id": 412, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 411, + "name": "Side", + "nameLocations": [ + "3334:4:1" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 96, + "src": "3334:4:1" + }, + "referencedDeclaration": 96, + "src": "3334:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "visibility": "internal" + } + ], + "id": 416, + "initialValue": { + "expression": { + "id": 414, + "name": "position", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 396, + "src": "3346:8:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Position_$106_storage_ptr", + "typeString": "struct PerpetualDEX.Position storage pointer" + } + }, + "id": 415, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3355:4:1", + "memberName": "side", + "nodeType": "MemberAccess", + "referencedDeclaration": 105, + "src": "3346:13:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3334:25:1" + }, + { + "assignments": [ + 418 + ], + "declarations": [ + { + "constant": false, + "id": 418, + "mutability": "mutable", + "name": "currentPrice", + "nameLocation": "3380:12:1", + "nodeType": "VariableDeclaration", + "scope": 450, + "src": "3372:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 417, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3372:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 420, + "initialValue": { + "id": 419, + "name": "indexPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 91, + "src": "3395:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3372:33:1" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + }, + "id": 424, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 421, + "name": "side", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 413, + "src": "3459:4:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 422, + "name": "Side", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 96, + "src": "3467:4:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Side_$96_$", + "typeString": "type(enum PerpetualDEX.Side)" + } + }, + "id": 423, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3472:4:1", + "memberName": "LONG", + "nodeType": "MemberAccess", + "referencedDeclaration": 94, + "src": "3467:9:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Side_$96", + "typeString": "enum PerpetualDEX.Side" + } + }, + "src": "3459:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 448, + "nodeType": "Block", + "src": "3566:82:1", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 437, + "name": "entryPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 407, + "src": "3589:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 438, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 402, + "src": "3602:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3589:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 440, + "name": "currentPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 418, + "src": "3609:12:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 441, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 402, + "src": "3624:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3609:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3589:39:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 444, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3588:41:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "31653138", + "id": 445, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3632:4:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "src": "3588:48:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 393, + "id": 447, + "nodeType": "Return", + "src": "3581:55:1" + } + ] + }, + "id": 449, + "nodeType": "IfStatement", + "src": "3455:193:1", + "trueBody": { + "id": 436, + "nodeType": "Block", + "src": "3478:82:1", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 434, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 427, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 425, + "name": "currentPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 418, + "src": "3501:12:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 426, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 402, + "src": "3516:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3501:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 430, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 428, + "name": "entryPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 407, + "src": "3523:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 429, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 402, + "src": "3536:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3523:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3501:39:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 432, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3500:41:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "31653138", + "id": 433, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3544:4:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "src": "3500:48:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 393, + "id": 435, + "nodeType": "Return", + "src": "3493:55:1" + } + ] + } + } + ] + }, + "id": 451, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "calculateProfitAndLoss", + "nameLocation": "3098:22:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 390, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 389, + "mutability": "mutable", + "name": "positionId", + "nameLocation": "3129:10:1", + "nodeType": "VariableDeclaration", + "scope": 451, + "src": "3121:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 388, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3121:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3120:20:1" + }, + "returnParameters": { + "id": 393, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 392, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 451, + "src": "3164:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 391, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3164:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3163:9:1" + }, + "scope": 559, + "src": "3089:566:1", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 489, + "nodeType": "Block", + "src": "3716:328:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 457, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "3735:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 458, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3739:6:1", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3735:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 459, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 82, + "src": "3749:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3735:19:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4f6e6c792061646d696e2063616e2075706461746520696e646578207072696365", + "id": 461, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3756:35:1", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259", + "typeString": "literal_string \"Only admin can update index price\"" + }, + "value": "Only admin can update index price" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3acc1ded6db13af3927176c307888d5a106303ec6e3645d0a8b0169aaf1b7259", + "typeString": "literal_string \"Only admin can update index price\"" + } + ], + "id": 456, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "3727:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3727:65:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 463, + "nodeType": "ExpressionStatement", + "src": "3727:65:1" + }, + { + "expression": { + "id": 466, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 464, + "name": "indexPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 91, + "src": "3803:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 465, + "name": "newPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 453, + "src": "3816:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3803:21:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 467, + "nodeType": "ExpressionStatement", + "src": "3803:21:1" + }, + { + "assignments": [ + 469 + ], + "declarations": [ + { + "constant": false, + "id": 469, + "mutability": "mutable", + "name": "timeElapsed", + "nameLocation": "3843:11:1", + "nodeType": "VariableDeclaration", + "scope": 489, + "src": "3835:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 468, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3835:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 474, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 473, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 470, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967292, + "src": "3857:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3863:9:1", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "3857:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 472, + "name": "lastFundingTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 87, + "src": "3875:20:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3857:38:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3835:60:1" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 477, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 475, + "name": "timeElapsed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "3910:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 476, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3924:1:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3910:15:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 488, + "nodeType": "IfStatement", + "src": "3906:131:1", + "trueBody": { + "id": 487, + "nodeType": "Block", + "src": "3927:110:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 479, + "name": "timeElapsed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "3960:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 478, + "name": "updateFundingRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 513, + "src": "3942:17:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 480, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3942:30:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 481, + "nodeType": "ExpressionStatement", + "src": "3942:30:1" + }, + { + "expression": { + "id": 485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 482, + "name": "lastFundingTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 87, + "src": "3987:20:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 483, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967292, + "src": "4010:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4016:9:1", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "4010:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3987:38:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 486, + "nodeType": "ExpressionStatement", + "src": "3987:38:1" + } + ] + } + } + ] + }, + "functionSelector": "0ac02555", + "id": 490, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateIndexPrice", + "nameLocation": "3672:16:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 454, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 453, + "mutability": "mutable", + "name": "newPrice", + "nameLocation": "3697:8:1", + "nodeType": "VariableDeclaration", + "scope": 490, + "src": "3689:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 452, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3689:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3688:18:1" + }, + "returnParameters": { + "id": 455, + "nodeType": "ParameterList", + "parameters": [], + "src": "3716:0:1" + }, + "scope": 559, + "src": "3663:381:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 512, + "nodeType": "Block", + "src": "4109:376:1", + "statements": [ + { + "expression": { + "id": 510, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 495, + "name": "fundingRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 89, + "src": "4389:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 498, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 496, + "name": "indexPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 91, + "src": "4404:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "31653138", + "id": 497, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4417:4:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "src": "4404:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 499, + "name": "indexPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 91, + "src": "4424:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "31653138", + "id": 500, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4437:4:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "src": "4424:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4404:37:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 503, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4403:39:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "3836343030", + "id": 504, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4445:5:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "86400" + }, + "src": "4403:47:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 506, + "name": "timeElapsed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 492, + "src": "4453:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4403:61:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 508, + "name": "indexPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 91, + "src": "4467:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4403:74:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4389:88:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 511, + "nodeType": "ExpressionStatement", + "src": "4389:88:1" + } + ] + }, + "id": 513, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateFundingRate", + "nameLocation": "4061:17:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 493, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 492, + "mutability": "mutable", + "name": "timeElapsed", + "nameLocation": "4087:11:1", + "nodeType": "VariableDeclaration", + "scope": 513, + "src": "4079:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 491, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4079:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4078:21:1" + }, + "returnParameters": { + "id": 494, + "nodeType": "ParameterList", + "parameters": [], + "src": "4109:0:1" + }, + "scope": 559, + "src": "4052:433:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 557, + "nodeType": "Block", + "src": "4524:386:1", + "statements": [ + { + "assignments": [ + 517 + ], + "declarations": [ + { + "constant": false, + "id": 517, + "mutability": "mutable", + "name": "timeElapsed", + "nameLocation": "4543:11:1", + "nodeType": "VariableDeclaration", + "scope": 557, + "src": "4535:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 516, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4535:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 522, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 521, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 518, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967292, + "src": "4557:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 519, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4563:9:1", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "4557:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 520, + "name": "lastFundingTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 87, + "src": "4575:20:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4557:38:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4535:60:1" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 524, + "name": "timeElapsed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 517, + "src": "4614:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 525, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4628:1:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4614:15:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e6f742074696d6520666f722066756e64696e67207061796d656e7420796574", + "id": 527, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4631:34:1", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d", + "typeString": "literal_string \"Not time for funding payment yet\"" + }, + "value": "Not time for funding payment yet" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_86e1e6d12afb19f042a3accf194a6a6adbecf3a51bf6f593f798d5745afe3c9d", + "typeString": "literal_string \"Not time for funding payment yet\"" + } + ], + "id": 523, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "4606:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 528, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4606:60:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 529, + "nodeType": "ExpressionStatement", + "src": "4606:60:1" + }, + { + "assignments": [ + 531 + ], + "declarations": [ + { + "constant": false, + "id": 531, + "mutability": "mutable", + "name": "fundingPayment", + "nameLocation": "4685:14:1", + "nodeType": "VariableDeclaration", + "scope": 557, + "src": "4677:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 530, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4677:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 541, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 532, + "name": "positions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "4703:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Position_$106_storage_$dyn_storage", + "typeString": "struct PerpetualDEX.Position storage ref[] storage ref" + } + }, + "id": 533, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4713:6:1", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4703:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 534, + "name": "fundingRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 89, + "src": "4722:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4703:30:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 536, + "name": "timeElapsed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 517, + "src": "4736:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4703:44:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 538, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4702:46:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "3836343030", + "id": 539, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4751:5:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "86400" + }, + "src": "4702:54:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4677:79:1" + }, + { + "expression": { + "id": 546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 542, + "name": "collateralBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 114, + "src": "4767:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 544, + "indexExpression": { + "id": 543, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 82, + "src": "4786:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4767:25:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 545, + "name": "fundingPayment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 531, + "src": "4796:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4767:43:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 547, + "nodeType": "ExpressionStatement", + "src": "4767:43:1" + }, + { + "eventCall": { + "arguments": [ + { + "id": 549, + "name": "fundingPayment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 531, + "src": "4838:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 548, + "name": "FundingPaid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 146, + "src": "4826:11:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4826:27:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 551, + "nodeType": "EmitStatement", + "src": "4821:32:1" + }, + { + "expression": { + "id": 555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 552, + "name": "lastFundingTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 87, + "src": "4864:20:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 553, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967292, + "src": "4887:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4893:9:1", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "4887:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4864:38:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 556, + "nodeType": "ExpressionStatement", + "src": "4864:38:1" + } + ] + }, + "functionSelector": "aaa5a2ad", + "id": 558, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "payFunding", + "nameLocation": "4502:10:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 514, + "nodeType": "ParameterList", + "parameters": [], + "src": "4512:2:1" + }, + "returnParameters": { + "id": 515, + "nodeType": "ParameterList", + "parameters": [], + "src": "4524:0:1" + }, + "scope": 559, + "src": "4493:417:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 560, + "src": "87:4826:1", + "usedErrors": [] + } + ], + "src": "33:4880:1" + }, + "compiler": { + "name": "solc", + "version": "0.8.17+commit.8df45f5f.Emscripten.clang" + }, + "networks": { + "51": { + "events": {}, + "links": {}, + "address": "0x4ceAcd18D79E7cc99e181C772559785Eb157fe3B", + "transactionHash": "0x3a0b5e8edfc0603ff8a608fc602bedf796a90147009af709e66ec9f12f721fc7" + } + }, + "schemaVersion": "3.4.11", + "updatedAt": "2023-10-25T07:49:45.634Z", + "networkType": "ethereum", + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } +} \ No newline at end of file From 18ae04c18a4478d31d2ff5b610ea0e1bdf3523ae Mon Sep 17 00:00:00 2001 From: AmandineBI Date: Wed, 25 Oct 2023 14:37:51 +0200 Subject: [PATCH 30/51] Working financial chart --- src/components/FinancialChart.tsx | 254 ++---------------------------- src/utils/constants.ts | 245 +++++++++++++++++++++++++++- 2 files changed, 253 insertions(+), 246 deletions(-) diff --git a/src/components/FinancialChart.tsx b/src/components/FinancialChart.tsx index e062e05..4e7970f 100644 --- a/src/components/FinancialChart.tsx +++ b/src/components/FinancialChart.tsx @@ -1,264 +1,28 @@ -import React from "react"; +import React, { useState } from "react"; import dynamic from 'next/dynamic'; +import { defaultChartData } from "~/utils/constants"; const ReactApexChart = dynamic(() => import('react-apexcharts'), { ssr: false, }); + const FinancialChart = () => { - const state ={ + const [chartData, setChartData] = useState(defaultChartData) + + const state = { options: { series: [{ - data: [{ - x: new Date(1538778600000), - y: [6629.81, 6650.5, 6623.04, 6633.33] - }, - { - x: new Date(1538780400000), - y: [6632.01, 6643.59, 6620, 6630.11] - }, - { - x: new Date(1538782200000), - y: [6630.71, 6648.95, 6623.34, 6635.65] - }, - { - x: new Date(1538784000000), - y: [6635.65, 6651, 6629.67, 6638.24] - }, - { - x: new Date(1538785800000), - y: [6638.24, 6640, 6620, 6624.47] - }, - { - x: new Date(1538787600000), - y: [6624.53, 6636.03, 6621.68, 6624.31] - }, - { - x: new Date(1538789400000), - y: [6624.61, 6632.2, 6617, 6626.02] - }, - { - x: new Date(1538791200000), - y: [6627, 6627.62, 6584.22, 6603.02] - }, - { - x: new Date(1538793000000), - y: [6605, 6608.03, 6598.95, 6604.01] - }, - { - x: new Date(1538794800000), - y: [6604.5, 6614.4, 6602.26, 6608.02] - }, - { - x: new Date(1538796600000), - y: [6608.02, 6610.68, 6601.99, 6608.91] - }, - { - x: new Date(1538798400000), - y: [6608.91, 6618.99, 6608.01, 6612] - }, - { - x: new Date(1538800200000), - y: [6612, 6615.13, 6605.09, 6612] - }, - { - x: new Date(1538802000000), - y: [6612, 6624.12, 6608.43, 6622.95] - }, - { - x: new Date(1538803800000), - y: [6623.91, 6623.91, 6615, 6615.67] - }, - { - x: new Date(1538805600000), - y: [6618.69, 6618.74, 6610, 6610.4] - }, - { - x: new Date(1538807400000), - y: [6611, 6622.78, 6610.4, 6614.9] - }, - { - x: new Date(1538809200000), - y: [6614.9, 6626.2, 6613.33, 6623.45] - }, - { - x: new Date(1538811000000), - y: [6623.48, 6627, 6618.38, 6620.35] - }, - { - x: new Date(1538812800000), - y: [6619.43, 6620.35, 6610.05, 6615.53] - }, - { - x: new Date(1538814600000), - y: [6615.53, 6617.93, 6610, 6615.19] - }, - { - x: new Date(1538816400000), - y: [6615.19, 6621.6, 6608.2, 6620] - }, - { - x: new Date(1538818200000), - y: [6619.54, 6625.17, 6614.15, 6620] - }, - { - x: new Date(1538820000000), - y: [6620.33, 6634.15, 6617.24, 6624.61] - }, - { - x: new Date(1538821800000), - y: [6625.95, 6626, 6611.66, 6617.58] - }, - { - x: new Date(1538823600000), - y: [6619, 6625.97, 6595.27, 6598.86] - }, - { - x: new Date(1538825400000), - y: [6598.86, 6598.88, 6570, 6587.16] - }, - { - x: new Date(1538827200000), - y: [6588.86, 6600, 6580, 6593.4] - }, - { - x: new Date(1538829000000), - y: [6593.99, 6598.89, 6585, 6587.81] - }, - { - x: new Date(1538830800000), - y: [6587.81, 6592.73, 6567.14, 6578] - }, - { - x: new Date(1538832600000), - y: [6578.35, 6581.72, 6567.39, 6579] - }, - { - x: new Date(1538834400000), - y: [6579.38, 6580.92, 6566.77, 6575.96] - }, - { - x: new Date(1538836200000), - y: [6575.96, 6589, 6571.77, 6588.92] - }, - { - x: new Date(1538838000000), - y: [6588.92, 6594, 6577.55, 6589.22] - }, - { - x: new Date(1538839800000), - y: [6589.3, 6598.89, 6589.1, 6596.08] - }, - { - x: new Date(1538841600000), - y: [6597.5, 6600, 6588.39, 6596.25] - }, - { - x: new Date(1538843400000), - y: [6598.03, 6600, 6588.73, 6595.97] - }, - { - x: new Date(1538845200000), - y: [6595.97, 6602.01, 6588.17, 6602] - }, - { - x: new Date(1538847000000), - y: [6602, 6607, 6596.51, 6599.95] - }, - { - x: new Date(1538848800000), - y: [6600.63, 6601.21, 6590.39, 6591.02] - }, - { - x: new Date(1538850600000), - y: [6591.02, 6603.08, 6591, 6591] - }, - { - x: new Date(1538852400000), - y: [6591, 6601.32, 6585, 6592] - }, - { - x: new Date(1538854200000), - y: [6593.13, 6596.01, 6590, 6593.34] - }, - { - x: new Date(1538856000000), - y: [6593.34, 6604.76, 6582.63, 6593.86] - }, - { - x: new Date(1538857800000), - y: [6593.86, 6604.28, 6586.57, 6600.01] - }, - { - x: new Date(1538859600000), - y: [6601.81, 6603.21, 6592.78, 6596.25] - }, - { - x: new Date(1538861400000), - y: [6596.25, 6604.2, 6590, 6602.99] - }, - { - x: new Date(1538863200000), - y: [6602.99, 6606, 6584.99, 6587.81] - }, - { - x: new Date(1538865000000), - y: [6587.81, 6595, 6583.27, 6591.96] - }, - { - x: new Date(1538866800000), - y: [6591.97, 6596.07, 6585, 6588.39] - }, - { - x: new Date(1538868600000), - y: [6587.6, 6598.21, 6587.6, 6594.27] - }, - { - x: new Date(1538870400000), - y: [6596.44, 6601, 6590, 6596.55] - }, - { - x: new Date(1538872200000), - y: [6598.91, 6605, 6596.61, 6600.02] - }, - { - x: new Date(1538874000000), - y: [6600.55, 6605, 6589.14, 6593.01] - }, - { - x: new Date(1538875800000), - y: [6593.15, 6605, 6592, 6603.06] - }, - { - x: new Date(1538877600000), - y: [6603.07, 6604.5, 6599.09, 6603.89] - }, - { - x: new Date(1538879400000), - y: [6604.44, 6604.44, 6600, 6603.5] - }, - { - x: new Date(1538881200000), - y: [6603.5, 6603.99, 6597.5, 6603.86] - }, - { - x: new Date(1538883000000), - y: [6603.85, 6605, 6600, 6604.07] - }, - { - x: new Date(1538884800000), - y: [6604.98, 6606, 6604.07, 6606] - }, - ] + data: chartData, }], chart: { type: 'candlestick', height: 350 }, - title: { + /*title: { text: 'CandleStick Chart', align: 'left' - }, + },*/ xaxis: { type: 'datetime' }, diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 9c39ed0..8290dcc 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -5,4 +5,247 @@ const defaultPair: Pair = { denominator: "USDC", }; -export { defaultPair }; +const defaultChartData: {x: Date, y: number[]}[] = [ + { + x: new Date(1538778600000), + y: [6629.81, 6650.5, 6623.04, 6633.33] + }, + { + x: new Date(1538780400000), + y: [6632.01, 6643.59, 6620, 6630.11] + }, + { + x: new Date(1538782200000), + y: [6630.71, 6648.95, 6623.34, 6635.65] + }, + { + x: new Date(1538784000000), + y: [6635.65, 6651, 6629.67, 6638.24] + }, + { + x: new Date(1538785800000), + y: [6638.24, 6640, 6620, 6624.47] + }, + { + x: new Date(1538787600000), + y: [6624.53, 6636.03, 6621.68, 6624.31] + }, + { + x: new Date(1538789400000), + y: [6624.61, 6632.2, 6617, 6626.02] + }, + { + x: new Date(1538791200000), + y: [6627, 6627.62, 6584.22, 6603.02] + }, + { + x: new Date(1538793000000), + y: [6605, 6608.03, 6598.95, 6604.01] + }, + { + x: new Date(1538794800000), + y: [6604.5, 6614.4, 6602.26, 6608.02] + }, + { + x: new Date(1538796600000), + y: [6608.02, 6610.68, 6601.99, 6608.91] + }, + { + x: new Date(1538798400000), + y: [6608.91, 6618.99, 6608.01, 6612] + }, + { + x: new Date(1538800200000), + y: [6612, 6615.13, 6605.09, 6612] + }, + { + x: new Date(1538802000000), + y: [6612, 6624.12, 6608.43, 6622.95] + }, + { + x: new Date(1538803800000), + y: [6623.91, 6623.91, 6615, 6615.67] + }, + { + x: new Date(1538805600000), + y: [6618.69, 6618.74, 6610, 6610.4] + }, + { + x: new Date(1538807400000), + y: [6611, 6622.78, 6610.4, 6614.9] + }, + { + x: new Date(1538809200000), + y: [6614.9, 6626.2, 6613.33, 6623.45] + }, + { + x: new Date(1538811000000), + y: [6623.48, 6627, 6618.38, 6620.35] + }, + { + x: new Date(1538812800000), + y: [6619.43, 6620.35, 6610.05, 6615.53] + }, + { + x: new Date(1538814600000), + y: [6615.53, 6617.93, 6610, 6615.19] + }, + { + x: new Date(1538816400000), + y: [6615.19, 6621.6, 6608.2, 6620] + }, + { + x: new Date(1538818200000), + y: [6619.54, 6625.17, 6614.15, 6620] + }, + { + x: new Date(1538820000000), + y: [6620.33, 6634.15, 6617.24, 6624.61] + }, + { + x: new Date(1538821800000), + y: [6625.95, 6626, 6611.66, 6617.58] + }, + { + x: new Date(1538823600000), + y: [6619, 6625.97, 6595.27, 6598.86] + }, + { + x: new Date(1538825400000), + y: [6598.86, 6598.88, 6570, 6587.16] + }, + { + x: new Date(1538827200000), + y: [6588.86, 6600, 6580, 6593.4] + }, + { + x: new Date(1538829000000), + y: [6593.99, 6598.89, 6585, 6587.81] + }, + { + x: new Date(1538830800000), + y: [6587.81, 6592.73, 6567.14, 6578] + }, + { + x: new Date(1538832600000), + y: [6578.35, 6581.72, 6567.39, 6579] + }, + { + x: new Date(1538834400000), + y: [6579.38, 6580.92, 6566.77, 6575.96] + }, + { + x: new Date(1538836200000), + y: [6575.96, 6589, 6571.77, 6588.92] + }, + { + x: new Date(1538838000000), + y: [6588.92, 6594, 6577.55, 6589.22] + }, + { + x: new Date(1538839800000), + y: [6589.3, 6598.89, 6589.1, 6596.08] + }, + { + x: new Date(1538841600000), + y: [6597.5, 6600, 6588.39, 6596.25] + }, + { + x: new Date(1538843400000), + y: [6598.03, 6600, 6588.73, 6595.97] + }, + { + x: new Date(1538845200000), + y: [6595.97, 6602.01, 6588.17, 6602] + }, + { + x: new Date(1538847000000), + y: [6602, 6607, 6596.51, 6599.95] + }, + { + x: new Date(1538848800000), + y: [6600.63, 6601.21, 6590.39, 6591.02] + }, + { + x: new Date(1538850600000), + y: [6591.02, 6603.08, 6591, 6591] + }, + { + x: new Date(1538852400000), + y: [6591, 6601.32, 6585, 6592] + }, + { + x: new Date(1538854200000), + y: [6593.13, 6596.01, 6590, 6593.34] + }, + { + x: new Date(1538856000000), + y: [6593.34, 6604.76, 6582.63, 6593.86] + }, + { + x: new Date(1538857800000), + y: [6593.86, 6604.28, 6586.57, 6600.01] + }, + { + x: new Date(1538859600000), + y: [6601.81, 6603.21, 6592.78, 6596.25] + }, + { + x: new Date(1538861400000), + y: [6596.25, 6604.2, 6590, 6602.99] + }, + { + x: new Date(1538863200000), + y: [6602.99, 6606, 6584.99, 6587.81] + }, + { + x: new Date(1538865000000), + y: [6587.81, 6595, 6583.27, 6591.96] + }, + { + x: new Date(1538866800000), + y: [6591.97, 6596.07, 6585, 6588.39] + }, + { + x: new Date(1538868600000), + y: [6587.6, 6598.21, 6587.6, 6594.27] + }, + { + x: new Date(1538870400000), + y: [6596.44, 6601, 6590, 6596.55] + }, + { + x: new Date(1538872200000), + y: [6598.91, 6605, 6596.61, 6600.02] + }, + { + x: new Date(1538874000000), + y: [6600.55, 6605, 6589.14, 6593.01] + }, + { + x: new Date(1538875800000), + y: [6593.15, 6605, 6592, 6603.06] + }, + { + x: new Date(1538877600000), + y: [6603.07, 6604.5, 6599.09, 6603.89] + }, + { + x: new Date(1538879400000), + y: [6604.44, 6604.44, 6600, 6603.5] + }, + { + x: new Date(1538881200000), + y: [6603.5, 6603.99, 6597.5, 6603.86] + }, + { + x: new Date(1538883000000), + y: [6603.85, 6605, 6600, 6604.07] + }, + { + x: new Date(1538884800000), + y: [6604.98, 6606, 6604.07, 6606] + }, +] + +export { defaultPair, defaultChartData }; From ddc583d51719953033c09a5377f8ffd1d084f442 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Wed, 25 Oct 2023 15:12:55 +0200 Subject: [PATCH 31/51] new ABI methods --- src/components/BuyPanel.tsx | 64 +++++++++++++++++++++-------- src/hooks/wagmi/config/testABI.json | 35 ++++++++++++++++ src/utils/constants.ts | 4 +- 3 files changed, 86 insertions(+), 17 deletions(-) diff --git a/src/components/BuyPanel.tsx b/src/components/BuyPanel.tsx index a59dbc1..1cbca4e 100644 --- a/src/components/BuyPanel.tsx +++ b/src/components/BuyPanel.tsx @@ -1,14 +1,19 @@ import { Label } from "~/components/ui/label"; import { Input } from "~/components/ui/input"; import { Button } from "~/components/ui/button"; -import { defaultPair } from "~/utils/constants"; +import { contractAddress, defaultPair } from "~/utils/constants"; import useTradesStore from "~/stores/tradesStore"; import { type ExecutedTrade } from "~/types"; -import { useContractWrite, type useBalance, useAccount } from "wagmi"; +import { + useContractWrite, + type useBalance, + useAccount, + useContractRead, +} from "wagmi"; import { Separator } from "~/components/ui/separator"; import React from "react"; import { Usdt, Xdc } from "~/components/icons"; -import { getMockPosition } from "~/utils/helpers"; +import { formatWholePrice, getMockPosition } from "~/utils/helpers"; const BuyPanel = ({ balance, @@ -53,7 +58,10 @@ const BuyPanel = ({ const regEx = /^[0-9]+(\.[0-9]{0,2})?$/; if (value === "" || regEx.test(value)) { // check if the amount is more than the balance - if (balance && parseFloat(value) > parseFloat(balance.formatted)) { + if ( + value === "" || + (balance && parseFloat(value) > parseFloat(balance.formatted)) + ) { // if it is disable the buy btn setDisabled(true); } else { @@ -61,6 +69,10 @@ const BuyPanel = ({ setDisabled(false); } setCollateral(value); + if (!value) { + setAmount(""); + return; + } // calculate the amount setAmount(getMockPosition(value)); } @@ -121,9 +133,9 @@ const BuyPanel = ({ />
        - + +
      • lol
      • lol
      • lol
      • @@ -234,16 +255,13 @@ const BuyDialog: React.FC<{
      diff --git a/src/utils/constants.ts b/src/utils/constants.ts index b795722..b86b147 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -5,6 +5,7 @@ const defaultPair: Pair = { denominator: "USDT", }; -const contractAddress = "0xf7FF85EB675096Da320eF4a6ad06393c91b07CD1"; +const contractAddress: `0x${string}` = + "0xf7FF85EB675096Da320eF4a6ad06393c91b07CD1"; export { defaultPair, contractAddress }; From 4056c248d0a7b4e232e986e60eec9868530b26b5 Mon Sep 17 00:00:00 2001 From: AmandineBI Date: Wed, 25 Oct 2023 18:18:29 +0200 Subject: [PATCH 37/51] Mockup chart data and add time ranges --- src/components/FinancialChart.tsx | 34 +++++++++++++++++-- src/pages/index.tsx | 1 - src/types/index.ts | 10 ++++++ src/utils/financialData.ts | 56 +++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 src/utils/financialData.ts diff --git a/src/components/FinancialChart.tsx b/src/components/FinancialChart.tsx index 57f7067..dda3b73 100644 --- a/src/components/FinancialChart.tsx +++ b/src/components/FinancialChart.tsx @@ -4,13 +4,20 @@ import { defaultChartData } from "~/utils/constants"; const ReactApexChart = dynamic(() => import('react-apexcharts'), { ssr: false, }); +import { SampleFinancialData } from "~/utils/financialData"; +import { Button } from "./ui/button"; const FinancialChart = () => { - const [chartData, setChartData] = useState(defaultChartData); - const [chartHeight, setChartHeight] = useState(450); + const [timeRange, setTimeRange] = useState(30); + const [chartData, setChartData] = useState(SampleFinancialData + .create(120, timeRange).map(e => ({ + x: new Date(e.time), + y: [e.open, e.high, e.low, e.close], + }))); + const [chartHeight, setChartHeight] = useState(450); const state = { options: { @@ -47,6 +54,11 @@ const FinancialChart = () => { } }; + const changeTimeRange = (mins: number) => { + setTimeRange(() => mins); + console.log(timeRange); + }; + // Adjust chart height when the window resizes const adjustChartHeight = () => { const newHeight = window.innerHeight*0.4; @@ -62,8 +74,24 @@ const FinancialChart = () => { return () => window.removeEventListener("resize", adjustChartHeight); }, []); + useEffect(() => { + setChartData(SampleFinancialData + .create(120, timeRange).map(e => ({ + x: new Date(e.time), + y: [e.open, e.high, e.low, e.close], + }))); + }, [timeRange]) + return ( -
      +
      +
      + + + + + + +
      ); diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7ed4467..85447b8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -101,5 +101,4 @@ import { defaultPair } from "~/utils/constants"; import { useAccount, useBalance } from "wagmi"; import { Loader2 } from "lucide-react"; import React from "react"; -import { Usdt, Xdc } from "~/components/icons"; import { BuyPanel, SellPanel } from "~/components"; diff --git a/src/types/index.ts b/src/types/index.ts index 312fcf8..3b1dbbe 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -14,3 +14,13 @@ export interface ExecutedTrade { entry: number; liquidation: number; } + +export interface FinancialData { + time: number; + label: string; + open: number; + high: number; + low: number; + close: number; + volume: number; +} diff --git a/src/utils/financialData.ts b/src/utils/financialData.ts new file mode 100644 index 0000000..3d26e2d --- /dev/null +++ b/src/utils/financialData.ts @@ -0,0 +1,56 @@ +import type { FinancialData } from '~/types'; + +export class SampleFinancialData { + + public static create(items?: number, rangeMins?: number): FinancialData[] { + // initial values + let v = 10000; + let o = 0.0492; + let h = Math.round((o + (Math.random() * 0.001)) * 10000) / 10000; + let l = Math.round((o - (Math.random() * 0.001)) * 10000) / 10000; + let c = Math.round((l + (Math.random() * (h - l))) * 10000) / 10000; + + if (items === undefined) { + items = 120; + } + + if (rangeMins === undefined) { + rangeMins = 30; + } + + //const today = new Date(); + const end = new Date().getTime(); + let time = end - items * rangeMins * 60 * 1000; + + const data: FinancialData[] = []; + for (let i = 0; i < items; i++) { + const label = this.getShortDate(new Date(time), true); + // adding new data item + data.push({"time": time, "label": label, "open": o, "high": h, "low": l, "close": c, "volume": v}); + // generating new values + const mod = Math.random() - 0.45; + o = Math.round((c + (mod * 0.0001)) * 10000) / 10000; + v = Math.round(v + (mod * 5 * 100)); + h = Math.round((o + (Math.random() * 0.001)) * 10000) / 10000; + l = Math.round((o - (Math.random() * 0.001)) * 10000) / 10000; + c = Math.round((l + (Math.random() * (h - l))) * 10000) / 10000; + time += rangeMins * 60 * 1000; + } + return data; + } + + public static getShortDate(dt: Date, showYear: boolean): string { + const months = [ + "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + ]; + const ind = dt.getMonth(); + const day = dt.getDay() + 1; + let label = months[ind] + " " + day; + if (showYear) { + label += ", " + dt.getFullYear(); + } + return label; + } +} + +//this.data = SampleFinancialData.create(); From 4070d83b8fc766cc68937cfd72284174b0059e52 Mon Sep 17 00:00:00 2001 From: AmandineBI Date: Wed, 25 Oct 2023 19:18:04 +0200 Subject: [PATCH 38/51] Create chartDataStore --- src/components/FinancialChart.tsx | 12 ++++-------- src/stores/chartDataStore.ts | 20 ++++++++++++++++++++ src/types/index.ts | 5 +++++ src/utils/financialData.ts | 7 ++++++- 4 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 src/stores/chartDataStore.ts diff --git a/src/components/FinancialChart.tsx b/src/components/FinancialChart.tsx index dda3b73..b26b3d7 100644 --- a/src/components/FinancialChart.tsx +++ b/src/components/FinancialChart.tsx @@ -1,22 +1,19 @@ import React, { useEffect, useState } from "react"; import dynamic from 'next/dynamic'; -import { defaultChartData } from "~/utils/constants"; const ReactApexChart = dynamic(() => import('react-apexcharts'), { ssr: false, }); import { SampleFinancialData } from "~/utils/financialData"; import { Button } from "./ui/button"; +import useChartDataStore from "~/stores/chartDataStore"; const FinancialChart = () => { - const [timeRange, setTimeRange] = useState(30); + const chartDataStore = useChartDataStore((state) => state.data); - const [chartData, setChartData] = useState(SampleFinancialData - .create(120, timeRange).map(e => ({ - x: new Date(e.time), - y: [e.open, e.high, e.low, e.close], - }))); + const [timeRange, setTimeRange] = useState(30); + const [chartData, setChartData] = useState(chartDataStore); const [chartHeight, setChartHeight] = useState(450); const state = { @@ -56,7 +53,6 @@ const FinancialChart = () => { const changeTimeRange = (mins: number) => { setTimeRange(() => mins); - console.log(timeRange); }; // Adjust chart height when the window resizes diff --git a/src/stores/chartDataStore.ts b/src/stores/chartDataStore.ts new file mode 100644 index 0000000..e2a9e19 --- /dev/null +++ b/src/stores/chartDataStore.ts @@ -0,0 +1,20 @@ +import { create } from "zustand"; +import { SampleFinancialData } from "~/utils/financialData"; +import type { D } from "~/types"; + +const useChartDataStore = create<{ + data: D[]; + getLastPrice: () => number; + }>((_set) => { + const data = SampleFinancialData + .create(120 * 1440, 1).map(e => ({ + x: new Date(e.time), + y: [e.open, e.high, e.low, e.close], + })) + return { + data: data, + getLastPrice: () => data[-1]?.y[3] ?? 0 + } +}); + +export default useChartDataStore; diff --git a/src/types/index.ts b/src/types/index.ts index 3b1dbbe..847c1e3 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -24,3 +24,8 @@ export interface FinancialData { close: number; volume: number; } + +export interface D { + x: Date + y: number[] +} diff --git a/src/utils/financialData.ts b/src/utils/financialData.ts index 3d26e2d..f9a05ec 100644 --- a/src/utils/financialData.ts +++ b/src/utils/financialData.ts @@ -53,4 +53,9 @@ export class SampleFinancialData { } } -//this.data = SampleFinancialData.create(); +export class ReduceFinancialData { + public static aggregateData(detailed: FinancialData, level: number) { + console.log(detailed); + //const array = Enumerable.From(detailed).GroupBy + } +} \ No newline at end of file From 5baeda572e9188be1a20b5e64c624bc56c68a5c6 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Wed, 25 Oct 2023 19:19:00 +0200 Subject: [PATCH 39/51] Create long positions --- src/components/BuyPanel.tsx | 200 ++++++++++++++++------------------- src/components/History.tsx | 69 +++++++++--- src/stores/positionsStore.ts | 22 ++++ src/types/index.ts | 10 ++ src/utils/constants.ts | 4 +- src/utils/helpers.ts | 2 +- 6 files changed, 184 insertions(+), 123 deletions(-) create mode 100644 src/stores/positionsStore.ts diff --git a/src/components/BuyPanel.tsx b/src/components/BuyPanel.tsx index 3fadc2e..9be427e 100644 --- a/src/components/BuyPanel.tsx +++ b/src/components/BuyPanel.tsx @@ -1,10 +1,8 @@ import { Label } from "~/components/ui/label"; import { Input } from "~/components/ui/input"; import { Button } from "~/components/ui/button"; -import { contractAddress, defaultPair } from "~/utils/constants"; -import useTradesStore from "~/stores/tradesStore"; -import { type ExecutedTrade } from "~/types"; -import { type useBalance, useWaitForTransaction } from "wagmi"; +import { contractAddress, currentPrice } from "~/utils/constants"; +import { type useBalance, useContractEvent } from "wagmi"; import { Separator } from "~/components/ui/separator"; import React from "react"; import { Usdt, Xdc } from "~/components/icons"; @@ -15,28 +13,6 @@ const BuyPanel = ({ }: { balance: ReturnType["data"]; }) => { - const addTransaction = useTradesStore((state) => state.addTrade); - - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - // create randomized trade - const trade: ExecutedTrade = { - hash: Math.random().toString(), - pair: defaultPair, - collateral: parseFloat(collateral), - entry: 1.21, - liquidation: 0, - // pnl is a random number between -1000 and 1000 - pnl: Math.floor(Math.random() * 2000) - 1000, - side: "long", - size: parseFloat(amount), - timestamp: new Date().toISOString(), - }; - - addTransaction(trade); - console.log("submit"); - }; - const setMaxAmount = () => { if (!balance) return; setCollateral(balance.formatted); @@ -50,11 +26,12 @@ const BuyPanel = ({ const handleCollateralChange = (e: React.ChangeEvent) => { // this need to be formatted as a number with decimals separated by a dot const value = e.target.value; - const regEx = /^[0-9]+(\.[0-9]{0,2})?$/; + + const regEx = /^[0-9]*$/; if (value === "" || regEx.test(value)) { // check if the amount is more than the balance if ( - value === "" || + value === "0" || (balance && parseFloat(value) > parseFloat(balance.formatted)) ) { // if it is disable the buy btn @@ -69,15 +46,12 @@ const BuyPanel = ({ return; } // calculate the amount - setAmount(getMockPosition(value)); + setAmount((parseFloat(value) * 1.1).toFixed(2).toString()); } }; return ( -
      +
      - +
      ); }; @@ -175,96 +149,110 @@ const BuyDialog: React.FC<{ amount: string; }> = ({ children, collateral, amount }) => { const [open, setOpen] = React.useState(false); - const [txHash, setTxHash] = React.useState<`0x${string}`>(); + const [isLoading, setIsLoading] = React.useState(false); const closeModal = () => { setOpen(false); - setTxHash(undefined); }; + return ( + (isLoading ? null : setOpen(o))}> + {children} + {collateral && amount && open && ( + + )} + + ); +}; + +const BuyDialogContent = ({ + collateral, + amount, + closeModal, + setIsLoading, + isLoading, +}: { + collateral: string; + amount: string; + closeModal: () => void; + setIsLoading: (b: boolean) => void; + isLoading: boolean; +}) => { + useContractEvent({ + address: contractAddress, + abi: testABI, + eventName: "PositionOpened", + listener(_position) { + setIsLoading(false); + toast.success("Your order has been placed!"); + closeModal(); + }, + }); + const { config } = usePrepareContractWrite({ address: contractAddress, abi: testABI, functionName: "openPosition", - args: [10, 35000, 0], + // size, entryPrice, side (0 = long, 1 = short) + args: [collateral, currentPrice.toFixed(0), 0], }); - const { writeAsync, isLoading: isPreparing } = useContractWrite(config); - // const { - // data: openPositions, - // isError: openPositionsError, - // isLoading: openPositionsLoading, - // } = useContractRead({ - // address: contractAddress, - // abi: testABI, - // functionName: "getPositions", - // args: [], - // }); - const submit = async () => { if (!writeAsync) return; - - const { hash } = await writeAsync(); - setTxHash(hash); + setIsLoading(true); + try { + await writeAsync(); + } catch (e) { + setIsLoading(false); + toast.error("Something went wrong"); + } }; - const { isLoading } = useWaitForTransaction({ - hash: txHash, - onSettled(data, error) { - if (error) { - console.log(error); - toast.error("Something went wrong while placing your order :("); - return; - } - console.log(data); - toast.success("Your order has been placed!"); - closeModal(); - }, - }); - - const disabled = !writeAsync || isLoading || isPreparing; + const disabled = isLoading || isPreparing; return ( - - {children} - - - Confirm Buy / Long - - -
      -
      -

      Pay {collateral} USDT

      - -

      - To buy {formatWholePrice(parseFloat(amount))} XDC -

      -
      - - -
        -
      • - -
      • -
      • lol
      • -
      • lol
      • -
      • lol
      • -
      • lol
      • -
      + + + Confirm Buy / Long + + +
      +
      +

      Pay {collateral} USDT

      + +

      + To buy {formatWholePrice(parseFloat(amount))} XDC +

      - - - - -
      + + +
        +
      • + +
      • +
      • lol
      • +
      • lol
      • +
      • lol
      • +
      • lol
      • +
      +
      + + + + ); }; diff --git a/src/components/History.tsx b/src/components/History.tsx index 9d43c35..76b7b6b 100644 --- a/src/components/History.tsx +++ b/src/components/History.tsx @@ -3,9 +3,12 @@ import { useAutoAnimate } from "@formkit/auto-animate/react"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs"; import { Button } from "./ui/button"; import { XIcon } from "lucide-react"; -import useTradesStore from "~/stores/tradesStore"; -import type { Pair } from "~/types"; +import type { Pair, Position } from "~/types"; import { formatWholePrice } from "~/utils/helpers"; +import { useContractEvent } from "wagmi"; +import { contractAddress, currentPrice, defaultPair } from "~/utils/constants"; +import { testABI } from "~/hooks/wagmi/config"; +import usePositionsStore from "~/stores/positionsStore"; const History = () => { return ( @@ -33,13 +36,49 @@ export default History; const Positions = () => { const [parent] = useAutoAnimate(); - const trades = useTradesStore((state) => state.trades); - const closeTrade = useTradesStore((state) => state.removeTrade); + // const trades = useTradesStore((state) => state.trades); + // const closeTrade = useTradesStore((state) => state.removeTrade); + + const positions = usePositionsStore((state) => state.positions); + const addPosition = usePositionsStore((state) => state.addPosition); + const removePosition = usePositionsStore((state) => state.removePosition); const pairObjToString = (pair: Pair) => { return `${pair.numerator.toUpperCase()}/${pair.denominator.toUpperCase()}`; }; + useContractEvent({ + address: contractAddress, + abi: testABI, + eventName: "PositionOpened", + + listener(res: unknown) { + // add trade to store + // @ts-expect-error TODO: fix this + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const position = res[0].args as Position; + + // pair and pnl are not included in the event + addPosition({ + ...position, + entryPrice: Number(position.entryPrice), + size: Number(position.size), + side: Number(position.side) as 0 | 1, + pair: defaultPair, + }); + + console.log({ position }); + }, + }); + + const getPnl = (position: Position) => { + const { entryPrice, side } = position; + const pnl = + (side === 0 ? currentPrice - entryPrice : entryPrice - currentPrice) * + position.size; + return pnl; + }; + return ( @@ -55,34 +94,34 @@ const Positions = () => { - {trades.map((item) => ( + {positions.map((item) => ( - + - - - + + + ))} diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx new file mode 100644 index 0000000..7d1c12b --- /dev/null +++ b/src/components/ui/alert-dialog.tsx @@ -0,0 +1,139 @@ +import * as React from "react" +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog" + +import { cn } from "~/components/lib/utils" +import { buttonVariants } from "src/components//ui/button" + +const AlertDialog = AlertDialogPrimitive.Root + +const AlertDialogTrigger = AlertDialogPrimitive.Trigger + +const AlertDialogPortal = AlertDialogPrimitive.Portal + +const AlertDialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + +)) +AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName + +const AlertDialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + +)) +AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName + +const AlertDialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
      +) +AlertDialogHeader.displayName = "AlertDialogHeader" + +const AlertDialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
      +) +AlertDialogFooter.displayName = "AlertDialogFooter" + +const AlertDialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName + +const AlertDialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogDescription.displayName = + AlertDialogPrimitive.Description.displayName + +const AlertDialogAction = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName + +const AlertDialogCancel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +} diff --git a/src/types/index.ts b/src/types/index.ts index 94f61dc..de5116d 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -19,7 +19,7 @@ export type Position = { pair: Pair; // from chain entryPrice: number; - positionId: number; + positionId: `0x${string}`; side: 0 | 1; // 0 = long, 1 = short size: number; trader: `0x${string}`; @@ -36,6 +36,6 @@ export interface FinancialData { } export interface D { - x: Date - y: number[] + x: Date; + y: number[]; } From 23034f4f65d1adc1678e8c8a3f27478e6d4ab82f Mon Sep 17 00:00:00 2001 From: Loa212 Date: Wed, 25 Oct 2023 21:54:02 +0200 Subject: [PATCH 42/51] handle rejectjon from metamask --- src/components/ClosePositionDialog.tsx | 29 ++++++++--- src/components/ui/alert-dialog.tsx | 66 +++++++++++++------------- 2 files changed, 55 insertions(+), 40 deletions(-) diff --git a/src/components/ClosePositionDialog.tsx b/src/components/ClosePositionDialog.tsx index 4b5ad89..62a7b81 100644 --- a/src/components/ClosePositionDialog.tsx +++ b/src/components/ClosePositionDialog.tsx @@ -15,10 +15,11 @@ import { XIcon } from "lucide-react"; import { useContractWrite, usePrepareContractWrite } from "wagmi"; import { testABI } from "~/hooks/wagmi/config"; import { contractAddress } from "~/utils/constants"; +import toast from "react-hot-toast"; const ClosePositionDialog = ({ positionId }: { positionId: `0x${string}` }) => { + const [open, setOpen] = React.useState(false); // ------------------ contract close logic ------------------ - const { config } = usePrepareContractWrite({ address: contractAddress, abi: testABI, @@ -28,9 +29,24 @@ const ClosePositionDialog = ({ positionId }: { positionId: `0x${string}` }) => { }); const { writeAsync, isLoading: isPreparing } = useContractWrite(config); + const closePosition = async () => { + if (!writeAsync) return; + // setIsLoading(true); + try { + await writeAsync(); + setOpen(false); + } catch (e) { + // setIsLoading(false); + toast.error("Something went wrong"); + } + }; + // ------------------ ------------------ return ( - + (isPreparing ? null : setOpen(o))} + > diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx index 7d1c12b..5bfa1d8 100644 --- a/src/components/ui/alert-dialog.tsx +++ b/src/components/ui/alert-dialog.tsx @@ -1,14 +1,14 @@ -import * as React from "react" -import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog" +import * as React from "react"; +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"; -import { cn } from "~/components/lib/utils" -import { buttonVariants } from "src/components//ui/button" +import { cn } from "~/components/lib/utils"; +import { buttonVariants } from "src/components//ui/button"; -const AlertDialog = AlertDialogPrimitive.Root +const AlertDialog = AlertDialogPrimitive.Root; -const AlertDialogTrigger = AlertDialogPrimitive.Trigger +const AlertDialogTrigger = AlertDialogPrimitive.Trigger; -const AlertDialogPortal = AlertDialogPrimitive.Portal +const AlertDialogPortal = AlertDialogPrimitive.Portal; const AlertDialogOverlay = React.forwardRef< React.ElementRef, @@ -16,14 +16,14 @@ const AlertDialogOverlay = React.forwardRef< >(({ className, children, ...props }, ref) => ( -)) -AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName +)); +AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName; const AlertDialogContent = React.forwardRef< React.ElementRef, @@ -34,14 +34,14 @@ const AlertDialogContent = React.forwardRef< -)) -AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName +)); +AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName; const AlertDialogHeader = ({ className, @@ -50,12 +50,12 @@ const AlertDialogHeader = ({
      -) -AlertDialogHeader.displayName = "AlertDialogHeader" +); +AlertDialogHeader.displayName = "AlertDialogHeader"; const AlertDialogFooter = ({ className, @@ -64,12 +64,12 @@ const AlertDialogFooter = ({
      -) -AlertDialogFooter.displayName = "AlertDialogFooter" +); +AlertDialogFooter.displayName = "AlertDialogFooter"; const AlertDialogTitle = React.forwardRef< React.ElementRef, @@ -77,11 +77,11 @@ const AlertDialogTitle = React.forwardRef< >(({ className, ...props }, ref) => ( -)) -AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName +)); +AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName; const AlertDialogDescription = React.forwardRef< React.ElementRef, @@ -92,9 +92,9 @@ const AlertDialogDescription = React.forwardRef< className={cn("text-sm text-muted-foreground", className)} {...props} /> -)) +)); AlertDialogDescription.displayName = - AlertDialogPrimitive.Description.displayName + AlertDialogPrimitive.Description.displayName; const AlertDialogAction = React.forwardRef< React.ElementRef, @@ -105,8 +105,8 @@ const AlertDialogAction = React.forwardRef< className={cn(buttonVariants(), className)} {...props} /> -)) -AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName +)); +AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName; const AlertDialogCancel = React.forwardRef< React.ElementRef, @@ -115,14 +115,14 @@ const AlertDialogCancel = React.forwardRef< -)) -AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName +)); +AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName; export { AlertDialog, @@ -136,4 +136,4 @@ export { AlertDialogDescription, AlertDialogAction, AlertDialogCancel, -} +}; From 7e2cc420db284c8317c744da8e8cfa046cfe3bec Mon Sep 17 00:00:00 2001 From: Loa212 Date: Wed, 25 Oct 2023 22:03:30 +0200 Subject: [PATCH 43/51] fix env errors --- .env.example | 2 +- src/env.mjs | 4 +- src/pages/_app.tsx | 3 +- src/utils/constants.ts | 257 +++++++++++++++++++++-------------------- 4 files changed, 136 insertions(+), 130 deletions(-) diff --git a/.env.example b/.env.example index 7088e05..5aadb88 100644 --- a/.env.example +++ b/.env.example @@ -2,7 +2,7 @@ # you can get it from https://cloud.walletconnect.com/ # by creating a new project with email & password # you don't need a wallet for this example -WALLET_CONNECT_PROJECT_ID = "walletconnect_project_id" +# WALLET_CONNECT_PROJECT_ID = "walletconnect_project_id" # ------------------------------------------------------------------------------ # Since the ".env" file is gitignored, you can use the ".env.example" file to diff --git a/src/env.mjs b/src/env.mjs index 6d34641..08417f7 100644 --- a/src/env.mjs +++ b/src/env.mjs @@ -8,7 +8,7 @@ export const env = createEnv({ */ server: { NODE_ENV: z.enum(["development", "test", "production"]), - WALLET_CONNECT_PROJECT_ID: z.string(), + // WALLET_CONNECT_PROJECT_ID: z.string(), }, /** @@ -26,7 +26,7 @@ export const env = createEnv({ */ runtimeEnv: { NODE_ENV: process.env.NODE_ENV, - WALLET_CONNECT_PROJECT_ID: process.env.WALLET_CONNECT_PROJECT_ID, + // WALLET_CONNECT_PROJECT_ID: process.env.WALLET_CONNECT_PROJECT_ID, // NEXT_PUBLIC_CLIENTVAR: process.env.NEXT_PUBLIC_CLIENTVAR, }, /** diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 1eae9d9..33ccc59 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -20,6 +20,7 @@ import { configureChains, createConfig, WagmiConfig } from "wagmi"; import { publicProvider } from "wagmi/providers/public"; import { xdcTestnet } from "viem/chains"; import BaseLayout from "~/layouts/BaseLayout"; +import { walletConnectProjectId } from "~/utils/constants"; const MyApp: AppType = ({ Component, pageProps }) => { const { chains, publicClient } = configureChains( @@ -35,7 +36,7 @@ const MyApp: AppType = ({ Component, pageProps }) => { const { connectors } = getDefaultWallets({ appName: "MIAO", chains, - projectId: "7171244509c2a41cb8e9e1fbc38a90b3", + projectId: walletConnectProjectId, }); const wagmiConfig = createConfig({ diff --git a/src/utils/constants.ts b/src/utils/constants.ts index f44da16..24f7fc6 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -8,252 +8,257 @@ const defaultPair: Pair = { const contractAddress: `0x${string}` = "0xf7FF85EB675096Da320eF4a6ad06393c91b07CD1"; -const currentPrice = 1.12; - +const walletConnectProjectId = "f2a8b0c8053e31d62e16f27ad108ea3c"; +const currentPrice = 1.12; -const defaultChartData: {x: Date, y: number[]}[] = [ +const defaultChartData: { x: Date; y: number[] }[] = [ { - x: new Date(1538778600000), - y: [6629.81, 6650.5, 6623.04, 6633.33] + x: new Date(1538778600000), + y: [6629.81, 6650.5, 6623.04, 6633.33], }, { - x: new Date(1538780400000), - y: [6632.01, 6643.59, 6620, 6630.11] + x: new Date(1538780400000), + y: [6632.01, 6643.59, 6620, 6630.11], }, { - x: new Date(1538782200000), - y: [6630.71, 6648.95, 6623.34, 6635.65] + x: new Date(1538782200000), + y: [6630.71, 6648.95, 6623.34, 6635.65], }, { - x: new Date(1538784000000), - y: [6635.65, 6651, 6629.67, 6638.24] + x: new Date(1538784000000), + y: [6635.65, 6651, 6629.67, 6638.24], }, { - x: new Date(1538785800000), - y: [6638.24, 6640, 6620, 6624.47] + x: new Date(1538785800000), + y: [6638.24, 6640, 6620, 6624.47], }, { - x: new Date(1538787600000), - y: [6624.53, 6636.03, 6621.68, 6624.31] + x: new Date(1538787600000), + y: [6624.53, 6636.03, 6621.68, 6624.31], }, { - x: new Date(1538789400000), - y: [6624.61, 6632.2, 6617, 6626.02] + x: new Date(1538789400000), + y: [6624.61, 6632.2, 6617, 6626.02], }, { - x: new Date(1538791200000), - y: [6627, 6627.62, 6584.22, 6603.02] + x: new Date(1538791200000), + y: [6627, 6627.62, 6584.22, 6603.02], }, { - x: new Date(1538793000000), - y: [6605, 6608.03, 6598.95, 6604.01] + x: new Date(1538793000000), + y: [6605, 6608.03, 6598.95, 6604.01], }, { - x: new Date(1538794800000), - y: [6604.5, 6614.4, 6602.26, 6608.02] + x: new Date(1538794800000), + y: [6604.5, 6614.4, 6602.26, 6608.02], }, { - x: new Date(1538796600000), - y: [6608.02, 6610.68, 6601.99, 6608.91] + x: new Date(1538796600000), + y: [6608.02, 6610.68, 6601.99, 6608.91], }, { - x: new Date(1538798400000), - y: [6608.91, 6618.99, 6608.01, 6612] + x: new Date(1538798400000), + y: [6608.91, 6618.99, 6608.01, 6612], }, { - x: new Date(1538800200000), - y: [6612, 6615.13, 6605.09, 6612] + x: new Date(1538800200000), + y: [6612, 6615.13, 6605.09, 6612], }, { - x: new Date(1538802000000), - y: [6612, 6624.12, 6608.43, 6622.95] + x: new Date(1538802000000), + y: [6612, 6624.12, 6608.43, 6622.95], }, { - x: new Date(1538803800000), - y: [6623.91, 6623.91, 6615, 6615.67] + x: new Date(1538803800000), + y: [6623.91, 6623.91, 6615, 6615.67], }, { - x: new Date(1538805600000), - y: [6618.69, 6618.74, 6610, 6610.4] + x: new Date(1538805600000), + y: [6618.69, 6618.74, 6610, 6610.4], }, { - x: new Date(1538807400000), - y: [6611, 6622.78, 6610.4, 6614.9] + x: new Date(1538807400000), + y: [6611, 6622.78, 6610.4, 6614.9], }, { - x: new Date(1538809200000), - y: [6614.9, 6626.2, 6613.33, 6623.45] + x: new Date(1538809200000), + y: [6614.9, 6626.2, 6613.33, 6623.45], }, { - x: new Date(1538811000000), - y: [6623.48, 6627, 6618.38, 6620.35] + x: new Date(1538811000000), + y: [6623.48, 6627, 6618.38, 6620.35], }, { - x: new Date(1538812800000), - y: [6619.43, 6620.35, 6610.05, 6615.53] + x: new Date(1538812800000), + y: [6619.43, 6620.35, 6610.05, 6615.53], }, { - x: new Date(1538814600000), - y: [6615.53, 6617.93, 6610, 6615.19] + x: new Date(1538814600000), + y: [6615.53, 6617.93, 6610, 6615.19], }, { - x: new Date(1538816400000), - y: [6615.19, 6621.6, 6608.2, 6620] + x: new Date(1538816400000), + y: [6615.19, 6621.6, 6608.2, 6620], }, { - x: new Date(1538818200000), - y: [6619.54, 6625.17, 6614.15, 6620] + x: new Date(1538818200000), + y: [6619.54, 6625.17, 6614.15, 6620], }, { - x: new Date(1538820000000), - y: [6620.33, 6634.15, 6617.24, 6624.61] + x: new Date(1538820000000), + y: [6620.33, 6634.15, 6617.24, 6624.61], }, { - x: new Date(1538821800000), - y: [6625.95, 6626, 6611.66, 6617.58] + x: new Date(1538821800000), + y: [6625.95, 6626, 6611.66, 6617.58], }, { - x: new Date(1538823600000), - y: [6619, 6625.97, 6595.27, 6598.86] + x: new Date(1538823600000), + y: [6619, 6625.97, 6595.27, 6598.86], }, { - x: new Date(1538825400000), - y: [6598.86, 6598.88, 6570, 6587.16] + x: new Date(1538825400000), + y: [6598.86, 6598.88, 6570, 6587.16], }, { - x: new Date(1538827200000), - y: [6588.86, 6600, 6580, 6593.4] + x: new Date(1538827200000), + y: [6588.86, 6600, 6580, 6593.4], }, { - x: new Date(1538829000000), - y: [6593.99, 6598.89, 6585, 6587.81] + x: new Date(1538829000000), + y: [6593.99, 6598.89, 6585, 6587.81], }, { - x: new Date(1538830800000), - y: [6587.81, 6592.73, 6567.14, 6578] + x: new Date(1538830800000), + y: [6587.81, 6592.73, 6567.14, 6578], }, { - x: new Date(1538832600000), - y: [6578.35, 6581.72, 6567.39, 6579] + x: new Date(1538832600000), + y: [6578.35, 6581.72, 6567.39, 6579], }, { - x: new Date(1538834400000), - y: [6579.38, 6580.92, 6566.77, 6575.96] + x: new Date(1538834400000), + y: [6579.38, 6580.92, 6566.77, 6575.96], }, { - x: new Date(1538836200000), - y: [6575.96, 6589, 6571.77, 6588.92] + x: new Date(1538836200000), + y: [6575.96, 6589, 6571.77, 6588.92], }, { - x: new Date(1538838000000), - y: [6588.92, 6594, 6577.55, 6589.22] + x: new Date(1538838000000), + y: [6588.92, 6594, 6577.55, 6589.22], }, { - x: new Date(1538839800000), - y: [6589.3, 6598.89, 6589.1, 6596.08] + x: new Date(1538839800000), + y: [6589.3, 6598.89, 6589.1, 6596.08], }, { - x: new Date(1538841600000), - y: [6597.5, 6600, 6588.39, 6596.25] + x: new Date(1538841600000), + y: [6597.5, 6600, 6588.39, 6596.25], }, { - x: new Date(1538843400000), - y: [6598.03, 6600, 6588.73, 6595.97] + x: new Date(1538843400000), + y: [6598.03, 6600, 6588.73, 6595.97], }, { - x: new Date(1538845200000), - y: [6595.97, 6602.01, 6588.17, 6602] + x: new Date(1538845200000), + y: [6595.97, 6602.01, 6588.17, 6602], }, { - x: new Date(1538847000000), - y: [6602, 6607, 6596.51, 6599.95] + x: new Date(1538847000000), + y: [6602, 6607, 6596.51, 6599.95], }, { - x: new Date(1538848800000), - y: [6600.63, 6601.21, 6590.39, 6591.02] + x: new Date(1538848800000), + y: [6600.63, 6601.21, 6590.39, 6591.02], }, { - x: new Date(1538850600000), - y: [6591.02, 6603.08, 6591, 6591] + x: new Date(1538850600000), + y: [6591.02, 6603.08, 6591, 6591], }, { - x: new Date(1538852400000), - y: [6591, 6601.32, 6585, 6592] + x: new Date(1538852400000), + y: [6591, 6601.32, 6585, 6592], }, { - x: new Date(1538854200000), - y: [6593.13, 6596.01, 6590, 6593.34] + x: new Date(1538854200000), + y: [6593.13, 6596.01, 6590, 6593.34], }, { - x: new Date(1538856000000), - y: [6593.34, 6604.76, 6582.63, 6593.86] + x: new Date(1538856000000), + y: [6593.34, 6604.76, 6582.63, 6593.86], }, { - x: new Date(1538857800000), - y: [6593.86, 6604.28, 6586.57, 6600.01] + x: new Date(1538857800000), + y: [6593.86, 6604.28, 6586.57, 6600.01], }, { - x: new Date(1538859600000), - y: [6601.81, 6603.21, 6592.78, 6596.25] + x: new Date(1538859600000), + y: [6601.81, 6603.21, 6592.78, 6596.25], }, { - x: new Date(1538861400000), - y: [6596.25, 6604.2, 6590, 6602.99] + x: new Date(1538861400000), + y: [6596.25, 6604.2, 6590, 6602.99], }, { - x: new Date(1538863200000), - y: [6602.99, 6606, 6584.99, 6587.81] + x: new Date(1538863200000), + y: [6602.99, 6606, 6584.99, 6587.81], }, { - x: new Date(1538865000000), - y: [6587.81, 6595, 6583.27, 6591.96] + x: new Date(1538865000000), + y: [6587.81, 6595, 6583.27, 6591.96], }, { - x: new Date(1538866800000), - y: [6591.97, 6596.07, 6585, 6588.39] + x: new Date(1538866800000), + y: [6591.97, 6596.07, 6585, 6588.39], }, { - x: new Date(1538868600000), - y: [6587.6, 6598.21, 6587.6, 6594.27] + x: new Date(1538868600000), + y: [6587.6, 6598.21, 6587.6, 6594.27], }, { - x: new Date(1538870400000), - y: [6596.44, 6601, 6590, 6596.55] + x: new Date(1538870400000), + y: [6596.44, 6601, 6590, 6596.55], }, { - x: new Date(1538872200000), - y: [6598.91, 6605, 6596.61, 6600.02] + x: new Date(1538872200000), + y: [6598.91, 6605, 6596.61, 6600.02], }, { - x: new Date(1538874000000), - y: [6600.55, 6605, 6589.14, 6593.01] + x: new Date(1538874000000), + y: [6600.55, 6605, 6589.14, 6593.01], }, { - x: new Date(1538875800000), - y: [6593.15, 6605, 6592, 6603.06] + x: new Date(1538875800000), + y: [6593.15, 6605, 6592, 6603.06], }, { - x: new Date(1538877600000), - y: [6603.07, 6604.5, 6599.09, 6603.89] + x: new Date(1538877600000), + y: [6603.07, 6604.5, 6599.09, 6603.89], }, { - x: new Date(1538879400000), - y: [6604.44, 6604.44, 6600, 6603.5] + x: new Date(1538879400000), + y: [6604.44, 6604.44, 6600, 6603.5], }, { - x: new Date(1538881200000), - y: [6603.5, 6603.99, 6597.5, 6603.86] + x: new Date(1538881200000), + y: [6603.5, 6603.99, 6597.5, 6603.86], }, { - x: new Date(1538883000000), - y: [6603.85, 6605, 6600, 6604.07] + x: new Date(1538883000000), + y: [6603.85, 6605, 6600, 6604.07], }, { - x: new Date(1538884800000), - y: [6604.98, 6606, 6604.07, 6606] + x: new Date(1538884800000), + y: [6604.98, 6606, 6604.07, 6606], }, -] - -export { defaultPair,defaultChartData, contractAddress, currentPrice }; +]; +export { + defaultPair, + defaultChartData, + contractAddress, + currentPrice, + walletConnectProjectId, +}; From 10a56739888019732e6a7bcdeca361ecbf73b015 Mon Sep 17 00:00:00 2001 From: AmandineBI Date: Thu, 26 Oct 2023 02:14:17 +0200 Subject: [PATCH 44/51] Add financialDataStore and make data grouping per time period logic --- src/components/FinancialChart.tsx | 43 ++++++++++------------ src/components/PairHeader.tsx | 6 +++- src/stores/chartDataStore.ts | 20 ----------- src/stores/financialDataStore.ts | 22 ++++++++++++ src/types/index.ts | 8 ++--- src/utils/financialData.ts | 59 ++++++++++++++++++++++++++++--- 6 files changed, 104 insertions(+), 54 deletions(-) delete mode 100644 src/stores/chartDataStore.ts create mode 100644 src/stores/financialDataStore.ts diff --git a/src/components/FinancialChart.tsx b/src/components/FinancialChart.tsx index b26b3d7..768655f 100644 --- a/src/components/FinancialChart.tsx +++ b/src/components/FinancialChart.tsx @@ -3,23 +3,24 @@ import dynamic from 'next/dynamic'; const ReactApexChart = dynamic(() => import('react-apexcharts'), { ssr: false, }); -import { SampleFinancialData } from "~/utils/financialData"; +//import { SampleFinancialData } from "~/utils/financialData"; import { Button } from "./ui/button"; -import useChartDataStore from "~/stores/chartDataStore"; +import useFinancialDataStore from "~/stores/financialDataStore"; +import type { FinancialData } from "~/types"; +import { ReduceFinancialData, financialDataToD } from "~/utils/financialData"; const FinancialChart = () => { - const chartDataStore = useChartDataStore((state) => state.data); + const financialDataStore = useFinancialDataStore((state) => state.data); - const [timeRange, setTimeRange] = useState(30); - const [chartData, setChartData] = useState(chartDataStore); + const [chartData, setChartData] = useState(ReduceFinancialData.aggregateData(financialDataStore, 15)); const [chartHeight, setChartHeight] = useState(450); const state = { options: { series: [{ - data: chartData, + data: chartData.map(el => financialDataToD(el)), }], chart: { type: 'candlestick' as const, @@ -51,14 +52,15 @@ const FinancialChart = () => { } }; - const changeTimeRange = (mins: number) => { - setTimeRange(() => mins); + const aggregateFinancialData = (d: FinancialData[], p: number) => { + const newData = ReduceFinancialData.aggregateData(d, p, 120); //!! 5 -> 120 + setChartData(() => newData); }; // Adjust chart height when the window resizes const adjustChartHeight = () => { - const newHeight = window.innerHeight*0.4; - setChartHeight(newHeight); + const newHeight = window.innerHeight*0.4; + setChartHeight(newHeight); }; useEffect(() => { @@ -70,23 +72,16 @@ const FinancialChart = () => { return () => window.removeEventListener("resize", adjustChartHeight); }, []); - useEffect(() => { - setChartData(SampleFinancialData - .create(120, timeRange).map(e => ({ - x: new Date(e.time), - y: [e.open, e.high, e.low, e.close], - }))); - }, [timeRange]) - return (
      - - - - - - + + + + + + +
      diff --git a/src/components/PairHeader.tsx b/src/components/PairHeader.tsx index d4f4d7b..1888931 100644 --- a/src/components/PairHeader.tsx +++ b/src/components/PairHeader.tsx @@ -1,11 +1,15 @@ import React from "react"; -import type { Pair } from "~/types"; +import useFinancialDataStore from "~/stores/financialDataStore"; +import type { FinancialData, Pair } from "~/types"; interface PairHeaderProps { pair: Pair; } const PairHeader = (props: PairHeaderProps) => { + const financialDataStore: FinancialData[] = useFinancialDataStore((state) => state.data); + const _24h = financialDataStore.filter((el) => new Date(el.time) <= new Date(new Date().getTime() - (24*60*60*1000))); + const price = getPrice(props.pair.numerator, props.pair.denominator); const change = getChange(props.pair.numerator, props.pair.denominator); const high = getHigh(props.pair.numerator, props.pair.denominator); diff --git a/src/stores/chartDataStore.ts b/src/stores/chartDataStore.ts deleted file mode 100644 index e2a9e19..0000000 --- a/src/stores/chartDataStore.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { create } from "zustand"; -import { SampleFinancialData } from "~/utils/financialData"; -import type { D } from "~/types"; - -const useChartDataStore = create<{ - data: D[]; - getLastPrice: () => number; - }>((_set) => { - const data = SampleFinancialData - .create(120 * 1440, 1).map(e => ({ - x: new Date(e.time), - y: [e.open, e.high, e.low, e.close], - })) - return { - data: data, - getLastPrice: () => data[-1]?.y[3] ?? 0 - } -}); - -export default useChartDataStore; diff --git a/src/stores/financialDataStore.ts b/src/stores/financialDataStore.ts new file mode 100644 index 0000000..3460e16 --- /dev/null +++ b/src/stores/financialDataStore.ts @@ -0,0 +1,22 @@ +import { create } from "zustand"; +import { persist, createJSONStorage } from 'zustand/middleware' +import { SampleFinancialData } from "~/utils/financialData"; +import type { FinancialData } from "~/types"; + +const useFinancialDataStore = create<{ data: FinancialData[]; getLastPrice: () => number; }, [["zustand/persist", unknown]]>( + persist( + (_set) => { + const data = SampleFinancialData + .create(120 * 1440, 1) + return { + data: data, + getLastPrice: () => data[-1]?.close ?? 0 + } +}, +{ + name: 'financial-data', + storage: createJSONStorage(() => sessionStorage), // (optional) by default, 'localStorage' is used + +})); + +export default useFinancialDataStore; diff --git a/src/types/index.ts b/src/types/index.ts index 847c1e3..3f9590a 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,7 +1,7 @@ export interface Pair { numerator: string; denominator: string; -} +}; export interface ExecutedTrade { pair: Pair; @@ -13,7 +13,7 @@ export interface ExecutedTrade { collateral: number; entry: number; liquidation: number; -} +}; export interface FinancialData { time: number; @@ -23,9 +23,9 @@ export interface FinancialData { low: number; close: number; volume: number; -} +}; export interface D { x: Date y: number[] -} +}; diff --git a/src/utils/financialData.ts b/src/utils/financialData.ts index f9a05ec..d4f47e2 100644 --- a/src/utils/financialData.ts +++ b/src/utils/financialData.ts @@ -1,4 +1,24 @@ -import type { FinancialData } from '~/types'; +import type { FinancialData, D } from '~/types'; + + +export function financialDataToD(f: FinancialData): D { + return { + x: new Date(f.time*1000), + y: [f.open, f.high, f.low, f.close] + }; +}; + +export function dToFinancialData(d: D): FinancialData { + return { + time: Math.floor(d.x.getTime() / 1000), + label: String(d.x), + open: d.y[0]!, + high: d.y[1]!, + low: d.y[2]!, + close: d.y[3]!, + volume: 0, + } +}; export class SampleFinancialData { @@ -11,7 +31,7 @@ export class SampleFinancialData { let c = Math.round((l + (Math.random() * (h - l))) * 10000) / 10000; if (items === undefined) { - items = 120; + items = 5; } if (rangeMins === undefined) { @@ -54,8 +74,37 @@ export class SampleFinancialData { } export class ReduceFinancialData { - public static aggregateData(detailed: FinancialData, level: number) { - console.log(detailed); - //const array = Enumerable.From(detailed).GroupBy + public static chunkIntoN = (arr: FinancialData[], n: number): FinancialData[][] => { + const size = Math.ceil(arr.length / n); + return Array.from({ length: n }, (v, i) => + arr.slice(i * size, i * size + size) + ); + } + + public static aggregate(period: FinancialData[]): FinancialData { + const d = period.reduce((acc: FinancialData, current: FinancialData) => ({ + time: acc.time, + label: acc.label, + open: acc.open, + close: current.close, + high: current.high>acc.high?current.high:acc.high, + low: current.low { + return this.aggregate(el); + }); + + if(graphLength === undefined) graphLength = 120; + const output: FinancialData[] = out.slice(out.length - graphLength, out.length); + + return output; } } \ No newline at end of file From d24e8040cbc193231463e62b65846c0c65db8a62 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Thu, 26 Oct 2023 02:27:40 +0200 Subject: [PATCH 45/51] improvs --- src/components/BuyDialog.tsx | 58 ++-- src/components/ClosePositionDialog.tsx | 62 +++-- src/components/History.tsx | 172 ++++++------ src/components/SellDialog.tsx | 38 +-- src/stores/positionsStore.ts | 14 +- src/stores/tradesStore.ts | 35 --- src/types/index.ts | 10 +- src/utils/constants.ts | 3 +- src/utils/helpers.ts | 352 ++++++++++++++++++++++++- 9 files changed, 553 insertions(+), 191 deletions(-) delete mode 100644 src/stores/tradesStore.ts diff --git a/src/components/BuyDialog.tsx b/src/components/BuyDialog.tsx index 2a5f86a..7ad0425 100644 --- a/src/components/BuyDialog.tsx +++ b/src/components/BuyDialog.tsx @@ -7,16 +7,11 @@ import { DialogTitle, DialogTrigger, } from "./ui/dialog"; -import { testABI } from "~/hooks/wagmi/config"; -import { - useContractEvent, - useContractWrite, - usePrepareContractWrite, -} from "wagmi"; +import { useContractWrite } from "wagmi"; import toast from "react-hot-toast"; import React from "react"; import { Separator } from "./ui/separator"; -import { formatWholePrice } from "~/utils/helpers"; +import { ABI, formatWholePrice } from "~/utils/helpers"; import { Button } from "./ui/button"; import { contractAddress, currentPrice } from "~/utils/constants"; @@ -34,7 +29,9 @@ const BuyDialog: React.FC<{ return ( (isLoading ? null : setOpen(o))}> - {children} + + {children} + {collateral && amount && open && ( void; isLoading: boolean; }) => { - useContractEvent({ + // const { config } = usePrepareContractWrite({ + // address: contractAddress, + // abi: ABI, + // functionName: "openPosition", + // // size, entryPrice, side (0 = long, 1 = short) + // args: [BigInt(collateral), BigInt(currentPrice.toFixed(0)), 0], + // }); + const { writeAsync, isLoading: isPreparing } = useContractWrite({ address: contractAddress, - abi: testABI, - eventName: "PositionOpened", - listener(_position) { - setIsLoading(false); - toast.success("Your order has been placed!"); - closeModal(); - }, - }); - - const { config } = usePrepareContractWrite({ - address: contractAddress, - abi: testABI, + abi: ABI, functionName: "openPosition", // size, entryPrice, side (0 = long, 1 = short) - args: [collateral, currentPrice.toFixed(0), 0], + args: [BigInt(collateral), BigInt(currentPrice.toFixed(0)), 0], }); - const { writeAsync, isLoading: isPreparing } = useContractWrite(config); + + const writeAsyncPromise = async () => { + try { + await writeAsync(); + } catch (_e) { + throw new Error(); + } + }; const submit = async () => { - if (!writeAsync) return; setIsLoading(true); try { - await writeAsync(); + await toast.promise(writeAsyncPromise(), { + loading: "placing order...", + success: order placed! awaiting confirmation..., + error: Could not place order..., + }); + setIsLoading(true); } catch (e) { + console.log("e is ", e); + } finally { setIsLoading(false); - toast.error("Something went wrong"); + closeModal(); } }; diff --git a/src/components/ClosePositionDialog.tsx b/src/components/ClosePositionDialog.tsx index 62a7b81..6a770b5 100644 --- a/src/components/ClosePositionDialog.tsx +++ b/src/components/ClosePositionDialog.tsx @@ -1,7 +1,6 @@ import React from "react"; import { AlertDialog, - AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, @@ -12,43 +11,62 @@ import { } from "./ui/alert-dialog"; import { Button } from "./ui/button"; import { XIcon } from "lucide-react"; -import { useContractWrite, usePrepareContractWrite } from "wagmi"; -import { testABI } from "~/hooks/wagmi/config"; -import { contractAddress } from "~/utils/constants"; +import { useContractWrite } from "wagmi"; import toast from "react-hot-toast"; +import { ABI } from "~/utils/helpers"; +import usePositionsStore from "~/stores/positionsStore"; -const ClosePositionDialog = ({ positionId }: { positionId: `0x${string}` }) => { +const ClosePositionDialog = ({ positionId }: { positionId: bigint }) => { const [open, setOpen] = React.useState(false); - // ------------------ contract close logic ------------------ - const { config } = usePrepareContractWrite({ - address: contractAddress, - abi: testABI, + + const setPositionClosing = usePositionsStore( + (state) => state.setPositionClosing, + ); + + const removePosition = usePositionsStore((state) => state.removePosition); + + const { isLoading, writeAsync } = useContractWrite({ + address: "0xecb504d39723b0be0e3a9aa33d646642d1051ee1", + abi: ABI, functionName: "closePosition", // positionId - args: [positionId], + args: [BigInt(positionId)], }); - const { writeAsync, isLoading: isPreparing } = useContractWrite(config); - const closePosition = async () => { - if (!writeAsync) return; - // setIsLoading(true); + const writeAsyncPromise = async () => { try { await writeAsync(); - setOpen(false); + } catch (_e) { + throw new Error(); + } + }; + + const closePosition = async () => { + if (isLoading) return; + try { + await toast.promise(writeAsyncPromise(), { + loading: "closing position...", + success: position is being closed! awaiting confirmation..., + error: Could not close the position..., + }); + setPositionClosing(positionId); + // setTimeout(() => { + // removePosition(positionId); + // }, 3000); } catch (e) { - // setIsLoading(false); - toast.error("Something went wrong"); + console.log("e is ", e); + } finally { + setOpen(false); } }; - // ------------------ ------------------ return ( (isPreparing ? null : setOpen(o))} + onOpenChange={(o) => (isLoading ? null : setOpen(o))} > - - @@ -67,7 +85,7 @@ const ClosePositionDialog = ({ positionId }: { positionId: `0x${string}` }) => { Cancel
      {pairObjToString(item.pair)} {item.side} + {item.side === 0 ? "long" : "short"} + = 0 ? "text-green-400" : "text-red-400") + (getPnl(item) >= 0 ? "text-green-400" : "text-red-400") } > - {formatWholePrice(item.pnl)} + {formatWholePrice(getPnl(item))} {formatWholePrice(item.size)}{formatWholePrice(item.collateral)}{formatWholePrice(item.entry)} - {formatWholePrice(item.liquidation)} - {"TBA"}{formatWholePrice(item.entryPrice)}{"TBA"} + + + ); +}; + +export default BuyDialog; diff --git a/src/components/BuyPanel.tsx b/src/components/BuyPanel.tsx index 9be427e..a2f1054 100644 --- a/src/components/BuyPanel.tsx +++ b/src/components/BuyPanel.tsx @@ -1,12 +1,12 @@ import { Label } from "~/components/ui/label"; import { Input } from "~/components/ui/input"; import { Button } from "~/components/ui/button"; -import { contractAddress, currentPrice } from "~/utils/constants"; -import { type useBalance, useContractEvent } from "wagmi"; +import { type useBalance } from "wagmi"; import { Separator } from "~/components/ui/separator"; import React from "react"; import { Usdt, Xdc } from "~/components/icons"; -import { formatWholePrice, getMockPosition } from "~/utils/helpers"; +import { getMockPosition } from "~/utils/helpers"; +import BuyDialog from "./BuyDialog"; const BuyPanel = ({ balance, @@ -129,130 +129,3 @@ const BuyPanel = ({ }; export default BuyPanel; - -import { ArrowDown } from "lucide-react"; -import { - Dialog, - DialogContent, - DialogFooter, - DialogHeader, - DialogTitle, - DialogTrigger, -} from "./ui/dialog"; -import { testABI } from "~/hooks/wagmi/config"; -import { useContractWrite, usePrepareContractWrite } from "wagmi"; -import toast from "react-hot-toast"; - -const BuyDialog: React.FC<{ - children: React.ReactNode; - collateral: string; - amount: string; -}> = ({ children, collateral, amount }) => { - const [open, setOpen] = React.useState(false); - const [isLoading, setIsLoading] = React.useState(false); - - const closeModal = () => { - setOpen(false); - }; - - return ( - (isLoading ? null : setOpen(o))}> - {children} - {collateral && amount && open && ( - - )} - - ); -}; - -const BuyDialogContent = ({ - collateral, - amount, - closeModal, - setIsLoading, - isLoading, -}: { - collateral: string; - amount: string; - closeModal: () => void; - setIsLoading: (b: boolean) => void; - isLoading: boolean; -}) => { - useContractEvent({ - address: contractAddress, - abi: testABI, - eventName: "PositionOpened", - listener(_position) { - setIsLoading(false); - toast.success("Your order has been placed!"); - closeModal(); - }, - }); - - const { config } = usePrepareContractWrite({ - address: contractAddress, - abi: testABI, - functionName: "openPosition", - // size, entryPrice, side (0 = long, 1 = short) - args: [collateral, currentPrice.toFixed(0), 0], - }); - const { writeAsync, isLoading: isPreparing } = useContractWrite(config); - - const submit = async () => { - if (!writeAsync) return; - setIsLoading(true); - try { - await writeAsync(); - } catch (e) { - setIsLoading(false); - toast.error("Something went wrong"); - } - }; - - const disabled = isLoading || isPreparing; - - return ( - - - Confirm Buy / Long - - -
      -
      -

      Pay {collateral} USDT

      - -

      - To buy {formatWholePrice(parseFloat(amount))} XDC -

      -
      - - -
        -
      • - -
      • -
      • lol
      • -
      • lol
      • -
      • lol
      • -
      • lol
      • -
      -
      - - - -
      - ); -}; diff --git a/src/components/SellDialog.tsx b/src/components/SellDialog.tsx new file mode 100644 index 0000000..c53ecdc --- /dev/null +++ b/src/components/SellDialog.tsx @@ -0,0 +1,134 @@ +import { ArrowDown } from "lucide-react"; +import { + Dialog, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "./ui/dialog"; +import { testABI } from "~/hooks/wagmi/config"; +import { + useContractEvent, + useContractWrite, + usePrepareContractWrite, +} from "wagmi"; +import toast from "react-hot-toast"; +import React from "react"; +import { Separator } from "./ui/separator"; +import { formatWholePrice } from "~/utils/helpers"; +import { Button } from "./ui/button"; +import { contractAddress, currentPrice } from "~/utils/constants"; + +const SellDialog: React.FC<{ + children: React.ReactNode; + collateral: string; + amount: string; +}> = ({ children, collateral, amount }) => { + const [open, setOpen] = React.useState(false); + const [isLoading, setIsLoading] = React.useState(false); + + const closeModal = () => { + setOpen(false); + }; + + return ( + (isLoading ? null : setOpen(o))}> + {children} + {collateral && amount && open && ( + + )} + + ); +}; + +const SellDialogContent = ({ + collateral, + amount, + closeModal, + setIsLoading, + isLoading, +}: { + collateral: string; + amount: string; + closeModal: () => void; + setIsLoading: (b: boolean) => void; + isLoading: boolean; +}) => { + useContractEvent({ + address: contractAddress, + abi: testABI, + eventName: "PositionOpened", + listener(_position) { + setIsLoading(false); + toast.success("Your order has been placed!"); + closeModal(); + }, + }); + + const { config } = usePrepareContractWrite({ + address: contractAddress, + abi: testABI, + functionName: "openPosition", + // size, entryPrice, side (0 = long, 1 = short) + args: [collateral, currentPrice.toFixed(0), 1], + }); + const { writeAsync, isLoading: isPreparing } = useContractWrite(config); + + const submit = async () => { + if (!writeAsync) return; + setIsLoading(true); + try { + await writeAsync(); + } catch (e) { + setIsLoading(false); + toast.error("Something went wrong"); + } + }; + + const disabled = isLoading || isPreparing; + + return ( + + + Confirm Sell / Short + + +
      +
      +

      Pay {collateral} USDT

      + +

      + To short {formatWholePrice(parseFloat(amount))} XDC +

      +
      + + +
        +
      • lol
      • +
      • lol
      • +
      • lol
      • +
      • lol
      • +
      +
      + + + +
      + ); +}; + +export default SellDialog; diff --git a/src/components/SellPanel.tsx b/src/components/SellPanel.tsx index a1baa74..8625327 100644 --- a/src/components/SellPanel.tsx +++ b/src/components/SellPanel.tsx @@ -1,42 +1,18 @@ import { Label } from "~/components/ui/label"; import { Input } from "~/components/ui/input"; import { Button } from "~/components/ui/button"; -import { defaultPair } from "~/utils/constants"; -import useTradesStore from "~/stores/tradesStore"; -import { type ExecutedTrade } from "~/types"; import { type useBalance } from "wagmi"; import { Separator } from "~/components/ui/separator"; import React from "react"; import { Usdt, Xdc } from "~/components/icons"; import { getMockPosition } from "~/utils/helpers"; +import SellDialog from "./SellDialog"; const SellPanel = ({ balance, }: { balance: ReturnType["data"]; }) => { - const addTransaction = useTradesStore((state) => state.addTrade); - - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - // create randomized trade - const trade: ExecutedTrade = { - hash: Math.random().toString(), - pair: defaultPair, - collateral: parseFloat(collateral), - entry: 1.21, - liquidation: 0, - // pnl is a random number between -1000 and 1000 - pnl: Math.floor(Math.random() * 2000) - 1000, - side: "short", - size: parseFloat(amount), - timestamp: new Date().toISOString(), - }; - - addTransaction(trade); - console.log("submit"); - }; - const setMaxAmount = () => { if (!balance) return; setCollateral(balance.formatted); @@ -50,10 +26,14 @@ const SellPanel = ({ const handleCollateralChange = (e: React.ChangeEvent) => { // this need to be formatted as a number with decimals separated by a dot const value = e.target.value; - const regEx = /^[0-9]+(\.[0-9]{0,2})?$/; + + const regEx = /^[0-9]*$/; if (value === "" || regEx.test(value)) { // check if the amount is more than the balance - if (balance && parseFloat(value) > parseFloat(balance.formatted)) { + if ( + value === "0" || + (balance && parseFloat(value) > parseFloat(balance.formatted)) + ) { // if it is disable the buy btn setDisabled(true); } else { @@ -61,16 +41,17 @@ const SellPanel = ({ setDisabled(false); } setCollateral(value); + if (!value) { + setAmount(""); + return; + } // calculate the amount - setAmount(getMockPosition(value)); + setAmount((parseFloat(value) * 1.1).toFixed(2).toString()); } }; return ( -
      +
      - + + +
        @@ -141,7 +124,7 @@ const SellPanel = ({
      - +
      ); }; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 85447b8..7e26977 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,5 +1,5 @@ import PairHeader from "~/components/PairHeader"; -import FinancialChart from '~/components/FinancialChart' +import FinancialChart from "~/components/FinancialChart"; export default function Home() { // const hello = api.post.hello.useQuery({ text: "from tRPC" }); @@ -11,7 +11,7 @@ export default function Home() {
      -
      +
      @@ -88,7 +88,7 @@ const TradingUi = () => { - + From 3dfc167d1930c3b0e0b45e9d7371b5343c4cdb22 Mon Sep 17 00:00:00 2001 From: Loa212 Date: Wed, 25 Oct 2023 21:26:44 +0200 Subject: [PATCH 41/51] basic functionality --- package.json | 1 + pnpm-lock.yaml | 29 ++++++ src/components/ClosePositionDialog.tsx | 66 ++++++++++++ src/components/History.tsx | 33 ++++-- src/components/ui/alert-dialog.tsx | 139 +++++++++++++++++++++++++ src/types/index.ts | 6 +- 6 files changed, 261 insertions(+), 13 deletions(-) create mode 100644 src/components/ClosePositionDialog.tsx create mode 100644 src/components/ui/alert-dialog.tsx diff --git a/package.json b/package.json index 638c83b..18287cf 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dependencies": { "@fontsource-variable/instrument-sans": "^5.0.3", "@formkit/auto-animate": "^0.8.0", + "@radix-ui/react-alert-dialog": "^1.0.5", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-label": "^2.0.2", "@radix-ui/react-separator": "^1.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f2e9d85..b8b4fde 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ dependencies: '@formkit/auto-animate': specifier: ^0.8.0 version: 0.8.0 + '@radix-ui/react-alert-dialog': + specifier: ^1.0.5 + version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dialog': specifier: ^1.0.5 version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) @@ -525,6 +528,32 @@ packages: '@babel/runtime': 7.23.2 dev: false + /@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: diff --git a/src/components/ClosePositionDialog.tsx b/src/components/ClosePositionDialog.tsx new file mode 100644 index 0000000..4b5ad89 --- /dev/null +++ b/src/components/ClosePositionDialog.tsx @@ -0,0 +1,66 @@ +import React from "react"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from "./ui/alert-dialog"; +import { Button } from "./ui/button"; +import { XIcon } from "lucide-react"; +import { useContractWrite, usePrepareContractWrite } from "wagmi"; +import { testABI } from "~/hooks/wagmi/config"; +import { contractAddress } from "~/utils/constants"; + +const ClosePositionDialog = ({ positionId }: { positionId: `0x${string}` }) => { + // ------------------ contract close logic ------------------ + + const { config } = usePrepareContractWrite({ + address: contractAddress, + abi: testABI, + functionName: "closePosition", + // positionId + args: [positionId], + }); + const { writeAsync, isLoading: isPreparing } = useContractWrite(config); + + // ------------------ ------------------ + return ( + + + + + + + + Are you sure you want to close this position? + + + This action cannot be undone. You will lose part of your collateral + and the position will be closed. + + + + Cancel + { + await writeAsync?.(); + }} + > + Close position + + + + + ); +}; + +export default ClosePositionDialog; diff --git a/src/components/History.tsx b/src/components/History.tsx index 76b7b6b..5484dc1 100644 --- a/src/components/History.tsx +++ b/src/components/History.tsx @@ -1,14 +1,14 @@ import React from "react"; import { useAutoAnimate } from "@formkit/auto-animate/react"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs"; -import { Button } from "./ui/button"; -import { XIcon } from "lucide-react"; + import type { Pair, Position } from "~/types"; import { formatWholePrice } from "~/utils/helpers"; import { useContractEvent } from "wagmi"; import { contractAddress, currentPrice, defaultPair } from "~/utils/constants"; import { testABI } from "~/hooks/wagmi/config"; import usePositionsStore from "~/stores/positionsStore"; +import ClosePositionDialog from "./ClosePositionDialog"; const History = () => { return ( @@ -71,6 +71,26 @@ const Positions = () => { }, }); + // watch for position closed events + useContractEvent({ + address: contractAddress, + abi: testABI, + eventName: "PositionClosed", + + listener(res: unknown) { + // add trade to store + // @ts-expect-error TODO: fix this + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const position = res[0].args as Position & { profit: number }; + + // pair and pnl are not included in the event + removePosition(position.positionId); + + console.log({ position }); + }, + }); + + // PNL const getPnl = (position: Position) => { const { entryPrice, side } = position; const pnl = @@ -118,14 +138,7 @@ const Positions = () => {
      {formatWholePrice(item.entryPrice)} {"TBA"} - +
      @@ -113,36 +100,7 @@ const Positions = () => { - - {positions.map((item) => ( - - - - - - - - - - - ))} - +
      close position
      - {pairObjToString(item.pair)} - - {item.side === 0 ? "long" : "short"} - = 0 ? "text-green-400" : "text-red-400") - } - > - {formatWholePrice(getPnl(item))} - {formatWholePrice(item.size)}{"TBA"}{formatWholePrice(item.entryPrice)}{"TBA"} - -
      ); }; @@ -150,3 +108,49 @@ const Positions = () => { const Orders = () => { return

      orders

      ; }; + +const Trades = () => { + const [parent] = useAutoAnimate(); + const positions = usePositionsStore((state) => state.positions); + + const pairObjToString = (pair: Pair) => { + return `${pair.numerator.toUpperCase()}/${pair.denominator.toUpperCase()}`; + }; + + return ( +
      + {pairObjToString(item.pair)} + {item.side === 0 ? "long" : "short"}= 0 ? "text-green-400" : "text-red-400") + } + > + {formatWholePrice(getPnl(item))} + {formatWholePrice(item.size)}{"TBA"}{formatWholePrice(item.entryPrice)}{"TBA"} + {item.closing ? ( + + ) : ( + + )} +
      - {pairObjToString(item.pair)} - {item.side === 0 ? "long" : "short"}= 0 ? "text-green-400" : "text-red-400") - } - > - {formatWholePrice(getPnl(item))} - {formatWholePrice(item.size)}{"TBA"}{formatWholePrice(item.entryPrice)}{"TBA"} - {item.closing ? ( - - ) : ( - - )} -
      + {pairObjToString(position.pair)} + {position.side === 0 ? "long" : "short"}= 0 ? "text-green-400" : "text-red-400") + } + > + {formatWholePrice(getPnl(position))} + {formatWholePrice(position.size)}{"TBA"}{formatWholePrice(position.entryPrice)}{"TBA"} + {position.closing ? ( + + ) : ( + // closing position is not working yet + + )} +