diff --git a/astro-i18next.config.ts b/astro-i18next.config.ts index 684352b39..5f1c032fa 100644 --- a/astro-i18next.config.ts +++ b/astro-i18next.config.ts @@ -2,6 +2,6 @@ export default { defaultLocale: "en", showDefaultLocale: true, - locales: ["en", "es", "zh"], + locales: ["en", "es", "zh", "tr"], load: ["server", "client"], } diff --git a/package-lock.json b/package-lock.json index f5f10eb63..4cbaaa260 100644 --- a/package-lock.json +++ b/package-lock.json @@ -245,19 +245,20 @@ } }, "node_modules/@astrojs/compiler": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.7.0.tgz", - "integrity": "sha512-XpC8MAaWjD1ff6/IfkRq/5k1EFj6zhCNqXRd5J43SVJEBj/Bsmizkm8N0xOYscGcDFQkRgEw6/eKnI5x/1l6aA==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.8.0.tgz", + "integrity": "sha512-yrpD1WRGqsJwANaDIdtHo+YVjvIOFAjC83lu5qENIgrafwZcJgSXDuwVMXOgok4tFzpeKLsFQ6c3FoUdloLWBQ==" }, "node_modules/@astrojs/internal-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.3.0.tgz", - "integrity": "sha512-tGmHvrhpzuz0JBHaJX8GywN9g4rldVNHtkoVDC3m/DdzBO70jGoVuc0uuNVglRYnsdwkbG0K02Iw3nOOR3/Y4g==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.4.0.tgz", + "integrity": "sha512-6B13lz5n6BrbTqCTwhXjJXuR1sqiX/H6rTxzlXx+lN1NnV4jgnq/KJldCQaUWJzPL5SiWahQyinxAbxQtwgPHA==" }, "node_modules/@astrojs/markdown-remark": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.3.1.tgz", "integrity": "sha512-eJFi600tkRjTFiwzY9oD8AgCgB7gFqyWCKWuZ33dATVBgLiROD+zlMZ8STZzU7+ZALvmiUAun/K7umTmP5YfVQ==", + "dev": true, "dependencies": { "@astrojs/prism": "^3.0.0", "github-slugger": "^2.0.0", @@ -283,14 +284,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@astrojs/markdown-remark/node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, "dependencies": { "@types/unist": "*" } @@ -298,17 +292,20 @@ "node_modules/@astrojs/markdown-remark/node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true }, "node_modules/@astrojs/markdown-remark/node_modules/github-slugger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true }, "node_modules/@astrojs/markdown-remark/node_modules/hast-util-from-html": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz", "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==", + "dev": true, "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", @@ -326,6 +323,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "dev": true, "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -345,6 +343,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dev": true, "dependencies": { "@types/hast": "^3.0.0" }, @@ -357,6 +356,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dev": true, "dependencies": { "@types/hast": "^3.0.0" }, @@ -369,6 +369,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.0.tgz", "integrity": "sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==", + "dev": true, "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -384,6 +385,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "dev": true, "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", @@ -396,47 +398,11 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/@astrojs/markdown-remark/node_modules/import-meta-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", - "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@astrojs/markdown-remark/node_modules/mdast-util-definitions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", - "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/markdown-remark/node_modules/rehype-stringify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", - "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-to-html": "^9.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/@astrojs/markdown-remark/node_modules/unified": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", @@ -455,6 +421,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" @@ -468,6 +435,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -480,6 +448,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" @@ -493,6 +462,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -505,6 +475,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", @@ -519,6 +490,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" @@ -532,6 +504,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", @@ -546,6 +519,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" @@ -559,6 +533,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" @@ -724,14 +699,14 @@ } }, "node_modules/@astrojs/prism": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.0.0.tgz", - "integrity": "sha512-g61lZupWq1bYbcBnYZqdjndShr/J3l/oFobBKPA3+qMat146zce3nz2kdO4giGbhYDt4gYdhmoBz0vZJ4sIurQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.1.0.tgz", + "integrity": "sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==", "dependencies": { "prismjs": "^1.29.0" }, "engines": { - "node": ">=18.14.1" + "node": "^18.17.1 || ^20.3.0 || >=21.0.0" } }, "node_modules/@astrojs/react": { @@ -778,34 +753,20 @@ } }, "node_modules/@astrojs/telemetry": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.0.4.tgz", - "integrity": "sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.1.0.tgz", + "integrity": "sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==", "dependencies": { - "ci-info": "^3.8.0", + "ci-info": "^4.0.0", "debug": "^4.3.4", "dlv": "^1.1.3", - "dset": "^3.1.2", + "dset": "^3.1.3", "is-docker": "^3.0.0", "is-wsl": "^3.0.0", "which-pm-runs": "^1.1.0" }, "engines": { - "node": ">=18.14.1" - } - }, - "node_modules/@astrojs/telemetry/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" + "node": "^18.17.1 || ^20.3.0 || >=21.0.0" } }, "node_modules/@astrojs/telemetry/node_modules/is-wsl": { @@ -843,20 +804,20 @@ } }, "node_modules/@babel/core": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", - "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.1", + "@babel/generator": "^7.24.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -872,11 +833,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "dependencies": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.24.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -943,26 +904,26 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -972,47 +933,47 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "engines": { "node": ">=6.9.0" } @@ -1026,13 +987,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "dependencies": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1053,9 +1014,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1064,11 +1025,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1078,15 +1039,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", - "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.15" + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" }, "engines": { "node": ">=6.9.0" @@ -1165,18 +1126,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1185,12 +1146,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1263,10 +1224,25 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@emnapi/runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.1.tgz", + "integrity": "sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "optional": true + }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ "ppc64" ], @@ -1278,6 +1254,336 @@ "node": ">=12" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -2125,6 +2431,437 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.3.tgz", + "integrity": "sha512-FaNiGX1MrOuJ3hxuNzWgsT/mg5OHG/Izh59WW2mk1UwYHUwtfbhk5QNKYZgxf0pLOhx9ctGiGa2OykD71vOnSw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.3.tgz", + "integrity": "sha512-2QeSl7QDK9ru//YBT4sQkoq7L0EAJZA3rtV+v9p8xTKl4U1bUqTIaCnoC7Ctx2kCjQgwFXDasOtPTCT8eCTXvw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=11", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=10.13", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.3.tgz", + "integrity": "sha512-Q7Ee3fFSC9P7vUSqVEF0zccJsZ8GiiCJYGWDdhEjdlOeS9/jdkyJ6sUSPj+bL8VuOYFSbofrW0t/86ceVhx32w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.3.tgz", + "integrity": "sha512-Zf+sF1jHZJKA6Gor9hoYG2ljr4wo9cY4twaxgFDvlG0Xz9V7sinsPp8pFd1XtlhTzYo0IhDbl3rK7P6MzHpnYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.3.tgz", + "integrity": "sha512-vFk441DKRFepjhTEH20oBlFrHcLjPfI8B0pMIxGm3+yilKyYeHEVvrZhYFdqIseSclIqbQ3SnZMwEMWonY5XFA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.3.tgz", + "integrity": "sha512-Q4I++herIJxJi+qmbySd072oDPRkCg/SClLEIDh5IL9h1zjhqjv82H0Seupd+q2m0yOfD+/fJnjSoDFtKiHu2g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.3.tgz", + "integrity": "sha512-qnDccehRDXadhM9PM5hLvcPRYqyFCBN31kq+ErBSZtZlsAc1U4Z85xf/RXv1qolkdu+ibw64fUDaRdktxTNP9A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.3.tgz", + "integrity": "sha512-Jhchim8kHWIU/GZ+9poHMWRcefeaxFIs9EBqf9KtcC14Ojk6qua7ghKiPs0sbeLbLj/2IGBtDcxHyjCdYWkk2w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.3.tgz", + "integrity": "sha512-68zivsdJ0koE96stdUfM+gmyaK/NcoSZK5dV5CAjES0FUXS9lchYt8LAB5rTbM7nlWtxaU/2GON0HVN6/ZYJAQ==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.1.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.3.tgz", + "integrity": "sha512-CyimAduT2whQD8ER4Ux7exKrtfoaUiVr7HG0zZvO0XTFn2idUWljjxv58GxNTkFb8/J9Ub9AqITGkJD6ZginxQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.3.tgz", + "integrity": "sha512-viT4fUIDKnli3IfOephGnolMzhz5VaTvDRkYqtZxOMIoMQ4MrAziO7pT1nVnOt2FAm7qW5aa+CCc13aEY6Le0g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -3153,9 +3890,9 @@ "dev": true }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", + "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", "cpu": [ "arm" ], @@ -3165,9 +3902,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", + "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", "cpu": [ "arm64" ], @@ -3177,9 +3914,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", + "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", "cpu": [ "arm64" ], @@ -3189,9 +3926,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", + "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", "cpu": [ "x64" ], @@ -3201,9 +3938,21 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", + "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", + "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", "cpu": [ "arm" ], @@ -3213,9 +3962,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", + "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", "cpu": [ "arm64" ], @@ -3225,9 +3974,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", + "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", "cpu": [ "arm64" ], @@ -3236,10 +3985,22 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", + "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", + "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", "cpu": [ "riscv64" ], @@ -3248,10 +4009,22 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", + "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", + "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", "cpu": [ "x64" ], @@ -3261,9 +4034,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", + "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", "cpu": [ "x64" ], @@ -3273,9 +4046,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", + "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", "cpu": [ "arm64" ], @@ -3285,9 +4058,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", + "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", "cpu": [ "ia32" ], @@ -3297,9 +4070,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", + "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", "cpu": [ "x64" ], @@ -3465,9 +4238,9 @@ } }, "node_modules/@shikijs/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.2.0.tgz", - "integrity": "sha512-OlFvx+nyr5C8zpcMBnSGir0YPD6K11uYhouqhNmm1qLiis4GA7SsGtu07r9gKS9omks8RtQqHrJL4S+lqWK01A==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.4.0.tgz", + "integrity": "sha512-CxpKLntAi64h3j+TwWqVIQObPTED0FyXLHTTh3MKXtqiQNn2JGcMQQ362LftDbc9kYbDtrksNMNoVmVXzKFYUQ==" }, "node_modules/@solidity-parser/parser": { "version": "0.14.5", @@ -3877,6 +4650,11 @@ "@types/node": "*" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, "node_modules/@types/d3": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz", @@ -5146,82 +5924,84 @@ } }, "node_modules/astro": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/astro/-/astro-4.5.8.tgz", - "integrity": "sha512-bhKsoZQWT6LW8aYMvTGglZTPa3rYRbcdc2buiJyFPCvSWOOyZmxqpp6vtQ+x6fXxD8P1NecM/c4g5GaPi+MokQ==", - "dependencies": { - "@astrojs/compiler": "^2.7.0", - "@astrojs/internal-helpers": "0.3.0", - "@astrojs/markdown-remark": "4.3.1", - "@astrojs/telemetry": "3.0.4", - "@babel/core": "^7.24.3", - "@babel/generator": "^7.23.3", - "@babel/parser": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.5", - "@babel/traverse": "^7.23.3", - "@babel/types": "^7.23.3", - "@types/babel__core": "^7.20.4", - "acorn": "^8.11.2", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-4.7.1.tgz", + "integrity": "sha512-3o+VmnIPBiCm0QVyyTC/F8humNXny5YpI+MKvBTksviRtKxhnztEA3+GAR2XWLUSOx1+/GVjz7mExq3hJGOeqQ==", + "dependencies": { + "@astrojs/compiler": "^2.7.1", + "@astrojs/internal-helpers": "0.4.0", + "@astrojs/markdown-remark": "5.1.0", + "@astrojs/telemetry": "3.1.0", + "@babel/core": "^7.24.5", + "@babel/generator": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/plugin-transform-react-jsx": "^7.23.4", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", + "@types/babel__core": "^7.20.5", + "@types/cookie": "^0.6.0", + "acorn": "^8.11.3", "aria-query": "^5.3.0", "axobject-query": "^4.0.0", "boxen": "^7.1.1", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "ci-info": "^4.0.0", - "clsx": "^2.0.0", + "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^0.6.0", "cssesc": "^3.0.0", "debug": "^4.3.4", - "deterministic-object-hash": "^2.0.1", - "devalue": "^4.3.2", - "diff": "^5.1.0", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.0.0", + "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.3", - "es-module-lexer": "^1.4.1", - "esbuild": "^0.19.6", + "es-module-lexer": "^1.5.2", + "esbuild": "^0.20.2", "estree-walker": "^3.0.3", "execa": "^8.0.1", "fast-glob": "^3.3.2", - "flattie": "^1.1.0", + "flattie": "^1.1.1", "github-slugger": "^2.0.0", "gray-matter": "^4.0.3", "html-escaper": "^3.0.3", "http-cache-semantics": "^4.1.1", "js-yaml": "^4.1.0", - "kleur": "^4.1.4", - "magic-string": "^0.30.3", - "mime": "^3.0.0", - "ora": "^7.0.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.10", + "mrmime": "^2.0.0", + "ora": "^8.0.1", "p-limit": "^5.0.0", "p-queue": "^8.0.1", - "path-to-regexp": "^6.2.1", - "preferred-pm": "^3.1.2", + "path-to-regexp": "^6.2.2", + "preferred-pm": "^3.1.3", "prompts": "^2.4.2", "rehype": "^13.0.1", - "resolve": "^1.22.4", - "semver": "^7.5.4", - "shiki": "^1.1.2", - "string-width": "^7.0.0", + "resolve": "^1.22.8", + "semver": "^7.6.0", + "shiki": "^1.3.0", + "string-width": "^7.1.0", "strip-ansi": "^7.1.0", - "tsconfck": "^3.0.0", + "tsconfck": "^3.0.3", "unist-util-visit": "^5.0.0", "vfile": "^6.0.1", - "vite": "^5.1.4", + "vite": "^5.2.10", "vitefu": "^0.2.5", "which-pm": "^2.1.1", "yargs-parser": "^21.1.1", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.4" + "zod": "^3.23.5", + "zod-to-json-schema": "^3.23.0" }, "bin": { "astro": "astro.js" }, "engines": { - "node": ">=18.14.1", - "npm": ">=6.14.0" + "node": "^18.17.1 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" }, "optionalDependencies": { - "sharp": "^0.32.6" + "sharp": "^0.33.3" } }, "node_modules/astro-auto-import": { @@ -5266,388 +6046,168 @@ "astro": ">=1.0.0" } }, - "node_modules/astro/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/astro/node_modules/@astrojs/markdown-remark": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-5.1.0.tgz", + "integrity": "sha512-S6Z3K2hOB7MfjeDoHsotnP/q2UsnEDB8NlNAaCjMDsGBZfTUbWxyLW3CaphEWw08f6KLZi2ibK9yC3BaMhh2NQ==", + "dependencies": { + "@astrojs/prism": "^3.1.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.0", + "hast-util-to-text": "^4.0.0", + "import-meta-resolve": "^4.0.0", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.0", + "remark-gfm": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "remark-smartypants": "^2.0.0", + "shiki": "^1.1.2", + "unified": "^11.0.4", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile": "^6.0.1" } }, - "node_modules/astro/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/astro/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" } }, - "node_modules/astro/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "node_modules/astro/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, - "node_modules/astro/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/astro/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": ">=12" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/astro/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "node_modules/astro/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" }, - "node_modules/astro/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } + "node_modules/astro/node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, - "node_modules/astro/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" + "node_modules/astro/node_modules/hast-util-from-html": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz", + "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/astro/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" + "node_modules/astro/node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/astro/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "node_modules/astro/node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/astro/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "node_modules/astro/node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/astro/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "node_modules/astro/node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/astro/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/astro/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" - }, - "node_modules/astro/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" + "node_modules/astro/node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/astro/node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" - }, "node_modules/astro/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5660,51 +6220,25 @@ } }, "node_modules/astro/node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" } }, - "node_modules/astro/node_modules/rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, + "node_modules/astro/node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", - "fsevents": "~2.3.2" + "node": ">=10" } }, "node_modules/astro/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5731,6 +6265,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/astro/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/astro/node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/astro/node_modules/unist-util-is": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", @@ -5743,6 +6308,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/astro/node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/astro/node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", @@ -5796,453 +6374,30 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/astro/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "node_modules/astro/node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", "dependencies": { "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/astro/node_modules/vite": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.2.tgz", - "integrity": "sha512-FWZbz0oSdLq5snUI0b6sULbz58iXFXdvkZfZWR/F0ZJuKTSPO7v72QPXt6KqYeMFb0yytNp6kZosxJ96Nr/wDQ==", + "node_modules/astro/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.36", - "rollup": "^4.13.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/vite/node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/astro/node_modules/yallist": { @@ -6370,12 +6525,6 @@ "dequal": "^2.0.3" } }, - "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", - "optional": true - }, "node_modules/babel-plugin-transform-hook-names": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz", @@ -6399,39 +6548,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/bare-events": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.1.tgz", - "integrity": "sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A==", - "optional": true - }, - "node_modules/bare-fs": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.2.tgz", - "integrity": "sha512-X9IqgvyB0/VA5OZJyb5ZstoN62AzD7YxVGog13kkfYWYqJYcK0kcqLZ6TrmH5qr4/8//ejVcX4x/a0UvaogXmA==", - "optional": true, - "dependencies": { - "bare-events": "^2.0.0", - "bare-os": "^2.0.0", - "bare-path": "^2.0.0", - "streamx": "^2.13.0" - } - }, - "node_modules/bare-os": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.1.tgz", - "integrity": "sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==", - "optional": true - }, - "node_modules/bare-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.0.tgz", - "integrity": "sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==", - "optional": true, - "dependencies": { - "bare-os": "^2.1.0" - } - }, "node_modules/base-64": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", @@ -6450,6 +6566,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -6496,16 +6613,6 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", @@ -6690,6 +6797,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, "funding": [ { "type": "github", @@ -7023,12 +7131,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "optional": true - }, "node_modules/ci-info": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", @@ -7315,9 +7417,9 @@ } }, "node_modules/clsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "engines": { "node": ">=6" } @@ -8317,21 +8419,6 @@ "node": ">=0.10" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "optional": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -8349,7 +8436,8 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "devOptional": true, + "dev": true, + "peer": true, "engines": { "node": ">=4.0.0" } @@ -8503,9 +8591,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "optional": true, "engines": { "node": ">=8" @@ -8538,9 +8626,9 @@ } }, "node_modules/devalue": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", - "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.0.0.tgz", + "integrity": "sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==" }, "node_modules/devlop": { "version": "1.1.0", @@ -8560,9 +8648,9 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "engines": { "node": ">=0.3.1" } @@ -8746,15 +8834,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "optional": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -8859,9 +8938,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.2.tgz", - "integrity": "sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==" + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz", + "integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==" }, "node_modules/es-set-tostringtag": { "version": "2.0.1", @@ -8903,6 +8982,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, "node_modules/esbuild-android-64": { "version": "0.15.18", "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", @@ -10368,15 +10484,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "optional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -10404,12 +10511,6 @@ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "optional": true - }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -10656,12 +10757,6 @@ "url": "https://github.com/sponsors/rawify" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "optional": true - }, "node_modules/fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -10847,12 +10942,6 @@ "testrpc-sc": "index.js" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "optional": true - }, "node_modules/github-slugger": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", @@ -12167,6 +12256,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -12213,6 +12303,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -12249,7 +12348,8 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true + "dev": true, + "peer": true }, "node_modules/inline-style-parser": { "version": "0.1.1", @@ -13789,6 +13889,72 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-definitions/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/mdast-util-definitions/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-directive": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-2.2.4.tgz", @@ -22512,17 +22678,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -22557,18 +22712,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mini-svg-data-uri": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", @@ -22602,7 +22745,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "devOptional": true, + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -22616,12 +22759,6 @@ "node": "*" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "optional": true - }, "node_modules/mnemonist": { "version": "0.38.5", "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", @@ -22872,12 +23009,6 @@ "node": "^14.0.0 || ^16.0.0 || >=18.0.0" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "optional": true - }, "node_modules/napi-macros": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", @@ -22931,51 +23062,6 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "node_modules/node-abi": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.40.0.tgz", - "integrity": "sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA==", - "optional": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true - }, "node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", @@ -23280,22 +23366,22 @@ } }, "node_modules/ora": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", - "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz", + "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==", "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.0", + "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.3.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "string-width": "^6.1.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.1", + "string-width": "^7.0.0", "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -23332,24 +23418,35 @@ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" }, "node_modules/ora/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", + "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ora/node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "engines": { "node": ">=12" }, @@ -23395,16 +23492,16 @@ } }, "node_modules/ora/node_modules/string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -23641,9 +23738,9 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==" }, "node_modules/path-type": { "version": "4.0.0", @@ -24031,32 +24128,6 @@ "preact": ">=10 || ^10.0.0-beta.0 || ^10.0.0-alpha.0" } }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/preferred-pm": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.3.tgz", @@ -24285,16 +24356,6 @@ "dev": true, "peer": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "optional": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -24355,12 +24416,6 @@ } ] }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "optional": true - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -24385,30 +24440,6 @@ "node": ">= 0.8" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -24550,6 +24581,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -25399,7 +25431,21 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype/node_modules/@types/hast": { + "node_modules/rehype-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", + "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify/node_modules/@types/hast": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", @@ -25407,25 +25453,81 @@ "@types/unist": "*" } }, - "node_modules/rehype/node_modules/@types/unist": { + "node_modules/rehype-stringify/node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, - "node_modules/rehype/node_modules/rehype-stringify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", - "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", + "node_modules/rehype-stringify/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-to-html": "^9.0.0", - "unified": "^11.0.0" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, + "node_modules/rehype/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/rehype/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, "node_modules/rehype/node_modules/unified": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", @@ -26854,19 +26956,36 @@ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "devOptional": true, - "peer": true, + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", + "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.17.2", + "@rollup/rollup-android-arm64": "4.17.2", + "@rollup/rollup-darwin-arm64": "4.17.2", + "@rollup/rollup-darwin-x64": "4.17.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", + "@rollup/rollup-linux-arm-musleabihf": "4.17.2", + "@rollup/rollup-linux-arm64-gnu": "4.17.2", + "@rollup/rollup-linux-arm64-musl": "4.17.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", + "@rollup/rollup-linux-riscv64-gnu": "4.17.2", + "@rollup/rollup-linux-s390x-gnu": "4.17.2", + "@rollup/rollup-linux-x64-gnu": "4.17.2", + "@rollup/rollup-linux-x64-musl": "4.17.2", + "@rollup/rollup-win32-arm64-msvc": "4.17.2", + "@rollup/rollup-win32-ia32-msvc": "4.17.2", + "@rollup/rollup-win32-x64-msvc": "4.17.2", "fsevents": "~2.3.2" } }, @@ -27074,6 +27193,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -27410,26 +27530,43 @@ } }, "node_modules/sharp": { - "version": "0.32.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.3.tgz", + "integrity": "sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==", "hasInstallScript": true, "optional": true, "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" + "detect-libc": "^2.0.3", + "semver": "^7.6.0" }, "engines": { - "node": ">=14.15.0" + "libvips": ">=8.15.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.3", + "@img/sharp-darwin-x64": "0.33.3", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.3", + "@img/sharp-linux-arm64": "0.33.3", + "@img/sharp-linux-s390x": "0.33.3", + "@img/sharp-linux-x64": "0.33.3", + "@img/sharp-linuxmusl-arm64": "0.33.3", + "@img/sharp-linuxmusl-x64": "0.33.3", + "@img/sharp-wasm32": "0.33.3", + "@img/sharp-win32-ia32": "0.33.3", + "@img/sharp-win32-x64": "0.33.3" } }, "node_modules/sharp/node_modules/lru-cache": { @@ -27444,12 +27581,6 @@ "node": ">=10" } }, - "node_modules/sharp/node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "optional": true - }, "node_modules/sharp/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -27465,31 +27596,6 @@ "node": ">=10" } }, - "node_modules/sharp/node_modules/tar-fs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", - "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", - "optional": true, - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" - } - }, - "node_modules/sharp/node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "optional": true, - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, "node_modules/sharp/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -27534,11 +27640,11 @@ } }, "node_modules/shiki": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.2.0.tgz", - "integrity": "sha512-xLhiTMOIUXCv5DqJ4I70GgQCtdlzsTqFLZWcMHHG3TAieBUbvEGthdrlPDlX4mL/Wszx9C6rEcxU6kMlg4YlxA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.4.0.tgz", + "integrity": "sha512-5WIn0OL8PWm7JhnTwRWXniy6eEDY234mRrERVlFa646V2ErQqwIFd2UML7e0Pq9eqSKLoMa3Ke+xbsF+DAuy+Q==", "dependencies": { - "@shikijs/core": "1.2.0" + "@shikijs/core": "1.4.0" } }, "node_modules/side-channel": { @@ -27560,51 +27666,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -28222,32 +28283,16 @@ } }, "node_modules/stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "dependencies": { - "bl": "^5.0.0" - }, + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/streamx": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", - "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", - "optional": true, - "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, "node_modules/strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", @@ -28260,6 +28305,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -28793,69 +28839,6 @@ "node": ">=10.13.0" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "optional": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/tar-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -29336,18 +29319,6 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "optional": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/turndown": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.1.2.tgz", @@ -29891,30 +29862,28 @@ } }, "node_modules/vite": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", - "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", - "devOptional": true, - "peer": true, + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", + "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -29960,418 +29929,6 @@ "vite": "^2.6.0 || 3 || 4 || 5" } }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "devOptional": true, - "hasInstallScript": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, "node_modules/vitefu": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", @@ -30778,19 +30335,19 @@ } }, "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "version": "3.23.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.6.tgz", + "integrity": "sha512-RTHJlZhsRbuA8Hmp/iNL7jnfc4nZishjsanDAfEY1QpDQZCahUp3xDzl+zfweE9BklxMUcgBgS1b7Lvie/ZVwA==", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/zod-to-json-schema": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.22.4.tgz", - "integrity": "sha512-2Ed5dJ+n/O3cU383xSY28cuVi0BCQhF8nYqWU5paEpl7fVdqdAmiLdqLyfblbNdfOFwFfi/mqU4O1pwc60iBhQ==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.0.tgz", + "integrity": "sha512-az0uJ243PxsRIa2x1WmNE/pnuA05gUq/JB8Lwe1EDCCL/Fz9MgjYQ0fPlyc2Tcv6aF2ZA7WM5TWaRZVEFaAIag==", "peerDependencies": { - "zod": "^3.22.4" + "zod": "^3.23.3" } }, "node_modules/zustand": { @@ -30988,19 +30545,20 @@ } }, "@astrojs/compiler": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.7.0.tgz", - "integrity": "sha512-XpC8MAaWjD1ff6/IfkRq/5k1EFj6zhCNqXRd5J43SVJEBj/Bsmizkm8N0xOYscGcDFQkRgEw6/eKnI5x/1l6aA==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.8.0.tgz", + "integrity": "sha512-yrpD1WRGqsJwANaDIdtHo+YVjvIOFAjC83lu5qENIgrafwZcJgSXDuwVMXOgok4tFzpeKLsFQ6c3FoUdloLWBQ==" }, "@astrojs/internal-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.3.0.tgz", - "integrity": "sha512-tGmHvrhpzuz0JBHaJX8GywN9g4rldVNHtkoVDC3m/DdzBO70jGoVuc0uuNVglRYnsdwkbG0K02Iw3nOOR3/Y4g==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.4.0.tgz", + "integrity": "sha512-6B13lz5n6BrbTqCTwhXjJXuR1sqiX/H6rTxzlXx+lN1NnV4jgnq/KJldCQaUWJzPL5SiWahQyinxAbxQtwgPHA==" }, "@astrojs/markdown-remark": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.3.1.tgz", "integrity": "sha512-eJFi600tkRjTFiwzY9oD8AgCgB7gFqyWCKWuZ33dATVBgLiROD+zlMZ8STZzU7+ZALvmiUAun/K7umTmP5YfVQ==", + "dev": true, "requires": { "@astrojs/prism": "^3.0.0", "github-slugger": "^2.0.0", @@ -31026,14 +30584,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "requires": { - "@types/unist": "*" - } - }, - "@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, "requires": { "@types/unist": "*" } @@ -31041,17 +30592,20 @@ "@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true }, "github-slugger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true }, "hast-util-from-html": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz", "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==", + "dev": true, "requires": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", @@ -31065,6 +30619,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "dev": true, "requires": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -31080,6 +30635,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dev": true, "requires": { "@types/hast": "^3.0.0" } @@ -31088,6 +30644,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dev": true, "requires": { "@types/hast": "^3.0.0" } @@ -31096,6 +30653,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.0.tgz", "integrity": "sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==", + "dev": true, "requires": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -31107,6 +30665,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "dev": true, "requires": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", @@ -31115,35 +30674,11 @@ "space-separated-tokens": "^2.0.0" } }, - "import-meta-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", - "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==" - }, - "mdast-util-definitions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", - "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", - "requires": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - } - }, - "rehype-stringify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", - "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", - "requires": { - "@types/hast": "^3.0.0", - "hast-util-to-html": "^9.0.0", - "unified": "^11.0.0" - } - }, "unified": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, "requires": { "@types/unist": "^3.0.0", "bail": "^2.0.0", @@ -31158,6 +30693,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "dev": true, "requires": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" @@ -31167,6 +30703,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, "requires": { "@types/unist": "^3.0.0" } @@ -31175,6 +30712,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dev": true, "requires": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" @@ -31184,6 +30722,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, "requires": { "@types/unist": "^3.0.0" } @@ -31192,6 +30731,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, "requires": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", @@ -31202,6 +30742,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, "requires": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" @@ -31211,6 +30752,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, "requires": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", @@ -31221,6 +30763,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dev": true, "requires": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" @@ -31230,6 +30773,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, "requires": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" @@ -31359,9 +30903,9 @@ } }, "@astrojs/prism": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.0.0.tgz", - "integrity": "sha512-g61lZupWq1bYbcBnYZqdjndShr/J3l/oFobBKPA3+qMat146zce3nz2kdO4giGbhYDt4gYdhmoBz0vZJ4sIurQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.1.0.tgz", + "integrity": "sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==", "requires": { "prismjs": "^1.29.0" } @@ -31397,24 +30941,19 @@ } }, "@astrojs/telemetry": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.0.4.tgz", - "integrity": "sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.1.0.tgz", + "integrity": "sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==", "requires": { - "ci-info": "^3.8.0", + "ci-info": "^4.0.0", "debug": "^4.3.4", "dlv": "^1.1.3", - "dset": "^3.1.2", + "dset": "^3.1.3", "is-docker": "^3.0.0", "is-wsl": "^3.0.0", "which-pm-runs": "^1.1.0" }, "dependencies": { - "ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==" - }, "is-wsl": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", @@ -31440,20 +30979,20 @@ "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==" }, "@babel/core": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", - "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.1", + "@babel/generator": "^7.24.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -31462,11 +31001,11 @@ } }, "@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "requires": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.24.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -31515,55 +31054,55 @@ } }, "@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "requires": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" } }, "@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "requires": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" } }, "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==" }, "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" } }, "@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==" }, "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==" }, "@babel/helper-validator-option": { "version": "7.23.5", @@ -31571,13 +31110,13 @@ "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==" }, "@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "requires": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" } }, "@babel/highlight": { @@ -31592,28 +31131,28 @@ } }, "@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==" + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==" }, "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", - "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.15" + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" } }, "@babel/plugin-transform-react-jsx-development": { @@ -31662,29 +31201,29 @@ } }, "@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "requires": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" } }, @@ -31747,10 +31286,159 @@ } } }, + "@emnapi/runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.1.tgz", + "integrity": "sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ==", + "optional": true, + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "optional": true + } + } + }, "@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "optional": true }, "@eslint-community/eslint-utils": { @@ -32251,6 +31939,147 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@img/sharp-darwin-arm64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.3.tgz", + "integrity": "sha512-FaNiGX1MrOuJ3hxuNzWgsT/mg5OHG/Izh59WW2mk1UwYHUwtfbhk5QNKYZgxf0pLOhx9ctGiGa2OykD71vOnSw==", + "optional": true, + "requires": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" + } + }, + "@img/sharp-darwin-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.3.tgz", + "integrity": "sha512-2QeSl7QDK9ru//YBT4sQkoq7L0EAJZA3rtV+v9p8xTKl4U1bUqTIaCnoC7Ctx2kCjQgwFXDasOtPTCT8eCTXvw==", + "optional": true, + "requires": { + "@img/sharp-libvips-darwin-x64": "1.0.2" + } + }, + "@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "optional": true + }, + "@img/sharp-libvips-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "optional": true + }, + "@img/sharp-libvips-linux-arm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "optional": true + }, + "@img/sharp-libvips-linux-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "optional": true + }, + "@img/sharp-libvips-linux-s390x": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "optional": true + }, + "@img/sharp-libvips-linux-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "optional": true + }, + "@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "optional": true + }, + "@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "optional": true + }, + "@img/sharp-linux-arm": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.3.tgz", + "integrity": "sha512-Q7Ee3fFSC9P7vUSqVEF0zccJsZ8GiiCJYGWDdhEjdlOeS9/jdkyJ6sUSPj+bL8VuOYFSbofrW0t/86ceVhx32w==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-arm": "1.0.2" + } + }, + "@img/sharp-linux-arm64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.3.tgz", + "integrity": "sha512-Zf+sF1jHZJKA6Gor9hoYG2ljr4wo9cY4twaxgFDvlG0Xz9V7sinsPp8pFd1XtlhTzYo0IhDbl3rK7P6MzHpnYA==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-arm64": "1.0.2" + } + }, + "@img/sharp-linux-s390x": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.3.tgz", + "integrity": "sha512-vFk441DKRFepjhTEH20oBlFrHcLjPfI8B0pMIxGm3+yilKyYeHEVvrZhYFdqIseSclIqbQ3SnZMwEMWonY5XFA==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-s390x": "1.0.2" + } + }, + "@img/sharp-linux-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.3.tgz", + "integrity": "sha512-Q4I++herIJxJi+qmbySd072oDPRkCg/SClLEIDh5IL9h1zjhqjv82H0Seupd+q2m0yOfD+/fJnjSoDFtKiHu2g==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-x64": "1.0.2" + } + }, + "@img/sharp-linuxmusl-arm64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.3.tgz", + "integrity": "sha512-qnDccehRDXadhM9PM5hLvcPRYqyFCBN31kq+ErBSZtZlsAc1U4Z85xf/RXv1qolkdu+ibw64fUDaRdktxTNP9A==", + "optional": true, + "requires": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" + } + }, + "@img/sharp-linuxmusl-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.3.tgz", + "integrity": "sha512-Jhchim8kHWIU/GZ+9poHMWRcefeaxFIs9EBqf9KtcC14Ojk6qua7ghKiPs0sbeLbLj/2IGBtDcxHyjCdYWkk2w==", + "optional": true, + "requires": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + } + }, + "@img/sharp-wasm32": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.3.tgz", + "integrity": "sha512-68zivsdJ0koE96stdUfM+gmyaK/NcoSZK5dV5CAjES0FUXS9lchYt8LAB5rTbM7nlWtxaU/2GON0HVN6/ZYJAQ==", + "optional": true, + "requires": { + "@emnapi/runtime": "^1.1.0" + } + }, + "@img/sharp-win32-ia32": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.3.tgz", + "integrity": "sha512-CyimAduT2whQD8ER4Ux7exKrtfoaUiVr7HG0zZvO0XTFn2idUWljjxv58GxNTkFb8/J9Ub9AqITGkJD6ZginxQ==", + "optional": true + }, + "@img/sharp-win32-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.3.tgz", + "integrity": "sha512-viT4fUIDKnli3IfOephGnolMzhz5VaTvDRkYqtZxOMIoMQ4MrAziO7pT1nVnOt2FAm7qW5aa+CCc13aEY6Le0g==", + "optional": true + }, "@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -33003,81 +32832,99 @@ } }, "@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", + "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", "optional": true }, "@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", + "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", "optional": true }, "@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", + "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", "optional": true }, "@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", + "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", + "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", + "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", + "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", + "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", + "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", + "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", + "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", + "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", "optional": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", + "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", + "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", + "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", + "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", "optional": true }, "@scure/base": { @@ -33197,9 +33044,9 @@ } }, "@shikijs/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.2.0.tgz", - "integrity": "sha512-OlFvx+nyr5C8zpcMBnSGir0YPD6K11uYhouqhNmm1qLiis4GA7SsGtu07r9gKS9omks8RtQqHrJL4S+lqWK01A==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.4.0.tgz", + "integrity": "sha512-CxpKLntAi64h3j+TwWqVIQObPTED0FyXLHTTh3MKXtqiQNn2JGcMQQ362LftDbc9kYbDtrksNMNoVmVXzKFYUQ==" }, "@solidity-parser/parser": { "version": "0.14.5", @@ -33482,6 +33329,11 @@ "@types/node": "*" } }, + "@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, "@types/d3": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz", @@ -34517,252 +34369,206 @@ "dev": true }, "astro": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/astro/-/astro-4.5.8.tgz", - "integrity": "sha512-bhKsoZQWT6LW8aYMvTGglZTPa3rYRbcdc2buiJyFPCvSWOOyZmxqpp6vtQ+x6fXxD8P1NecM/c4g5GaPi+MokQ==", - "requires": { - "@astrojs/compiler": "^2.7.0", - "@astrojs/internal-helpers": "0.3.0", - "@astrojs/markdown-remark": "4.3.1", - "@astrojs/telemetry": "3.0.4", - "@babel/core": "^7.24.3", - "@babel/generator": "^7.23.3", - "@babel/parser": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.5", - "@babel/traverse": "^7.23.3", - "@babel/types": "^7.23.3", - "@types/babel__core": "^7.20.4", - "acorn": "^8.11.2", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-4.7.1.tgz", + "integrity": "sha512-3o+VmnIPBiCm0QVyyTC/F8humNXny5YpI+MKvBTksviRtKxhnztEA3+GAR2XWLUSOx1+/GVjz7mExq3hJGOeqQ==", + "requires": { + "@astrojs/compiler": "^2.7.1", + "@astrojs/internal-helpers": "0.4.0", + "@astrojs/markdown-remark": "5.1.0", + "@astrojs/telemetry": "3.1.0", + "@babel/core": "^7.24.5", + "@babel/generator": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/plugin-transform-react-jsx": "^7.23.4", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", + "@types/babel__core": "^7.20.5", + "@types/cookie": "^0.6.0", + "acorn": "^8.11.3", "aria-query": "^5.3.0", "axobject-query": "^4.0.0", "boxen": "^7.1.1", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "ci-info": "^4.0.0", - "clsx": "^2.0.0", + "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^0.6.0", "cssesc": "^3.0.0", "debug": "^4.3.4", - "deterministic-object-hash": "^2.0.1", - "devalue": "^4.3.2", - "diff": "^5.1.0", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.0.0", + "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.3", - "es-module-lexer": "^1.4.1", - "esbuild": "^0.19.6", + "es-module-lexer": "^1.5.2", + "esbuild": "^0.20.2", "estree-walker": "^3.0.3", "execa": "^8.0.1", "fast-glob": "^3.3.2", - "flattie": "^1.1.0", + "flattie": "^1.1.1", "github-slugger": "^2.0.0", "gray-matter": "^4.0.3", "html-escaper": "^3.0.3", "http-cache-semantics": "^4.1.1", "js-yaml": "^4.1.0", - "kleur": "^4.1.4", - "magic-string": "^0.30.3", - "mime": "^3.0.0", - "ora": "^7.0.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.10", + "mrmime": "^2.0.0", + "ora": "^8.0.1", "p-limit": "^5.0.0", "p-queue": "^8.0.1", - "path-to-regexp": "^6.2.1", - "preferred-pm": "^3.1.2", + "path-to-regexp": "^6.2.2", + "preferred-pm": "^3.1.3", "prompts": "^2.4.2", "rehype": "^13.0.1", - "resolve": "^1.22.4", - "semver": "^7.5.4", - "sharp": "^0.32.6", - "shiki": "^1.1.2", - "string-width": "^7.0.0", + "resolve": "^1.22.8", + "semver": "^7.6.0", + "sharp": "^0.33.3", + "shiki": "^1.3.0", + "string-width": "^7.1.0", "strip-ansi": "^7.1.0", - "tsconfck": "^3.0.0", + "tsconfck": "^3.0.3", "unist-util-visit": "^5.0.0", "vfile": "^6.0.1", - "vite": "^5.1.4", + "vite": "^5.2.10", "vitefu": "^0.2.5", "which-pm": "^2.1.1", "yargs-parser": "^21.1.1", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.4" + "zod": "^3.23.5", + "zod-to-json-schema": "^3.23.0" }, "dependencies": { - "@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "optional": true + "@astrojs/markdown-remark": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-5.1.0.tgz", + "integrity": "sha512-S6Z3K2hOB7MfjeDoHsotnP/q2UsnEDB8NlNAaCjMDsGBZfTUbWxyLW3CaphEWw08f6KLZi2ibK9yC3BaMhh2NQ==", + "requires": { + "@astrojs/prism": "^3.1.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.0", + "hast-util-to-text": "^4.0.0", + "import-meta-resolve": "^4.0.0", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.0", + "remark-gfm": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "remark-smartypants": "^2.0.0", + "shiki": "^1.1.2", + "unified": "^11.0.4", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile": "^6.0.1" + } }, - "@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "optional": true + "@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "requires": { + "@types/unist": "*" + } }, "@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "emoji-regex": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" }, - "esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", - "requires": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } - }, "github-slugger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, + "hast-util-from-html": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz", + "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==", + "requires": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + } + }, + "hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "requires": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + } + }, + "hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "requires": { + "@types/hast": "^3.0.0" + } + }, + "hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "requires": { + "@types/hast": "^3.0.0" + } + }, + "hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "requires": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + } + }, + "hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "requires": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -34772,39 +34578,22 @@ } }, "magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "requires": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, - "rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", - "requires": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", - "@types/estree": "1.0.5", - "fsevents": "~2.3.2" - } + "mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==" }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "requires": { "lru-cache": "^6.0.0" } @@ -34819,6 +34608,29 @@ "strip-ansi": "^7.1.0" } }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, "unist-util-is": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", @@ -34827,6 +34639,15 @@ "@types/unist": "^3.0.0" } }, + "unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + } + }, "unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", @@ -34864,6 +34685,15 @@ "vfile-message": "^4.0.0" } }, + "vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "requires": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + } + }, "vfile-message": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", @@ -34873,187 +34703,6 @@ "unist-util-stringify-position": "^4.0.0" } }, - "vite": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.2.tgz", - "integrity": "sha512-FWZbz0oSdLq5snUI0b6sULbz58iXFXdvkZfZWR/F0ZJuKTSPO7v72QPXt6KqYeMFb0yytNp6kZosxJ96Nr/wDQ==", - "requires": { - "esbuild": "^0.20.1", - "fsevents": "~2.3.3", - "postcss": "^8.4.36", - "rollup": "^4.13.0" - }, - "dependencies": { - "@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "optional": true - }, - "@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "optional": true - }, - "esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "requires": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - } - } - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -35182,12 +34831,6 @@ "dequal": "^2.0.3" } }, - "b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", - "optional": true - }, "babel-plugin-transform-hook-names": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz", @@ -35205,39 +34848,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "bare-events": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.1.tgz", - "integrity": "sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A==", - "optional": true - }, - "bare-fs": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.2.tgz", - "integrity": "sha512-X9IqgvyB0/VA5OZJyb5ZstoN62AzD7YxVGog13kkfYWYqJYcK0kcqLZ6TrmH5qr4/8//ejVcX4x/a0UvaogXmA==", - "optional": true, - "requires": { - "bare-events": "^2.0.0", - "bare-os": "^2.0.0", - "bare-path": "^2.0.0", - "streamx": "^2.13.0" - } - }, - "bare-os": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.1.tgz", - "integrity": "sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==", - "optional": true - }, - "bare-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.0.tgz", - "integrity": "sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==", - "optional": true, - "requires": { - "bare-os": "^2.1.0" - } - }, "base-64": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", @@ -35255,7 +34865,8 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, "bech32": { "version": "1.1.4", @@ -35279,16 +34890,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "requires": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", @@ -35431,6 +35032,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -35650,12 +35252,6 @@ "readdirp": "~3.6.0" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "optional": true - }, "ci-info": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", @@ -35865,9 +35461,9 @@ } }, "clsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" }, "collapse-white-space": { "version": "2.1.0", @@ -36652,15 +36248,6 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "optional": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, "deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -36675,7 +36262,8 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "devOptional": true + "dev": true, + "peer": true }, "deep-is": { "version": "0.1.4", @@ -36783,9 +36371,9 @@ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" }, "detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "optional": true }, "detect-port": { @@ -36808,9 +36396,9 @@ } }, "devalue": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", - "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.0.0.tgz", + "integrity": "sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==" }, "devlop": { "version": "1.1.0", @@ -36826,9 +36414,9 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==" }, "difflib": { "version": "0.2.4", @@ -36980,15 +36568,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "optional": true, - "requires": { - "once": "^1.4.0" - } - }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -37077,9 +36656,9 @@ } }, "es-module-lexer": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.2.tgz", - "integrity": "sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==" + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz", + "integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==" }, "es-set-tostringtag": { "version": "2.0.1", @@ -37112,6 +36691,36 @@ "is-symbol": "^1.0.2" } }, + "esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "requires": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, "esbuild-android-64": { "version": "0.15.18", "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", @@ -38102,12 +37711,6 @@ } } }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "optional": true - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -38132,12 +37735,6 @@ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, - "fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "optional": true - }, "fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -38324,12 +37921,6 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "optional": true - }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -38457,12 +38048,6 @@ "node-emoji": "^1.10.0" } }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "optional": true - }, "github-slugger": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", @@ -39497,7 +39082,8 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true }, "ignore": { "version": "5.2.4", @@ -39521,6 +39107,11 @@ "resolve-from": "^4.0.0" } }, + "import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==" + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -39551,7 +39142,8 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true + "dev": true, + "peer": true }, "inline-style-parser": { "version": "0.1.1", @@ -40664,6 +40256,58 @@ "safe-buffer": "^5.1.2" } }, + "mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "requires": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + } + } + }, "mdast-util-directive": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-2.2.4.tgz", @@ -45694,11 +45338,6 @@ "picomatch": "^2.3.1" } }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -45721,12 +45360,6 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "optional": true - }, "mini-svg-data-uri": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", @@ -45754,19 +45387,13 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "devOptional": true + "dev": true }, "mkdirp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", "integrity": "sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==" }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "optional": true - }, "mnemonist": { "version": "0.38.5", "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", @@ -45954,12 +45581,6 @@ "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.7.4.tgz", "integrity": "sha512-MBeUVt7NBcXqh7AGT+KSr3O0X/995CZsvcP2QEMP+PXFwb07qv3Vjyq+EX0yS8f12Vv3Tn2g/BvK/OZoMhJlOQ==" }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "optional": true - }, "napi-macros": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", @@ -46011,41 +45632,6 @@ } } }, - "node-abi": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.40.0.tgz", - "integrity": "sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA==", - "optional": true, - "requires": { - "semver": "^7.3.5" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true - } - } - }, "node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", @@ -46265,18 +45851,18 @@ } }, "ora": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", - "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz", + "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==", "requires": { "chalk": "^5.3.0", "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.0", + "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.3.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "string-width": "^6.1.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.1", + "string-width": "^7.0.0", "strip-ansi": "^7.1.0" }, "dependencies": { @@ -46299,17 +45885,24 @@ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" }, "is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", + "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==" }, "log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", "requires": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "dependencies": { + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" + } } }, "mimic-fn": { @@ -46335,13 +45928,13 @@ } }, "string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" } } } @@ -46502,9 +46095,9 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==" }, "path-type": { "version": "4.0.0", @@ -46736,26 +46329,6 @@ "dev": true, "requires": {} }, - "prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "optional": true, - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, "preferred-pm": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.3.tgz", @@ -46936,16 +46509,6 @@ "dev": true, "peer": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "optional": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -46977,12 +46540,6 @@ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, - "queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "optional": true - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -47004,26 +46561,6 @@ "unpipe": "1.0.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "optional": true - } - } - }, "react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -47138,6 +46675,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -47225,16 +46763,6 @@ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, - "rehype-stringify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", - "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", - "requires": { - "@types/hast": "^3.0.0", - "hast-util-to-html": "^9.0.0", - "unified": "^11.0.0" - } - }, "unified": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", @@ -47848,6 +47376,72 @@ } } }, + "rehype-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", + "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", + "requires": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "dependencies": { + "@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, "remark-directive": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-2.0.1.tgz", @@ -48761,12 +48355,27 @@ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" }, "rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "devOptional": true, - "peer": true, - "requires": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", + "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "requires": { + "@rollup/rollup-android-arm-eabi": "4.17.2", + "@rollup/rollup-android-arm64": "4.17.2", + "@rollup/rollup-darwin-arm64": "4.17.2", + "@rollup/rollup-darwin-x64": "4.17.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", + "@rollup/rollup-linux-arm-musleabihf": "4.17.2", + "@rollup/rollup-linux-arm64-gnu": "4.17.2", + "@rollup/rollup-linux-arm64-musl": "4.17.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", + "@rollup/rollup-linux-riscv64-gnu": "4.17.2", + "@rollup/rollup-linux-s390x-gnu": "4.17.2", + "@rollup/rollup-linux-x64-gnu": "4.17.2", + "@rollup/rollup-linux-x64-musl": "4.17.2", + "@rollup/rollup-win32-arm64-msvc": "4.17.2", + "@rollup/rollup-win32-ia32-msvc": "4.17.2", + "@rollup/rollup-win32-x64-msvc": "4.17.2", + "@types/estree": "1.0.5", "fsevents": "~2.3.2" } }, @@ -48910,7 +48519,8 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "safe-regex-test": { "version": "1.0.0", @@ -49175,19 +48785,33 @@ } }, "sharp": { - "version": "0.32.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.3.tgz", + "integrity": "sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==", "optional": true, "requires": { + "@img/sharp-darwin-arm64": "0.33.3", + "@img/sharp-darwin-x64": "0.33.3", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.3", + "@img/sharp-linux-arm64": "0.33.3", + "@img/sharp-linux-s390x": "0.33.3", + "@img/sharp-linux-x64": "0.33.3", + "@img/sharp-linuxmusl-arm64": "0.33.3", + "@img/sharp-linuxmusl-x64": "0.33.3", + "@img/sharp-wasm32": "0.33.3", + "@img/sharp-win32-ia32": "0.33.3", + "@img/sharp-win32-x64": "0.33.3", "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" + "detect-libc": "^2.0.3", + "semver": "^7.6.0" }, "dependencies": { "lru-cache": { @@ -49199,12 +48823,6 @@ "yallist": "^4.0.0" } }, - "node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "optional": true - }, "semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -49214,29 +48832,6 @@ "lru-cache": "^6.0.0" } }, - "tar-fs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", - "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", - "optional": true, - "requires": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - } - }, - "tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "optional": true, - "requires": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -49271,11 +48866,11 @@ } }, "shiki": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.2.0.tgz", - "integrity": "sha512-xLhiTMOIUXCv5DqJ4I70GgQCtdlzsTqFLZWcMHHG3TAieBUbvEGthdrlPDlX4mL/Wszx9C6rEcxU6kMlg4YlxA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.4.0.tgz", + "integrity": "sha512-5WIn0OL8PWm7JhnTwRWXniy6eEDY234mRrERVlFa646V2ErQqwIFd2UML7e0Pq9eqSKLoMa3Ke+xbsF+DAuy+Q==", "requires": { - "@shikijs/core": "1.2.0" + "@shikijs/core": "1.4.0" } }, "side-channel": { @@ -49294,23 +48889,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "optional": true - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "optional": true, - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -49813,23 +49391,9 @@ "dev": true }, "stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "requires": { - "bl": "^5.0.0" - } - }, - "streamx": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", - "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", - "optional": true, - "requires": { - "bare-events": "^2.2.0", - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" - } + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==" }, "strict-uri-encode": { "version": "2.0.0", @@ -49840,6 +49404,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -50243,54 +49808,6 @@ } } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "optional": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "optional": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "optional": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -50637,15 +50154,6 @@ "tslib": "^1.8.1" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "optional": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, "turndown": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.1.2.tgz", @@ -51036,225 +50544,14 @@ } }, "vite": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", - "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", - "devOptional": true, - "peer": true, + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", + "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "dependencies": { - "@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "dev": true, - "optional": true, - "peer": true - }, - "@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "dev": true, - "optional": true, - "peer": true - }, - "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "devOptional": true, - "peer": true, - "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - } + "esbuild": "^0.20.1", + "fsevents": "~2.3.3", + "postcss": "^8.4.38", + "rollup": "^4.13.0" } }, "vite-plugin-svgr": { @@ -51560,14 +50857,14 @@ "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" }, "zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==" + "version": "3.23.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.6.tgz", + "integrity": "sha512-RTHJlZhsRbuA8Hmp/iNL7jnfc4nZishjsanDAfEY1QpDQZCahUp3xDzl+zfweE9BklxMUcgBgS1b7Lvie/ZVwA==" }, "zod-to-json-schema": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.22.4.tgz", - "integrity": "sha512-2Ed5dJ+n/O3cU383xSY28cuVi0BCQhF8nYqWU5paEpl7fVdqdAmiLdqLyfblbNdfOFwFfi/mqU4O1pwc60iBhQ==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.0.tgz", + "integrity": "sha512-az0uJ243PxsRIa2x1WmNE/pnuA05gUq/JB8Lwe1EDCCL/Fz9MgjYQ0fPlyc2Tcv6aF2ZA7WM5TWaRZVEFaAIag==", "requires": {} }, "zustand": { diff --git a/public/locales/tr/translation.json b/public/locales/tr/translation.json new file mode 100644 index 000000000..bfc9681a4 --- /dev/null +++ b/public/locales/tr/translation.json @@ -0,0 +1,197 @@ +{ + "rightSidebar": { + "onThisPage": "Bu Sayfada", + "more": "Daha Fazla", + "editThisPage": "Bu sayfayı düzenleyin", + "joinOurCommunity": "Topluluğumuza katılın", + "feedback": "Geri bildirim" + }, + "ui": { + "whatsNext": "Sırada ne var?", + "readMore": "Daha fazla" + }, + "landing": { + "test": "test", + "search": { + "title": "Scroll Dokümantasyonu'na Hoş Geldiniz", + "placeholder": "Scroll dokümantasyonunda arayın..." + }, + "newUserCTA": { + "title": "Scroll ve ZK Rollup'larda yeni misiniz?", + "description": "Başlangıç Kılavuzu'ndan temel bilgileri öğrenin." + }, + "resourcesCTA": { + "title": "Yararlı kaynaklar" + }, + "nodesCTA": { + "title": "Kendi Scroll Düğümünüzü çalıştırmanız mı gerekiyor?", + "description": "Scroll Düğümlerini başlatma ve sürdürme hakkında bilgi edinmek için Düğüm Operatörü Kılavuzu'na bakın.", + "buttonText": "Düğüm Operatörü Kılavuzu" + }, + "TutorialsCTA": { + "title": "Eğitimleri izleyin", + "description": "Teknolojimiz hakkında daha fazla bilgi edinin. YouTube kanalımıza sürekli olarak yeni videolar yüklüyoruz.", + "buttonText": "Eğitimleri izleyin" + }, + "LinksCTA": { + "card1": { + "title": "Entegrasyon desteğine mi ihtiyacınız var?", + "description": "Bir uzmanla görüşün" + }, + "card2": { + "title": "Discord", + "description": "Topluluğumuza katılın" + }, + "card3": { + "title": "TODO: Tartışma", + "description": "Gerçekten, topluluğumuza katılın" + } + }, + "NewsletterCTA": { + "title": "Scroll Geliştirici haberlerini yakından takip edin", + "text": "Güncellemeler, online ve yüz yüze etkinlikler, ekosistemdeki fırsatlar ve daha fazlası", + "placeholder": "e-posta adresi", + "thankYouForSubscribing": "Takip ettiğiniz için teşekkür ederiz!", + "correctEmail": "Lütfen geçerli bir e-posta adresi kullanın.", + "pleaseInsertEmail": "Lütfen e-posta adresinizi girin." + } + }, + "sidebar": { + "gettingStarted": { + "gettingStarted": "Başlarken", + "overview": "Genel Bakış", + "scrollSepoliaTestnet": "Scroll Sepolia Test Ağı", + "userGuide": "Kullanıcı Rehberi", + "setup": "Kurulum", + "faucet": "Musluk", + "bridge": "Köprü", + "transferTokens": "Tokenları Aktar", + "commonErrors": "Yaygın Hatalar", + "rollupExplorer": "Rollup Gezgini", + "scrollSepoliaBlockExplorer": "Scroll Sepolia Gezgini", + "scrollMainnet": "Scroll Ana Ağı", + "scrollscan": "Scrollscan Block Gezgini", + "sepoliaBlockExplorer": "Sepolia Gezgini", + "community": "Topluluk", + "discord": "Discord", + "communityForum": "Topluluk Forumu" + }, + "developers": { + "developers": "Geliştiriciler", + "buildingOnScroll": "Scroll Üzerinde Geliştirmek", + "developerQuickstart": "Geliştirici Hızlı Başlangıcı", + "verifyingSmartContracts": "Akıllı Sözleşmeleri Doğrulama", + "scrollContracts": "Scroll Sözleşmeleri", + "ethereumAndScrollDifferences": "Ethereum ve Scroll Farkları", + "l1AndL2Bridging": "L1 ve L2 Köprüleme", + "ethAndErc20TokenBridge": "ETH ve ERC20 Token Köprüsü", + "erc721NftBridge": "ERC721 NFT Köprüsü", + "erc1155TokenBridge": "ERC1155 Token Köprüsü", + "theScrollMessenger": "Scroll Messenger", + "transactionFeesOnScroll": "Scroll'da İşlem Ücretleri", + "l2Fee": "L2 Ücretleri", + "l1Fee": "L1 Ücretleri", + "gasOracle": "Gaz Oracle'ı'", + "future": "Gelecek", + "guides": "Rehberler", + "contractDeploymentTutorial": "Sözleşme Dağıtımı Eğitimi", + "crossChainInteraction": "Scroll Messenger ile Zincirler Arası Etkileşim", + "bridgingERC20TokenThroughCustomGateway": "Özel Ağ Geçidi üzerinden ERC20 köprüleyin", + "bridgingERC721NftThroughCustomGateway": "Özel Ağ Geçidi üzerinden ERC721 NFT köprüleyin", + "bridgingERC1155ThroughCustomGateway": "Özel Ağ Geçidi üzerinden ERC1155 NFT köprüleyin", + "estimatingGasAndTxFees": "Gaz ve İşlem Ücretlerinin Tahmin Edilmesi", + "resources": "Kaynaklar", + "mainnetResources": "Ana Ağ Kaynakları", + "sepoliaResources": "Sepolia Kaynakları", + "scrollBlockExplorer": "Scrollscan Gezgini", + "rollupExplorer": "Rollup Gezgini", + "scrollSepoliaBlockExplorer": "Scroll Sepolia Gezgini", + "sepoliaRollupExplorer": "Rollup Gezgini", + "sepoliaBlockExplorer": "Scrollscan Gezgini" + }, + "technology": { + "introduction": "Giriş", + "principles": "Prensipler", + "scrollArchitecture": "Scroll Mimarisi", + "scrollUpgrades": "Scroll Yükseltmeleri", + "overview": "Genel Bakış", + + "scrollChain": "Scroll Zinciri", + "accountsAndState": "Hesaplar ve Durum", + "blocks": "Bloklar", + "transactions": "İşlemler", + "rollupProcess": "Rollup Süreci", + "evmDifferencesFromEthereum": "Ethereum EVM'inden Farklar", + + "bridge": "Köprü", + "crossDomainMessaging": "Alanlar Arası Mesajlaşma", + "depositGateways": "Yatırım Ağ Geçitleri", + "withdrawGateways": "Çekim Ağ Geçitleri", + + "sequencer": "Sıralayıcı", + "executionNode": "Yürütme Düğümü", + "rollupNode": "Rollup Düğümü", + "zkTrie": "zkTrie", + + "zkevm": "zkEVM", + "introToZkevm": "zkEVM'e Giriş", + "zkevmOverview": "zkEVM Genel Bakış", + "bridgeOverview": "Köprüye Genel Bakış", + "prover": "Kanıtlayıcı", + "proofGeneration": "Kanıt Oluşturma", + "cpuProverRepo": "CPU Kanıtlayıcı Deposu", + + "security": "Güvenlik", + "auditsAndBugBounty": "Denetimler ve Hata Ödül Programı", + "l2BeatAssessment": "L2Beat Değerlendirmesi" + }, + "learn": { + "ethereumAndProtocols": "Ethereum & Protokoller", + "theScalabilityProblem": "Ölçeklenebilirlik Sorunu", + "introToRollups": "Rollup'lara Giriş", + "zeroKnowledge": "Zero Knowledge", + "introToZeroKnowledge": "Zero Knowledge'a Giriş", + "polynomialCommitmentSchemes": "Polinom Taahhüt Şemaları", + "kzgCommitmentScheme": "KZG Taahhüt Şeması", + "additionalResources": "Ek Kaynaklar" + } + }, + "footer": { + "aboutScroll": { + "title": "Scroll Hakkında", + "bugBounty": "Hata Ödül Programı", + "joinUs": "Bize Katılın", + "healthStatus": "Sağlık Durumu", + "privacyPolicy": "Gizlilik Politikası", + "termsAndConditions": "Şartlar ve Koşullar" + }, + "resources": { + "title": "Kaynaklar", + "scrollDocsURL": "https://docs.scroll.io/", + "blog": "Blog", + "documentation": "Dokümantasyon", + "brandKit": "Marka Kiti", + "audits": "Denetimler" + }, + "followUs": { + "title": "Bizi Takip Edin" + } + }, + "pageNotFound": { + "title": "Sayfa bulunamadı", + "text": "Üzgünüz, aradığınız sayfa bulunamadı." + }, + "rpcTable": { + "rpcServerAddress": "RPC Sunucu Adresi", + "height": "Yükseklik", + "latency": "Gecikme", + "score": "Puan", + "privacy": "Gizlilik", + "addNetwork": "Ağ Ekle", + "connect": "Bağlan", + "sorting": "Sıralama" + }, + "notTranslated": { + "notTranslated": "Bu sayfanın çevirisi henüz yapılmadı." + } +} diff --git a/src/config/menu.ts b/src/config/menu.ts index 75d3c9f38..9d9baeeee 100644 --- a/src/config/menu.ts +++ b/src/config/menu.ts @@ -37,4 +37,14 @@ export const MENU: MenuItems = { { text: "Tecnología", link: "/es/technology", section: "technology" }, { text: "Aprende", link: "/es/learn", section: "learn" }, ], + tr: [ + { + text: "Başla", + link: "/tr/getting-started/overview", + section: "gettingStarted", + }, + { text: "Geliştiriciler", link: "/tr/developers", section: "developers" }, + { text: "Teknoloji", link: "/tr/technology", section: "technology" }, + { text: "Öğren", link: "/tr/learn", section: "learn" }, + ], } diff --git a/src/content/docs/tr/article-components.mdx b/src/content/docs/tr/article-components.mdx new file mode 100644 index 000000000..ec4282764 --- /dev/null +++ b/src/content/docs/tr/article-components.mdx @@ -0,0 +1,169 @@ +--- +section: gettingStarted +title: "Article Components" +date: Last Modified +lang: "en" +permalink: "/article-components" +excerpt: "Learn more about the topics of Ethereum Scalability and Zero Knowledge Cryptography" +whatsnext: { "Next Up Page 1": "/", "Second Next Up Page": "/" } +--- + +import ClickToZoom from "../../../components/ClickToZoom.astro" +import priceAggr from "../../../assets/images/contract-devs/price-aggr.png" +import ToggleElement from "../../../components/ToggleElement.astro" +import Aside from "../../../components/Aside.astro" +import MarkmapView from "../../../components/MarkmapView/index.astro" +import RPCTable from "../../../components/RPCTable/RPCTable.astro" + +This is body text right under the article title. It typically is just paragraph text that's pretty straightforward. Then there's **bold text**, and _italic text_, and **_bold-italic text_**, and `inline-code` and **`bold inline code`** and even _`italic inline code`_ and **_`bold italic inline code`_**. And of course don't forget [links](#), and [**bold links**](#), and [_italic links_](#), and [**_bold-italic links_**](#). + +## Markdown Components (also an H2 Heading) + +- We've also got unordered lists! +- They can have multiple items. + - And some sub-items. + - That get into details +- That's an unordered list. + +What else do we have? + +1. Of course there's also ordered lists. +1. They look like this. +1. They're pretty useful. + +### H3 Heading + +#### H4 Heading + +##### H5 Heading + +Let's see a horizontal rule. + +--- + +We define the Square-Fibonacci sequence[^1], a variation of the Fibonacci sequence: + +### Math + +- Let $f_0 = 1, f_1 = 1$ +- For $$i \geq 2$$, define $f_{i} := (f_{i-2})^2 + (f_{i-1})^2 \mod q$ + - Where $q$ is a large prime integer. We use this modulus to bound the size of each element, so that it can be represented by some predetermined number of bits. + +### Tables + +| Syntax | Description | +| --------- | ----------- | +| Header | Title | +| Paragraph | Text | + +### Blockquotes + +> #### Success +> +> Vitae reprehenderit at aliquid error voluptates eum dignissimos. + +### Footnotes + +Here's a simple footnote,[^1] and here's a longer one.[^bignote] + +[^1]: This is the first footnote. +[^bignote]: Here's one with multiple paragraphs and code. + +### Callout that worked in MD, but might not in MDX? + +:::tip[Did you know?] +Astro helps you build faster websites with “Islands Architecture”. +::: + +## Imported MDX Components + +### Callouts + + + + + + + +``` +:::tip[Did you know?] + Astro helps you build faster websites with “Islands Architecture”. +::: +``` + +### Images zoom + + + +### Toggle + + +
Why build on Scroll?
+

+ Scroll enables creators to turn their content into interactive, explorable experiences. With Scroll, you can create + rich, interactive stories that engage readers, provide a better user experience, and help you stand out from the + crowd. +

+
+ +
How does Scroll work?
+

+ Scroll combines powerful technologies like WebGL and WebRTC to create immersive, interactive experiences. The + platform allows you to build 3D environments, add interactivity, and embed content from popular web services to + create a unique, engaging experience for your audience. +

+
+ +
What can I build with Scroll?
+

+ You can build a wide range of experiences with Scroll, from interactive articles to immersive product demos and + virtual tours. Scroll is designed to help you create engaging, interactive experiences that elevate your content and + captivate your audience. +

+
+ +### Markmap + +#### Referenced File + + + + +[](#markmap)markmap +=================== + +- beautiful2 +- useful +- easy +- interactive + + + +### Mermaid + +```mermaid +stateDiagram + Step --> StepState + Step --> CellManager + ConstraintBuilder --> CellManager + CellManager --> ProofSystem(Halo2) + StepState --> ExecutionState + StepState --> step_context + ExecutionState --> ConstraintBuilder + step_context --> ConstraintBuilder +``` + +### RPC Table + + \ No newline at end of file diff --git a/src/content/docs/tr/developers/_images/enforcedTxData.png b/src/content/docs/tr/developers/_images/enforcedTxData.png new file mode 100644 index 000000000..55b8c612e Binary files /dev/null and b/src/content/docs/tr/developers/_images/enforcedTxData.png differ diff --git a/src/content/docs/tr/developers/_images/enforcedTxSepoliascan.png b/src/content/docs/tr/developers/_images/enforcedTxSepoliascan.png new file mode 100644 index 000000000..c23a1e435 Binary files /dev/null and b/src/content/docs/tr/developers/_images/enforcedTxSepoliascan.png differ diff --git a/src/content/docs/tr/developers/_images/injectedProviderMM.png b/src/content/docs/tr/developers/_images/injectedProviderMM.png new file mode 100644 index 000000000..816517512 Binary files /dev/null and b/src/content/docs/tr/developers/_images/injectedProviderMM.png differ diff --git a/src/content/docs/tr/developers/_images/mmNetworkSelection.png b/src/content/docs/tr/developers/_images/mmNetworkSelection.png new file mode 100644 index 000000000..e86176f9b Binary files /dev/null and b/src/content/docs/tr/developers/_images/mmNetworkSelection.png differ diff --git a/src/content/docs/tr/developers/_images/verify1.png b/src/content/docs/tr/developers/_images/verify1.png new file mode 100644 index 000000000..b27db86bb Binary files /dev/null and b/src/content/docs/tr/developers/_images/verify1.png differ diff --git a/src/content/docs/tr/developers/developer-quickstart.mdx b/src/content/docs/tr/developers/developer-quickstart.mdx new file mode 100644 index 000000000..1f11d8384 --- /dev/null +++ b/src/content/docs/tr/developers/developer-quickstart.mdx @@ -0,0 +1,260 @@ +--- +section: developers +date: Last Modified +title: "Geliştirici Hızlı Başlangıcı" +lang: "tr" +permalink: "developers/developer-quickstart" +excerpt: "Scroll Geliştirici Hızlı Başlangıcı, test ağı Ether'i edinmenize, ağınızı yapılandırmanıza ve tüm favori araçlarınıza erişmenize yardımcı olur" +whatsnext: { "Akıllı Sözleşemenizi Doğrulayın": "/tr/developers/verifying-smart-contracts" } +--- + +import Aside from "../../../../components/Aside.astro" +import ClickToZoom from "../../../../components/ClickToZoom.astro" +import networkSelection from "./_images/mmNetworkSelection.png" +import injectedProviderMM from "./_images/injectedProviderMM.png" +import ToggleElement from "../../../../components/ToggleElement.astro" + +Scroll ile akıllı sözleşmeler oluştururken ve test ederken en sevdiğiniz araçlar oldukları gibi çalışırlar. + +Scroll, EVM ile bytecode olarak denk olduğu için en sevdiğiniz geliştirici araçlarınızı bir Scroll RPC sağlayıcısına yönlendirmeniz yeterli olacaktır. + +Herhangi bir sorunla karşılaşırsanız lütfen [Discord'umuzdan](https://discord.gg/scroll) bize ulaşın. + +## Ether Edinme + +Scroll yerel para birimi olarak ETH'yi kullanıyor ve bu ETH'ler, ağda akıllı sözleşme dağıtımı ve etkileşimleri için işlem ücretlerini ödemek için gerekli olacak. + +Scroll üzerinde inşa etmeye başlamak için Scroll Sepolia test ağımızı kullanarak başlamanızı öneririz. Öncelikle bir miktar test ağı ETH edinmeniz gerekecek. Sepolia'da test token'ları almayla ilgili ipuçları için [Musluk](/tr/user-guide/faucet) sayfasına bakın. Bundan sonra, [Köprü makalesinde](/tr/user-guide/bridge) açıklandığı gibi [Sepolia Köprümüzü](https://sepolia.scroll.io/bridge) kullanarak test ağı ETH'lerinizi Scroll Sepolia Test ağına (Katman 2) aktarabilirsiniz. + +Adım adım açıklama için Kullanım Kılavuzunun [Kurulum](/tr/user-guide/setup) sayfasıyla başlayın. + +Scroll ana ağında akıllı sözleşme dağıtmak için hazır olduğunuzda, [yerel köprümüzü](https://scroll.io/bridge/) veya 3. taraf köprülerden birini kullanarak ETH üzerinden köprü kurabilirsiniz. + +## Ağ Yapılandırması + +### Scroll Ana Ağı + +Ethereum araçlarınızı Scroll ana ağına yapılandırmak için aşağıdaki tabloyu kullanın. + +| Ağ Adı | Scroll | Ethereum Ana Ağı | +| ------------------ | -------------------------------------------------- | ---------------------------------------------------- | +| RPC URL'si | [https://rpc.scroll.io/](https://rpc.scroll.io/) | [https://eth.llamarpc.com](https://eth.llamarpc.com) | +| Zincir Kimliği | 534352 | 1 | +| Para Birimi Sembolü| ETH | ETH | +| Blok Gezgini URL'si| [https://scrollscan.com/](https://scrollscan.com/) | [https://etherscan.io](https://etherscan.io) | + + +
Ek Scroll Ana Ağ RPC'leri ve Altyapıları
+ - [Scroll Yerel Köprüsü](https://scroll.io/bridge) + - [ChainList.org'daki Scroll RPC Sağlayıcıları](https://chainlist.org/chain/534352) + - [ChainList.org'daki Ethereum RPC Sağlayıcıları](https://chainlist.org/chain/1) + {/* - Ek Blok Gezginleri: + - [Dora](https://www.ondora.xyz/network/scroll/interactions) + - [L2Scan](https://scroll.l2scan.co/) */} + +
+ +### Scroll Sepolia Test Ağı + +Ethereum araçlarınızı Scroll Sepolia Test ağına yapılandırmak için aşağıdaki tabloyu kullanın. + +| Ağ Adı | Scroll Sepolia | Ethereum Sepolia | +| ------------------ | ----------------------------------------------------------------- | ------------------------------------------------------------ | +| RPC URL'si | [https://sepolia-rpc.scroll.io/](https://sepolia-rpc.scroll.io/) | [https://rpc2.sepolia.org](https://rpc2.sepolia.org) | +| Zincir Kimliği | 534351 | 11155111 | +| Para Birimi Sembolü| ETH | ETH | +| Blok Gezgini URL'si| [https://sepolia.scrollscan.com](https://sepolia.scrollscan.com/) | [https://sepolia.etherscan.io](https://sepolia.etherscan.io) | + + +
Ek Scroll Sepolia RPC'leri ve Altyapıları
+ - [Scroll Sepolia Yerel Köprüsü](https://sepolia.scroll.io/bridge) + - [ChainList.org'daki Scroll Sepolia RPC Sağlayıcıları](https://chainlist.org/chain/534351) + - [ChainList.org'daki Ethereum Sepolia RPC Sağlayıcıları](https://chainlist.org/chain/11155111) + - Ek Blok Gezginleri: + - [Dora](https://www.ondora.xyz/network/scroll-sepolia/interactions) + - [L2Scan](https://scroll.l2scan.co/) + +
+ +## Araçlarınızı Yapılandırın + + + +### Hardhat + +Hardhat yapılandırma dosyanızı `hardhat.config.ts'yi Scroll Sepolia Test ağı public RPC'sini işaret edecek şekilde değiştirin. + +```jsx +... + +const config: HardhatUserConfig = { + ... + networks: { + scrollSepolia: { + url: "https://sepolia-rpc.scroll.io/" || "", + accounts: + process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], + }, + }, +}; + +... +``` + +### Foundry + +Scroll Sepolia Test ağı Public RPC'sini kullanarak dağıtım yapmak için şunu çalıştırın: + +```bash +forge create ... --rpc-url=https://sepolia-rpc.scroll.io/ --legacy +``` + +### Remix Web IDE + +Sözleşmelerinizi derledikten sonra Remix kullanarak dağıtım yapmanın en kolay yolu, [Metamask'ı kurmak](/tr/user-guide/setup) ve ardından **Scroll Sepolia Test ağını** seçmektir. + + + +Şimdi, "Dağıt ve İşlemleri Çalıştır" sekmesinde, "Ortam" açılır menüsünü kullanarak "Enjekte Edilen Sağlayıcı - MetaMask"ı seçin. + + + +Cüzdanınızı bağlayın ve Scroll Sepolia Test ağını seçin. Hesabınız Remix'te otomatik olarak seçilmelidir ve "Dağıt"a tıklayabilirsiniz. + +### Truffle + +Zaten bir Truffle ortamı kurulumunuz olduğunu varsayarak Truffle [yapılandırma dosyasına](https://trufflesuite.com/docs/truffle/reference/configuration/), `truffle.js`ye gidin. HDWalletProvider'ı yüklediğinizden emin olun: `npm install @truffle/hdwallet-provider@1.4.0` + +```js +const HDWalletProvider = require("@truffle/hdwallet-provider") +... +module.exports = { + networks: { + scrollSepolia: { + provider: () => + new HDWalletProvider(process.env.PRIVATE_KEY, "https://sepolia-rpc.scroll.io/"), + network_id: '*', + }, + } +} +``` + +### Brownie + +Scroll Sepolia Test ağını eklemek için aşağıdaki komutu çalıştırın: + +```bash +brownie networks add Ethereum scrollSepolia host=https://sepolia-rpc.scroll.io/ chainid=534351 +``` + +Bunu varsayılan ağınız olarak ayarlamak için proje yapılandırma dosyanıza aşağıdakileri ekleyin: + +```yaml +networks: + default: scrollSepolia +``` + +Scroll Sepolia Test ağını eklemenin başka bir yolu da bir 'yaml' dosyası oluşturmak ve onu eklemek için bir komut çalıştırmaktır. + +'network-config.yaml' adlı bir yaml dosyası örneği vermek gerekirse: + +```yaml +live: +- name: Ethereum + networks: + - chainid: 534351 + explorer: https://sepolia.scrollscan.com/ + host: https://sepolia-rpc.scroll.io + id: scrollSepolia + name: Scroll Sepolia Testnet +``` + +Scroll Sepolia Test ağını ağ listesine eklemek için aşağıdaki komutu çalıştırın: + +```bash +brownie networks import ./network-config.yaml +``` + +Scroll'da dağıtmak için aşağıdaki komutu çalıştırın. Bu örnekte "token.py" akıllı sözleşmeyi dağıtan bir komut dosyasıdır. Bunu kendi komut dosyanızın adıyla değiştirin: + +```bash +brownie run token.py --network scrollSepolia +``` + +### ethers.js + +Bir 'ethers' komut dosyasında Scroll Sepolia Test ağı sağlayıcısının kurulması: + +```jsx +import { ethers } from "ethers" + +const provider = new ethers.providers.JsonRpcProvider("https://sepolia-rpc.scroll.io/") +``` + +### scaffold-eth + +Scaffold-eth'i kullanarak dağıtım yapmak için hem Hardhat hem de React ayarlarınızı Scroll Sepolia Test ağına yönlendirmeniz gerekir. + +#### Hardhat'i Yapılandırma + +'packages/hardhat/hardhat.config.js' dosyasına ağın eklenerek varsayılan ağ olarak seçilmesi gerekmektedir. + +```jsx +... +// +// Burada dağıtmak istediğiniz ağı seçin: +// +const defaultNetwork = "scrollSepolia"; +... +module.exports = { +... + networks: { +... + scrollSepolia: { + url: "https://sepolia-rpc.scroll.io/", + accounts: { + mnemonic: mnemonic(), + }, + }, + } +... +} +``` + +Dağıtım cüzdanına da fon sağladığınızdan emin olun! Cüzdanı oluşturmak için "yarn generate"i, fonlarını kontrol etmek için "yarn account"u çalıştırın. Fonlama sağlandıktan sonra Scroll Sepolia test ağına dağıtmak için `yarn deploy --network ScrollSepolia` komutunu çalıştırın. + + + +#### Kullanıcı Arayüzü Yapılandırması + +Kullanıcı arayüzünüzü yapılandırmak için Scroll Sepolia Test ağını bir ağ seçeneği olarak eklemeniz ve ardından bunu varsayılan olarak seçmeniz gerekir. + +Ağı eklemek için 'packages/react-app/src/constants.js' dosyasını değiştirin. + +```jsx +... +export const NETWORKS = { +... + scrollSepolia: { + name: "scrollSepolia", + color: "#e9d0b8", + chainId: 534351, + rpcUrl: "https://sepolia-rpc.scroll.io/", + blockExplorer: "https://sepolia.scrollscan.com", + }, +... +} +``` + +Daha sonra, 'packages/react-app/src/App.jsx' bölümünde değişiklik yapın + +```jsx +... +/// 📡 Sözleşmeleriniz hangi zincire dağıtıldı? +const initialNetwork = NETWORKS.scrollSepolia; +... +``` diff --git a/src/content/docs/tr/developers/ethereum-and-scroll-differences.mdx b/src/content/docs/tr/developers/ethereum-and-scroll-differences.mdx new file mode 100644 index 000000000..8ee8844bf --- /dev/null +++ b/src/content/docs/tr/developers/ethereum-and-scroll-differences.mdx @@ -0,0 +1,97 @@ +--- +section: developers +date: Last Modified +title: "Ethereum ve Scroll Farkları" +lang: "tr" +permalink: "developers/ethereum-and-scroll-differences" +whatsnext: { "L1 & L2 Köprüleme": "/tr/developers/l1-and-l2-bridging/" } +excerpt: "Ethereum ana ağının EVM'si ile Scroll'un zkEVM için değiştirmiş olduğu tasarımı arasında farklılık gösteren bir dizi teknik ayrıntı vardır. Aşağıda bu farklılıkları şu anda mevcut oldukları haliyle görebilirsiniz." +--- + +import Aside from "../../../../components/Aside.astro" + +Ethereum ana ağının EVM'i ile Scroll'un zkEVM için değiştirmiş olduğu tasarımı arasında bir dizi teknik ayrıntı farklılık göstermektedir. Aşağıda Scroll ve Scroll Sepolia'da mevcut olan bu farklılıkları görebilirsiniz. + +Açık kaynak katkıda bulunanlar ve altyapı oluşturucular, daha fazla destek için lütfen ekibimizle iletişime geçin. + + + +## EVM Opcode'ları + +| Opcode | Solidity dengi | Scroll Davranışı | +| --------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------- | +| `BLOCKHASH` | `block.blockhash` | Son 256 blok için `keccak(chain_id \|\| block_number)'ı döndürür. | +| `COINBASE` | `block.coinbase` | Önceden dağıtılan ücret kasası sözleşme adresini döndürür. Bkz. [Scroll Sözleşmeleri](/tr/developers/scroll-contracts). | +| `DIFFICULTY` / `PREVRANDAO` | `block.difficulty` | 0 değerini döndürür. | +| `BASEFEE` | `block.basefee` | Devre dışı.[^eip1559] Opcode ile karşılaşılırsa işlem geri alınacaktır. | +| `SELFDESTRUCT` | `selfdestruct` | Engelli. Opcode ile karşılaşılırsa işlem geri döndürülecektir.[^willadpot] | + +[^eip1559]: Şu anda Scroll'da EIP-1559'u devre dışı bıraktık. +[^willadpot]: Gelecekte Ethereum'un çözümünü benimsemek için değişecek. + +## EVM Ön Derlemeleri + +'SHA2-256' (adress '0x2'), 'RIPEMD-160' (adress '0x3') ve 'blake2f' (adress '0x9') ön derlemeleri şu anda desteklenmemektedir. Bu ön derlenmiş sözleşmelere yapılan çağrılar geri alınacaktır. Bu üç ön derlemeyi gelecekteki bir hard fork'ta etkinleştirmeyi planlıyoruz. + +'Modexp' ön derlemesi destekleniyor ancak yalnızca 32 bytea eşit veya daha küçük boyuttaki girişleri destekliyor (ör. 'u256'). + +'ecPairing' ön derlemesi destekleniyor, fakat nokta sayısı (kümeler, çiftler) 6 yerine 4 ile sınırlıdır. + +Diğer EVM ön derlemelerinin tümü desteklenir: `ecRecover`, `identity`, `ecAdd`, `ecMul`. + +## Durum Hesabı + +### **İlave Alanlar** + +Mevcut `StateAccount` nesnesine iki alan ekledik: `PoseidonCodehash` ve `CodeSize`. + +```go +type StateAccount struct { + Nonce uint64 + Balance *big.Int + Root common.Hash // merkle root of the storage trie + KeccakCodeHash []byte // still the Keccak codehash + // added fields + PoseidonCodeHash []byte // the Poseidon codehash + CodeSize uint64 +} +``` + +### **CodeHash** + +Bununla ilgili olarak, her sözleşme bytecode'u için iki tür kod hash'i sağlarız: Keccak hash'i ve Poseidon hash'i. + +'KeccakCodeHash', 'EXTCODEHASH' uyumluluğunu korumak için tutulur. Poseidon hash işleminin çok daha verimli olduğu zkEVM'ye yüklenen bytecodeların doğruluğunu doğrulamak için "PoseidonCodeHash" kullanılır. + +### CodeSize + +'EXTCODESIZE' doğrulanırken tüm sözleşme verilerinin zkEVM'ye yüklenmesi pahalıdır. Bunun yerine sözleşme boyutunu sözleşme oluşturma sırasında depolama alanında saklıyoruz. Bu şekilde kodu yüklememize gerek kalmaz; bu opcode'u doğrulamak için bir depolama kanıtı yeterlidir. + +## Blok Zamanı + +Scroll, 3 saniyelik sabit bir blok süresini hedefler. Bu, ideal koşullar altında Ethereum'da kullanılan 12 saniyeden daha kısa ve daha tutarlıdır. + +Blok süresinin bu şekilde seçilmesinin iki nedeni var: + +- Daha hızlı ve sabit blok süresine sahip olmak, daha hızlı geri bildirim ve daha iyi bir kullanıcı deneyimi sağlar. +- Test ağlarımızdaki zkEVM devrelerini optimize ederken, blok veya parti başına daha küçük bir gas limitini korusak bile, yine de Ethereum'dan daha yüksek verime ulaşabiliriz. + +## Gelecekteki EIP'ler + +Ethereum tarafından benimsenen tüm yeni EIP'leri yakından takip ediyoruz ve uygun olduğunda bunları benimsiyoruz. Daha fazla ayrıntıyla ilgileniyorsanız, [topluluk forumumuzdan](https://community.scroll.io) veya [Scroll Discord'dan](https://discord.gg/scroll) bize ulaşın. + +## İşlem ücretleri + +Scroll işlemlerinden alınan ücret iki bölümden oluşur: + +- **L2 gaz ücreti:** L1'e benzer şekilde, L2 işlem ücreti miktarı "L2_gas_price * L2_gas_used" değerine eşittir ve aşağıdaki maliyetleri kapsar: + - L2 sıralayıcı yürütme ve depolama maliyeti + - L1'de geçerlilik kanıtı doğrulama ve sonuçlandırma maliyeti + - Kanıtlayıcı maliyeti +- **L1 veri ücreti:** L2 gaz ücretine ek olarak ek ücret. L1 veri ücreti yalnızca L2 tarafından başlatılan işlemlerden alınır, L1 tarafından başlatılan işlemlerden alınmaz. Ücret, veri kullanılabilirliği için L1'e veri gönderme maliyetini kapsar. Tx verilerini L1'e yuvarladığımız için L1 rollup ücreti, tx verilerinin boyutuna göre hesaplanır. + +Daha fazla bilgi için, bkz. [Scroll'da İşlem Ücretleri](/tr/developers/transaction-fees-on-scroll). + +--- diff --git a/src/content/docs/tr/developers/guides/bridge-erc20-through-the-custom-gateway.mdx b/src/content/docs/tr/developers/guides/bridge-erc20-through-the-custom-gateway.mdx new file mode 100644 index 000000000..58c8239c0 --- /dev/null +++ b/src/content/docs/tr/developers/guides/bridge-erc20-through-the-custom-gateway.mdx @@ -0,0 +1,452 @@ +--- +section: developers +date: Last Modified +title: "Özel Ağ Geçidi üzerinden ERC20 köprüleyin" +lang: "tr" +permalink: "developers/guides/bridge-erc20-through-the-custom-gateway" +excerpt: "Bu kılavuz, Özel Ağ Geçidini kullanarak özel işlevlere ihtiyaç duyan ERC20'ler için Scroll köprüsünün nasıl kullanılacağını açıklayacaktır." +--- + + +import Aside from "../../../../../components/Aside.astro" + + +Bu kılavuz, Özel Ağ Geçidini kullanarak özel işlevlere ihtiyaç duyan ERC20'ler için Scroll köprüsünün nasıl kullanılacağını açıklayacaktır. + + + + + +## 1. Adım: Sepolia'da bir token başlatın + + +Öncelikle köprüleyecek bir tokena ihtiyacımız var. Bir tokenın L2 ile uyumlu olması için belirli bir ERC20 uygulamasına gerek yoktur. Zaten bir tokenınız varsa bu adımı atlayabilirsiniz. Yeni bir token dağıtmak istiyorsanız, başlatıldığında dağıtıcıya 1 milyon token basan basit bir ERC20 tokenının aşağıdaki sözleşmesini kullanın. + + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.16; + + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + + +contract L1Token is ERC20 { + constructor() ERC20("My Token L1", "MTL1") { + _mint(msg.sender, 1_000_000 ether); + } +} +``` + + +## Adım 2: Scroll Sepolia test ağında muadil tokenı başlatın + + +Sıradaki adımda, Sepolia'daki orijinal tokenı temsil edecek olan bir karşılık tokenını Scroll üzerinde başlatacaksınız. Bu token, L1 tokenınınkiyle eşleşmek için özel mantık uygulayabilir hatta L1 tokenının ötesinde ek özellikler ekleyebilir. + + +Bunun çalışması için: + + +- Tokenın köprüyle uyumlu olabilmesi için "IScrollStandardERC20" arayüzünü uygulaması gerekir. +- Sözleşme, "gateway()" ve "counterpart()" fonksiyonları altında ağ geçidi adresini ve karşılık gelen token adreslerini (yeni başlattığımız L1 token) sağlamalıdır. Ayrıca L2 ağ geçidinin, bir token yatırıldığında ve çekildiğinde 'mint()' ve 'burn()' işlevlerini çağırmasına da izin vermelidir. + + +Aşağıda köprüyle uyumlu bir tokenın tam bir örneği bulunmaktadır. Yapıcıya(constructor) resmi Scroll Özel Ağ Geçidi adresini (`0x058dec71E53079F9ED053F3a0bBca877F6f3eAcf`) ve Sepolia'da oluşturulan tokenın adresini ileteceksiniz. + + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.16; + + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@scroll-tech/contracts@0.1.0/libraries/token/IScrollERC20Extension.sol"; + + +contract L2Token is ERC20, IScrollERC20Extension { + // We store the gateway and the L1 token address to provide the gateway() and counterpart() functions which are needed from the Scroll Standard ERC20 interface + address _gateway; + address _counterpart; + + + // In the constructor we pass as parameter the Custom L2 Gateway and the L1 token address as parameters + constructor(address gateway_, address counterpart_) ERC20("My Token L2", "MTL2") { + _gateway = gateway_; + _counterpart = counterpart_; + } + + + function gateway() public view returns (address) { + return _gateway; + } + + + function counterpart() external view returns (address) { + return _counterpart; + } + + + // We allow minting only to the Gateway so it can mint new tokens when bridged from L1 + function transferAndCall(address receiver, uint256 amount, bytes calldata data) external returns (bool success) { + transfer(receiver, amount); + data; + return true; + } + + + // We allow minting only to the Gateway so it can mint new tokens when bridged from L1 + function mint(address _to, uint256 _amount) external onlyGateway { + _mint(_to, _amount); + } + + + // Similarly to minting, the Gateway is able to burn tokens when bridged from L2 to L1 + function burn(address _from, uint256 _amount) external onlyGateway { + _burn(_from, _amount); + } + + + modifier onlyGateway() { + require(gateway() == _msgSender(), "Ownable: caller is not the gateway"); + _; + } +} +``` + + +## Adım 3: Token'ı Scroll Köprüsü'ne ekleyin + + +Token'ı Scroll'daki "L2CustomERC20Gateway" sözleşmesine ve L1'deki "L1CustomERC20Gateway" sözleşmesine eklemek için Scroll ekibiyle iletişime geçmeniz gerekiyor. Ayrıca tokenınızı Scroll resmi köprü kullanıcı arayüzüne eklemek için [token listeleri](https://github.com/scroll-tech/token-list) deposundaki talimatları izleyin. + + +## Adım 4: Tokenları yatırın + + +Tokenınız Scroll ekibi tarafından onaylandıktan sonra L1'den token yatırabilirsiniz. Bunu yapmak için öncelikle Sepolia'daki 'L1CustomGateway' sözleşme adresine onay vermeniz gerekir ('0x31C994F2017E71b82fd4D8118F140c81215bbb37'). Ardından, 'L1CustomGateway' sözleşmesindeki 'depositERC20' fonksiyonunu çağırarak tokenları yatırın. Bu, [köprü kullanıcı arayüzümüz](https://scroll.io/bridge), [Etherscan Sepolia](https://sepolia.etherscan.io/address/0x31C994F2017E71b82fd4D8118F140c81215bbb37#writeProxyContract) veya bir akıllı sözleşme kullanılarak yapılabilir. + + +## Adım 5: Tokenları çekin + + +Tokenları L2'den L1'e geri göndermek için benzer adımları izleyeceksiniz. Öncelikle, 'L2CustomGateway' adresine ('0x058dec71E53079F9ED053F3a0bBca877F6f3eAcf') onay verin ve ardından 'L2CustomGateway' sözleşmesinden 'drawERC20'yi çağırarak tokenları çekin. + + +## Alternatif Yaklaşım: Özel bir L1 Ağ Geçidi sözleşmesi başlatın ve ayarlayın + + +Tokenları Scroll'a ve Scroll'dan köprülemek için önerilen yöntem (yukarıda açıklandığı gibi) tokenınızı Scroll resmi köprüsüne eklemektir. Bu yaklaşım, onların daha kolay bulunmasını sağlayacak ve sahipleri için daha güvenli olmalarını sağlayacaktır. Ancak bunun için Scroll ekibinin onayı gereklidir. Resmi onay süreci olmadan özel bir token başlatmak istiyorsanız kendiniz özel bir ağ geçidi oluşturabilirsiniz. Bunu yapmak için L1'de bir "L1CustomERC20Gateway" sözleşmesi ve L2'de bir "L2CustomERC20Gateway" dağıtmanız gerekecektir. + + +### Özel bir L1 Ağ Geçidi başlatın + + +Sepolia'da aşağıdaki sözleşmeyi başlatarak işe koyulalım. + + +```solidity +// SPDX-License-Identifier: MIT + + +// Although it's possible to use other Solidity versions, we recommend using version 0.8.16 because that's where our contracts were audited +pragma solidity =0.8.16; + + +import "@openzeppelin/contracts/access/Ownable.sol"; + + +import { IL2ERC20Gateway } from "@scroll-tech/contracts@0.1.0/L2/gateways/IL2ERC20Gateway.sol"; +import { IL1ScrollMessenger } from "@scroll-tech/contracts@0.1.0/L1/IL1ScrollMessenger.sol"; +import { IL1ERC20Gateway } from "@scroll-tech/contracts@0.1.0/L1/gateways/IL1ERC20Gateway.sol"; + + +import { ScrollGatewayBase } from "@scroll-tech/contracts@0.1.0/libraries/gateway/ScrollGatewayBase.sol"; +import { L1ERC20Gateway } from "@scroll-tech/contracts@0.1.0/L1/gateways/L1ERC20Gateway.sol"; + + +// This contract will be used to send and receive tokens from L2 +contract L1CustomERC20Gateway is L1ERC20Gateway, Ownable { + // Tokens must be mapped to "bind" them to a token that represents the original token on the original. This event will be emitted when the token mapping for ERC20 token is updated. + event UpdateTokenMapping(address indexed l1Token, address indexed oldL2Token, address indexed newL2Token); + + + mapping(address => address) public tokenMapping; + + + constructor() {} + + + // This function must be called once after both the L1 and L2 contract was deployed + function initialize(address _counterpart, address _router, address _messenger) external { + require(_router != address(0), "zero router address"); + + + ScrollGatewayBase._initialize(_counterpart, _router, _messenger); + } + + + /// This function returns the address of the token on L2 + function getL2ERC20Address(address _l1Token) public view override returns (address) { + return tokenMapping[_l1Token]; + } + + + // Updates the token mapping that "binds" a token with another one on the other chain + function updateTokenMapping(address _l1Token, address _l2Token) external onlyOwner { + require(_l2Token != address(0), "token address cannot be 0"); + + + address _oldL2Token = tokenMapping[_l1Token]; + tokenMapping[_l1Token] = _l2Token; + + + emit UpdateTokenMapping(_l1Token, _oldL2Token, _l2Token); + } + + + // Callback called before a token is withdrawn on L1 + function _beforeFinalizeWithdrawERC20( + address _l1Token, + address _l2Token, + address, + address, + uint256, + bytes calldata + ) internal virtual override { + require(msg.value == 0, "nonzero msg.value"); + require(_l2Token != address(0), "token address cannot be 0"); + require(_l2Token == tokenMapping[_l1Token], "l2 token mismatch"); + } + + + // Token bridged can be "canceled" or dropped. This callback is called before that happens. + function _beforeDropMessage(address, address, uint256) internal virtual override { + require(msg.value == 0, "nonzero msg.value"); + } + + + // Internal function holding the deposit logic + function _deposit( + address _token, + address _to, + uint256 _amount, + bytes memory _data, + uint256 _gasLimit + ) internal virtual override nonReentrant { + address _l2Token = tokenMapping[_token]; + require(_l2Token != address(0), "no corresponding l2 token"); + + + // 1. Transfer token into this contract. + address _from; + (_from, _amount, _data) = _transferERC20In(_token, _amount, _data); + + + // 2. Generate message passed to L2CustomERC20Gateway. + bytes memory _message = abi.encodeCall( + IL2ERC20Gateway.finalizeDepositERC20, + (_token, _l2Token, _from, _to, _amount, _data) + ); + + + // 3. Send message to L1ScrollMessenger. + IL1ScrollMessenger(messenger).sendMessage{ value: msg.value }(counterpart, 0, _message, _gasLimit, _from); + + + emit DepositERC20(_token, _l2Token, _from, _to, _amount, _data); + } +} +``` + + +### Özel bir L2 Ağ Geçidi başlatın + + +Şimdi Scroll'da muadil sözleşmeyi başlatalım. + + +```solidity +// SPDX-License-Identifier: MIT + + +pragma solidity =0.8.16; + + +import "@openzeppelin/contracts/access/Ownable.sol"; + + +import "@scroll-tech/contracts@0.1.0/L2/gateways/L2ERC20Gateway.sol"; +import { IL2ScrollMessenger } from "@scroll-tech/contracts@0.1.0/L2/IL2ScrollMessenger.sol"; +import { IL1ERC20Gateway } from "@scroll-tech/contracts@0.1.0/L1/gateways/IL1ERC20Gateway.sol"; +import { ScrollGatewayBase } from "@scroll-tech/contracts@0.1.0/libraries/gateway/ScrollGatewayBase.sol"; +import "@scroll-tech/contracts@0.1.0/libraries/token/IScrollERC20Extension.sol"; + + +import { IL2ERC20Gateway } from "@scroll-tech/contracts@0.1.0/L2/gateways/IL2ERC20Gateway.sol"; + + +// This contract will be used to send and receive tokens from L1 +contract L2CustomERC20Gateway is L2ERC20Gateway, ScrollGatewayBase, Ownable { + event UpdateTokenMapping(address indexed l2Token, address indexed oldL1Token, address indexed newL1Token); + + + // solhint-disable-next-line var-name-mixedcase + mapping(address => address) public tokenMapping; + + + constructor() {} + + + // Like with the L1 version of the Gateway, this must be called once after both the L1 and L2 gateways are deployed + function initialize(address _counterpart, address _router, address _messenger) external { + require(_router != address(0), "zero router address"); + + + ScrollGatewayBase._initialize(_counterpart, _router, _messenger); + } + + + /// Returns the address of the token representing the token on L2 + function getL1ERC20Address(address _l2Token) external view override returns (address) { + return tokenMapping[_l2Token]; + } + + + // This returns the L2 token address + function getL2ERC20Address(address) public pure override returns (address) { + revert("unimplemented"); + } + + + // This function finalizes the token deposit on L2 when the deposit was not finalized due to not enough gas sent from L1 + function finalizeDepositERC20( + address _l1Token, + address _l2Token, + address _from, + address _to, + uint256 _amount, + bytes calldata _data + ) external payable override onlyCallByCounterpart nonReentrant { + require(msg.value == 0, "nonzero msg.value"); + require(_l1Token != address(0), "token address cannot be 0"); + require(_l1Token == tokenMapping[_l2Token], "l1 token mismatch"); + + + IScrollERC20Extension(_l2Token).mint(_to, _amount); + + + _doCallback(_to, _data); + + + emit FinalizeDepositERC20(_l1Token, _l2Token, _from, _to, _amount, _data); + } + + + // Same as in the L1 version of this contract, this function "binds" a token with a token on the other chain + function updateTokenMapping(address _l2Token, address _l1Token) external onlyOwner { + require(_l1Token != address(0), "token address cannot be 0"); + + + address _oldL1Token = tokenMapping[_l2Token]; + tokenMapping[_l2Token] = _l1Token; + + + emit UpdateTokenMapping(_l2Token, _oldL1Token, _l1Token); + } + + + // Internal function holding the withdraw logic + function _withdraw( + address _token, + address _to, + uint256 _amount, + bytes memory _data, + uint256 _gasLimit + ) internal virtual override nonReentrant { + address _l1Token = tokenMapping[_token]; + require(_l1Token != address(0), "no corresponding l1 token"); + + + require(_amount > 0, "withdraw zero amount"); + + + // 1. Extract real sender if this call is from L2GatewayRouter. + address _from = msg.sender; + if (router == msg.sender) { + (_from, _data) = abi.decode(_data, (address, bytes)); + } + + + // 2. Burn token. + IScrollERC20Extension(_token).burn(_from, _amount); + + + // 3. Generate message passed to L1StandardERC20Gateway. + bytes memory _message = abi.encodeCall( + IL1ERC20Gateway.finalizeWithdrawERC20, + (_l1Token, _token, _from, _to, _amount, _data) + ); + + + // 4. send message to L2ScrollMessenger + IL2ScrollMessenger(messenger).sendMessage{ value: msg.value }(counterpart, 0, _message, _gasLimit); + + + emit WithdrawERC20(_l1Token, _token, _from, _to, _amount, _data); + } +} +``` + + +### Sepolia'da Ağ Geçidi sözleşmenizi kurun + + +Sözleşmeler dağıtıldıktan sonra, sözleşmeleri başlatmak ve bunları karşılık gelen tokenlara ve köprünün diğer tarafındaki ağ geçidine bağlamak için aşağıdaki işlevleri çağırın. + + +İlk olarak, aşağıdaki parametrelerle 'MyL1Gateway' sözleşmesindeki 'initialize' fonksiyonunu çağırın: + + +- `_counterpart`: Scroll'da yeni başlattığımız `MyL2Gateway`in adresi. +- `_router`: Sepolia'daki `L1GatewayRouter` sözleşmesi olan `0x13FBE0D0e5552b8c9c4AE9e2435F38f37355998a` olarak ayarlayın. +- `_messenger`: Sepolia'daki `L1ScrollMessenger` sözleşmesi olan `0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A` olarak ayarlayın. + + +Özel bir ağ geçidi birden fazla token köprüsüne ev sahipliği yapabilir. Ama biz örneğimizde, 'MyL1Gateway' sözleşmesindeki 'updateTokenMapping''i aşağıdaki parametrelerle çağırarak yalnızca L1Token ve L2Token arasında köprü kurulmasına izin vereceğiz: + + +- `_l1Token`: Daha önce Sepolia'da başlattığımız `L1Token` sözleşmesinin adresi. +- `_l2Token`: Daha önce Scroll'da başlattığımız `L2Token` sözleşmesinin adresi. + + +### Scroll'da Ağ Geçidi sözleşmenizi kurun + + +Şimdi Scroll zincirine geçelim ve benzer adımları izleyerek `MyL2Gateway`i başlatalım. + + +İlk olarak, `MyL2Gateway`den `initialize` fonksiyonunu çağırın: + + +- `_counterpart`: Sepolia'da yeni başlattığımız `MyL1Gateway`in adresi. +- `_router`: Scroll'daki `L2GatewayRouter` sözleşmesi olan `0x9aD3c5617eCAa556d6E166787A97081907171230` olarak ayarlayın. +- `_messenger`: Scroll'daki `L2ScrollMessenger` sözleşmesi olan `0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d`yi ayarlayın. + + +Daha sonra, 'MyL2Gateway' sözleşmesinde 'updateTokenMapping'i çağırın: + + +- `_l2Token`: Daha önce Scroll'da başlattığımız `L2Token` sözleşmesinin adresi. +- `_l1Token`: Daha önce Sepolia'da başlattığımız `L1Token` sözleşmesinin adresi. + + +### Tokenları köprüleme + + +Artık tıpkı resmi Scroll köprüsünde olduğu gibi "MyL1Gateway"den "depositERC20"yi ve "MyL2Gateway"den "withdrawERC20"yi çağırabiliriz. + + + diff --git a/src/content/docs/tr/developers/guides/contract-deployment-tutorial.mdx b/src/content/docs/tr/developers/guides/contract-deployment-tutorial.mdx new file mode 100644 index 000000000..fb0e2a2ab --- /dev/null +++ b/src/content/docs/tr/developers/guides/contract-deployment-tutorial.mdx @@ -0,0 +1,108 @@ +--- +section: developers +date: Last Modified +title: "Sözleşme Dağıtımı Eğitimi" +lang: "tr" +permalink: "developers/guides/contract-deployment-tutorial" +excerpt: "Scroll Sepolia Test ağı, topluluğun Scroll üzerinde akıllı sözleşmeler dağıtmasına olanak tanır. Bu eğitimde size Scroll Sepolia'da bir sözleşmenin nasıl dağıtılacağını öğreteceğiz." +whatsnext: { "Scroll Messenger ile Zincirler Arası Etkileşim": "/tr/developers/guides/scroll-messenger-cross-chain-interaction/" } +--- + + +import Aside from "../../../../../components/Aside.astro" + + +Scroll Sepolia Test ağı, herkesin Scroll üzerinde akıllı sözleşme dağıtmasına olanak tanır. Bu eğitimde, Ethereum'da geliştirmeye yönelik ortak araçları kullanarak Scroll Sepolia'da bir sözleşmenin nasıl dağıtılacağını öğreneceksiniz. Bu [demo deposu](https://github.com/scroll-tech/scroll-guides/tree/main/contract-deploy-demo), [Hardhat](https://hardhat.org/) ve [Foundry](https://github.com/foundry-rs/foundry) ile sözleşme dağıtımını gösterir. + + + + + +## Hardhat ile sözleşmeleri dağıtın + + +1. Henüz yapmadıysanız [nodejs](https://nodejs.org/en/download/) ve [yarn](https://classic.yarnpkg.com/lang/en/docs/install) yükleyin . +2. Depoyu klonlayın ve gereksinimleri yükleyin: + + + ```shell + git clone https://github.com/scroll-tech/scroll-guides.git + cd scroll-guides/contract-deploy-demo + yarn install + ``` + + +3. Kök dizinde `.env.example` örneğini takip ederek bir `.env` dosyası oluşturun. `PRIVATE_KEY`i `.env`de kendi hesabınızın özel anahtarıyla değiştirin. + + +4. Sözleşmeyi derlemek için 'yarn compile'ı çalıştırın. + + +5. Sözleşmeyi Scroll Sepolia Test ağında dağıtmak için `yarn deploy:scrollTestnet'i çalıştırın. + + +6. Hardhat testleri için "yarn test"'i çalıştırın. + + +## Foundry ile sözleşmeleri dağıtın + + +1. Depoyu klonlayın: + + + ```shell + git clone https://github.com/scroll-tech/scroll-guides.git + cd scroll-guides/contract-deploy-demo + ``` + + +2. Foundry'yi kurun: + + + ```shell + curl -L https://foundry.paradigm.xyz | bash + foundryup + ``` + + +3. Projeyi oluşturmak için 'forge build'i çalıştırın. + + +4. Foundry ile sözleşmenizi dağıtın: + + + ```bash + forge create --rpc-url https://sepolia-rpc.scroll.io/ \ + --value \ + --constructor-args \ + --private-key \ + --legacy \ + contracts/Lock.sol:Lock + ``` + + + - ``, sözleşmede kilitlenecek test `ETH` miktarıdır. Bunu "0,0000001ether" gibi küçük bir miktara ayarlamayı deneyin. + - ``, sözleşmede kilitlenen fonların çekilmeye hazır olacağı Unix zaman damgasıdır. Bunu gelecekte "1696118400" gibi bir Unix zaman damgasına ayarlamayı deneyin (bu Unix zaman damgası 1 Ekim 2023'e karşılık gelir). + + + Örneğin: + + + ```bash + forge create --rpc-url https://sepolia-rpc.scroll.io/ \ + --value 0.00000000002ether \ + --constructor-args 1696118400 \ + --private-key 0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1 \ + --legacy contracts/Lock.sol:Lock + ``` + + +## Sorular ve Geri Bildirim + + +Scroll Sepolia Test ağına katıldığınız ve geliştirdiğiniz için teşekkür ederiz! Herhangi bir sorunla karşılaşırsanız [Discord'umuza](https://discord.gg/scroll) katılın ve "#testnet-devs" kanalından bize sorun. + + + diff --git a/src/content/docs/tr/developers/guides/estimating-gas-and-tx-fees.mdx b/src/content/docs/tr/developers/guides/estimating-gas-and-tx-fees.mdx new file mode 100644 index 000000000..53d89b255 --- /dev/null +++ b/src/content/docs/tr/developers/guides/estimating-gas-and-tx-fees.mdx @@ -0,0 +1,301 @@ +--- +section: developers +date: Last Modified +title: "Gas ve İşlem Ücretlerinin Tahmin Edilmesi" +lang: "tr" +permalink: "developers/guides/estimating-gas-and-transaction-fees" +excerpt: "Scroll bir L2 rollup olduğundan, işlem yaşam döngüsünün bir kısmı güvenlik için bazı verileri L1'e iletir. Bunun bedelini ödemek için tüm işlemlere L1 ücreti adı verilen ek bir ücret uygulanır." +--- + + +import Aside from "../../../../../components/Aside.astro" +import ClickToZoom from "../../../../../components/ClickToZoom.astro" +import txFeesProjectStructure from "../../../../../assets/images/developers/txFeesProjectStructure.png" + + +{/* TODO: Update for Sepolia, test and publish to sidebar. */} + + +:::warning[Bu makale güncelliğini yitirmiştir.] +Bu sayfa güncellenmedi ve en son Scroll Sepolia sürümüne göre test edilmedi. Lütfen dikkatli kullanın. +::: + + +Since Scroll is an L2 rollup, part of the transaction lifecycle is committing some data to L1 for security. To pay for this, all transaction incurs an additional fee called the _L1 fee_. + + +In this guide, we will go over how to estimate the L1 fee on Scroll and calculate final transaction fee estimations through a hands-on code example you can find [here](https://github.com/scroll-tech/scroll-guides/tree/main/gas-estimation-demo). + + +## The formula + + +In short, the transaction fee on Scroll, at any given moment, can be calculated as + + +``` +totalFee = (l2GasPrice * l2GasUsed) + l1Fee +``` + + +An important distinction we need to make is that `l1Fee` is separated from the `l2Fee`. + + +For a more comprehensive explanation and details on the formula, check the documentation on [how Transaction Fees work on Scroll](../developers/transaction-fees-on-scroll-l2/). + + +## Interfacing with values + + +To fetch these values and calculate the final fee, we’ll interact with Scroll’s public RPC and pre-deployed Smart Contract `L1GasOracle.sol`, deployed at [`0x5300000000000000000000000000000000000002`](https://scrollscan.com/address/0x5300000000000000000000000000000000000002). + + +For our example codebase, we make a Hardhat project and fetch values using the [Ethers.js](https://docs.ethers.org/v6/) library. + + +`l2GasUsed` - We get this using the [estimateGas](https://docs.ethers.org/v6/api/providers/#Provider-estimateGas) method, which queries our RPC with the TX data to get an estimate of the gas to be used. + + +`l2GasPrice` - For this, we’ll use the [getFeeData](https://docs.ethers.org/v6/api/providers/#Provider-getFeeData) method, which will get the current market conditions on the L2 + + +The Gas Oracle smart contract exposes multiple key fields we need to figure out the cost of the transaction. `overhead()` , `scalar()` , `l1BaseFee()` and `getL1GasUsed(bytes memory data)` + + +But it also exposes the `getL1Fee(bytes memory data)` function, which abstracts all these complexities and allows us to get the fee in just one function call. + + +## Hands-on example + + +### Project structure + + +First of all, let’s quickly go over the key folders inside our project structure. + + +It’s a standard Hardhat project, but most of our work is inside the *contracts* and _scripts_ folders. + + + + + + + + +### The smart contract + + +First, we need a Smart Contract to interact with to showcase the gas estimation. For that, we’ll create a `ExampleContract.sol`. + + +```solidity +pragma solidity ^0.8.17; + + +contract ExampleContract { + uint public exampleVariable; + + + function setExampleVariable(uint _exampleVariable) external { + exampleVariable = _exampleVariable; + } +} +``` + + + + + +Once deployed, we fill the `EXAMPLE_CONTRACT_ADDRESS` value in our `.env` file. For the example project, it’s already deployed at `TODO: 0xc37ee92c73753B46eB865Ee156d89741ad0a8777` and pre-filled, so nothing has to be done here. + + +### Estimating the fees + + +The central part of the example lives in the `/scripts/gasEstimation.ts` file. + + +We’ll do just four things: + + +1. Create a dummy transaction using the ExampleContract +2. Estimate the L2 fee of that transaction +3. Estimate the L1 fee of that transaction +4. Emit an actual transaction to Scroll and compare the values + + +#### Creating the dummy transaction + + +The goal of this step is to create an **(RLP) Serialized Unsigned Transaction** to be used later on as the parameter for calling the oracle gas estimation method. + + +1. Let’s populate our transaction with the needed values to estimate its cost by calling `buildPopulatedExampleContractTransaction`. This will fill the `data`, `to`, `gasPrice`, `type` and `gasLimit` fields: + + +```typescript +export async function buildPopulatedExampleContractTransaction( + exampleContractAddress: string, + newValueToSet: number +): Promise { + const exampleContract = await ethers.getContractAt("ExampleContract", exampleContractAddress) + + + return exampleContract.setExampleVariable.populateTransaction(newValueToSet) +} +``` + + +2. Now, let’s trim it down to the basic fields using `buildUnsignedTransaction`. We won’t be signing it. + + +```typescript +export async function buildUnsignedTransaction(signer: HardhatEthersSigner, populatedTransaction: ContractTransaction): Promise { + const nonce = await signer.getNonce(); + + + return { + data: populatedTransaction.data, + to: populatedTransaction.to, + gasPrice: populatedTransaction.gasPrice, + type: populatedTransaction.type, + gasLimit: populatedTransaction.gasLimit, + nonce, + }; +``` + + + + + +3. With the output of the previous function, we serialize it using `getSerializedTransaction` + + +```typescript +export function getSerializedTransaction(tx: UnsignedTransaction) { + return serialize(tx) +} +``` + + +#### Estimating the L2 fee + + +This step is pretty standard and the same as on Ethereum. We’ll use the `estimateL2Fee` function which takes the populated transaction as an input and returns an estimate of the total gas it will use by multiplying the current gas price and gas needed to be used. + + +```typescript +export async function estimateL2Fee(tx: ContractTransaction): Promise { + const gasToUse = await ethers.provider.estimateGas(tx) + const feeData = await ethers.provider.getFeeData() + const gasPrice = feeData.gasPrice + + + return gasToUse * gasPrice +} +``` + + +#### Estimating the L1 fee of that transaction + + +This step is very straightforward. Using the output of the `getSerializedTransaction` function, we query the oracle and get the estimated fee in return. + + +```typescript +export async function estimateL1Fee( + gasOraclePrecompileAddress: string, + unsignedSerializedTransaction: string +): Promise { + const l1GasOracle = await ethers.getContractAt("IL1GasPriceOracle", gasOraclePrecompileAddress) + + + return l1GasOracle.getL1Fee(unsignedSerializedTransaction) +} +``` + + +#### Emitting the transaction and comparing estimated vs actual values + + +**Emitting the transaction** + + +We’ll create a call to our contract using the same values used for the dummy transaction. + + +```typescript +const tx = await exampleContract.setExampleVariable(newValueToSetOnExampleContract) +const txReceipt = await tx.wait(5) +``` + + +**Calculating the L2 fee** + + +Using the transaction receipt we can see the amount of gas used by the transaction + + +```typescript +const l2Fee = txReceipt.gasUsed * txReceipt.gasPrice +``` + + +**Getting the amount used to pay for the L1 fee** + + +To do this, we’ll compare the _balance of the account before_ the transaction execution, the _account balance after_ the execution and then subtract the L2 fee. + + +```typescript +const totalFee = signerBalanceBefore - signerBalanceAfter +const l1Fee = totalFee - l2Fee +``` + + +**Comparing the values** + + +Fee markets are constantly moving and unpredictable. Since the values estimated may differ from the actual execution, let’s check how much they differ. + + +We can run all the code that we previously wrote by typing `yarn gas:estimate` command in our [project](https://github.com/scroll-tech/scroll-guides/tree/main/gas-estimation-demo) that will run the [`gasEstimation.ts`](https://github.com/scroll-tech/scroll-guides/blob/main/gas-estimation-demo/scripts/gasEstimation.ts) script and give us the output below: + + +```bash +Estimated L1 fee (wei): 208705598167252 +Estimated L2 fee (wei): 26416000000 +Estimated total fee (wei): 208732014167252 + + +Actual L1 fee (wei): 210830909757550 +Actual L2 fee (wei): 26416000000 +Actual total fee (wei): 210857325757550 + + +(actual fee - estimated fee) +Difference L1 fee (wei): 2125311590298 (1.0183299389002531%) +Difference L2 fee (wei): 0 (0%) +Difference total fee (wei): 2125311590298 (1.0182010645453987%) +``` + + +We can see above that the estimated values (in wei) differ by around 1%, but keep in mind that during spikes in gas prices, this difference may increase. Be sure to account for this in your front end for users! + + + + + + diff --git a/src/content/docs/tr/developers/guides/scroll-messenger-cross-chain-interaction.mdx b/src/content/docs/tr/developers/guides/scroll-messenger-cross-chain-interaction.mdx new file mode 100644 index 000000000..83e5cd532 --- /dev/null +++ b/src/content/docs/tr/developers/guides/scroll-messenger-cross-chain-interaction.mdx @@ -0,0 +1,146 @@ +--- +section: developers +date: Last Modified +title: "Scroll Messenger ile Zincirler Arası Etkileşim" +lang: "tr" +permalink: "developers/guides/scroll-messenger-cross-chain-interaction" +whatsnext: { "Özel Ağ Geçidi üzerinden ERC20 köprüleyin": "/tr/developers/guides/bridge-erc20-through-the-custom-gateway" } +excerpt: "Bu örnekte, Sepolia veya Scroll Sepolia test ağında bir kukla akıllı sözleşme oluşturacağız ve onunla karşı zincirden etkileşime geçeceğiz." +--- + + +import Aside from "../../../../../components/Aside.astro" + + +Bu örnekte, Sepolia veya Scroll üzerinde bir sahte akıllı sözleşme başlatacağız ve onunla karşı zincirden etkileşime geçeceğiz. Hem Sepolia'da hem de Scroll'da dağıtılmış olan "ScrollMessenger"ı kullanacağız. + + +## Sözleşmelerin Dağıtılması + + +### Hedef Akıllı Sözleşme + + +Hedef akıllı sözleşmeyi dağıtarak başlayalım. Bu örnek için Greeter sözleşmesini kullanacağız, ancak siz başka herhangi bir sözleşmeyi kullanabilirsiniz. Sepolia veya Scroll'a dağıtabilirsiniz. Scroll'da L1 ve L2 aynı API'ı kullanır, dolayısıyla karar size bağlıdır. + + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.16; + + +// This Greeter contract will be interacted with through the ScrollMessenger across the bridge +contract Greeter { + string public greeting = "Hello World!"; + + + // This function will be called by executeFunctionCrosschain on the Operator Smart Contract + function setGreeting(string memory greeting_) public { + greeting = greeting_; + } +} +``` + + +Artık setGreeting'i zincirler arası bir şekilde yürüteceğiz. + + +### Operatör Akıllı Sözleşmesi + + +Diğer zincire geçin ve 'GreeterOperator'ı dağıtın. Eğer "Greeter" sözleşmesini L1'de dağıttıysanız, "GreeterOperator"ı L2'de dağıtın veya tam tersini uygulayın. + + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.16; + + +// The Scroll Messenger interface is the same on both L1 and L2, it allows sending cross-chain transactions +// Let's import it directly from the Scroll Contracts library +import "@scroll-tech/contracts@0.1.0/libraries/IScrollMessenger.sol"; + + +// The GreeterOperator is capable of executing the Greeter function through the bridge +contract GreeterOperator { + // This function will execute setGreeting on the Greeter contract + function executeFunctionCrosschain( + address scrollMessengerAddress, + address targetAddress, + uint256 value, + string memory greeting, + uint32 gasLimit + ) public payable { + IScrollMessenger scrollMessenger = IScrollMessenger(scrollMessengerAddress); + // sendMessage is able to execute any function by encoding the abi using the encodeWithSignature function + scrollMessenger.sendMessage{ value: msg.value }( + targetAddress, + value, + abi.encodeWithSignature("setGreeting(string)", greeting), + gasLimit, + msg.sender + ); + } +} +``` + + +## Zincirler Arası Fonksiyon Çağırma + + +Mesajı `executeFunctionCrosschain` komutunu çalıştırıp aşağıdaki parametreleri ileterek iletiyoruz: + + +- `scrollMessengerAddress`: Bu, "GreeterOperator" sözleşmesini nereye uyguladığınıza bağlı olacaktır. + - Sepolia'ya dağıttıysanız '0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A', Scroll Sepolia'ya dağıttıysanız '0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d' adreslerini kullanın. +- `targetAddress`: Karşı zincirdeki 'Greeter' sözleşmesinin adresi. +- `value`: Bu durumda '0'dır çünkü 'setGreeting' payable bir fonksiyon değil. +- `greeting`: Mesaj yoluyla gönderilecek parametredir. `"Bu mesaj zincirler arasıydı!"` olarak ayarlayıp iletmeyi deneyin +- `gasLimit`: + - L1'den L2'ye mesaj gönderiyorsanız '1000000' civarındaki gas limiti fazlasıyla yeterli olacaktır. Bununla birlikte, eğer çok yüksek ayarlarsanız ve "msg.value", "gasLimit" * "baseFee"yi karşılamıyorsa, işlem geri alınacaktır. 'msg.value' gaz ücretinden fazla ise kullanılmayan kısım iade edilecektir. + - L2'den L1'e mesaj gönderiyorsanız '0'ı değerini geçirin, çünkü işleminiz L1 üzerinde ek bir işlem yapılarak tamamlanacaktır. + + +### L2'den L1'e gönderirken Mesajı Aktarın + + +L2'den L1'e bir işlem geçtiğinde, L1 üzerinde ek bir "para çekimi gerçekleştirme işlemi" gönderilmelidir. Bunu yapmak için EOA cüzdanından L1 Scroll Messenger sözleşmesindeki 'relayMessageWithProof'u çağırmalısınız. + + + + +Doğrudan [Etherscan Sepolia](https://sepolia.etherscan.io/address/0x50c7d3e7f7c656493d1d76aaa1a836cedfcbb16a#writeProxyContract#F3) üzerinden yapabilirsiniz. +Bunu yapmak için köprülenmiş işlem ve diğer parametreler için bir Merkle dahil olma kanıtını iletmeniz gerekecektir. Bunları Scroll Köprü API'ını kullanarak sorgulayacaksınız. + + +{/* TODO: finish looking into API issues */} + + +API özelliklerini son haline getirmeye çalışıyoruz ancak şimdilik aşağıdaki uç noktayı getirin veya curl'leyin: + + +```bash +curl "https://sepolia-api-bridge.scroll.io/api/claimable?page_size=10&page=1&address=GREETER_OPERATOR_ADDRESS_ON_L2" +``` + + +'GREETER_OPERATOR_ADDRESS_ON_L2' kısmını L2'de oluşturduğunuz GreeterOperator sözleşmesinin adresiyle değiştirin. [Scroll Messenger](/tr/developers/l1-and-l2-bridging/the-scroll-messenger) makalesinde Para Çekme Gerçekleştirme işlemlerini yürütme hakkında daha fazla bilgi edinin. + + + + + + + + +İşlemi hem L1 hem de L2'de yürütüp onayladıktan sonra, "Greeter" sözleşmesindeki "greeting"in yeni durumu “This message was cross-chain!” olmalıdır. Bir zincirden diğerine mesaj göndermek, işlem zincirinde onaylandıktan sonra yaklaşık 20 dakika sürecektir. + + +Tebrikler, yerel köprümüzü kullanarak bir zincirden diğerine işlem gerçekleştirmiş oldunuz! + + + diff --git a/src/content/docs/tr/developers/index.mdx b/src/content/docs/tr/developers/index.mdx new file mode 100644 index 000000000..5f6dc7307 --- /dev/null +++ b/src/content/docs/tr/developers/index.mdx @@ -0,0 +1,76 @@ +--- +section: developers +date: Last Modified +title: "Scroll Üzerinde Geliştirmek" +lang: "tr" +permalink: "developers/" +excerpt: "Scroll üzerinde inşa etmek tıpkı Ethereum'daki gibi hissettirir, en sevdiğiniz araçları ve sözleşmeleri yanınızda getirebilirsiniz." +whatsnext: { "Geliştirici Hızlı Başlangıcı": "/tr/developers/developer-quickstart" } +--- + +import Aside from "../../../../components/Aside.astro" +import ToggleElement from "../../../../components/ToggleElement.astro" + +**Scroll geliştirici belgelerine hoş geldiniz!** + +Scroll, Ethereum üzerine kurulu kendi Katman 2 ağıdır (daha spesifik olarak bir "zero knowledge rollup'ı"). + +Ethereum üzerinde geliştirme yapma konusunda deneyimliyseniz kodunuz, bağımlılıklarınız ve araçlarınız olduğu gibi Scroll üzerinde çalışabilmektedir. Bunun mümkün olmasının sebebi ağımızın EVM bayt koduyla uyumlu ve tıpkı Ethereum üzerinde geliştirme yapıyormuş gibi bir deneyim sunacak şekilde tasarlanmış olmasıdır. + + + +## Başlarken + +**Scroll üzerinde geliştirme mi yapmak istiyorsunuz?** + +- Temel bilgiler için: [Geliştirici Hızlı Başlangıcı](/tr/developers/developer-quickstart) sayfasına göz atın +- Scroll'da ilk akıllı sözleşmenizin dağıtımını açıklayan bir eğitim için [sözleşme dağıtım eğitimimizi](/tr/developers/guides/contract-deployment-tutorial) okuyun +- Ayrıca üzerinde geliştirme yapabileceğiniz bir dizi [sözleşme adreslerimiz](/tr/developers/scroll-contracts) var. + +## ## Neden Scroll Üzerinde Geliştirilmeli? + + +
Verim – Scroll, Ethereum için daha güvenli blok alanı oluşturur.
+

+ ZK Rollup'lar ağda daha fazla etkinliğe izin vererek kalabalıklığı en aza indirir. Zero knowledge kanıtlarını kullanarak ağın davranışını doğrulayan Ethereum'un güvenliğini devralan Scroll; merkeziyetsizlikten ödün vermeden daha fazla işlem gerçekleştirebilir. +

+
+ + +
Maliyet — Scroll, kullanıcıların gaz ücretlerinden tasarruf etmesini sağlar.
+

+ Ethereum'da blok alanı için rekabet, her işlem bir sonraki bloğa dahil olmak için teklif verildiğinden işlem başına daha yüksek maliyetlerle sonuçlanır. Scroll, güvenli blok alanını büyük ölçüde arttırmak ve kullanıcılar için işlem maliyetlerini en aza indirmek için zero knowledge kanıtları ve donanım hızlandırma alanındaki son buluşlardan yararlanıyor. +

+
+ +
Hız — Scroll, kullanıcılara daha hızlı geri dönüş sağlar.
+

+ Birleşmeden sonra Ethereum blokları her 12 saniyede bir güvenilir bir şekilde onaylanır. Scroll blokları her 3 saniyede bir basılıyor ve daha düşük riskli operasyonlar için, işlemlerin bir bloğa dahil edildikten sonra nihai olduğu varsayılabilir. Bu, sosyal uygulamalarda ve oyun uygulamalarında zincir içi etkileşim için yeni olanaklar açar. +

+
+ +
Uyum - Scroll, Ethereum'un vizyonuna dayanır.
+

+ Scroll, Ethereum'un vizyonuna dayanıyor. Bizim ilkelerimiz Ethereum'dan ayrışmak değil, onu inşa etmektir. Merkeziyetsiz yönetim, izinsizlik, sansüre karşı direnç ve topluluk sahipliği yaptığımız işin ve oluşturduğumuz yol haritasının temelini oluşturuyor. Açık kaynaklı yazılıma inanıyoruz ve bir gün Ethereum'un kalbi olabilecek zkEVM üzerindeki çalışmalarını desteklemek için Ethereum Vakfı'nın Gizlilik ve Ölçeklendirme Araştırmaları ekibiyle yakın işbirliği içinde çalışıyoruz. +

+

+ Ayrıca uygulamalar dağıtılırken, ister kamu mallarında, ister temel altyapıda, ister yeni nesil zero knowledge kullanım senaryolarında olsun, etkilerini artırmak için çalıştığımızdan emin olmak için yönetişim DAO'ları ve diğer açık kaynak protokolleriyle de çalışıyoruz. +

+
+ +
Topluluk — Scroll, kullanıcıları ve geliştiricileri bir araya getirir.
+

+ Açık kaynaklı bir şekilde geliştirmenin ve kullanıcı etkileşimi sağlamanın zorluklarını biliyoruz! Scroll'un gelişen bir kullanıcı ve geliştirici topluluğu var ve test ağımızdaki veya ana ağımızdaki uygulamaları denemek isteyen 500.000'den fazla üyeden oluşan Discord topluluğumuzla, geliştiricileri gerçek dünyadan geri bildirim sağlayabilecek kullanıcılarla buluşturmaktan heyecan duyuyoruz. +

+
+ +## Bizimle birlikte inşa ettiğiniz için teşekkür ederiz. + +Ağa daha fazla entegrasyon ve destek altyapısı getirmek için çabalıyor ve ana ağ sürümümüz için heyecanla çalışıyoruz. + +Büyüyen geliştirici topluluğumuza katılın. Bizi [Discord](https://discord.gg/scroll) adresinde bulabilir, [tartışma forumumuza](https://community.scroll.io/) katılabilir veya ilerlememizi [Twitter](https://twitter.com/Scroll_ZKP) üzerinde takip edebilirsiniz. diff --git a/src/content/docs/tr/developers/l1-and-l2-bridging.mdx b/src/content/docs/tr/developers/l1-and-l2-bridging.mdx new file mode 100644 index 000000000..0e886cc0f --- /dev/null +++ b/src/content/docs/tr/developers/l1-and-l2-bridging.mdx @@ -0,0 +1,37 @@ +--- +section: developers +date: Last Modified +title: "L1 ve L2 Köprüleme" +lang: "tr" +permalink: "developers/l1-and-l2-bridging" +whatsnext: { "ETH ve ERC20 Token Köprüsü": "/tr/developers/l1-and-l2-bridge/eth-and-erc20-token-bridge/" } +excerpt: "Scroll'un Köprüleme mimarisine genel bakış" +--- + +import ClickToZoom from "../../../../components/ClickToZoom.astro" +import Aside from "../../../../components/Aside.astro" +import L1GatewayWHITE from "../../../../assets/images/developers/L1GatewayWHITE.png" +import withdrawWHITE from "../../../../assets/images/developers/withdrawWHITE.png" + +Scroll köprüsü, L1 ile L2 arasında ETH, ERC20 tokenleri, NFT'ler ve isteğe bağlı mesajların aktarımını sağlar. Çeşitli dijital varlıkların L1 ve L2 arasında taşınması için güvenli bir mekanizma görevi görür. + +ETH ve ERC20 tokenlerinin transferini kolaylaştırmak için Scroll köprüsü Ağ Geçidi Yönlendiricisini kullanır. Bu sözleşme, bu varlıkların L1 ve L2 arasında sorunsuz geçişini sağlayarak kullanıcıların Ethereum tabanlı tokenlerini sorunsuz bir şekilde aktarmalarına olanak tanır. + +ERC721 ve ERC1155 Ağ Geçidi, iki ağ arasında değiştirilemez varlıkların aktarımına olanak tanıyarak kullanıcıların NFT'lerini L1 ve L2 arasında taşımasına olanak tanır. + +Token transferlerine ek olarak Scroll Messenger sözleşmesi, zincirler arası sözleşme etkileşimine olanak tanır. Bu, bir ağdaki sözleşmelerin Scroll Messenger sözleşmesi aracılığıyla diğer ağdaki sözleşmelerle etkileşime girebileceği anlamına gelir. Bu işlevsellik, merkezi olmayan uygulamaların ve akıllı sözleşmelerin her iki ağda da sorunsuz bir şekilde çalışmasına yönelik olasılıkları genişletir. + +## L1 Ağ Geçidi mimarisi + + + + +Kullanıcıların Scroll Köprüsü'ne birçok giriş noktası bulunmaktadır. Bu ne yapmak istediğinize ve nasıl yapmak istediğinize bağlı olacaktır. ETH veya ERC20 tokenleri göndermek istiyorsanız 'GatewayRouter'ı kullanmalısınız. NFT göndermek istiyorsanız 'L1ERC721Gateway' veya 'L1ERC1155Gateway' kullanmalısınız. İsteğe bağlı veri göndermek istiyorsanız 'L1ScrollMessenger'ı kullanmalısınız. Tüm ağ geçidi aktarımları, varlıkları zincirler arası göndermek için Scroll Messenger'ı kullanır. Scroll Messenger'ın görevi, işlemleri L2'ye dahil etmek için Mesaj Kuyruğu'na eklemektir. + +## L2 Ağ Geçidi mimarisi + + + +İzinsiz çağrılabilen olası giriş noktalarıyla ilgili olarak, L2 Ağ Geçidi Mimarisi L1'e çok benzemektedir. Aradaki fark, L2'den bir mesaj gönderirken, ‘appendMessage’ fonksiyonunu çağırmakla olur. Bu durumda mesaj, L2MessageQueue'da, yalnızca ekleme yapılabilen bir ikili merkle ağacında (diğer bir deyişle çekim ağacı) saklanır. Blok sonlandırıldığında, yeni merkle yolunun bir kanıtını oluşturacak ve bunu 'L1ScrollMessenger' üzerinde yürütülmek üzere L1geth düğümüne iletecektir. Kesinleşmiş tüm çekim kökleri, onlara karşı kanıtları doğrulayabilmemiz için rollup sözleşmesinde saklanacaktır. Sonraki Scroll sürümlerinde, tüm kullanıcılar işlemi L1'de tamamlayabileceğinden Aktarıcı'ya ihtiyaç duyulmayacak. + +Gelecek bölümlerde, yeteneklerini kullanmak için gereken akıllı sözleşme API'si de dahil olmak üzere köprünün teknik yönlerini inceleyeceğiz. Geliştiricilerin ve kullanıcıların bu işlevleri anlamalarına ve uygulamalarına yardımcı olmak için Geliştirici Kılavuzları bölümünde kod örnekleri içeren ayrıntılı kılavuzlar sağlanmaktadır. \ No newline at end of file diff --git a/src/content/docs/tr/developers/l1-and-l2-bridging/enforced-transactions.mdx b/src/content/docs/tr/developers/l1-and-l2-bridging/enforced-transactions.mdx new file mode 100644 index 000000000..c91faaa3f --- /dev/null +++ b/src/content/docs/tr/developers/l1-and-l2-bridging/enforced-transactions.mdx @@ -0,0 +1,57 @@ +--- +section: developers +date: Last Modified +title: "Zorunlu işlemler" +lang: "tr" +permalink: "developers/l1-and-l2-bridging/enforced-transactions" +excerpt: "Zorunlu İşlem sözleşmesi L1 ve L2 arasında işlemlerin sendTransaction fonksiyonu ile gönderilmesini sağlar." +--- + +import Aside from "../../../../../components/Aside.astro" + +Scroll'un gelecekteki yükseltmelerinde, Zorunlu İşlem sözleşmesi, **`sendTransaction`** fonksiyonu ile L1 ile L2 arasındaki işlemlerin gönderilmesine olanak tanıyacaktır. Bu sözleşme, bir katmandan diğerine rastgele veri gönderilmesine izin verdiği için Scroll Messenger sözleşmesiyle benzerlikler paylaşıyor. Ancak imzalı işlemlerin aktarılmasına olanak sağlaması ve Scroll üzerinde göndericiyi (CALLER veya msg.sender) alıcı işlemde ayarlama olanağı sağlamasıyla öne çıkmaktadır. + +## Zorunlu İşlemler API + +Scroll sözleşmesi API dokümanlarının tamamı için lütfen [npm kitaplığını](https://www.npmjs.com/package/@scroll-tech/contracts?activeTab=code) ziyaret edin. + +### sendTransaction + +```solidity +function sendTransaction(address _target, uint256 _value, uint256 _gasLimit, bytes calldata _data) public payable; +``` + +Bir EOA hesabı göndericisinden L2'ye zorunlu bir işlem ekleyin. + +| Parametre | Açıklama | +| ---------- | ---------------------------------------------------------- | +| \_target | L2'de çağrılacak hedef sözleşmenin adresi. | +| \_value | Gönderilecek değer | +| \_gasLimit | L2'de bu işlem tarafından kullanılabilecek maksimum gaz | +| \_data | Hedef sözleşmeye iletilen çağrı verileri | + +### sendTransaction + +```solidity +function sendTransaction( + address _sender, + address _target, + uint256 _value, + uint256 _gasLimit, + bytes calldata _data, + bytes memory _signature, + address _refundAddress +) public payable; +``` + +Gönderenden bir imza aktararak L2'ye zorunlu bir işlem ekleyin. + +| Parametre | Açıklama | +| --------------- | --------------------------------------------------------------- | +| \_sender | L2'de bu işlemi başlatacak göndericinin adresi | +| \_target | L2'de çağrılacak hedef sözleşmenin adresi. | +| \_value | Gönderilecek değer | +| \_gasLimit | L2'de bu işlem tarafından kullanılabilecek maksimum gaz | +| \_data | Hedef sözleşmeye iletilen çağrı verileri | +| \_signature | İşlem imzası. | +| \_refundAddress | İşlem ücreti fazlasının iade edileceği adres. | diff --git a/src/content/docs/tr/developers/l1-and-l2-bridging/erc1155-token-bridge.mdx b/src/content/docs/tr/developers/l1-and-l2-bridging/erc1155-token-bridge.mdx new file mode 100644 index 000000000..2c1a30dc6 --- /dev/null +++ b/src/content/docs/tr/developers/l1-and-l2-bridging/erc1155-token-bridge.mdx @@ -0,0 +1,156 @@ +--- +section: developers +date: Last Modified +title: "ERC1155 Token Köprüsü" +lang: "tr" +permalink: "developers/l1-and-l2-bridging/erc1155-token-bridge" +whatsnext: { "Scroll Messenger": "/tr/developers/l1-and-l2-bridging/the-scroll-messenger/" } +excerpt: "L1'den L2'ye ERC1155 köprülenmesi L1ERC1155Gateway aracılığıyla yapılır." +--- + +import Aside from "../../../../../components/Aside.astro" + +## L1'den ERC1155 tokenları yatırın + +ERC1155'in L1'den L2'ye köprülenmesi L1ERC1155Gateway aracılığıyla yapılır. ERC721 köprülemeye benzer şekilde, bir yönlendirici kullanmak yerine doğrudan Ağ Geçidi üzerinde 'depositERC1155' fonksiyonunu kullanıyoruz. + + + +### L2'de ERC1155 tokenı oluşturma + +ERC721 köprülemeye benzer şekilde, ERC1155 tokenlerini köprülemek için, "IScrollERC1155" standardıyla uyumlu bir sözleşmenin oluşturulup hem L1 hem de L2'de sırasıyla "L1ERC1155Gateway" ve "L2ERC1155Gateway" üzerinde eşlenmesi gerekir. Bu sözleşmeye, L2'deki Ağ Geçidine bir token yatırıldığında basması ve token çekildiğinde yakması için izin vermelidir. + +Aşağıdaki arayüz, L2'de "L2ERC1155Gateway" ile uyumlu ERC1155 tokenlarını dağıtmak için gereken "IScrollERC1155"tir. + +```solidity +interface IScrollERC1155 { + /// @notice Return the address of Gateway the token belongs to. + function gateway() external view returns (address); + + /// @notice Return the address of counterpart token. + function counterpart() external view returns (address); + + /// @notice Mint some token to recipient's account. + /// @dev Gateway Utilities, only gateway contract can call + /// @param _to The address of recipient. + /// @param _tokenId The token id to mint. + /// @param _amount The amount of token to mint. + /// @param _data The data passed to recipient + function mint(address _to, uint256 _tokenId, uint256 _amount, bytes memory _data) external; + + /// @notice Burn some token from account. + /// @dev Gateway Utilities, only gateway contract can call + /// @param _from The address of account to burn token. + /// @param _tokenId The token id to burn. + /// @param _amount The amount of token to burn. + function burn(address _from, uint256 _tokenId, uint256 _amount) external; + + /// @notice Batch mint some token to recipient's account. + /// @dev Gateway Utilities, only gateway contract can call + /// @param _to The address of recipient. + /// @param _tokenIds The token id to mint. + /// @param _amounts The list of corresponding amount of token to mint. + /// @param _data The data passed to recipient + function batchMint( + address _to, + uint256[] calldata _tokenIds, + uint256[] calldata _amounts, + bytes calldata _data + ) external; + + /// @notice Batch burn some token from account. + /// @dev Gateway Utilities, only gateway contract can call + /// @param _from The address of account to burn token. + /// @param _tokenIds The list of token ids to burn. + /// @param _amounts The list of corresponding amount of token to burn. + function batchBurn(address _from, uint256[] calldata _tokenIds, uint256[] calldata _amounts) external; +} +``` + +### Scroll Köprüsü'ne bir ERC1155 token ekleme + +Tüm varlıklar, herhangi bir geliştirici tarafından dağıtılmış Ağ Geçidi sözleşmeleri aracılığıyla güvenli ve izinsiz olarak köprülenebilmektedir. Ancak Scroll aynı zamanda topluluk tarafından oluşturulan tüm NFT'lerin kabul edildiği bir ERC1155 Ağ Geçidi sözleşmesini de yönetmektedir. Scroll tarafından yönetilen Ağ Geçidinin bir parçası olmak, Ağ Geçidi sözleşmelerini dağıtmanıza gerek kalmayacağı ve tokenınızın Scroll kullanıcı arayüzünde görüneceği anlamına gelir. Scroll Ağ Geçidi'nin bir parçası olmak için, tokenı hem L1 hem de L2 Ağ Geçidi sözleşmelerine eklemelisiniz ve bunun için Scroll ekibiyle iletişime geçmelisiniz. Tokenınızı Scroll resmi kullanıcı arayüzüne eklemek için [token listeleri](https://github.com/scroll-tech/token-list) deposundaki talimatları izleyin. + +## ERC1155 tokenlarını L2'den çekin + +'L2ERC1155Gateway' sözleşmesi L2'den L1'e token göndermek için kullanılır. Köprülemeden önce 'L2ERC1155Gateway' sözleşmesinin token sözleşmesi tarafından onaylanması gerekir. Bu yapıldıktan sonra varlık köprüsünü gerçekleştirmek için "drawERC1155" çağrılabilir. + + + + + +## L1ERC1155Gateway API + +Scroll sözleşmesi API dokümantasyonunun tamamı için lütfen [npm kitaplığını](https://www.npmjs.com/package/@scroll-tech/contracts?activeTab=code) ziyaret edin. + +### depositERC1155 + +```solidity +function depositERC1155( + address _token, + address _to, + uint256 _tokenId, + uint256 _amount, + uint256 _gasLimit +) external payable; +``` + +L1'den alıcının L2'deki hesabına bir ERC1155 tokenı yatırır. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------- | +| token | ERC721 token sözleşmesinin L1'deki adresi. | +| to | Alıcı hesabının L2'deki adresi. | +| tokenId | Yatırılacak NFT'nin ID'si. | +| amount | Yatırılacak tokenların miktarı. | +| gasLimit | L2'deki yatırma işlemini tamamlamak için gereken gaz limiti. Ücretin kullanılmayan kısmı iade edilecektir. | + +### updateTokenMapping + +```solidity +function updateTokenMapping(address _l1Token, address _l2Token) external; +``` + +ERC1155 token sözleşmesini L1'den L2'ye bağlayan eşlemeyi günceller. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------- | +| \_l1Token | ERC1155 tokenının L1'deki adresi. | +| \_l2Token | ERC1155 tokeninin L2'deki karşılık gelen adresi. | + +## L2ERC1155Gateway API + +### withdrawERC1155 + +```solidity +function withdrawERC1155(address token, address to, uint256 tokenId, uint256 amount, uint256 gasLimit) external payable; +``` + +L2'den alıcının L1'deki hesabına ERC1155 tokenlarını gönderir. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------------------------------ | +| token | ERC1155 token sözleşmesinin L2'deki adresi. | +| to | Alıcı hesabının L1'deki adresi. | +| tokenId | Gönderilecek NFT ID'si. | +| amount | Çekilecek tokenların miktarı. | +| gasLimit | Kullanılmıyor ancak potansiyel ileriye dönük uyumluluk hususları nedeniyle dahil edildi. | + +### updateTokenMapping + +```solidity +function updateTokenMapping(address _l1Token, address _l2Token) external; +``` + +Bir ERC1155 token sözleşmesini L2'den L1'e bağlayan eşlemeyi günceller. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------- | +| \_l1Token | ERC1155 tokenının L1'deki adresi | +| \_l2Token | ERC1155 tokenının L2'deki karşılık gelen adresi. | diff --git a/src/content/docs/tr/developers/l1-and-l2-bridging/erc721-nft-bridge.mdx b/src/content/docs/tr/developers/l1-and-l2-bridging/erc721-nft-bridge.mdx new file mode 100644 index 000000000..3f6bec91c --- /dev/null +++ b/src/content/docs/tr/developers/l1-and-l2-bridging/erc721-nft-bridge.mdx @@ -0,0 +1,126 @@ +--- +section: developers +date: Last Modified +title: "ERC721 NFT Köprüsü" +lang: "tr" +permalink: "developers/l1-and-l2-bridging/erc721-nft-bridge" +excerpt: "L1'den L2'ye NFT köprüleme, yönlendirici kullanmak yerine L1ERC721Gateway sözleşmesi aracılığıyla yapılır." +whatsnext: { "ERC1155 Token Köprüsü": "/tr/developers/l1-and-l2-bridging/erc1155-token-bridge/" } +--- + +import Aside from "../../../../../components/Aside.astro" + +## L1'den ERC721 tokenlarını yatırın + +L1'den L2'ye NFT köprüleme, yönlendirici kullanmak yerine "L1ERC721Gateway" sözleşmesi aracılığıyla yapılır. ERC20 tokenlarını köprülemeye benzer şekilde, tokenları L2'ye göndermek için "depositERC721" fonksiyonunu kullanırız ve daha sonra L2'de konuşlandırılan "L2ERC721Gateway" sözleşmesindeki "withdrawERC721"i kullanarak bunları L1'e geri alabiliriz. + +Köprülemeyi mümkün kılmak için hem L1 hem de L2'deki NFT sözleşmeleri başlatılmalı ve Ağ Geçitleri aracılığıyla bağlanmalıdır. Bu, L1 veya L2'deki bir sözleşmenin eksik olması veya 'updateTokenMapping' fonksiyonu aracılığıyla eşlenmemesi durumunda para yatırma ve çekme işlemlerinin geri alınacağı anlamına gelir. + + + +### L2'de ScrollERC721 tokenı oluşturma + +Bir ERC721 tokenını L2'ye yatırmak için, "IScrollERC721" standardıyla uyumlu bir token sözleşmesinin oluşturulması ve hem L1 hem de L2'de sırasıyla "L1ERC721Gateway" ve "L2ERC721Gateway" üzerinde eşlenmesi gerekir. Bu sözleşme, L2'deki Ağ Geçidine, bir token yatırıldığında basılması ve token geri çekildiğinde yakılması için izin vermelidir. + +Aşağıdaki arayüz, L2'de "L2ERC721Gateway" ile uyumlu ERC721 tokenlarını ağa dağıtmak için gereken "IScrollERC721"dir. + +```solidity +interface IScrollERC721 { + /// @notice Return the address of Gateway the token belongs to. + function gateway() external view returns (address); + + /// @notice Return the address of counterpart token. + function counterpart() external view returns (address); + + /// @notice Mint some token to recipient's account. + /// @dev Gateway Utilities, only gateway contract can call + /// @param _to The address of recipient. + /// @param _tokenId The token id to mint. + function mint(address _to, uint256 _tokenId) external; + + /// @notice Burn some token from account. + /// @dev Gateway Utilities, only gateway contract can call + /// @param _tokenId The token id to burn. + function burn(uint256 _tokenId) external; +} +``` + +### Scroll Köprüsüne ERC721 NFT'leri Ekleme + +Tüm varlıklar, dağıtılan Ağ Geçidi sözleşmeleri aracılığıyla herhangi bir geliştirici tarafından güvenli ve izinsiz olarak köprülenebilir. Ancak Scroll aynı zamanda topluluk tarafından oluşturulan tüm NFT'lerin kabul edildiği bir ERC721 Ağ Geçidi sözleşmesini de yönetmektedir. Scroll tarafından yönetilen Ağ Geçidinin bir parçası olmak, Ağ Geçidi sözleşmelerini dağıtmanıza gerek kalmayacağı ve tokenınızın Scroll kullanıcı arayüzünde görüneceği anlamına gelir. Scroll Ağ Geçidi'nin bir parçası olmak için hem L1 hem de L2 Ağ Geçidi sözleşmelerine NFT eklemek üzere Scroll ekibiyle iletişime geçmelisiniz. Bunu yapmak için, Scroll resmi kullanıcı arayüzünde yeni bir token eklemek için [token listeleri](https://github.com/scroll-tech/token-list) deposundaki talimatları izleyin. + +## ERC721 tokenları Scroll'dan çekin + +L2'den L1'e token göndermek için L2ERC721Gateway sözleşmesi kullanılır. Köprülemeden önce 'L2ERC721Gateway' sözleşmesinin NFT sözleşmesi tarafından onaylanması gerekir. Bu yapıldıktan sonra varlık köprüsünü gerçekleştirmek için "drawERC721" çağrılabilir. + + + + + +## L1ERC721Gateway API + +Scroll sözleşmesi API dokümanlarının tamamı için lütfen [npm kitaplığını](https://www.npmjs.com/package/@scroll-tech/contracts?activeTab=code) ziyaret edin. + +### depositERC721 + +```solidity +function depositERC721(address _token, address _to, uint256 _tokenId, uint256 _gasLimit) external payable; +``` + +L1'den, alıcının L2'deki hesabına ERC721 NFT yatırır. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------- | +| token | ERC721 NFT sözleşmesinin L1'deki adresi. | +| to | Alıcı hesabının L2'deki adresi. | +| tokenId | Yatırılacak NFT'nin ID'si. | +| gasLimit | L2'deki yatırma işlemini tamamlamak için gereken gaz limiti. Ücretin kullanılmayan kısmı iade edilecektir. | + +### updateTokenMapping + +```solidity +function updateTokenMapping(address _l1Token, address _l2Token) external; +``` + +Bir NFT sözleşmesini L1'den L2'ye bağlayan eşlemeyi günceller. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------ | +| \_l1Token | ERC721 tokeninin L1'deki adresi. | +| \_l2Token | ERC721 tokeninin L2'deki karşılık gelen adresi. | + +## L2ERC721Gateway API + +### withdrawERC721 + +```solidity +function withdrawERC721(address _token, address _to, uint256 _tokenId, uint256 _gasLimit) external payable; +``` + +L2'den alıcının L1'deki hesabına bir ERC721 NFT gönderir. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------------------------------ | +| token | ERC721 NFT token sözleşmesinin L2'deki adresi. | +| to | Alıcı hesabının L1'deki adresi. | +| tokenId | Gönderilecek NFT ID'si. | +| gasLimit | Kullanılmıyor ancak potansiyel ileriye dönük uyumluluk hususları nedeniyle dahil edildi. | + +### updateTokenMapping + +```solidity +function updateTokenMapping(address _l1Token, address _l2Token) external; +``` + +Bir NFT sözleşmesini L2'den L1'e bağlayan eşlemeyi günceller. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------ | +| \_l2Token | ERC721 tokeninin L2'deki adresi. | +| \_l1Token | ERC721 tokeninin L1'deki karşılık gelen adresi. | diff --git a/src/content/docs/tr/developers/l1-and-l2-bridging/eth-and-erc20-token-bridge.mdx b/src/content/docs/tr/developers/l1-and-l2-bridging/eth-and-erc20-token-bridge.mdx new file mode 100644 index 000000000..a4c32c4ef --- /dev/null +++ b/src/content/docs/tr/developers/l1-and-l2-bridging/eth-and-erc20-token-bridge.mdx @@ -0,0 +1,195 @@ +--- +section: developers +date: Last Modified +title: "ETH ve ERC20 Token Köprüsü" +lang: "tr" +permalink: "developers/l1-and-l2-bridging/eth-and-erc20-token-bridge" +whatsnext: { "ERC721 NFT Köprüsü": "/tr/developers/l1-and-l2-bridging/erc721-nft-bridge/" } +excerpt: "ETH ve ERC20 tokenlerinin sırasıyla depositETH ve depositERC20 fonksiyonlarını kullanılarak L1'den L2'ye köprülenmesine olanak tanıyan Ağ Geçidi Yönlendiricisi." +--- + +import Aside from "../../../../../components/Aside.astro" + +## L1'den ETH ve ERC20 Token Yatırma + +Ağ Geçidi Yönlendiricisi, sırasıyla "depositETH" ve "depositERC20" fonksiyonlarını kullanarak ETH ve ERC20 tokenlerinin L1'den L2'ye köprülenmesine olanak tanır. L1'de konuşlandırılmış izinsiz bir köprüdür. ERC20 tokenlerinin L2'de farklı bir adrese sahip olacağına dikkat edin, yeni adresi sorgulamak için 'getL2ERC20Address' işlevini kullanabilirsiniz. + + + +ERC20 tokenlarını köprülerken doğru Ağ Geçidini seçme konusunda endişelenmenize gerek yok. Bunun nedeni, 'L1GatewayRouter'ın mesajı göndermek için doğru temel giriş noktasını seçeceğidir: + +- **`L1StandardERC20Gateway`:** Bu Ağ Geçidi, herhangi bir ERC20 yatırma işlemine izin verir ve L2'de özel mantığa ihtiyaç duymayan bir ERC20 tokenı için L1GatewayRouter tarafından varsayılan olarak seçilecektir. İlk token köprülemesinde L2 üzerinde ScrollStandardERC20'yi uygulayan yeni bir token oluşturulacaktır. Bir tokenı köprülemek için 'L1GatewayRouter'da 'depositERC20' fonksiyonunu çağırın. +- **`L1CustomERC20Gateway`:** Bu Ağ Geçidi, özel mantığa sahip tokenlar için 'L1GatewayRouter' tarafından seçilecektir. Bir L1/L2 token çiftinin Scroll Özel ERC20 Köprüsü'nde çalışması için L2 token sözleşmesinin 'IScrollStandardERC20'yi uygulaması gerekir. Ek olarak, tokenın "L2CustomERC20Gateway"e "mint" veya "burn" yetkisi vermesi gerekir. Özel bir token'ın nasıl köprüleneceğine ilişkin adım adım bir örnek için [Özel Ağ Geçidi üzerinden ERC20'ye Köprü Oluşturma](/developers/guides/bridge-erc20-through-the-custom-gateway) kılavuzunu ziyaret edin. + +Tüm Ağ Geçidi sözleşmeleri mesajı oluşturacak ve L2'ye isteğe bağlı mesajlar gönderebilen 'L1ScrollMessenger'a gönderecektir. 'L1ScrollMessenger' mesajı 'L1MessageQueue'ya iletir. Herhangi bir kullanıcı, L2'de isteğe bağlı verileri yürütmek için doğrudan Messenger'a mesaj gönderebilir. Bu, köprü aracılığıyla L1 üzerinde yapılan bir işlem ile L2 üzerinde herhangi bir fonksiyonu çalıştırabilecekleri anlamına gelir. Bir uygulama doğrudan mevcut token sözleşmelerine mesaj iletebilse de, Ağ Geçidi ayrıntıları soyutlayarak transfer ve çağrı yapmayı basitleştirir. + + + +L1'de yeni bir blok oluşturulduğunda, Watcher "L1MessageQueue"daki mesajı algılayacak ve bunu, işlemi l2geth düğümü aracılığıyla L2'ye gönderecek olan Aktarıcı hizmetine iletecektir. Son olarak, l2geth düğümü, işlemi L2'de yürütülmek üzere 'L2ScrollMessenger' sözleşmesine iletecektir. + +## L2'den ETH ve ERC20 tokenleri çekin + +L2 Ağ Geçidi, L1 Ağ Geçidine çok benzer yapıdadır. 'drawETH' ve 'withdrawERC20' fonksiyonlarını kullanarak ETH ve ERC20 tokenlerini L1'e geri çekebiliriz. Sözleşme adresi L2'de dağıtılmıştır. L1'deki token adresini almak için 'getL1ERC20Address'i kullanıyoruz. + + + + + +## L2'de özel mantığa sahip bir ERC20 tokenı oluşturma + +Bir tokenın L2'de özel mantığa ihtiyacı varsa, sırasıyla "L1CustomERC20Gateway" ve "L2CustomERC20Gateway" üzerinden köprülenmesi gerekecektir. L2'deki özel tokenın, bir para yatırma işlemi gerçekleştiğinde yeni tokenler basması ve tokenler çekildiğinde yakılması için Ağ Geçidine izin vermesi gerekecektir. + +Aşağıdaki arayüz, L2'de "L2CustomERC20Gateway" ile uyumlu token dağıtmak için gereken "IScrollStandardERC20"dir. + +```solidity +interface IScrollStandardERC20 { + /// @notice Return the address of Gateway the token belongs to. + function gateway() external view returns (address); + + /// @notice Return the address of counterpart token. + function counterpart() external view returns (address); + + /// @dev ERC677 Standard, see https://github.com/ethereum/EIPs/issues/677 + /// Defi can use this method to transfer L1/L2 token to L2/L1, + /// and deposit to L2/L1 contract in one transaction + function transferAndCall(address receiver, uint256 amount, bytes calldata data) external returns (bool success); + + /// @notice Mint some token to recipient's account. + /// @dev Gateway Utilities, only gateway contract can call + /// @param _to The address of recipient. + /// @param _amount The amount of token to mint. + function mint(address _to, uint256 _amount) external; + + /// @notice Mint some token from account. + /// @dev Gateway Utilities, only gateway contract can call + /// @param _from The address of account to burn token. + /// @param _amount The amount of token to mint. + function burn(address _from, uint256 _amount) external; +} +``` + +### Scroll Köprüsü'ne Özel L2 ERC20 tokenı ekleme + +Tokenlarınızı, herhangi bir geliştirici tarafından dağıtılmış olan Ağ Geçidi sözleşmeleri aracılığıyla güvenli ve izin gerektirmeyen bir şekilde köprüleyebilirsiniz. Ancak Scroll aynı zamanda bir ERC20 Yönlendiricisi ve topluluk tarafından oluşturulan tüm tokenlerin kabul edildiği bir Ağ Geçidini de yönetir. Scroll tarafından yönetilen Ağ Geçidinin bir parçası olmak, Ağ Geçidi sözleşmelerini dağıtmanıza gerek kalmayacağı ve tokenınızın Scroll kullanıcı arayüzünde görüneceği anlamına gelir. Scroll Ağ Geçidi'nin bir parçası olmak için, tokenı hem L1 hem de L2 köprü sözleşmelerine eklemelisiniz ve bunun için Scroll ekibiyle iletişime geçmelisiniz. Tokenınızı Scroll resmi kullanıcı arayüzüne eklemek için [token listeleri](https://github.com/scroll-tech/token-list) deposundaki talimatları izleyin. + +## L1 Ağ Geçidi API'si + +Scroll sözleşmesi API dokümantasyonunun tamamı için lütfen [npm kitaplığını](https://www.npmjs.com/package/@scroll-tech/contracts?activeTab=code) ziyaret edin. + +### depositETH + +```solidity +function depositETH(address _to, uint256 _amount, uint256 _gasLimit) public payable; +``` + +L1'den L2'ye ETH gönderir. + +| Parametre | Açıklama | +| --------- | --------------------------------------------------------------------------------------------------------------------------- | +| to | Alıcı hesabının L2'deki adresi. | +| amount | Wei cinsinden aktarılacak miktar. | +| gasLimit | L2'deki yatırmayı tamamlamak için gereken gaz limiti. İşlemin gerçekleştirilmesi için 170000 yeterli olacaktır ancak kullanılmayan fonlar iade edilir. | + +### depositERC20 + +```solidity +function depositERC20(address _token, address _to, uint256 _amount, uint256 _gasLimit) payable; +``` + +L1'den L2'ye ERC20 token gönderir. + +| Parametre | Açıklama | +| --------- | --------------------------------------------------------------------------------------------------------------------------- | +| token | L1'deki token adresi. | +| to | Alıcı hesabının L2'deki adresi. | +| amount | Wei cinsinden aktarılacak token miktarı. | +| gasLimit | L2'deki yatırmayı tamamlamak için gereken gaz limiti. Ağ Geçidine bağlı olarak işlemi gerçekleştirmek için 20000 yeterli olacaktır, ancak kullanılmayan fonlar iade edilir. | + +### getL2ERC20Address + +```solidity +function getL2ERC20Address(address _l1Token) external view returns (address); +``` + +L1 token adresi verildiğinde karşılık gelen L2 token adresini döndürür. + +| Parametre | Açıklama | +| --------- | ------------------------ | +| \_l1Token | L1 token adresi. | + +### updateTokenMapping + +```solidity +function updateTokenMapping(address _l1Token, address _l2Token) external; +``` + +Bir ERC20 tokenını L1'den L2'ye bağlayan eşlemeyi günceller. + +| Parametre | Açıklama | +| --------- | ----------------------------------------------- | +| \_l1Token | ERC20 tokenının L1'deki adresi. | +| \_l2Token | ERC20 tokenının L2'deki karşılık gelen adresi. | + +## L2 Gateway API + +### withdrawETH + +```solidity +function withdrawETH(address to, uint256 amount, uint256 gasLimit) external payable; +``` + +L2'den L1'e ETH gönderir. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------------------------------------------------------------- | +| to | Alıcı hesabının L1'deki adresi. | +| amount | Wei cinsinden aktarılacak miktar. | +| gasLimit | L1'deki yatırmayı tamamlamak için gereken gaz limiti. İsteğe bağlıdır, ayarlamak istemiyorsanız 0 gönderin. | + +### withdrawERC20 + +```solidity +function withdrawERC20(address token, address to, uint256 amount, uint256 gasLimit) external payable; +``` + +L2'den L1'e ERC20 tokenları gönderir. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------------------------------------------------------------- | +| token | L2'deki token adresi. | +| to | Alıcı hesabının L1'deki adresi. | +| amount | Wei cinsinden aktarılacak token miktarı. | +| gasLimit | L1'deki yatırmayı tamamlamak için gereken gaz limiti. İsteğe bağlıdır, ayarlamak istemiyorsanız 0 gönderin. | + +### getL1ERC20Address + +```solidity +function getL1ERC20Address(address l2Token) external view returns (address); +``` + +Bir L2 token adresi verildiğinde karşılık gelen L1 token adresini döndürür. + +| Parameter | Description | +| --------- | ---------------------------- | +| l2Token | L2 tokenının adresi. | + +### updateTokenMapping + +```solidity +function updateTokenMapping(address _l1Token, address _l2Token) external; +``` + +ERC20 sözleşmesini L2'den L1'e bağlayan eşlemeyi güncelleyin. + +| Parameter | Description | +| --------- | ----------------------------------------------- | +| \_l2Token | ERC20 tokeninin L2'deki adresi. | +| \_l1Token | ERC20 tokeninin L1'deki karşılık gelen adresi. | diff --git a/src/content/docs/tr/developers/l1-and-l2-bridging/the-scroll-messenger.mdx b/src/content/docs/tr/developers/l1-and-l2-bridging/the-scroll-messenger.mdx new file mode 100644 index 000000000..a7417bd10 --- /dev/null +++ b/src/content/docs/tr/developers/l1-and-l2-bridging/the-scroll-messenger.mdx @@ -0,0 +1,136 @@ +--- +section: developers +date: Last Modified +title: "Scroll Messenger" +lang: "tr" +permalink: "developers/l1-and-l2-bridging/the-scroll-messenger" +whatsnext: { "Scroll'da İşlem Ücretleri": "/tr/developers/transaction-fees-on-scroll/" } +excerpt: "L1 ve L2 arasında herhangi bir mesaj geçişi sağlayan Scroll Messenger belgeleri." +--- + +import Aside from "../../../../../components/Aside.astro" + +Scroll Messenger sözleşmeleri, L1'den L2'ye veya L1'den L2'ye herhangi bir mesajın gönderilmesine izin verir. Bu, başka bir zincirdeki fonksiyonların güvenli ve izin gerektirmeyen bir şekilde yürütülmesine olanak tanır. L1'den L2'ye mesaj göndermek için L1'de dağıtılmış olan 'L1ScrollMessenger' mesajlaşma akıllı sözleşmesini kullanın. L2'den L1'e mesaj göndermek için L2'de dağıtılmış olan 'L2ScrollMessenger' sözleşmesini kullanın. + + + +## İşlemlerin L1'de sonuçlandırılması + +L2'den gelecek tüm işlemlerin, Scroll Messenger sözleşmesindeki 'relayMessageWithProof' fonksiyonu kullanılarak tamamlanması gerekir. Bu sürece "Para Çekimi Gerçekleştirme İşlemi Gönderme" adını veriyoruz ve hem herhangi bir mesaj gönderilmesi hem de varlıkların bir ağ geçidi veya yönlendirici aracılığıyla aktarılması için gereklidir. 'relayMessageWithProof'u kullandığınızda, işleminizin diğer parametrelerle birlikte "para çekme" mesajlarının grubuna dahil olduğunu gösteren bir Merkle katılım kanıtı sağlamanız gerekir. Bu kanıtı ve bu değerleri üretmek yerel olarak ve izinsiz olarak yapılabilir, ancak şu anda bu parametreleri almanın en kolay yolu backend API'lerimiz aracılığıyladır: + +- Scroll Sepolia API: https://sepolia-api-bridge.scroll.io/api/ +- Scroll API: https://mainnet-api-bridge.scroll.io/api/ + + + +L2'de orijinal işlemi başlatmaktan sorumlu olan EOA'nın veya sözleşmenin adresini "/claimable" uç noktasına sağlayın. API arka ucu, L1'deki işlemi başarılı bir şekilde sonuçlandırmak için gerekli tüm bilgileri size sağlayacaktır. +Aşağıdaki örneğe bir göz atın: + +```bash +https://sepolia-api-bridge.scroll.io/api/claimable?address=0x031407eaaffFB4f1EC2c999bE4477E52C81de3c5&page_size=10&page=1 +``` + +API, işlem verilerinizi aşağıdaki biçimde döndürmelidir: + +```json +{ + "errcode": 0, + "errmsg": "", + "data": { + "result": [ + { + "hash": "0xa476850306d6ee52b127628ded34dcf2343570873cce9c5383bd497db48d4f9b", + "amount": "", + "to": "", + "isL1": false, + "l1Token": "", + "l2Token": "", + "blockNumber": 748, + "blockTimestamp": null, + "finalizeTx": { + "hash": "", + "amount": "", + "to": "", + "isL1": false, + "blockNumber": 0, + "blockTimestamp": null + }, + "claimInfo": { + "from": "0x031407eaaffFB4f1EC2c999bE4477E52C81de3c5", + "to": "0x1039057185CFe192d16c03F5656225821A193FD5", + "value": "0", + "nonce": "9", + "batch_hash": "0x49a18d72dbceeb957f918947b532db452c031f528e7e6bf329007066638c5e50", + "message": "0xa413686200000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005686f6c6973000000000000000000000000000000000000000000000000000000", + "proof": "0x69b4ee6cf9a38bed79668ddd347fef2bdff44c3760c9309fa41decfd60202d22ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3079f53171df5c0661d2afe86c4d97b6f34278daf6a0ea9baff5b4fc979d5629a5", + "batch_index": "93" + }, + "createdTime": null + } + ], + "total": 1 + } +} +``` + +Döndürülen 'result' json'unun altındaki 'claimInfo' nesnesi, işleminizi L1'de yürütmek için gereken tüm bilgileri içerir. 'relayMessageWithProof'un ihtiyaç duyduğu parametreler şunlardır: 'from', 'to', 'value', 'nonce', 'message' ve 'proof'. İşleminizi L1'de yürütmek ve sonlandırmak için bunları L1'deki 'relayMessageWithProof' işlevine sağlayın. + + + +## Messenger API + +Scroll sözleşmesi API dokümanlarının tamamı için lütfen [npm kitaplığını](https://www.npmjs.com/package/@scroll-tech/contracts?activeTab=code) ziyaret edin. + +### sendMessage + +```solidity +function sendMessage( + address target, + uint256 value, + bytes calldata message, + uint256 gasLimit, + address refundAddress +) external payable; +``` + +Bir zincirden diğerine herhangi bir veri gönderir. Zincirler arası fonksiyonları yürütmemize olanak tanır. + +| Parametre | Açıklama | +| ------------- | ------------------------------------------------------------------------------------------------------------------- | +| target | Mesajı alan hesabın adresi. Alıcı bir akıllı sözleşme veya bir EOA cüzdanı olabilir. | +| value | Hedef sözleşme çağrılırken aktarılan Ether miktarı. | +| message | Mesajın içeriği. Bu yürütülecek herhangi bir çağrının verileridir. | +| gasLimit | İlgili zincirdeki mesaj aktarımını tamamlamak için gereken gaz limiti. | +| refundAddress | İade ücretinin alınacağı hesabın adresi. | + +### relayMessageWithProof + +```solidity +function relayMessageWithProof( + address from, + address to, + uint256 value, + uint256 nonce, + bytes memory message, + L2MessageProof memory proof +) external; +``` + +Mesaj kanıtı ile birlikte L2'den L1'e mesaj aktarın. + +| Parametre | Açıklama | +| --------- | ------------------------------------------------------------ | +| from | Mesajı gönderenin adresi. | +| to | Mesajın alıcısının adresi. | +| value | Mesaj çağrısına iletilen msg.value. | +| nonce | Tekrar saldırısını önlemek için mesajın nonce'ı. | +| message | Mesajın içeriği. | +| proof | İşlemin doğruluğunu doğrulamak için kullanılan kanıt. | diff --git a/src/content/docs/tr/developers/scroll-contracts.mdx b/src/content/docs/tr/developers/scroll-contracts.mdx new file mode 100644 index 000000000..221ebfb6d --- /dev/null +++ b/src/content/docs/tr/developers/scroll-contracts.mdx @@ -0,0 +1,236 @@ +--- +section: developers +date: Last Modified +title: "Scroll Sözleşmeleri" +lang: "tr" +permalink: "developers/scroll-contracts" +whatsnext: { "Ethereum ve Scroll Farkları": "/tr/developers/ethereum-and-scroll-differences" } +excerpt: "Scroll Sepolia Test ağını kullanmaya başlayabilmeniz gereken ağ bilgileri ve sözleşme adresleri." +--- + +import Aside from "../../../../components/Aside.astro" +import ToggleElement from "../../../../components/ToggleElement.astro" + +Bu makalede Scroll'un ve yaygın olarak kullanılan faydalı protokollerin sözleşme adreslerini bulacaksınız. [Scroll Sepolia](#scroll-sepolia-testnet) bilgisi için aşağıdaki bölüme bakın. + +## Ağ Bilgisi + +Ethereum araçlarınızı Scroll ana ağına yapılandırmak için aşağıdaki tabloyu kullanın. + +| Ağ Adı | Scroll | Ethereum Ana ağı | +| ------------------ | -------------------------------------------------- | ---------------------------------------------------- | +| RPC URL'si | [https://rpc.scroll.io/](https://rpc.scroll.io/) | [https://eth.llamarpc.com](https://eth.llamarpc.com) | +| Zincir Kimliği | 534352 | 1 | +| Para Birimi Sembolü| ETH | ETH | +| Blok Gezgini URL'si| [https://scrollscan.com/](https://scrollscan.com/) | [https://etherscan.io](https://etherscan.io) | + + +
Ek Scroll Ana Ağ RPC'leri ve Altyapısı
+ - [Scroll Yerel Köprüsü](https://scroll.io/bridge) + - [Scroll Rollup Tarayıcısı](https://scroll.io/rollupscan) + - [ChainList.org'daki Scroll RPC Sağlayıcıları](https://chainlist.org/chain/534352) + - [ChainList.org'daki Ethereum RPC Sağlayıcıları](https://chainlist.org/chain/1) + {/* - Ek Blok Gezginleri: + - [Dora](https://www.ondora.xyz/network/scroll/interactions) + - [L2Scan](https://scroll.l2scan.co/) */} + +
+ +## Scroll Sözleşmeleri + +### Rollup + +- L1 Rollup (Scroll Ağı): [`0xa13BAF47339d63B743e7Da8741db5456DAc1E556`](https://etherscan.io/address/0xa13BAF47339d63B743e7Da8741db5456DAc1E556) + +### ETH and ERC20 Köprüsü + +- L1 Ağ Geçidi Yönlendiricisi: [`0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6`](https://etherscan.io/address/0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6) +- L2 Ağ Geçidi Yönlendiricisi: [`0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79`](https://scrollscan.com/address/0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79) + +### Gelişmiş Köprü Sözleşmeleri + +- Scroll Messenger + - L1 Messenger: [`0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367`](https://etherscan.io/address/0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367) + - L2 Messenger: [`0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC`](https://scrollscan.com/address/0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC) +- ETH Köprüsü + - L1 ETH Ağ Geçidi: [`0x7F2b8C31F88B6006c382775eea88297Ec1e3E905`](https://etherscan.io/address/0x7F2b8C31F88B6006c382775eea88297Ec1e3E905) + - L2 ETH Ağ Geçidi: [`0x6EA73e05AdC79974B931123675ea8F78FfdacDF0`](https://scrollscan.com/address/0x6EA73e05AdC79974B931123675ea8F78FfdacDF0) + - L1 WETH Ağ Geçidi: [`0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE`](https://etherscan.io/address/0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE) + - L2 WETH Ağ Geçidi: [`0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9`](https://scrollscan.com/address/0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9) +- ERC20 Köprüsü + - L1 ERC20 Standard Ağ Geçidi: [`0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9`](https://etherscan.io/address/0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9) + - L2 ERC20 Standard Ağ Geçidi: [`0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A`](https://scrollscan.com/address/0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A) + - L1 ERC20 Custom Ağ Geçidi: [`0xb2b10a289A229415a124EFDeF310C10cb004B6ff`](https://etherscan.io/address/0xb2b10a289A229415a124EFDeF310C10cb004B6ff) + - L2 ERC20 Custom Ağ Geçidi: [`0x64CCBE37c9A82D85A1F2E74649b7A42923067988`](https://scrollscan.com/address/0x64CCBE37c9A82D85A1F2E74649b7A42923067988) +- ERC721 Köprüsü + - L1 ERC721 Ağ Geçidi: [`0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B`](https://etherscan.io/address/0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B) + - L2 ERC721 Ağ Geçidi: [`0x7bC08E1c04fb41d75F1410363F0c5746Eae80582`](https://scrollscan.com/address/0x7bC08E1c04fb41d75F1410363F0c5746Eae80582) +- ERC1155 Köprüsü + - L1 ERC1155 Ağ Geçidi: [`0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6`](https://etherscan.io/address/0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6) + - L2 ERC1155 Ağ Geçidi: [`0x62597Cc19703aF10B58feF87B0d5D29eFE263bcc`](https://scrollscan.com/address/0x62597Cc19703aF10B58feF87B0d5D29eFE263bcc) +- Gas Oracle (Ana ağda konuşlandırıldı) + - L2 Gas Oracle (*yakında kullanımdan kaldırılacak*): [`0x987e300fDfb06093859358522a79098848C33852`](https://etherscan.io/address/0x987e300fDfb06093859358522a79098848C33852) + - *[Şubat '24 Köprü Yükseltmesi] sonrasında(https://scroll.io/blog/protocol-upgrade-bridging-cost-reduction)* + - L2 Message Queue With Gas Price Oracle: [`0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B`](https://etherscan.io/address/0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B) + +### L2 Predeploys + +- Message Queue: [`0x5300000000000000000000000000000000000000`](https://scrollscan.com/address/0x5300000000000000000000000000000000000000) +- Gas Price Oracle: [`0x5300000000000000000000000000000000000002`](https://scrollscan.com/address/0x5300000000000000000000000000000000000002) +- Beyaz Liste: [`0x5300000000000000000000000000000000000003`](https://scrollscan.com/address/0x5300000000000000000000000000000000000003) +- WETH L2: [`0x5300000000000000000000000000000000000004`](https://scrollscan.com/address/0x5300000000000000000000000000000000000004) +- İşlem Ücreti Kasası: [`0x5300000000000000000000000000000000000005`](https://scrollscan.com/address/0x5300000000000000000000000000000000000005) + +## Scroll Ana ağındaki Protokoller + +### Uniswap v3 + +- Ana Sözleşmeler + - Core Factory: [`0x70C62C8b8e801124A4Aa81ce07b637A3e83cb919`](https://scrollscan.com/address/0x70C62C8b8e801124A4Aa81ce07b637A3e83cb919) + - NFT Position Manager: [`0xB39002E4033b162fAc607fc3471E205FA2aE5967`](https://scrollscan.com/address/0xB39002E4033b162fAc607fc3471E205FA2aE5967) + - Router: [`0xfc30937f5cDe93Df8d48aCAF7e6f5D8D8A31F636`](https://scrollscan.com/address/0xfc30937f5cDe93Df8d48aCAF7e6f5D8D8A31F636) +- Ek Sözleşmeler + - multicall2Address: [`0xC1D2e074C38FdD5CA965000668420C80316F0915`](https://scrollscan.com/address/0xC1D2e074C38FdD5CA965000668420C80316F0915) + - proxyAdminAddress: [`0x1E6dcAb806A42055098f23E2B3ac72D6E195F967`](https://scrollscan.com/address/0x1E6dcAb806A42055098f23E2B3ac72D6E195F967) + - tickLensAddress: [`0x85780e12e90D2a684eB8E7404c985b5B5c8ce7E9`](https://scrollscan.com/address/0x85780e12e90D2a684eB8E7404c985b5B5c8ce7E9) + - nftDescriptorLibraryAddressV1_3_0: [`0xAeE9c206ba89F3DA25EEe4636208519e0B86965B`](https://scrollscan.com/address/0xAeE9c206ba89F3DA25EEe4636208519e0B86965B) + - nonfungibleTokenPositionDescriptorAddressV1_3_0: [`0xACcf12204b7591B2ECCEFe737440B0f53748B191`](https://scrollscan.com/address/0xACcf12204b7591B2ECCEFe737440B0f53748B191) + - descriptorProxyAddress: [`0x675DD953225D296A44790dC1390a1E7eF378f464`](https://scrollscan.com/address/0x675DD953225D296A44790dC1390a1E7eF378f464) + - v3MigratorAddress: [`0xF00577B5Dd0DA227298E954Ed11356F264Cf93d4`](https://scrollscan.com/address/0xF00577B5Dd0DA227298E954Ed11356F264Cf93d4) + - v3StakerAddress: [`0xFdFbE973c9ecB036Ecfb7af697FcACe789D3f928`](https://scrollscan.com/address/0xFdFbE973c9ecB036Ecfb7af697FcACe789D3f928) + - quoterV2Address: [`0x2566e082Cb1656d22BCbe5644F5b997D194b5299`](https://scrollscan.com/address/0x2566e082Cb1656d22BCbe5644F5b997D194b5299) + +#### Ethereum Attestation Service (EAS) + +- EAS: [`0xC47300428b6AD2c7D03BB76D05A176058b47E6B0`](https://scrollscan.com/address/0xC47300428b6AD2c7D03BB76D05A176058b47E6B0) +- SchemaRegistry: [`0xD2CDF46556543316e7D34e8eDc4624e2bB95e3B6`](https://scrollscan.com/address/0xD2CDF46556543316e7D34e8eDc4624e2bB95e3B6) +- EIP712Proxy: [`0x77b7DA1c40762Cd8AFfE2069b575328EfD4D9801`](https://scrollscan.com/address/0x77b7DA1c40762Cd8AFfE2069b575328EfD4D9801) +- Indexer: `Not deployed yet` + +## Ek Yararlı Sözleşmeler + +- Multicall3: [`0xcA11bde05977b3631167028862bE2a173976CA11`](https://scrollscan.com/address/0xcA11bde05977b3631167028862bE2a173976CA11) + +## Token'ler + + + +{" "} + +
+ +--- + +## Scroll Sepolia Test Ağı + +### Ağ Bilgisi + +Ethereum araçlarınızı Scroll Sepolia Test ağına yapılandırmak için aşağıdaki tabloyu kullanın. + +| Ağ Adı | Scroll Sepolia | Ethereum Sepolia | +| ------------------ | ----------------------------------------------------------------- | ------------------------------------------------------------ | +| RPC URL'si | [https://sepolia-rpc.scroll.io/](https://sepolia-rpc.scroll.io/) | [https://rpc2.sepolia.org](https://rpc2.sepolia.org) | +| Zincir Kimliği | 534351 | 11155111 | +| Para Birimi Sembolü| ETH | ETH | +| Blok Gezgini URL'si| [https://sepolia.scrollscan.com](https://sepolia.scrollscan.com/) | [https://sepolia.etherscan.io](https://sepolia.etherscan.io) | + + +
Ek Scroll Sepolia RPC'leri ve Altyapısı
+ - [Scroll Sepolia Yerel Köprüsü](https://sepolia.scroll.io/bridge) + - [Scroll Sepolia Rollup Tarayıcısı](https://sepolia.scroll.io/rollupscan) + - [ChainList.org'daki Sepolia RPC Sağlayıcıları](https://chainlist.org/chain/534351) + - [ChainList.org'daki Ethereum Sepolia RPC Sağlayıcıları](https://chainlist.org/chain/11155111) + - Ek Blok Gezginleri: + - [Dora](https://www.ondora.xyz/network/scroll-sepolia/interactions) + - [L2Scan](https://scroll.l2scan.co/) + +
+ +### Scroll Sepolia Sözleşmeleri + +#### Rollup + +- L1 Rollup (Scroll Ağı): [`0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0`](https://sepolia.etherscan.io/address/0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0) + +#### ETH and ERC20 Köprüsü + +- L1 Gateway Router: [`0x13FBE0D0e5552b8c9c4AE9e2435F38f37355998a`](https://sepolia.etherscan.io/address/0x13FBE0D0e5552b8c9c4AE9e2435F38f37355998a) +- L2 Gateway Router: [`0x9aD3c5617eCAa556d6E166787A97081907171230`](https://sepolia.scrollscan.com/address/0x9aD3c5617eCAa556d6E166787A97081907171230) + +#### Gelişmiş Köprü Sözleşmeleri + +- Scroll Messenger + - L1 Messenger: [`0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A`](https://sepolia.etherscan.io/address/0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A) + - L2 Messenger: [`0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d`](https://sepolia.scrollscan.com/address/0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d) +- ETH Köprüsü + - L1 ETH Ağ Geçidi: [`0x8A54A2347Da2562917304141ab67324615e9866d`](https://sepolia.etherscan.io/address/0x8A54A2347Da2562917304141ab67324615e9866d) + - L2 ETH Ağ Geçidi: [`0x91e8ADDFe1358aCa5314c644312d38237fC1101C`](https://sepolia.scrollscan.com/address/0x91e8ADDFe1358aCa5314c644312d38237fC1101C) + - L1 WETH Ağ Geçidi: [`0x3dA0BF44814cfC678376b3311838272158211695`](https://sepolia.etherscan.io/address/0x3dA0BF44814cfC678376b3311838272158211695) + - L2 WETH Ağ Geçidi: [`0x481B20A927206aF7A754dB8b904B052e2781ea27`](https://sepolia.scrollscan.com/address/0x481B20A927206aF7A754dB8b904B052e2781ea27) +- ERC20 Köprüsü + - L1 ERC20 Standard Ağ Geçidi: [`0x65D123d6389b900d954677c26327bfc1C3e88A13`](https://sepolia.etherscan.io/address/0x65D123d6389b900d954677c26327bfc1C3e88A13) + - L2 ERC20 Standard Ağ Geçidi: [`0xaDcA915971A336EA2f5b567e662F5bd74AEf9582`](https://sepolia.scrollscan.com/address/0xaDcA915971A336EA2f5b567e662F5bd74AEf9582) + - L1 ERC20 Custom Ağ Geçidi: [`0x31C994F2017E71b82fd4D8118F140c81215bbb37`](https://sepolia.etherscan.io/address/0x31C994F2017E71b82fd4D8118F140c81215bbb37) + - L2 ERC20 Custom Ağ Geçidi: [`0x058dec71E53079F9ED053F3a0bBca877F6f3eAcf`](https://sepolia.scrollscan.com/address/0x058dec71E53079F9ED053F3a0bBca877F6f3eAcf) +- ERC721 Köprüsü + - L1 ERC721 Ağ Geçidi: [`0xEF27A5E63aa3f1B8312f744b9b4DcEB910Ba77AC`](https://sepolia.etherscan.io/address/0xEF27A5E63aa3f1B8312f744b9b4DcEB910Ba77AC) + - L2 ERC721 Ağ Geçidi: [`0x179B9415194B67DC3c0b8760E075cD4415785c97`](https://sepolia.scrollscan.com/address/0x179B9415194B67DC3c0b8760E075cD4415785c97) +- ERC1155 Köprüsü + - L1 ERC1155 Ağ Geçidi: [`0xa5Df8530766A85936EE3E139dECE3bF081c83146`](https://sepolia.etherscan.io/address/0xa5Df8530766A85936EE3E139dECE3bF081c83146) + - L2 ERC1155 Ağ Geçidi: [`0xe17C9b9C66FAF07753cdB04316D09f52144612A5`](https://sepolia.scrollscan.com/address/0xe17C9b9C66FAF07753cdB04316D09f52144612A5) +- Gas Oracle (Sepolia'da konuşlandırıldı) + - L1 Message Queue With Gas Price Oracle: [`0xF0B2293F5D834eAe920c6974D50957A1732de763`](https://sepolia.etherscan.io/address/0xF0B2293F5D834eAe920c6974D50957A1732de763) + - L2 Gas Oracle (*deprecated*): [`0x247969F4fad93a33d4826046bc3eAE0D36BdE548`](https://sepolia.etherscan.io/address/0x247969F4fad93a33d4826046bc3eAE0D36BdE548) + +#### L2 Predeploys + +- Message Queue: [`0x5300000000000000000000000000000000000000`](https://sepolia.scrollscan.com/address/0x5300000000000000000000000000000000000000) +- Gas Price Oracle: [`0x5300000000000000000000000000000000000002`](https://sepolia.scrollscan.com/address/0x5300000000000000000000000000000000000002) +- Whitelist: [`0x5300000000000000000000000000000000000003`](https://sepolia.scrollscan.com/address/0x5300000000000000000000000000000000000003) +- WETH L2: [`0x5300000000000000000000000000000000000004`](https://sepolia.scrollscan.com/address/0x5300000000000000000000000000000000000004) +- Transaction Fee Vault: [`0x5300000000000000000000000000000000000005`](https://sepolia.scrollscan.com/address/0x5300000000000000000000000000000000000005) + +### Protokoller + +#### Uniswap v3 + +- Frontend website: [https://uniswap-showcase.sepolia.scroll.xyz/](https://uniswap-showcase.sepolia.scroll.xyz/) +- Ana Sözleşmeler + - Core Factory: [`0xB856587fe1cbA8600F75F1b1176E44250B11C788`](https://sepolia.scrollscan.com/address/0xB856587fe1cbA8600F75F1b1176E44250B11C788) + - NFT Position Manager: [`0xbbAd0e891922A8A4a7e9c39d4cc0559117016fec`](https://sepolia.scrollscan.com/address/0xbbAd0e891922A8A4a7e9c39d4cc0559117016fec) + - Router: [`0x17AFD0263D6909Ba1F9a8EAC697f76532365Fb95`](https://sepolia.scrollscan.com/address/0x17AFD0263D6909Ba1F9a8EAC697f76532365Fb95) +- Ek Sözleşmeler + - multicall2Address: [`0x8c181f4B9040F1a2C941EfD3b608712cF86F1957`](https://sepolia.scrollscan.com/address/0x8c181f4B9040F1a2C941EfD3b608712cF86F1957) + - proxyAdminAddress: [`0xD4A9910732b6f301F6F210Ebe7a3dBf16d9E9DD4`](https://sepolia.scrollscan.com/address/0xD4A9910732b6f301F6F210Ebe7a3dBf16d9E9DD4) + - tickLensAddress: [`0x9804Da978427a49929f2E6Ea32A9594F03f9296e`](https://sepolia.scrollscan.com/address/0x9804Da978427a49929f2E6Ea32A9594F03f9296e) + - nftDescriptorLibraryAddressV1_3_0: [`0x45Bd3B62B7A3aA53371c98049b0f7A9C1A4B5a6c`](https://sepolia.scrollscan.com/address/0x45Bd3B62B7A3aA53371c98049b0f7A9C1A4B5a6c) + - nonfungibleTokenPositionDescriptorAddressV1_3_0: [`0x24d4E4a572Dc1e0dbF92a0d7768Ac80df516b2C2`](https://sepolia.scrollscan.com/address/0x24d4E4a572Dc1e0dbF92a0d7768Ac80df516b2C2) + - descriptorProxyAddress: [`0xa8986417d0EAe50607696b9b0cb7ec5aFBE67765`](https://sepolia.scrollscan.com/address/0xa8986417d0EAe50607696b9b0cb7ec5aFBE67765) + - v3MigratorAddress: [`0x38E33D067F03a5cDc02C301b2c306cb0414549Bf`](https://sepolia.scrollscan.com/address/0x38E33D067F03a5cDc02C301b2c306cb0414549Bf) + - v3StakerAddress: [`0xe7b82794Cab21e665a3e6f8ea562d392AA6E0619`](https://sepolia.scrollscan.com/address/0xe7b82794Cab21e665a3e6f8ea562d392AA6E0619) + - quoterV2Address: [`0xd5dd33650Ef1DC6D23069aEDC8EAE87b0D3619B2`](https://sepolia.scrollscan.com/address/0xd5dd33650Ef1DC6D23069aEDC8EAE87b0D3619B2) + +#### Aave + +Göz atın [Github gist](https://gist.github.com/dghelm/7fe68f0a524f30846e1142721c081d84). + +#### Ethereum Attestation Service (EAS) + +- EAS: [`0xaEF4103A04090071165F78D45D83A0C0782c2B2a`](https://sepolia.scrollscan.com/address/0xaEF4103A04090071165F78D45D83A0C0782c2B2a) +- SchemaRegistry: [`0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797`](https://sepolia.scrollscan.com/address/0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797) +- EIP712Proxy: [`0xB3574f76b1720E61FdA98702c7016674CD6Eaa7b`](https://sepolia.scrollscan.com/address/0xB3574f76b1720E61FdA98702c7016674CD6Eaa7b) +- Indexer: [`0x7C2cb1eDC328491da52de2a0afc44D3B0Ae7ee17`](https://sepolia.scrollscan.com/address/0x7C2cb1eDC328491da52de2a0afc44D3B0Ae7ee17) + +### Ek Faydalı Sözleşmeler + +- Multicall3: [`0xcA11bde05977b3631167028862bE2a173976CA11`](https://sepolia.scrollscan.com/address/0xcA11bde05977b3631167028862bE2a173976CA11) + +### Token'lar + + + +- Gho Token: [`0xD9692f1748aFEe00FACE2da35242417dd05a8615`](https://sepolia.scrollscan.com/address/0xD9692f1748aFEe00FACE2da35242417dd05a8615) diff --git a/src/content/docs/tr/developers/transaction-fees-on-scroll.mdx b/src/content/docs/tr/developers/transaction-fees-on-scroll.mdx new file mode 100644 index 000000000..e04f2e722 --- /dev/null +++ b/src/content/docs/tr/developers/transaction-fees-on-scroll.mdx @@ -0,0 +1,192 @@ +--- +section: developers +date: Last Modified +title: "Scroll'da İşlem Ücretleri" +lang: "tr" +permalink: "developers/transaction-fees-on-scroll" +whatsnext: { "Sözleşme Dağıtımı Eğitimi": "/developers/guides/contract-deployment-tutorial/" } +excerpt: "Scroll'da L1 ve L2 işlem ücretlerinin nasıl çalıştığını anlayın " +--- + +import Aside from "../../../../components/Aside.astro" + +## Genel Bakış + +Scroll'da işlem ücretleri, destek verdiği katmana (Katman 1) göre oldukça düşüktür. Kullanıcılar ve geliştiriciler için Scroll'daki işlem ücretleri, Ethereum ana ağında olduğuna benzer şekilde çalışır gibi görünür. Mevcut araçlar, cüzdanlar ve kodlar da muhtemelen olduğu gibi çalışacaklardır. Ancak cüzdanda gösterilen işlem ücreti, kullanılan yazılım Scroll'un ücret hesaplamalarından özellikle haberdar olmadığı sürece resmin tamamını içermeyecektir. + +L2 rollup'larındaki işlem maliyetleri tasarımları nedeniyle L1'in maliyetlerine bağlıdır. Ethereum'un güvenliğinden yararlanmak için Scroll'un, L1'de veri saklanması ve doğrulanmasında gereken işlem verilerinin ve kanıtların maliyetini de hesaba katması gerekir. + +Ethereum ana ağıyla karşılaştırıldığında Scroll, bunu yapmak için işlem ücreti hesaplamasına bazı yeni boyutlar getiriyor. Bir işlemin nihai maliyeti birkaç bölümden oluşur: + +- **L2 ücreti** + - L1'dekiyle aynı şekilde hesaplanır; "gas_price * gas_used" değerine eşittir +- **L1 ücreti** + - Bu ek ücret, veri kullanılabilirliği için L1'e veri gönderilmesini kapsar. L1 üzerinden başlatılan işlemlerde bu ücret ödenmez. + - İşlemin çağrı verilerinin(calldata) boyutuna göre hesaplanır + - ETH, ücret karşılığında kullanıcının Scroll'daki bakiyesinden otomatik olarak düşülür + +Yüksek düzeyden bakacak olursak; **L2 ücreti** işleminizi L2 sıralayıcısında gerçekleştirmenin maliyetidir, **L1 ücreti** ise bu işlemi L1'de gerçekleştirmenin maliyetidir. + +Kısacası, "totalTxFee = l2Fee + l1Fee", tamamı Scroll ağının yerel gas tokenı olan ETH cinsinden ifade edilir. + + + +## L2 Ücretleri + +Scroll'daki işlemler, Ethereum'da olduğu gibi, hesaplamaları yürütme ve ürettikleri verileri saklama masraflarını ödemek zorundadır. + +### Yürütme Ücretinin Hesaplanması + +L2 yürütme ücreti basittir: + +```javascript +l2TransactionExecutionFee = l2TransactionGasUsed * l2TransactionGasPrice +``` + +Toplam ücret, işlemin ne yaptığına ("l2TransactionGasUsed") ve mevcut piyasa koşullarına ("l2TransactionGasPrice") bağlıdır. Kullanıcılar gaz fiyatını belirler ve "gas used", bir Scroll düğümünde "estimateGas" RPC uç noktası çağrılarak değerlendirilir. + +Başka bir deyişle, yürütme ücreti tam olarak [EIP1559](https://eips.ethereum.org/EIPS/eip-1559) Ethereum öncesi gibi hesaplanır. + +## L1 Ücreti + +Her işlemin çağrı verileri Ethereum'a taahhüt edilmelidir, bu da "L1 Ücreti" olarak adlandırılan ek bir işlem ücretine tabi olur. Bunu yapmadan Scroll yalnızca L1 verilerinden yeniden oluşturulamazdı. + +İşlemler birer birer gerçekleştirilmez; blok grupları (ve işlem blokları) halinde toplanırlar. Bireysel bir işlemin maliyeti, veri yükündeki sıfırlar ve sıfır olmayan bytelara göre hesaplanır. + +### L1 Veri Ücretinin Tahmin Edilmesi + +Scroll, önceden konuşlandırılmış bir "L1GasPriceOracle"a sahiptir ve hem Scroll hem de Scroll Sepolia'da ([`0x5300000000000000000000000000000000000000002`](https://sepolia-blockscout.scroll.io/address/0x530000000000000000000000000000000000000002) adresinden erişilebilir durumdadır). Belirli bir işlemin ham verileri için L1 veri ücretini tahmin etmek için bir "getL1Fee" yöntemi sağlar. + +```solidity +function getL1Fee(bytes memory _data) external view override returns (uint256); +``` + + + +### Gaz Oracle'ı ile L1 Veri Ücretinin Hesaplanması + +Bahsedildiği gibi, 'L1GasPriceOracle' verilen ham işlem verilerine göre L1 gaz ücretini tahmin etmek için kullanılır. Bu, Scroll tarafından çalıştırılan bir aktarıcı tarafından güncellenen bir **push oracle**'dır. + +İstenecek verinin ücreti birden fazla faktöre bağlıdır: + +- İmzalı RLP kodlu bir işlemin "sıfırları" ve "sıfır olmayan" byteları +- `l1BaseFee` - L1'deki mevcut taban ücret +- "overhead" - Bir veri taahhüdü işleminin ek gaz yükü +- `scalingFactor` - Fiyat artışlarını hesaba katmak için kullanılan bir ölçeklendirme faktörü +- `PRECISION` - Nihai ücreti ölçeklendirmek için kullanılan bir sabit + +L1 veri ücretini hesaplamak için aşağıdaki adımlar gerçekleştirilir: + +1. 'L1GasPriceOracle' sözleşmesindeki 'l1BaseFee', 'overhead' ve 'scalar' adlı üç alanı oku. Sözleşmedeki bu alanlara ilişkin yuvalar şunlardır: + + | Alan | Slot | + | --------- | ---- | + | l1BaseFee | 1 | + | overhead | 2 | + | scalar | 3 | + +2. İşlemdeki sıfır byteları ve sıfır olmayan byteları say. +3. `TX_DATA_ZERO_GAS = 4`, `TX_DATA_NON_ZERO_GAS = 16`[^eip-2028] ve `PRECISION = 1e9`'i göz önüne alarak L1 veri ücretini hesapla: + + ```javascript + l1Gas = zeros * TX_DATA_ZERO_GAS + (nonzeros + 4) * TX_DATA_NON_ZERO_GAS + l1GasFee = ((l1Gas + overhead) * l1BaseFee * scalar) / PRECISION + ``` + + RLP kodlu işlemdeki byte sayısını depolamak için sıfır olmayan bytelarda ek 4 byte ayırırız. + +[^eip-2028]: Daha fazla bilgi için bkz. [EIP-2028](https://eips.ethereum.org/EIPS/eip-2028). + +### L1GasPriceOracle API + +#### overhead + +```solidity +function overhead() external view returns (uint256); +``` + +Geçerli L1 ücreti gaz yükünü döndürür + +#### scalar + +```solidity +function scalar() external view returns (uint256); +``` + +Geçerli l1 ücret skaler değerini döndürür + +#### l1BaseFee + +```solidity +function l1BaseFee() external view returns (uint256); +``` + +Bilinen en son l1 taban ücretini döndürür + +#### getL1Fee + +```solidity +function getL1Fee(bytes memory data) external view returns (uint256); +``` + +RLP kodlu giriş işleminin(input) boyutuna, mevcut L1 taban ücretine ve çeşitli dinamik parametrelere göre L1 kısmının ücretini hesaplar. + +**Döndürür:** İşlem için ödenmesi gereken L1 ücreti + +| Parametre | Açıklama | +| --------- | ----------------------------------------------------------- | +| data | L1 ücretini almak için kullanılan, imzalanmış tamamen RLP kodlu işlem. | + +#### getL1GasUsed + +```solidity +function getL1GasUsed(bytes memory data) external view returns (uint256); +``` + +Bir işlem için kullanılan L1 gazının miktarını hesaplar. İşlemin ve durum köklerinin L1'e kaydedilmesine ilişkin işlem başına gaz ek yükünü temsil eden ek yükü ekler. Giriş işleminin imzası olmadığı gerçeğini hesaba katarak 74 bytelık dolgu ekler. + +**Döndürür:** İşlemi yayınlamak için kullanılan L1 gazı miktarı. + +| Parametre | Açıklama | +| --------- | ----------------------------------------------------------- | +| data | L1 ücretini almak için kullanılan, imzalanmış tamamen RLP kodlu işlem. | + +## L1 Kaynaklı İşlemler + +L1'den L2'ye mesajlaşırken kullanıcı L1'deki tüm işlem ücretlerini öder. Kullanıcı L1'in kendi gaz ücretini öder ancak bu sebepten Scroll'a L1 Veri Ücreti ödemesine gerek yoktur. Fakat L1 işlemlerinde L2 Yürütme Ücretlerinin hesaba katılması ve ne kadar L2 gazı ödeyeceklerini bilmeleri gerekecek. + +L1'deki sözleşmeler, belirli bir işlem için gaz ücretini almak üzere L1'e dağıtılmış L2 Gaz Fiyatı Oracle sözleşmesini kullanabilir. Oracle aynı zamanda mevcut l2BaseFee'yi ve belirli bir gas limiti için tahmini alanlar arası(cross-domain) mesaj ücretini de sağlar. + +Ana ağda, "L2GasPriceOracle" [`0x987e300fDfb06093859358522a79098848C33852`](https://etherscan.io/address/0x987e300fDfb06093859358522a79098848C33852) adresinde konuşlandırılır. + +Sepolia'da, son versiyona yükseltilmiş bir "L1MessageQueueWithGasPriceOracle" kullanılmalı ve [`0xF0B2293F5D834eAe920c6974D50957A1732de763`](https://sepolia.etherscan.io/address/0xF0B2293F5D834eAe920c6974D50957A1732de763) adresine dağıtılmalıdır. + +Sisteminiz zincir dışı mekanizmaları destekliyorsa, belirli bir işlem için gerekli gaza ilişkin bir tahmin almak üzere herhangi bir Scroll RPC düğümünde "eth_estimateGas" ve "eth_gasPrice"ı da çağırabilirsiniz. + + +{/* TODO: Add full documentation of key methods */} + +## Gelecek Yol Haritası + +Şu anda, L1'de kanıt üretimi için gereken hesaplama ve kanıt doğrulaması için gereken gas, Scroll ve çeşitli kanıtlama ortakları tarafından karşılanmaktadır. L2 Gaz Fiyatına bir taban değer belirlenerek kısmen halledilmiştir. + +Kanıtlayıcı ağı merkeziyetsizleştikçe, sistemin sürdürülebilir ve ölçeklenebilir olması için kanıt oluşturmaya yönelik teşviklerin protokole dahil edilmesi gerekecektir. + +Nihai gaz maliyetinin kanıt üretme maliyetini net bir şekilde içermesini bekliyoruz. Daha fazla protokol optimizasyonu ile her kanıtta birçok işlem kapsandığından kullanıcı için bu maliyet minimum düzeyde olacaktır. diff --git a/src/content/docs/tr/developers/verifying-smart-contracts.mdx b/src/content/docs/tr/developers/verifying-smart-contracts.mdx new file mode 100644 index 000000000..b6e53a64a --- /dev/null +++ b/src/content/docs/tr/developers/verifying-smart-contracts.mdx @@ -0,0 +1,128 @@ +--- +section: developers +date: Last Modified +title: "Akıllı Sözleşmeleri Doğrulama" +lang: "tr" +permalink: "developers/verifying-smart-contracts" +whatsnext: { "Scroll Sözleşmeleri": "/tr/developers/scroll-contracts" } +excerpt: "Scroll destekli geliştirici araçlarıyla akıllı sözleşmelerinizi kolayca doğrulayın" +--- + +import Aside from "../../../../components/Aside.astro" +import ClickToZoom from "../../../../components/ClickToZoom.astro" +import verify1 from "./_images/verify1.png" +import CodeSample from "../../../../components/CodeSample/CodeSample.astro" + +Akıllı sözleşmelerinizi dağıttıktan sonra kodunuzu bir blok gezgininde doğrulamanız önemlidir. Bu, geliştirici araçlarını veya web kullanıcı arayüzlerini kullanarak otomatik bir şekilde yapılabilir. + +## Geliştirici Araçlarını Kullanma + +Çoğu akıllı sözleşme aracı, sözleşmelerinizi Etherscan'de kolayca doğrulamak için eklentilere sahiptir. Blockscout, Etherscan'in sözleşme doğrulama API'lerini destekler; dolayısıyla bu araçları, bu blok kaşiflerinden herhangi birinin API'lerini kullanarak kullanmak kolaydır. + +| Ağ | Scroll | Scroll Sepolia | +| ---------- | -------------------------------- | ---------------------------------------- | +| Scrollscan | https://api.scrollscan.com/api | https://api-sepolia.scrollscan.com/api | +| Blockscout | https://blockscout.scroll.io/api | https://sepolia-blockscout.scroll.io/api | + + + +### Hardhat + +'hardhat.config.ts'yi Scroll'un RPC'sine ve blok gezgini API'sine işaret edecek şekilde değiştirin. Blockscout için sahte bir "apiKey" değeri gereklidir, ancak bu değer için herhangi bir değer işe yarar. Scrollscan için kendi API anahtarınızı kullanın. + +Örneğin Blockscout'ta Scroll Sepolia kullanıyorsanız yapılandırmanız şu şekilde görünecektir: +```javascript +... + +const config: HardhatUserConfig = { + ... + networks: { + scrollSepolia: { + url: 'https://sepolia-rpc.scroll.io' || '', + accounts: + process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], + }, + }, + etherscan: { + apiKey: { + scrollSepolia: 'abc', + }, + customChains: [ + { + network: 'scrollSepolia', + chainId: 534351, + urls: { + apiURL: 'https://sepolia-blockscout.scroll.io/api', + browserURL: 'https://sepolia-blockscout.scroll.io/', + }, + }, + ], + }, +} + +... +``` + +Artık aşağıdaki komutu çalıştırarak akıllı sözleşmeyi doğrulayabilirsiniz. + +```solidity +npx hardhat verify --network scrollSepolia +``` + +Örneğin, yapıcıda iki uint parametresi alan bir akıllı sözleşme şu şekilde görünmelidir: + +```solidity +npx hardhat verify --network scrollSepolia 0xD9880690bd717189cC3Fbe7B9020F27fae7Ac76F 123 456 +``` + + + +### Foundry + +Foundry'yi kullanırken "verify-contract" komutu sözleşmelerin doğrulanması sürecinin otomatikleştirilmesine yardımcı olur. Sözleşmenizde yapıcı argümanlar varsa, bunları ABI kodlu biçimde `--constructor-args` seçeneğiyle belirtebilirsiniz. Örneğin, kurucunuz iki "uint256" değişkeni alıyorsa: +```bash + --constructor-args $(cast abi-encode "constructor(uint256,uint256)" 0 7) +``` + +Belirleyebileceğiniz diğer seçenekler için [Foundry belgelerine](https://book.getfoundry.sh/reference/forge/forge-verify-contract) bakın. + + +#### Scrollscan + +```bash +forge verify-contract \ + --verifier-url https://api-sepolia.scrollscan.com/api \ + --etherscan-api-key \ + --constructor-args +``` + + +#### Blockscout + +Doğrulama sağlayıcısını "blockscout" olarak belirtin. + +##### Scroll +```bash +forge verify-contract \ + --verifier-url https://blockscout.scroll.io/api\? \ + --verifier blockscout \ + --constructor-args +``` + +##### Scroll Sepolia +```bash +forge verify-contract \ + --verifier-url https://sepolia-blockscout.scroll.io/api\? \ + --verifier blockscout \ + --constructor-args +``` + + \ No newline at end of file diff --git a/src/content/docs/tr/getting-started/overview.md b/src/content/docs/tr/getting-started/overview.md new file mode 100644 index 000000000..644d0a643 --- /dev/null +++ b/src/content/docs/tr/getting-started/overview.md @@ -0,0 +1,39 @@ +--- +section: gettingStarted +date: Last Modified +title: "Scroll'a Genel Bakış" +lang: "tr" +permalink: "docs/conceptual-overview/" +excerpt: "ZK Rollups and Scroll" +whatsnext: { "Kullanıcı kılavuzu": "/tr/user-guide/", "Scroll üzerinde geliştirmek": "/tr/developers/" } +--- + +#### Scroll Dokümantasyonu'na hoş geldiniz! + +Scroll, Ethereum için güvenlik odaklı bir ölçeklenebilirlik çözümüdür; ölçekleme tasarımındaki ve zero knowledge kanıtlarındaki yenilikleri kullanarak Ethereum üzerinde yeni bir katman oluşturmayı hedeflemektedir. Scroll ağı, Ethereum'un tek başına olduğundan daha erişilebilirdir, daha duyarlıdır ve aynı anda daha fazla kullanıcıyı destekleyebilir. Eğer daha önce Ethereum üzerinde bir uygulama kullandıysanız veya geliştirdiyseniz, Scroll'da kendinizi evinizde hissedeceksiniz. + +Scroll'u kullanmadan önce Scroll Sepolia test ağını ücretsiz varlıklarla denemek ister misiniz? [Kullanıcı kılavuzumuza](/tr/user-guide/) göz atın. + +## Scroll ne inşa ediyor? + +Scroll, Ethereum'u ölçeklendirmek için teknoloji geliştiriyor. + +Ethereum, merkeziyetsiz uygulamaları desteklemek konusunda önde gelen blokzinciri ağı olmasına rağmen, popülerliği daha yüksek maliyetleri de beraberinde getiriyor ve bu durum gelecek kullanıcılar ve geliştiriciler için bir engel oluşturuyor. + +Zero knowledge kanıtları alanındaki öncü araştırmalardan yararlanarak, Scroll, Ethereum üzerinde bir Katman 2 rollup ağı inşa ediyor. Ethereum topluluğundaki diğer kişilerle açık kaynaklı işbirliği içinde olan ekip, tıpkı Ethereum gibi davranan ağdaki tüm faaliyetlerin Ethereum üzerindeki akıllı sözleşmelerle güvence altına alınmasına olanak tanıyan bir "zkEVM" oluşturdu. Ağ, tüm işlemleri Ethereum'da yayınlar ve zkEVM, Scroll ağının Ethereum kurallarına uyduğuna dair kriptografik "kanıtlar" oluşturur ve yayınlar. + +Sonuç olarak, Ethereum'daki akıllı sözleşmeler Scroll'daki her işlemin bu kanıtlar için geçerli olduğunu doğrular ve ağı inanılmaz bir güvenliğe, merkeziyetsizliğe ve sansür direncine kavuşturur. Ethereum için bu düzeyde güvenlik ve ölçeklenebilirlik yalnızca zero knowledge kriptografisi, blokzincir protokol tasarımı ve donanım hızlandırmadaki son gelişmelerle mümkün olabilir. + +Daha fazla bilgi için mimarimiz hakkında bilgi almak için [Scroll Mimarisi](/tr/technology/) sayfasına bakın. + +## Scroll'u şu anda kullanabilir miyim? + +Scroll ana ağı Ethereum üzerinde aktif! Ayrıca, Ethereum Sepolia üzerinde çalışan Scroll Sepolia test ağımız da bulunuyor. [Kapsamlı bir kılavuzumuz](/tr/user-guide/) olsa da, Ethereum'u kullanmaya aşina iseniz, birkaç dakika içinde başlayabilirsiniz: + +- [Köprü](https://scroll.io/bridge) sayfamızı veya [Scroll Sepolia Köprüsü](https://sepolia.scroll.io/bridge) sayfamızı ziyaret edin ve cüzdanınızı bağlayın. +- Ethereum ana ağından Scroll'a token gönderin. (veya bir Scroll Sepolia [musluğu](/tr/user-guide/faucet) kullanın) +- Scroll Sepolia test ağı dApp'lerini deneyin, örneğin [Uniswap Vitrini](http://uniswap-showcase.sepolia.scroll.xyz/) veya [Aave](https://app.aave.com/) -- Scroll Sepolia Ağı'nı seçtiğinizden emin olun! + +## Scroll ne yönde ilerliyor? + +Scroll ana ağımızı Ethereum üzerinde yayınladık, ancak hala daha yapılacak çok iş buluyor. Sırada yığının her bileşenini merkeziyetsizleştirmek var. Güncel kalmak için [bloğumuza](https://scroll.io/blog) göz atın, [Discord](https://discord.gg/scroll) veya [Twitter](https://twitter.com/scroll_zkp) hesaplarımızı takip edin. diff --git a/src/content/docs/tr/learn/index.mdx b/src/content/docs/tr/learn/index.mdx new file mode 100644 index 000000000..e1adb6972 --- /dev/null +++ b/src/content/docs/tr/learn/index.mdx @@ -0,0 +1,30 @@ +--- +section: learn +title: "Öğren" +lang: "tr" +permalink: "learn/" +excerpt: "Ethereum ölçeklenebilirliği ve zero knowledge kanıtları hakkında daha fazlasını öğrenin." +--- + +import NavCard from "../../../../components/NavCard.astro" +import TechnologySvg from "../../../../assets/svgs/home/home-technology.svg?raw" +import LearnSvg from "../../../../assets/svgs/home/home-learn.svg?raw" + +Scroll, blokzincir protokolleri ve zero knowledge kriptografisinden araştırma ve mühendislik çalışmalarını bir araya getiriyor. Daha derinlemesine bilgi için okumaya devam edin ve ek kaynaklara göz atın. + +Belirli bir konunun da ele alınmasını mı istiyorsunuz? Github repo'muzda bir [issue](https://github.com/scroll-tech/scroll-documentation/issues/new?assignees=&labels=new+content%2Ctriage&projects=&template=new_content.yml&title=%5BNew+Content%5D%3A+%3Cyour-title-here%3E) oluşturun. + + diff --git a/src/content/docs/tr/learn/intro-to-rollups.md b/src/content/docs/tr/learn/intro-to-rollups.md new file mode 100644 index 000000000..91e13c157 --- /dev/null +++ b/src/content/docs/tr/learn/intro-to-rollups.md @@ -0,0 +1,51 @@ +--- +section: learn +date: Last Modified +title: "Rollup'lara Giriş" +lang: "tr" +permalink: "learn/intro-to-rollups" +excerpt: "Rolluplar, Ethereum ekosistemindeki en yaygın ikinci katman ölçekleme çözümüdür." +whatsnext: { "Scroll Rollup Süreci": "/tr/technology/chain/rollup" } +--- + +## Rollup nedir? + +Rolluplar, Ethereum ekosistemindeki en yaygın katman 2 ölçeklenme çözümüdür ve Ethereum yol haritasının [merkezi bir parçası](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) olarak görülmektedir. + +Bir rollup, işlem gruplarını zincir dışında işler (yani katman 1'de değil) ve ardından ortaya çıkan verileri zincir üstünde yayınlar (yani katman 1'de). + +Her işlemin yürütülmesi zincir-dışı olarak gerçekleştirilir ve bu işlemlerin katman 1 düğümleri tarafından yeniden yürütülmesi gerekmez. Bu da, katman 1'in merkeziyetsizini etkilemeden yüksek işlem hızına olanak tanır. + +Bir rollup'un güvenli olması için, zincir-dışı hesaplamanın (işlemlerin işlenmesi) doğru bir şekilde gerçekleştirildiğini kanıtlaması gerekir. Zincir dışı hesaplamanın geçerliliğini kanıtlamanın iki temel mekanizması vardır: geçerlilik kanıtları(validity proofs) ve dolandırıcılık kanıtları(fraud proofs). + +## Optimistic rollup nedir? + +Bir optimistic rollup, yaptığı hesaplamaların geçerliliğini savunmak için dolandırıcılık kanıtlarını kullanan bir rollup'tır. + +Dolandırıcılık kanıtları, kullanıcıların L2'de gerçekleştirilen herhangi bir hesaplamanın geçersizliğini sorgulamasına ve kanıtlamasına olanak tanıyan bir mekanizmadır. Bir dolandırıcılık kanıtı başarıyla gönderildiğinde, L2 bir önceki bir duruma geri döndürülebilir ve geçersiz hesaplama düzeltilebilir. Dolandırıcılık kanıtları, en az bir dürüst tarafın L2 işlemlerinin doğru bir şekilde yürütüldüğünü kontrol etmesine dayanır. + +## ZK rollup nedir? + +Bir ZK rollup, yaptığı hesaplamaların geçerliliğini savunmak için geçerlilik kanıtlarını kullanan bir rollup'tır. + +Bir ZK rollup, bir işlem grubunu yürüttüğünde ve sonucu L1'e gönderdiğinde, aynı zamanda bir geçerlilik kanıtı da gönderir. Bu matematiksel kanıt, sonuç ile işlem grubunun doğru bir şekilde yürütülmesiyle ortaya çıkan durumun, aynı olduğunu kanıtlar. + +Bugünlerde birden çok türde ZK rollup bulunuyor, bunlar genel olarak zkVM'ler (zk Sanal Makineler) veya zkEVM'ler (zk Ethereum Sanal Makineleri) olarak tanımlanıyor. + +zkVM'ler, ZK devreleriyle iyi çalışacak şekilde temelden tasarlanmıştır ve bir zkEVM'e kıyasla farklı geliştirme iş akışları gerektirir. Bunlara örnek olarak Starkware ve Aztec verilebilir. + +zkEVM'ler, EVM'i taklit etmek üzere tasarlanmıştır. İki ana türü vardır: bytecode uyumlu ve dil uyumlu. Bytecode uyumlu zkEVM'ler, EVM'i çok düşük seviyede taklit eder ve Ethereum Katman 1'e kıyasla neredeyse aynı geliştirme ve kullanıcı deneyimi sağlar. Dil uyumlu zkEVM'ler, Solidity ve diğer yüksek seviye dilleri farklı bytecode'lara derler; bu da iş akışında değişikliklere neden olabilir. zkSync, en popüler dil uyumlu zkEVM'dir. + +Scroll, bytecode uyumlu bir yapıya sahiptir. Bu yaklaşımın seçilmesinin bazı faydaları vardır: + +- Solidity, Vyper ve Huff doğrudan kullanıma hazır. +- Yeniden kod denetimine gerek yok +- Varolan geliştirme araçlarının çoğu devralınır +- Ethereum ile neredeyse aynı kullanıcı deneyimi ve geliştirici deneyimi sağlar + +Scroll'un yaklaşımına ilişkin daha fazla ayrıntı Teknoloji bölümünde bulunabilir. + +## Daha fazla okumak için + +- [Rollup'lar Hakkında Eksik Bir Kılavuz](https://vitalik.ca/general/2021/01/05/rollup.html) - Vitalik Buterin +- [Ölçeklenme](https://ethereum.org/en/developers/docs/scaling/) - Ethereum Dokümanları diff --git a/src/content/docs/tr/learn/the-scalability-problem.md b/src/content/docs/tr/learn/the-scalability-problem.md new file mode 100644 index 000000000..2ad2bb976 --- /dev/null +++ b/src/content/docs/tr/learn/the-scalability-problem.md @@ -0,0 +1,27 @@ +--- +section: learn +date: Last Modified +title: "Ölçeklenebilirlik Sorunu" +lang: "tr" +permalink: "learn/intro-to-rollups" +excerpt: "Ethereum'ın güçlü merkeziyetsizliği ve güvenliği, ölçeklenebilirliğini feda etmesiyle sağlanır: Katılan tüm düğümlerin ağa ayak uydurabilmesini sağlamak için ağın işlem kapasitesi sınırlıdır. Bu sınır sonuçta kullanıcılar için daha yüksek maliyetlere ve gecikmelere neden olur." +whatsnext: { "Rollup'lara Giriş": "/tr/learn/intro-to-rollups" } +--- + +## Ethereum’un ölçeklenme sorunu + +[Ethereum](https://ethereum.org/en/developers/docs/intro-to-ethereum/#what-is-ethereum) genel amaçlı bir blokzincirdir ve [akıllı kontratların](https://ethereum.org/en/developers/docs/intro-to-ethereum/#what-are-smart-contracts) dağıtımını ve yürütülmesini destekler. + +Ethereum'un tanımlayıcı özelliklerinden biri, güvenliğe ve merkeziyetsizliğe olan sarsılmaz bağlılığıdır. Ethereum, dünyanın her yerindeki bilgisayarların ([Raspberry Pi](https://ethereum-on-arm-documentation.readthedocs.io/) gibi ucuz bilgisayarların bile) ağa katılarak, blokzincirin yerel kopyalarını çalıştırabilecek ve yeni işlemleri işleyebilecek şekilde tasarlanmıştır. + +Ancak Ethereum'un güçlü merkeziyetsizliği ve güvenliği, ölçeklenebilirlikten ödün verme pahasına gelir: katılan tüm düğümlerin ağa ayak uydurabilmesini sağlamak için ağın verimi sınırlıdır. Bu durum, kullanıcılar için daha yüksek maliyetler ve gecikmeler anlamına gelir. + +## Ölçeklenme çözümleri + +Ethereum'un ölçeklenme çözümleri, merkeziyetsizlikten veya güvenlikten ödün vermeden ağın verimini artırmayı amaçlıyor. + +Ana olarak iki tür ölçeklenme çözümü vardır: katman 1 ölçeklenme çözümleri ve katman 2 ölçeklenme çözümleri. + +**Katman 1** (veya **L1**) ölçeklenme çözümleri, doğrudan Ethereum blokzincirinde değişiklikler yaparak ağı ölçeklendirmeye çalışır. Buradaki “katman 1” terimi ana Ethereum blokzincirini ifade etmektedir. Genel olarak, verimi artıran ve aynı zamanda yüksek düzeyde güvenlik ve merkeziyetsizliği koruyan katman 1 ölçeklenme çözümlerini tasarlamak çok zordur. Bu nedenle son zamanlardaki ölçeklenme çabaları 1. katman çözümlerinden 2. katman çözümlerine doğru kaymıştır. + +**Katman 2** (veya **L2**) ölçeklenme çözümleri, Ethereum katman 1'in **üstünde** yaşayan ağlardır; bunlar esasen, temeldeki Ethereum blokzincirine bir şekilde "sabitlenmiş" ayrı blokzincirlerdir. Bu katman 2 ağları, aynı sınırlamalara tabi olmadıkları için genellikle işlemleri temel katman 1 ağından daha yüksek bir hızda işleyebilir. "Sabitleme" mekanizmasının özellikleri çeşitli katman 2'ler arasında farklılık gösterebilir. Bu mekanizma, katman 2 ağının, Ethereum katman 1'in güçlü güvenlik ve merkeziyetsiz özelliklerini miras almasını sağlar. diff --git a/src/content/docs/tr/learn/zero-knowledge/additional-zk-learning-resources.md b/src/content/docs/tr/learn/zero-knowledge/additional-zk-learning-resources.md new file mode 100644 index 000000000..2c8022e1a --- /dev/null +++ b/src/content/docs/tr/learn/zero-knowledge/additional-zk-learning-resources.md @@ -0,0 +1,26 @@ +--- +section: learn +date: Last Modified +title: "Ek ZK Öğrenme Kaynakları" +lang: "tr" +permalink: "learn/zero-knowledge/additional-zk-learning-resources" +excerpt: "ZK'nin derinliklerine dalmak mı istiyorsunuz? İşte favori kaynaklarımızdan bazıları." +--- + +ZK'nin derinliklerine dalmak mı istiyorsunuz? İşte favori kaynaklarımızdan bazıları. + +## Video + +- [ZK Beyaz Tahta Oturumları](https://youtube.com/playlist?list=PLj80z0cJm8QErn3akRcqvxUsyXWC81OGq) + - Bu beyaz tahta oturumları ZK hakkında bilgi edinmek için harika bir yoldur. Dan Boneh'in ilk üç dersi, sonraki derslerin üzerine inşa edildiği, daha yeni gelişmeleri tartışan harika bir temel anlayış sağlıyor. +- [Zero Knowledge Kanıtı MOOC](https://youtube.com/playlist?list=PLS01nW3Rtgor_yJmQsGBZAg5XM4TSGpPs) + - İlk prensiplerden modern endüstri konularına kadar zero knowledge kanıtlarını kapsayan bir MOOC(Massive Open Online Courses). +- [9. BIU Kriptografi Kış Okulu - Zero Knowledge](https://youtube.com/playlist?list=PL8Vt-7cSFnw29cLUVqAIuMlg1QJ-szV0K) + - Bu dersler zero knowledge'ın teorik temellerini oluşturur; akademisyenleri ve matematiksel olgunluğa sahip izleyicileri hedefler. +- [ZK Sempozyumu](https://www.youtube.com/playlist?list=PLrzRr7okCcmbAlgYpuFjzUJv8tAyowDQY) + - Zero knowledge alanındaki en iyi araştırmacıların ve ürün geliştiricilerin bazılarının uygulamalı ve teorik sunumlarının bir karışımı. + +## Yazı + +- [Kanıtlar, Argümanlar ve Zero Knowledge](https://people.cs.georgetown.edu/jthaler/ProofsArgsAndZK.html) - Justin Thaler + - Zero knowledge teorisi üzerine kapsamlı bir ders kitabı. diff --git a/src/content/docs/tr/learn/zero-knowledge/introduction-to-zero-knowledge.mdx b/src/content/docs/tr/learn/zero-knowledge/introduction-to-zero-knowledge.mdx new file mode 100644 index 000000000..2404d5d48 --- /dev/null +++ b/src/content/docs/tr/learn/zero-knowledge/introduction-to-zero-knowledge.mdx @@ -0,0 +1,73 @@ +--- +section: learn +date: Last Modified +title: "Zero Knowledge'a Giriş" +lang: "en" +permalink: "learn/zero-knowledge/introduction-to-zero-knowledge" +whatsnext: { "Polynomial Commitment Schemes": "/learn/zero-knowledge/polynomial-commitment-schemes" } +excerpt: 'Over the past decade, a field of cryptography called "zero knowledge" has been rapidly advancing. It promises new ways to build applications and enables protocols to increase efficiency, security, and privacy.' +--- + +import Aside from "../../../../../components/Aside.astro" + +Son on yılda, "zero knowledge" olarak adlandırılan kriptografi alanı hızla ilerlemektedir. Zero knowledge, uygulama oluşturmanın yeni yollarını vaat ediyor ve protokollerin verimliliği, güvenliği ve gizliliği artırmasını sağlıyor. + +Zero knowledge kanıtları alanını bu kadar heyecan verici kılan şeyin ne olduğuna ve mühendislerin hangi sorunları çözmesine yardımcı olduğuna bakalım. + +## Güven Gerektirmeyen Blokzincirler ve Doğrulanabilirlik + +Blokzincirler genellikle kullanıcılar tarafından gönderilen işlemleri işleyerek çalışır. Bu işlemler genellikle blokzincirin gerçekleştirmesi için bazı hesaplamaları tetikler. + +Blokzincirin güven gerektirmemesi (yani bireysel bir tarafa güvenmeye bağlı olmaması) için ağdaki katılımcıların işlemlerin geçerli olduğunu ve sonuçta ortaya çıkan hesaplamaların doğru şekilde yapıldığını doğrulaması gerekir. + +İşlemin geçerli olduğunu doğrulamak için genellikle dijital imza doğrulaması gerekir; bu, işlemin bildirilen göndericisinin gerçekten işlemin yazarı olduğunu doğrular. Bir işlemin hesaplamasının doğru bir şekilde gerçekleştirildiğinin doğrulanması genellikle işlemin yerel olarak yeniden yürütülmesini gerektirir. + +## Doğrulanabilirliğe İlişkin Sınırlamalar + +Her bir işlemi doğrulamaya yönelik bu metodoloji, bir katılımcının hesaplamayı yeniden çalıştıramadığı durumlarda bozulur. Bir katılımcı birkaç nedenden dolayı hesaplamayı yeniden gerçekleştiremeyebilir: (1) belirli verilerin kullanıma sunulmaması gerekebilir (gizlilik nedenleriyle) veya (2) belirli bir veri için çok pahalı olabilir. Katılımcı bilgisayarın tüm işlemleri yeniden yürütmesi - bu ikinci neden, özellikle saniyede çok sayıda işlem gerçekleştiren yüksek verimli blokzincirler söz konusu olduğunda geçerlidir. + +## Zero Knowledge Kanıtlarının Gücü + +Zero knowledge kanıtları (ZKP'ler) bu sınırlamaların üstesinden gelme gücüne sahiptir. + +ZKP'ler, (1) hesaplamada kullanılan hassas verilerin gizliliğini korurken ve (2) doğrulamanın, hesaplamanın yeniden yürütülmesinden önemli ölçüde daha ucuz olmasını sağlayarak katılımcıların bir hesaplamanın sonuçlarını doğrulamasına olanak tanır. ZKP'lerin bu iki özelliğine sırasıyla **zero knowledge** ve **özlülük** denir. + +ZKP'lerin yukarıdaki özellikleri, güven gerektirmeyen blokzincirlerin doğrulanabilirliği bağlamında son derece faydalıdır. ZKP'ler olmadan katılımcıların her işlemin sonuç hesaplamasını yeniden yürütmesi gerekir. Bu, tüm katılımcıların her hesaplamada kullanılan tüm (potansiyel olarak hassas) verileri görmesini gerektirir ve aynı zamanda tüm sistemin verimini de sınırlar. ZKP'lerle bir taraf hesaplamayı gerçekleştirebilir ve ardından hesaplamanın doğru yapıldığına dair bir kanıt oluşturabilir. Diğer katılımcılar, hesaplamayı kendileri yeniden yürütmek yerine, _kanıtın geçerli olduğunu doğrulayarak_ hesaplamanın doğru şekilde yapıldığını doğrulayabilirler. Kanıtın doğrulanması (1) orijinal hesaplamada kullanılan hassas veriler hakkında bilgi sızdırmaz ve (2) hesaplama açısından orijinal hesaplamanın tekrar gerçekleştirilmesinden büyük oranda daha ucuzdur. Bu iki özellik, güven gerektirmeyen blokzincirler için gizlilik ve ölçeklenebilirlik sağlama potansiyeline sahiptir. + +## Devreler, Kanıtlar ve Doğrulayıcılar + +Pratikte ZKP'lerin bir sisteme uygulanması oldukça karmaşık olabilir, ancak yüksek düzeyde zero knowledge kanıtlarının birkaç bileşene sahip olduğunu anlamak isteyeceksiniz: bir devre, bir kanıt ve bir doğrulayıcı. + +Devre, giriş verilerini alan ve giriş verilerinin karşılaması gereken bazı "kısıtlamalara" göre giriş verilerinin geçerli olduğunu ileri süren bir programdır. Giriş verileri genel (herkes tarafından bilinir), özel (yalnızca kanıtlayan tarafından bilinir) veya karışık (bazı girişler genel, bazıları özel) olabilir. + +Bir girişin devreyi karşıladığını iddia eden bir kanıt üretilebilir. Kanıt, özel girdiler hakkında hiçbir bilgi ortaya çıkarmaz ve boyutu oldukça küçüktür. + +Doğrulayıcı, (1) kanıtın geçerli olup olmadığını, (2) kanıtın devre tarafından ortaya konan kısıtlamalarla eşleştiğini (ve sadece sahte bir kanıt olmadığını) ve (3) kanıtı oluşturmak için kullanılan genel girdilerin denetleyici tarafından kullanılanlarla eşleştiğini kontrol edebilir. Kanıt, doğrulayıcı tarafından kullanılanlarla eşleşir. Doğrulayıcı tarafından gerçekleştirilen bu kontrolün genellikle ucuz bir hesaplama olduğunu unutmayın. + + + +### Devreler, Kanıt ve Doğrulayıcılar — bir örnek + +Örnek olarak Sudoku'yu ele alalım. Diyelim ki bir Sudoku bulmacası var ve Alice Bob'a bulmacanın çözümünü bildiğini kanıtlamak istiyor ancak çözümün ne olduğunu açıklamak istemiyor. + +Bu durumda, söz konusu bulmaca genel bir girdi olacaktır (hem Alice hem de Bob bunu biliyor) ve çözüm de özel bir girdi olacaktır (Alice bunu biliyor ancak bunu Bob'tan gizli tutacak). **Devre** bu girdilerin her ikisini de alır ve çözümü standart yöntemle, satır satır, sütun sütun vb. kontrol ederek çözümün doğru olduğunu iddia eder. Bu devre, özel girdi çözümünün gerçekten genel girdi bulmacası için geçerli bir çözüm olduğunu "kısıtlar" ve yalnızca çözüm kontrolü geçtiğinde yalnızca "doğrulanır". + +Daha sonra Alice'in belirli bir bulmaca için devreyi karşılayan bir girdiyi (genel girdi) bildiğini belirten bir **kanıt** oluşturulabilir. + +Kanıt, bulmacayla birlikte Bob'a iletilebilir; o da daha sonra kanıtın geçerli olup olmadığını değerlendirmek için Sudoku kontrol devresine karşılık gelen bir **doğrulayıcı** kullanabilir ve böylece Alice gerçekten bulmacanın çözümünü bilir. . İşin kritik tarafı Bob, Alice'in çözümü hakkında herhangi bir bilgi sahibi değil ama yine de Alice'in geçerli bir çözüm bildiğini doğrulayabiliyor! + +## Zero Knowledge Kanıtları ve Blokzincirler + +ZKP'lerdeki son gelişmelerin temel motivasyonlarından biri, bunun blokzincirlere uygulanmasıdır. Merkezi olmayan blokzincirlerin karşılaştığı en önemli zorluklardan ikisi gizlilik ve ölçeklenebilirliktir; tüm veriler halka açıktır ve ağdaki her düğüm, ağdaki her hesaplamayı yeniden çalıştırmak zorundadır. ZKP'ler bu iki zorluğun da çözülmesine yardımcı olabilir. + +Gizliliği koruyan uygulamalar oluşturmak için ZKP'lerin zero knowledge özelliğini kullanan çeşitli projeler olsa da, biz Scroll olarak Ethereum'u ölçeklendirmek için ZKP'lerin yalnızca kısa ve öz özelliğini kullanıyoruz. + +## Scroll ve Zero Knowledge Kanıtları + +Scroll'a güç veren fikir oldukça basit. Peki ya Ethereum'un başka bir versiyonunun tüm hesaplamalarını doğrulamak için bir Ethereum akıllı sözleşmesi kullanabilseydik? Ethereum Sanal Makinesine ("EVM") daha hızlı ve daha ucuz erişim sağlayan başka bir ağ çalıştırabiliriz ve Ethereum'un kendisi de tüm hesaplamaların doğrulanması ve bu diğer ağın EVM kurallarını ihlal etmediğinden emin olmak için gereken güvenliği sağlayacaktır. + +Öğrenme ve Teknoloji bölümlerinin geri kalanı bunun nasıl çalıştığını daha ayrıntılı olarak ele alıyor ancak basit bir düzeyde, zero knowledge'ın bir devre, kanıt ve doğrulayıcıya sahip olmaya bağlı olduğunu unutmayın. + +Bizim yapımızda, devre (aslında bir devreler kümesi), zincir durumuna göre girdi işlemlerinin işlenmesi için kabul edilebilir davranışı "kısıtlamak" amacıyla EVM kurallarını kodlar. Bu "zkEVM"yi kullanan bir GPU ağı, işlemleri bir dizi blok için alır ve bir kanıt oluşturur. Ethereum'a dönersek, akıllı bir sözleşme, bir dizi işlem için bu kanıtın akıllı sözleşmede yer alan devreyle eşleştiğini doğrular. Eğer öyleyse, bu işlemler "kesinleşmiş" olarak değerlendirilebilir, ağ ileriye doğru hareket eder ve biz de Ethereum'u büyütmek için hızlı, güvenli ve uygun fiyatlı blok alanı yaratmış oluruz. \ No newline at end of file diff --git a/src/content/docs/tr/learn/zero-knowledge/kzg-commitment-scheme.md b/src/content/docs/tr/learn/zero-knowledge/kzg-commitment-scheme.md new file mode 100644 index 000000000..4ecd927ce --- /dev/null +++ b/src/content/docs/tr/learn/zero-knowledge/kzg-commitment-scheme.md @@ -0,0 +1,70 @@ +--- +section: learn +date: Last Modified +title: "KZG Taahhüt Şeması" +lang: "tr" +permalink: "learn/zero-knowledge/kzg-commitment-scheme" +excerpt: "KZG, Ethereum'un Proto-Danksharding'inde kullanılır ve ayrıca Scroll'un kanıt sisteminde de kullanılır. Bu makale KZG taahhüt planına genel bir bakış sunacaktır." +whatsnext: { "Ek Kaynaklar": "/tr/learn/zero-knowledge/additional-zk-learning-resources" } +--- + +En yaygın kullanılan polinom taahhüt planlarından biri KZG taahhüt şemasıdır. Plan ilk olarak 2010 yılında Kate, Zaverucha ve Goldberg tarafından [yayınlanmıştır](https://www.iacr.org/archive/asiacrypt2010/6477178/6477178.pdf). + +KZG, Ethereum'un [Proto-Danksharding'inde](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) ve ayrıca Scroll'un kanıt sisteminde kullanılır. + +Bu makale KZG taahhüt planına genel bir bakış sunacaktır. + +## Ön bilgiler ve notasyon + +Polinom taahhüt şemalarının önermesini hatırlayın. Taahhüt etmek istediğimiz bazı $P(x)$ polinomumuz var. Polinomun derecesinin $l$'dan küçük olduğunu varsayacağız. + +KZG taahhütleri [eliptik eğri eşleştirmelerine](https://vitalik.ca/general/2017/01/14/exploring_ecp.html) dayanmaktadır. $\mathbb{G}_1$ ve $\mathbb{G}_2$ $p$ düzeyinde iki eliptik eğri grubu olsun ve önemsiz olmayan bir [çift doğrusal eşleme](https://en.wikipedia.org/wiki/Bilinear_map) olsun. $e: \mathbb{G}_1 \times \mathbb{G}_2 \rightarrow \mathbb{G}_T$. $g$, $\mathbb{G}_1$ oluşturucusu olsun ve $h$, $\mathbb{G}_2$ oluşturucusu olsun. $[x]_1 := x \cdot g$ ve $[x]_2 := x \cdot h$ gösterimini kullanacağız, burada $x \in \mathbb{F}_p$. + +## 1. Güvenilir kurulum + +Herhangi bir KZG taahhüdünü hesaplamadan önce tek seferlik güvenilir kurulum gerçekleştirilmelidir. Güvenilir kurulum tamamlandıktan sonra, istenildiği kadar farklı polinomun kaydedilmesi ve ortaya çıkarılması için yeniden kullanılabilir. Güvenilir kurulum şu şekilde çalışır: + +- Rastgele bir alan öğesi seçin $\tau \in \mathbb{F}_p$ +- $l \in \mathbb{Z}$ taahhüt etmek istediğimiz polinomların maksimum derecesi olsun + - Güvenilir kurulum yalnızca $\leq l$ derecesindeki polinomlara yönelik taahhütleri etkinleştirir +- $([\tau^0]_1,[\tau^1]_1,[\tau^{2}]_1\ldots,[\tau^{l}]_1)$ ve $([\tau]_2)$ hesaplayın ve bu değerleri herkese açık olarak yayınlayın. + +$\tau$'ın açıklanmaması gerektiğini unutmayın; bu, kurulumun gizli bir parametresidir ve güvenilir kurulum töreni tamamlandıktan sonra kimsenin değerini anlayamaması için atılmalıdır. + +[Çok taraflı hesaplamayı](https://en.wikipedia.org/wiki/Secure_multi-party_computation) (MPC) kullanarak, zayıf güven varsayımlarıyla (N'den 1'i güven varsayımı) güvenilir kurulum törenleri yürütmenin yerleşik yöntemleri vardır. Güvenilir kurulumların nasıl çalıştığı hakkında daha fazla bilgi için Vitalik'in bu [yazısına](https://vitalik.ca/general/2022/03/14/trustedsetup.html) bakın. + +## 2. Bir polinoma bağlı kalmak + +- Bir $P(x) = \sum_{i=0}^{l} p_i x^i$ polinomu verildiğinde +- Taahhüdü hesaplayın ve çıktısını alın $c = [P(\tau)]_1$ + - Her ne kadar taahhüt eden $P(\tau)$'ı doğrudan hesaplayamasa da ($\tau$'ı bilmediğinden), güvenilir kurulumun çıktısını kullanarak bunu hesaplayabilir: + - $[P(\tau)]_1 = [\sum_{i=0}^{l} p*i \tau^i]\_1 = \sum*{i=0}^{l} p_i [\tau^i]\_1$ + +## 3. Bir değerlendirmeyi kanıtlayın + +- Bir değerlendirme verildiğinde $P(a) = b$ +- $\pi = [Q(\tau)]_1$ kanıtını hesaplayın ve çıktısını alın + - Burada $Q(x) := \frac{P(x)-b}{x-a}$ + - Buna “bölüm polinomu” denir. Böyle bir $Q(x)$'ın ancak ve ancak $P(a) = b$ olması durumunda var olduğuna dikkat edin. Dolayısıyla bu bölüm polinomunun varlığı değerlendirmenin bir kanıtıdır. + +## 4. Değerlendirme kanıtını doğrulayın + +- $c = [P(\tau)]_1$ taahhüdü, $P(a) = b$ değerlendirmesi ve $\pi = [Q(\tau)]_1$ kanıtı verildiğinde +- $e(\pi, [\tau - a]_2) = e(c - [b]_1, h)$ olduğunu doğrulayın + - Bazı cebir çalışmaları bunun, bölüm polinomunun $\tau$'da doğru şekilde oluşturulduğunu kontrol etmeye eşdeğer olduğunu gösterir: $Q(\tau) = \frac{P(\tau) -b}{\tau-a}$ + $$ + \begin{align*} + & e(\pi, [\tau - a]_2) = e(c - [b]_1, h) \\ \iff + & e([Q(\tau)]_1, [\tau -a]_2) = e([P(\tau)]_1 - [b]_1, h) \\ \iff + & Q(\tau) \cdot (\tau - a) \cdot e(g, h) = (P(\tau)-b) \cdot e(g,h) \\ \iff + & Q(\tau) \cdot (\tau -a) = P(\tau) - b + \end{align*} + $$ + - Çift doğrusal eşleme $e$, gizli kurulum parametresi $\tau$'ı bilmeden bu özelliği kontrol etmemizi sağlar. +- Bu doğrulama tamamlandıktan sonra, bölüm polinomunun doğru şekilde oluşturulduğu ve dolayısıyla değerlendirmenin (çok yüksek olasılıkla) doğru olduğu sonucuna varabiliriz. + +## Daha fazla bilgi edin + +- [https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html](https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html) +- [https://alinush.github.io/2020/05/06/kzg-polynomial-commitments.html](https://alinush.github.io/2020/05/06/kzg-polynomial-commitments.html) +- [https://www.iacr.org/archive/asiacrypt2010/6477178/6477178.pdf](https://www.iacr.org/archive/asiacrypt2010/6477178/6477178.pdf) diff --git a/src/content/docs/tr/learn/zero-knowledge/polynomial-commitment-schemes.md b/src/content/docs/tr/learn/zero-knowledge/polynomial-commitment-schemes.md new file mode 100644 index 000000000..54523a174 --- /dev/null +++ b/src/content/docs/tr/learn/zero-knowledge/polynomial-commitment-schemes.md @@ -0,0 +1,35 @@ +--- +section: learn +date: Last Modified +title: "Polinom Taahhüt Şemaları" +lang: "tr" +permalink: "learn/zero-knowledge/polynomial-commitment-schemes" +excerpt: "Polinom taahhüt şemaları zero knowledge kanıt sisteminin temel yapı taşıdır" +whatsnext: { "KZG Taahhüt Şeması": "/tr/learn/zero-knowledge/kzg-commitment-scheme" } +--- + +Polinom taahhüt şemaları, zero knowledge kanıtlama sistemlerinin (ve diğer şifreleme protokollerinin) temel yapı taşıdır. + +Adından da anlaşılacağı gibi polinom taahhüt şemaları, taahhüt edilecek nesnenin bir polinom olduğu taahhüt şemalarıdır. Bu şemaların ayrıca polinomun değerlendirmesinin yalnızca polinomun taahhüdüne erişimle doğrulanabileceği özel bir özelliği vardır. + +## Taahhüt planları + +**[Taahhüt şeması](https://en.wikipedia.org/wiki/Commitment_scheme)** iki tarafı içeren bir kriptografik ilkeldir: _committer_ ve _verifier_. Taahhüt eden kişi, $c$ taahhüdünü hesaplayıp bunu doğrulayıcıya açıklayarak $v$ değerini taahhüt eder. Daha sonraki bir zamanda taahhüt eden kişi orijinal değeri ortaya çıkarabilir ve doğrulayıcı da taahhüdün bu açıklanan değere karşılık geldiğini doğrulayabilir. + +Güvenli taahhüt planlarının iki özelliği vardır: + +1. **Bağlayıcı olma**: $c$ taahhüdünü yayınladıktan sonra, taahhüt eden kişi $v$'den farklı olan ve aynı zamanda $c$'ye karşılık gelen başka bir $v'$ değeri bulamamalıdır. Yani, $c$ taahhüdü, taahhüt edeni orijinal $v$ değerine bağlar. +2. **Gizleme**: Doğrulayıcı, $c$ taahhüdünden orijinal $v$ değeri hakkında herhangi bir bilgi öğrenememelidir. Yani, $c$ taahhüdü, orijinal $v$ değeri hakkındaki tüm bilgileri gizler. + +## Polinom taahhüt şemaları + +**Polinom taahhüt şeması**, taahhüt eden kişinin $c$ taahhüdünü hesaplayarak $P(x)$ polinomunu taahhüt ettiği bir taahhüt şemasıdır. Normal taahhüt planlarında olduğu gibi, taahhüt eden kişi daha sonra orijinal polinomu ortaya çıkarabilir ve doğrulayıcı, taahhüdün ortaya çıkan polinoma karşılık gelip gelmediğini kontrol edebilir. Bununla birlikte, polinom taahhüt şemalarının ek bir özelliği vardır: taahhüt eden, polinomun kendisini açıklamadan taahhüt edilen polinomun belirli değerlendirmelerini kanıtlayabilir. Örneğin, taahhüt eden $P(a) = b$ olduğunu kanıtlayabilir ve doğrulayıcı böyle bir kanıtı yalnızca $c$ taahhüdünü kullanarak doğrulayabilir. + +Polinom taahhüt şemaları zero knowledge uygulamaları için son derece faydalıdır. Bir kanıtlayıcı, temeldeki polinomu açıklamadan, belirli özellikleri (örneğin, belirli bir $(a,b)$ noktasından geçtiğini) karşılayan bazı polinomları bildiğini kanıtlamak için böyle bir şema kullanabilir. + +Polinom şemalarının faydalı olmasının bir başka nedeni de, $c$ taahhüdünün genellikle temsil ettiği polinomdan çok daha küçük olmasıdır ve dolayısıyla $P(x)$ polinomunun **sıkıştırılması** olarak düşünülebilir. Sıkıştırmanın büyüklüğü özel şemaya bağlıdır. Örneğin, KZG polinom taahhüt şemasında, keyfi derecede büyük dereceli bir polinom, tek bir grup elemanından oluşan bir taahhüt halinde sıkıştırılabilir. + +## Daha fazla bilgi edin + +- [https://en.wikipedia.org/wiki/Commitment_scheme](https://en.wikipedia.org/wiki/Commitment_scheme) +- [https://learn.0xparc.org/materials/halo2/miscellaneous/polynomial-commitment](https://learn.0xparc.org/materials/halo2/miscellaneous/polynomial-commitment) diff --git a/src/content/docs/tr/technology/_images/L1-to-L2.png b/src/content/docs/tr/technology/_images/L1-to-L2.png new file mode 100644 index 000000000..89d140909 Binary files /dev/null and b/src/content/docs/tr/technology/_images/L1-to-L2.png differ diff --git a/src/content/docs/tr/technology/_images/L2-to-L1.png b/src/content/docs/tr/technology/_images/L2-to-L1.png new file mode 100644 index 000000000..0e8cbbf87 Binary files /dev/null and b/src/content/docs/tr/technology/_images/L2-to-L1.png differ diff --git a/src/content/docs/tr/technology/_images/arch.png b/src/content/docs/tr/technology/_images/arch.png new file mode 100644 index 000000000..7c0b2db02 Binary files /dev/null and b/src/content/docs/tr/technology/_images/arch.png differ diff --git a/src/content/docs/tr/technology/_images/batching.png b/src/content/docs/tr/technology/_images/batching.png new file mode 100644 index 000000000..a101859bb Binary files /dev/null and b/src/content/docs/tr/technology/_images/batching.png differ diff --git a/src/content/docs/tr/technology/_images/deposit.png b/src/content/docs/tr/technology/_images/deposit.png new file mode 100644 index 000000000..1ba61ec9c Binary files /dev/null and b/src/content/docs/tr/technology/_images/deposit.png differ diff --git a/src/content/docs/tr/technology/_images/rollup.png b/src/content/docs/tr/technology/_images/rollup.png new file mode 100644 index 000000000..345826c28 Binary files /dev/null and b/src/content/docs/tr/technology/_images/rollup.png differ diff --git a/src/content/docs/tr/technology/_images/withdraw-trie.png b/src/content/docs/tr/technology/_images/withdraw-trie.png new file mode 100644 index 000000000..fe602e973 Binary files /dev/null and b/src/content/docs/tr/technology/_images/withdraw-trie.png differ diff --git a/src/content/docs/tr/technology/_images/withdraw.png b/src/content/docs/tr/technology/_images/withdraw.png new file mode 100644 index 000000000..faecae833 Binary files /dev/null and b/src/content/docs/tr/technology/_images/withdraw.png differ diff --git a/src/content/docs/tr/technology/_images/zkevm1.png b/src/content/docs/tr/technology/_images/zkevm1.png new file mode 100644 index 000000000..39f45db33 Binary files /dev/null and b/src/content/docs/tr/technology/_images/zkevm1.png differ diff --git a/src/content/docs/tr/technology/_images/zkevm2.png b/src/content/docs/tr/technology/_images/zkevm2.png new file mode 100644 index 000000000..4e5ff8a2a Binary files /dev/null and b/src/content/docs/tr/technology/_images/zkevm2.png differ diff --git a/src/content/docs/tr/technology/_images/zkevm3.png b/src/content/docs/tr/technology/_images/zkevm3.png new file mode 100644 index 000000000..31e268f23 Binary files /dev/null and b/src/content/docs/tr/technology/_images/zkevm3.png differ diff --git a/src/content/docs/tr/technology/_images/zktrie-arch.png b/src/content/docs/tr/technology/_images/zktrie-arch.png new file mode 100644 index 000000000..38f74e6f8 Binary files /dev/null and b/src/content/docs/tr/technology/_images/zktrie-arch.png differ diff --git a/src/content/docs/tr/technology/_images/zktrie-deletion.png b/src/content/docs/tr/technology/_images/zktrie-deletion.png new file mode 100644 index 000000000..c47fc7267 Binary files /dev/null and b/src/content/docs/tr/technology/_images/zktrie-deletion.png differ diff --git a/src/content/docs/tr/technology/_images/zktrie-insertion.png b/src/content/docs/tr/technology/_images/zktrie-insertion.png new file mode 100644 index 000000000..da0ae521a Binary files /dev/null and b/src/content/docs/tr/technology/_images/zktrie-insertion.png differ diff --git a/src/content/docs/tr/technology/bridge/cross-domain-messaging.mdx b/src/content/docs/tr/technology/bridge/cross-domain-messaging.mdx new file mode 100644 index 000000000..17f0a3c5f --- /dev/null +++ b/src/content/docs/tr/technology/bridge/cross-domain-messaging.mdx @@ -0,0 +1,247 @@ +--- +section: technology +date: Last Modified +title: "Alanlar Arası Mesajlaşma" +lang: "tr" +permalink: "technology/bridge/cross-domain-messaging" +whatsnext: { "Yatırma Ağ Geçitleri": "/tr/technology/bridge/deposit-gateways/" } +--- + +import ClickToZoom from "../../../../../components/ClickToZoom.astro" +import Aside from "../../../../../components/Aside.astro" +import ToggleElement from "../../../../../components/ToggleElement.astro" + +import L1ToL2 from "../_images/L1-to-L2.png" +import L2ToL1 from "../_images/L2-to-L1.png" +import WithdrawTrie from "../_images/withdraw-trie.png" + +Scroll, token transferlerine olanak tanıyan ve dapp'lerin L1 ile L2 arasında iletişim kurmasına izin veren rastgele bir mesaj geçiş köprüsüne sahiptir. Bu, L1'deki dapp'lerin L2'deki sözleşme fonksiyonlarını tetikleyebileceği veya bunun tersi anlamına gelir. Yazının devamında mesajların L1 ile L2 arasında nasıl iletildiğini açıklayacağız. + +## L1'den L2'ye Mesaj Gönderme + + + +L1'den L2'ye mesaj göndermenin iki temel yaklaşımı vardır: `L1ScrollMessenger` aracılığıyla rastgele mesajlar göndermek ve `EnforcedTxGateway` aracılığıyla zorunlu işlemleri göndermek. Her iki yaklaşım da kullanıcıların L1'de bir L2 işlemi başlatmasına ve L2'de isteğe bağlı kontrat çağırmasına olanak tanır. Rastgele mesajlar için, L2 işlemlerinin göndereni `L1ScrollMessenger` adresidir. Zorunlu işlemlerde, L2 göndereni harici sahipli bir hesaptır (EOA). Ek olarak, kullanıcıların ETH ve ERC-20, ERC-677, ERC-721 ve ERC-1155 dahil diğer standart tokenleri yatırmalarını kolaylaştırmak için çeşitli standart token ağ geçitleri sağlıyoruz. Temelde, bu ağ geçitleri, token depozitolarını bir mesaja kodlar ve bunu 'L1ScrollMessenger' sözleşmesi aracılığıyla L2'deki muadillerine gönderir. L1 token ağ geçitleri hakkında daha fazla ayrıntıyı [Para Yatırma Ağ Geçitleri](/tr/teknoloji/bridge/deposit-gateways) bölümünde bulabilirsiniz. + + + +Şekil 1'de gösterildiği gibi, hem rastgele mesajlar hem de zorunlu işlemler `L1MessageQueue` kontratında saklanan mesaj sırasına eklenir. `L1MessageQueue` sözleşmesi, isteğe bağlı mesajların ve zorunlu işlemlerin eklenmesi için sırasıyla `appendCrossDomainMessage` ve `appendEnforcedTransaction` olmak üzere iki fonksiyon sağlar. + +```solidity +/// @notice Append an arbitrary L1-to-L2 message into this contract. +/// @param target The target address on L2. +/// @param gasLimit The maximum gas can be used for this transaction on L2. +/// @param data The calldata of the L1-initiated transaction. +function appendCrossDomainMessage( + address target, + uint256 gasLimit, + bytes calldata data +) external; + +/// @notice Append an enforced transaction to this contract. +/// @param sender The sender address of this transaction. +/// @param target The target address of this transaction. +/// @param value The value to be transferred on L2. +/// @param gasLimit The maximum gas should be used for this transaction on L2. +/// @param data The calldata of the L1-initiated transaction. +function appendEnforcedTransaction( + address sender, + address target, + uint256 value, + uint256 gasLimit, + bytes calldata data +) external; +``` + +Her iki fonksiyon da Scroll zincirinde tanıtılan yeni bir işlem türü `L1MessageTx` ile L1 tarafından başlatılan bir işlem oluşturur ve işlem hash değerini hesaplar (daha fazla ayrıntı için [L1 Mesaj İşlemi](/tr/technology/chain/transactions#l1-message-transaction) bölümüne bakın ). `L1MessageQueue` daha sonra işlem hash'ini mesaj kuyruğuna ekler ve `QueueTransaction(sender, target, value, queueIndex, gasLimit, calldata)` olayını yayar. L1 mesaj işlemlerini oluştururken `appendCrossDomainMessage` ve `appendEnforcedTransaction` arasındaki fark şudur: + +- `appendCrossDomainMessage` yalnızca `L1ScrollMessenger` tarafından çağrılabilir ve işlemi gönderen olarak `L1ScrollMessenger`ın adresi olacak olan `msg.sender`ın [takma adresini](#address-alias) kullanır. +- `appendEnforcedTransaction` yalnızca `EnforcedTxGateway` tarafından çağrılabilir ve işlem göndereni olarak fonksiyon parametresindeki `sender`ı kullanır. Bu, kullanıcıların doğrudan L1 köprüsü aracılığıyla L2 hesaplarından ETH çekilmesini veya aktarılmasını zorunlu kılmasına olanak tanır. + +İşlem L1'de başarıyla yürütüldükten sonra, `L1MessageQueue` sözleşmesini izleyen Scroll sıralayıcıdaki izleyici, L1 bloklarından yeni `QueueTransaction` olaylarını toplar. Sıralayıcı daha sonra olay başına yeni bir `L1MessageTx` işlemi oluşturur ve bunları yerel L1 işlem kuyruğuna ekler. Yeni bir L2 bloğu oluştururken sıralayıcı, hem L1 işlem kuyruğundan hem de L2 mempool'dan işlemleri içerir. L1 mesaj işlemlerinin, `L1MessageQueue` sözleşmesindeki L1 mesaj kuyruğu sırasına göre sırayla dahil edilmesi gerektiğini unutmayın. L2 bloklarında her zaman önce `L1MessageTx` işlemleri gelir, ardından L2 işlemleri gelir. Şu anda, bir L2 bloğundaki `L1MessageTx` işlemlerinin sayısını `NumL1MessagesPerBlock` (şu anda 10'a ayarlı) ile sınırlandırıyoruz. + +Daha sonra, `L1ScrollMessenger` yoluyla rastgele mesajların gönderilmesi ve `EnforcedTxGateway` aracılığıyla zorunlu işlemlerin gönderilmesine ilişkin spesifik süreci daha da detaylandıracağız. + +### Keyfi Mesajlar Göndermek + +`L1ScrollMessenger` sözleşmesi, rastgele mesajlar göndermek için iki `sendMessage` fonksiyonu sağlar. Tek fark, ikincisinin, kullanıcıların ücret iadesi alabilmek için gönderici adresi dışında bir iade adresi belirtmesine olanak sağlamasıdır. + + +
sendMessage function signatures
+```solidity +/// @param target The target address on L2. +/// @param value The value to deposit to L2 from `msg.value`. +/// @param message The message passed to target contract. +/// @param gasLimit The maximum gas can be used for this transaction on L2. +function sendMessage( + address target, + uint256 value, + bytes memory message, + uint256 gasLimit +) external payable; + +/// @param target The target address on L2. +/// @param value The value to deposit to L2 from `msg.value`. +/// @param message The message passed to target contract. +/// @param gasLimit The maximum gas can be used for this transaction on L2. +/// @param refundAddress The address to refund excessive fee on L1. +function sendMessage( + address target, + uint256 value, + bytes calldata message, + uint256 gasLimit, + address refundAddress +) external payable; +```` +
+ + +Her iki fonksiyon da kullanıcıların L2'de karşılık gelen `L1MessageTx` işlemi için bir gas limiti sağlamasını ve L1'de gas limiti miktarına göre hesaplanan [mesaj aktarma ücretini](#message-relay-fee) ön ödemesini gerektirir. Ücret, L1'deki bir `feeVault` kontratına tahsil edilir. Kullanıcının L1'deki mesajı için doğru gas limitini ayarlamaması nedeniyle L2'de işlemin başarısız olması durumunda, kullanıcı aynı mesajı daha yüksek bir gas limitiyle tekrar oynatabilir. Daha fazla ayrıntıyı [Başarısız mesajları yeniden deneme](#retrying-failed-messages) bölümünde bulabilirsiniz, ancak bu ücretlerin kullanılmayan kısmı kullanıcıya iade edildiğinden, gas limitini fazla tahmin etmenin herhangi bir cezası yoktur. + +`sendMessage` fonksiyonları, argümanları alanlar arası bir mesaja kodlar (aşağıdaki ilgili kodu içeren bölüme bakın), burada nonce mesajı, L1 mesaj kuyruğunun bir sonraki kuyruk indeksidir. Kodlanan veriler daha sonra L2'de yürütülen `L1MessageTx` işleminde çağrı verileri olarak kullanılır. Bu tür etki alanları arası mesajların her zaman L2'deki `L2ScrollMessenger` sözleşmesinin `relayMessage` işlevini çağırdığını unutmayın. + +```solidity +abi.encodeWithSignature( + "relayMessage(address,address,uint256,uint256,bytes)", + _sender, + _target, + _value, + _messageNonce, + _message +) +```` + +Yatırılan `value` tutarının ETH'i `L1ScrollMessenger` kontratında kilitlenir. Mesajdaki ETH miktarının mesaj aktarma ücretini ve yatırılan tutarı karşılayamaması durumunda işlem geri çevrilecektir. `L1ScrollMessenger` sözleşmesi, fazla tutarı belirtilen `refundAddress`e veya işlemi gönderene aksi takdirde iade edecektir. Son olarak, `L1ScrollMessenger`, alanlar arası mesajı `appendCrossDomainMessage` yöntemi aracılığıyla `L1MessageQueue`ya ekler. + +### Zorunlu İşlemler Gönderme + + + +`EnforcedTxGateway` kontratı, zorunlu bir işlemi göndermek için iki `sendTransaction` fonksiyonu sağlar. Birinci fonksiyonda oluşturulan `L1MessageTx` işleminin göndericisi işlemin göndericisidir. Öte yandan, ikinci fonksiyon, `L1MessageTx` işleminin göndericisi olarak iletilen `sender` adresini kullanır. Bu, üçüncü bir tarafın kullanıcı adına zorunlu bir işlem göndermesine ve geçiş ücretini ödemesine olanak tanır. İkinci fonksiyonun, oluşturulan `L1MessageTx` işleminin `sender` adresiyle eşleşen geçerli bir imzasının sağlanmasını gerektirdiğini unutmayın. Her iki `sendTransaction` işlevi de gönderenin bir EOA hesabı olmasını zorunlu kılar. + + +
sendTransaction function signatures
+ +```solidity +/// @param target The target address on L2. +/// @param value The value to withdraw from the `tx.origin` address on L2. +/// @param gasLimit The maximum gas can be used for this transaction on L2. +/// @param data The calldata passed to target contract. +function sendTransaction( + address target, + uint256 value, + uint256 gasLimit, + bytes calldata data +) external payable; + +/// @param sender The sender address who will initiate this transaction on L2. +/// @param target The target address on L2. +/// @param value The value to withdraw from the `sender` address on L2. +/// @param gasLimit The maximum gas can be used for this transaction on L2. +/// @param data The calldata passed to target contract. +/// @param signature The signature for the corresponding `L1MessageTx` transaction. +/// @param refundAddress The address to refund excessive fee on L1. +function sendTransaction( + address sender, + address target, + uint256 value, + uint256 gasLimit, + bytes calldata data, + bytes memory signature, + address refundAddress +) external payable; +``` + +
+ +Rastgele mesaj aktarımına benzer şekilde, `sendTransaction` mesaj aktarma ücretini keser ve bunu L1 `feeVault` hesabına aktarır. Ancak önemli bir fark, işleve iletilen `value`nun, L1'deki değil, L2'deki gönderen hesabından aktarılacak ETH miktarını göstermesidir. Bu nedenle, `msg.value`nun yalnızca [mesaj aktarma ücretini](#message-relay-fee) kapsaması gerekir. Mesajdaki ETH miktarı ücreti karşılayamıyorsa işlem başarısız olacaktır. Fazla ücret, ilk fonksiyonda işlemi gönderene, ikinci fonksiyonda ise `refundAddress`e iade edilir. Son olarak, `EnforcedTxGateway`, işlemi mesaj kuyruğuna eklemek için `L1MessageQueue.appendEnforcedTransaction`ı çağırır. + +### Başarısız Mesajları Yeniden Denemek + +Yetersiz gas nedeniyle L2'de bir `L1MessageTx` işlemi başarısız olursa, kullanıcılar mesajı daha yüksek bir gas limitiyle tekrarlayabilir. `L1ScrollMessenger`, kullanıcıların önceki başarısız mesajla aynı bilgiyi daha yüksek gas limitiyle göndermesine olanak tanıyan `replayMessage` yöntemini sağlar. Bu mesaj L2'de yeni bir `L1MessageTx` işlemi haline gelecektir. L2'de zaten işlendiğinden, önceki başarısız işlem için gas ücretini iade etmeyeceğimizi unutmayın. + + +
replayMessage function signature
+ +```solidity +/// @param from The address of the sender of the message. +/// @param to The address of the recipient of the message. +/// @param value The msg.value passed to the message call. +/// @param queueIndex The queue index for the message to replay. +/// @param message The content of the message. +/// @param newGasLimit New gas limit to be used for this message. +/// @param refundAddress The address of account who will receive the refunded fee. +function replayMessage( + address from, + address to, + uint256 value, + uint256 queueIndex, + bytes memory message, + uint32 newGasLimit, + address refundAddress +) external payable; +``` + +
+ +`L2ScrollMessenger` sözleşmesi, L2'ye başarılı bir şekilde iletilen tüm L1 mesajlarını kaydettiği için, orijinal mesajın başarılı olması halinde, tekrarlanan mesajın işlemi L2'de geri alınacaktır. + +### Mesaj Aktarma Ücreti + +L1'de konuşlandırılan `L2GasPriceOracle` sözleşmesi, gas limiti dikkate alınarak bir mesajın aktarma ücretini hesaplar. Bu sözleşme, şu anda Scroll tarafından çalıştırılan özel bir aktarıcı tarafından güncellenen `l2BaseFee`yi kendi depolama alanında saklar. L1'den L2'ye mesaj geçiş ücreti `gasLimit * l2BaseFee`dir. + + + +### Adres Takma Adı + +`CREATE` opcode'unun davranışı nedeniyle, birisinin L1 ve L2'de aynı adreste ancak farklı bytecode'uyla bir sözleşme dağıtması mümkündür. Kötü niyetli kullanıcıların bundan faydalanmasını önlemek için, mesajı gönderen L1'de bir sözleşme olduğunda köprü bir adres takma adı uygular. L1 mesaj işleminin takma adı olan gönderen adresi `l1_contract_address + offset`tir; burada `offset`, `0x1111000000000000000000000000000000001111`dir. + +## L2'den L1'e Mesaj Gönderme + + + +L2'de kullanıcılar, tokenlerini çekmek ve L1 sözleşmelerini çağırmak için `L2ScrollMessenger` aracılığıyla isteğe bağlı mesajlar gönderebilir. L1'e benzer şekilde, token çekimlerini başlatmayı kolaylaştırmak için birkaç standart token ağ geçidi oluşturduk. L2 token ağ geçitleri hakkında daha fazla ayrıntı için lütfen [Geri Çekme Ağ Geçitleri](/tr/technology/bridge/withdraw-gateways). + +`L2ScrollMessenger` sözleşmesi aynı zamanda bir `sendMessage` fonksiyonu da sağlar. `L1ScrollMessenger.sendMessage`dan farkı, L1 üzerindeki para çekme işleminin kullanıcılar tarafından gönderilmesi ve işlem ücretinin doğrudan L1 üzerinden ödenmesi nedeniyle fonksiyonda `gasLimit` parametresinin dikkate alınmamasıdır. Bu nedenle, `sendMessage` işlevi `msg.value`nun `value` parametresine eşit olmasını gerektirir. Fonksiyon, bağımsız değişkenleri, [`L1ScrollMessenger`](#sending-arbitrary-messages) ile aynı şemayı izleyerek alanlar arası bir mesaja kodlar. + + +
sendMessage function signatures
+ +```solidity +/// @param target The target address on L1. +/// @param value The value to withdraw to L1 from `msg.value`. +/// @param message The message passed to target contract. +/// @param _gasLimit Ignored in the L2ScrollMessenger because the withdrawal execution on L1 is done by the user. +function sendMessage( + address target, + uint256 value, + bytes memory message, + uint256 _gasLimit +) external payable; +``` + +
+ +Daha sonra, alanlar arası mesaj hash'i, `appendMessage` işlevi çağrılarak `L2MessageQueue`ya eklenir. `L2MessageQueue` kontratı, yalnızca eklenen bir Merkle ağacı olan [Withdraw Trie](#withdraw-trie)'yi korur. Kuyruğa her yeni mesaj eklendiğinde, sözleşme onu Withdraw Trie'sine ekler ve trie'nin kök hash'ini günceller. + +Kullanıcıların L2'den L1'e mesajlarını içeren işlem kümesi L1 rollup sözleşmesinde sonlandırıldıktan sonra, kullanıcıların L1'de para çekme işlemini gerçekleştiren `L1ScrollMessenger` sözleşmesindeki `relayMessageWithProof` yöntemini çağırmak için ilgili _Execute Withdrawal_ işlemlerini göndermeleri gerekir. Merkle kanıtları sayesinde L1'de para çekme işlemlerinin sonuçlandırılması güvensizdir (trustless) ve kullanıcı tarafından veya kullanıcı adına üçüncü bir kişi tarafından yapılabilir. + +Bir para çekme MIP'si oluşturmayı kolaylaştırmak için Scroll, Bridge History API adı verilen bir hizmet sağlar. Köprü Geçmişi API'si, `L2ScrollMessenger`dan yayılan `SentMessage` olaylarını izler ve dahili olarak bir Geri Çekme Trie'sini korur. Her para çekme mesajı için sürekli olarak Merkle kanıtları üretir. Kullanıcılar ve üçüncü taraf hizmetleri, _Execute Withdrawal_ işlemlerine dahil etmek için Bridge History API'sinden Merkle kanıtlarını sorgulayabilir. + +Gerçekleştirilen para çekme işlemlerinin kullanıcılar tarafından veya bir üçüncü taraf hizmeti tarafından gönderilebileceğini unutmayın. + +### Withdraw Trie + + + +Withdraw Trie yoğun bir ikili Merkle ağacıdır. Bir yaprak düğümün hash değeri, mesaj hashinde miras alınırken, yaprak olmayan bir düğümün hashi, iki çocuğunun birleştirilmiş hashlerinin Keccak hash özetidir. Geri Çekme Trie'sinin derinliği, trie'ye eklenen mesaj sayısına bağlı olarak dinamik olarak artar. + +Şekil 3(a), tam 3 katmanlı Withdraw Trie denemesinin bir örneğini göstermektedir. Yaprak sayısı ikili ağacın tamamını doyuramadığında, yaprak düğümlerini Şekil 3(b) ve 3(c)'de gösterildiği gibi hash değeri 0 ile doldururuz. Tamamlanmamış bir Withdraw Trie'sine yeni bir mesaj eklerken, doldurma düğümü daha sonra gerçek mesaj hash'ini içeren yeni bir yaprak düğümle değiştirilecektir. \ No newline at end of file diff --git a/src/content/docs/tr/technology/bridge/deposit-gateways.mdx b/src/content/docs/tr/technology/bridge/deposit-gateways.mdx new file mode 100644 index 000000000..9ae15ff09 --- /dev/null +++ b/src/content/docs/tr/technology/bridge/deposit-gateways.mdx @@ -0,0 +1,183 @@ +--- +section: technology +date: Last Modified +title: "Yatırım Ağ Geçitleri" +lang: "tr" +permalink: "technology/bridge/deposit-gateways" +whatsnext: { "Yatırım Ağ Geçitleri": "/tr/technology/bridge/withdraw-gateways/" } +--- + +import ClickToZoom from "../../../../../components/ClickToZoom.astro" +import DepositWorkflow from "../_images/deposit.png" + +Bu belge, kullanıcıların ve geliştiricilerin L1'den L2'ye token yatırmak için ağ geçitlerini nasıl kullanabileceğini açıklamaktadır. Aşağıdaki tabloda listelenen, standart tokenler için çeşitli ağ geçitleri ve L1'de bir ağ geçidi yönlendiricisi (gateway router) sağlıyoruz. + +| Gateway Kontratı | Açıklama | +| ------------------------ | ---------------------------------------------------------------------------- | +| `L1GatewayRouter` | Ağ geçidi yönlendiricisi, ETH ve ERC20 tokenlarının yatırılmasını destekler. | +| `L1ETHGateway` | ETH yatırmak için ağ geçidi. | +| `L1StandardERC20Gateway` | Standart ERC20 token yatırma işlemleri için ağ geçidi. | +| `L1CustomERC20Gateway` | Özel ERC20 token yatırma işlemleri için ağ geçidi. | +| `L1WETHGateway` | Wrapped ETH yatırma işlemleri için ağ geçidi. | +| `L1ERC721Gateway` | ERC-721 token yatırma işlemleri için ağ geçidi. | +| `L1ERC1155Gateway` | ERC-1155 token yatırma işlemleri için ağ geçidi. | + +## Genel Bakış + + + +Şekilde L1'den L2'ye para yatırma iş akışı gösterilmektedir. Kullanıcılar token yatırma işlemini başlatmak için ağ geçitlerini çağırırlar. Yatırılan değer daha sonra `L1ScrollMessenger` sözleşmesine gönderilen bir mesaja kodlanır ve karşılık gelen L1 tarafından başlatılan işlem `L1MessageQueue`ya eklenir. L2'deki para yatırma işlemlerini tamamlamak için L2 sıralayıcı, yeni L1 işlem olaylarını toplar ve karşılık gelen işlemleri, oluşturduğu L2 bloklarına dahil eder. Sonraki bölümlerde farklı tokenlerin nasıl yatırıldığına ilişkin ayrıntılar açıklanmaktadır. L1'den L2'ye mesaj aktarma iş akışı hakkında daha fazla ayrıntıyı [Alanlar Arası Mesajlaşma](/technology/bridge/cross-domain-messaging#sending-messages-from-l1-to-l2) bölümünde bulabilirsiniz. + +## ETH yatırma + +Scroll, ETH'i kendi yerel token'ı olarak ele alır. Yerel ETH tokenını basım yapmadan L2 hesaplarına aktarabilmesi için, genesis bloğundaki `L2ScrollMessenger` sözleşmesine yeterli miktarda ETH'i önceden tahsis ediyoruz. ETH yatırma işlemi şu şekilde çalışır; + +1. `L1GatewayRouter`, ETH'i L1'den L2'ye yatırmak için üç fonksiyon sağlar. `depositETHAndCall` fonksiyonu, aynı anda ETH'i aktarabilir ve bir kontrat çağrısı (contract call) gerçekleştirebilir. + + ```solidity + function depositETH(uint256 _amount, uint256 _gasLimit) external payable; + + function depositETH(address _to, uint256 _amount, uint256 _gasLimit) public payable; + + function depositETHAndCall( + address _to, + uint256 _amount, + bytes calldata _data, + uint256 _gasLimit + ) external payable; + ``` + +2. Üç `depositETH` fonksiyonunun tümü `L1ETHGateway`i çağırır. `L1ETHGateway`, depozitoyu `L1ScrollMessenger` kontratına gönderilen bir mesaja kodlar. + +3. Yatırılan tutarın ETH'i `L1ScrollMessenger` sözleşmesinde kilitlenir. `L1ScrollMessenger`, mesajı `L1MessageQueue` sözleşmesindeki mesaj kuyruğuna ekler. + +4. L1'de para yatırma işlemi tamamlandıktan sonra sıralayıcı, yatırmayı tamamlamak ve ETH'i L2'deki alıcı adresine aktarmak için L2 bloğuna karşılık gelen bir L2 işlemini dahil edecektir. + +5. L2 işlemi, aktarılan mesajı yürüten `L2ScrollMessenger.relayMessage` işlevini çağırır. + ETH yatırma durumunda, `relayMessage` fonksiyonu, ETH'yi L2'deki alıcı hesabına aktarmak için `L2ETHGateway.finalizeDepositETH`i çağırır. + +6. Kullanıcı L1'de `depositETHAndCall` çağırırsa, `L2ETHGateway` sözleşmesindeki `finalizeDepositETH`, ek verileri hedef L2 sözleşmesine iletecektir. + +## ERC20 Tokenlarını Yatırma + +Standart ERC20 tokenleri, özel ERC20 tokenleri ve Wrapped ETH tokeni gibi farklı ERC20 token türlerini birbirine bağlamak için çeşitli ERC20 ağ geçidi sözleşmeleri sağlanmıştır. `L1GatewayRouter`, ERC20 tokenlerinin L1'deki karşılık gelen ERC20 ağ geçidine kanonik eşlemesini kaydeder. `L1GatewayRouter`, özel bir ağ geçidi önceden kurulmadığı sürece yeni ERC20 tokenleri için varsayılan ERC20 ağ geçidi olarak `StandartERC20Gateway`i kullanır. + +ERC20 tokenlerinin yatırılması aşağıdaki şekilde çalışır. + +1. L1'den L2'ye ERC20 tokenlarını yatırmak için kullanıcılar aşağıda gösterilen `L1GatewayRouter.depositERC20` ve `L1GatewayRouter.depositERC20AndCall`ı kullanabilirler. + + ```solidity + function depositERC20(address _token, uint256 _amount, uint256 _gasLimit) external payable; + + function depositERC20(address _token, address _to, uint256 _amount, uint256 _gasLimit) external payable; + + function depositERC20AndCall( + address _token, + address _to, + uint256 _amount, + bytes memory _data, + uint256 _gasLimit + ) public payable; + ``` + +2. ERC20 tokenlerinden ağ geçidine yapılan eşlemeyi temel alarak, `L1GatewayRouter` ilgili ağ geçidini çağırır: `L1StandardERC20Gateway`, `L1CustomERC20Gateway` veya `L1WETHGateway`. Adımların geri kalanı ayrı ayrı açıklanacaktır. + +### Standart ERC20 Tokenları + +Standart ERC20 tokenleri herhangi bir özel mantık gerektirmeyen tokenlardır. Bu tür tokenler için L2 ERC20 token sözleşmeleri `L2StandardERC20Gateway` tarafından oluşturulur. Standart ERC20 token yatırma işlemi için kalan adımlar şunlardır: + +3. `L1StandardERC20Gateway` sözleşmesi, ERC20 tokenlerini göndericiden kendisine aktararak kilitler. +4. Bu ERC20 tokeni daha önce `L1StandardERC20Gateway` aracılığıyla çekilmemişse, `L1StandardERC20Gateway` deterministik bir L2 ERC20 token adresi hesaplayacak ve token meta verilerini (sembol, ad ve ondalık sayılar) gelecekte L2'daki potansiyel sözleşme dağıtımı (deployment) için mesaja ekleyecektir. L2 token adresi zaten `tokenMapping`de kayıtlıysa, `L1StandardERC20Gateway` eşlemeden L2 token adresini doğrudan yükleyecektir. +5. 'L1StandardERC20Gateway', token yatırma mesajını kodlar ve mesajı göndermek için 'L1ScrollMessenger'ı çağırır. +6. İlgili L2 işlemi, L2'deki para yatırma işlemini tamamlamak için `L2ScrollMessenger.relayMessage` fonksiyonunu çağırır. Standart ERC20 token yatırma durumunda ise işlem daha sonra `L2StandardERC20Gateway.finalizeDepositERC20`yi çağırır. +7. Bu ERC20 token sözleşmesi L2'de konuşlandırılmamışsa, `L2StandardERC20Gateway` mesajdan token metadata'yı çıkaracak ve standart ERC20 tokenını L2'de dağıtmak için `ScrollStandardERC20Factory`yi çağıracaktır. +8. `L2StandardERC20Gateway`, ilgili L2 ERC20 token sözleşmesindeki mint fonksiyonunu çağırır. +9. Kullanıcı L1'de `depositERC20AndCall`ı çağırırsa, `L2StandardERC20Gateway` ek verilerle hedef L2 sözleşmesini çağıracaktır. + +### Özel ERC20 Tokenları + +Standart ERC20 tokenlarıyla karşılaştırıldığında, özel ERC20 tokenlarının L2 sözleşmesi token sahibi tarafından dağıtılır. Özel ERC20 token yatırma işlemi için kalan adımlar şunlardır: + +3. 'L1CustomERC20Gateway' sözleşmesi, ERC20 tokenlerini göndericiden kendisine aktararak L1'de kilitler. +4. 'L1CustomERC20Gateway', 'tokenMapping'de mevcut bir L2 ERC20 token adresini gerektirir. İlgili ERC20 token adresini alır, token yatırma mesajını kodlar ve bunu 'L1ScrollMessenger'a iletir. +5. İlgili L2 işlemi, L2'deki para yatırma işlemini tamamlamak için 'L2ScrollMessenger.relayMessage' fonksiyonunu çağırır. Özel ERC20 token yatırmaları durumunda, işlem 'L2CustomERC20Gateway.finalizeDepositERC20'yi çağırır. +6. 'L2CustomERC20Gateway', ilgili L2 ERC20 token sözleşmesindeki mint fonksiyonunu çağırır. L2 ERC20 token sözleşmesinin, 'L2CustomERC20Gateway' sözleşmesine mint izinleri vermesi gerekir. +7. Kullanıcı L1'de 'depositERC20AndCall'ı çağırırsa, 'L2CustomERC20Gateway' ek verilerle hedef L2 sözleşmesini çağıracaktır. + +### WETH Tokeni + +L1'de Wrapped ETH tokeni için özel bir ağ geçidi `L1WETHGateway` sağlıyoruz ve ağ geçidi adresini `L1GatewayRouter`a kaydediyoruz. WETH tokeninin yatırılması şu şekilde çalışır. + +3. `L1WETHGateway`, WETH tokenlarını göndericiden kendisine aktararak ve WETH tokenını yerel ETH tokenine dönüştürerek kilitler. ETH tokenı ve `msg.value` (geçiş ücretinin ödenmesi için) daha sonra birlikte `L1ScrollMessenger` sözleşmesine gönderilir. +4. `L1WETHGateway`, token yatırma mesajını kodlar ve bunu `L1ScrollMessenger`a iletir. +5. İlgili L2 işlemi, L2'deki para yatırma işlemini tamamlamak için `L2ScrollMessenger.relayMessage` işlevini çağırır. WETH tokeni yatırma durumunda, işlem `L2WETHGateway.finalizeDepositERC20`yi çağırır. +6. `L2WETHGateway`, yatırılan ETH'yi tekrar L2 WETH token'a sarar ve L2'deki alıcı adresine aktarır. +7. Kullanıcı L1'de `depositERC20AndCall`ı çağırırsa, `L2WETHGateway` ek verilerle hedef L2 sözleşmesini arayacaktır. + +## ERC-721/ERC-1155 Tokenlarını Yatırma + +ERC-721 veya ERC-1155 tokenlarının yatırılması, ERC20 tokenlerine çok benzer şekilde çalışır. L1'den ERC-721 /ERC-1155 tokenlarını yatırmak için `L1ERC721Gateway` veya `L1ERC1155Gateway` ağ geçitleri kullanılabilir. + +```solidity +function depositERC721( + address _token, + uint256 _tokenId, + uint256 _gasLimit +) external payable; + +function depositERC721( + address _token, + address _to, + uint256 _tokenId, + uint256 _gasLimit +) external payable; + +function depositERC1155( + address _token, + uint256 _tokenId, + uint256 _amount, + uint256 _gasLimit +) external payable; + +function depositERC1155( + address _token, + address _to, + uint256 _tokenId, + uint256 _amount, + uint256 _gasLimit +) external payable; +``` + +Büyük miktarda ERC-721 veya ERC-1155 token yatırma işlemini kolaylaştırmak amaçlı, aşağıdaki işlevler aracılığıyla `L1ERC721Gateway` ve `L1ERC1155Gateway` sözleşmesinde toplu para yatırma işlevleri de sağlıyoruz: + +```solidity +function batchDepositERC721( + address _token, + uint256[] calldata _tokenIds, + uint256 _gasLimit +) external payable; + +function batchDepositERC721( + address _token, + address _to, + uint256[] calldata _tokenIds, + uint256 _gasLimit +) external payable; + +function batchDepositERC1155( + address _token, + uint256[] calldata _tokenIds, + uint256[] calldata _amounts, + uint256 _gasLimit +) external payable; + +function batchDepositERC1155( + address _token, + address _to, + uint256[] calldata _tokenIds, + uint256[] calldata _amounts, + uint256 _gasLimit +) external payable; +``` + +ERC-721 veya ERC-1155 tokenleri için L2 muadil sözleşmeleri `L2ERC721Gateway` ve `L2ERC1155Gateway`dir. Bunlar L2'deki para yatırma işlemlerini tamamlamak için kullanılır. \ No newline at end of file diff --git a/src/content/docs/tr/technology/bridge/withdraw-gateways.mdx b/src/content/docs/tr/technology/bridge/withdraw-gateways.mdx new file mode 100644 index 000000000..f0e7d0c2e --- /dev/null +++ b/src/content/docs/tr/technology/bridge/withdraw-gateways.mdx @@ -0,0 +1,166 @@ +--- +section: technology +date: Last Modified +title: "Çekim Ağ Geçitleri" +lang: "tr" +permalink: "technology/bridge/withdraw-gateways" +whatsnext: { "Sıralayıcı": "/tr/technology/sequencer/execution-node/" } +--- + +import ClickToZoom from "../../../../../components/ClickToZoom.astro" +import Aside from "../../../../../components/Aside.astro" +import WithdrawWorkflow from "../_images/withdraw.png" + +Bu belge, kullanıcıların ve geliştiricilerin, tokenleri L2'den L1'e çekmek için ağ geçitlerini nasıl kullanabileceğini açıklamaktadır. Aşağıdaki tabloda listelenen, standart tokenler için çeşitli ağ geçitleri ve L2'de bir ağ geçidi yönlendiricisi sağlıyoruz. + +| Gateway Kontratı | Açıklama | +| ------------------------ | ---------------------------------------------------------------------------- | +| `L2GatewayRouter` | Ağ geçidi yönlendiricisi, ETH ve ERC20 tokenlarının yatırılmasını destekler. | +| `L2ETHGateway` | ETH yatırmak için ağ geçidi. | +| `L2StandardERC20Gateway` | Standart ERC20 token yatırma işlemleri için ağ geçidi. | +| `L2CustomERC20Gateway` | Özel ERC20 token yatırma işlemleri için ağ geçidi. | +| `L2WETHGateway` | Wrapped ETH yatırma işlemleri için ağ geçidi. | +| `L2ERC721Gateway` | ERC-721 token yatırma işlemleri için ağ geçidi. | +| `L2ERC1155Gateway` | ERC-1155 token yatırma işlemleri için ağ geçidi. | + +## Genel Bakış + + + +Şekilde L2'den L1'e para çekme iş akışı gösterilmektedir. Kullanıcılar token çekme işlemini başlatmak için ağ geçitlerini ararlar. Geri çekme işlemi `L2ScrollMessenger`a gönderilen bir mesajla kodlanır ve bu mesaj daha sonra `L2MessageQueue`ya eklenir. `L2MessageQueue` bir Withdraw Trie'sini korur ve her yeni mesaj eklendiğinde kökü günceller. Withdraw Trie kökü, L2 durum kökü ile birlikte L1 rollup sözleşmesinde sonlandırılır. Yeni Withdraw Trie kökü L1'de sonlandırıldıktan sonra, kullanıcılar veya üçüncü taraflar Withdraw Trie köküne geçerli bir Merkle Inclusion Kanıtı oluşturabilir ve L1'de çekilmeyi tamamlamak için bir _withdraw execution_ işlemi gönderebilir. L2'den L1'e mesaj aktarma iş akışı hakkında daha fazla ayrıntıyı [Alanlar Arası Mesajlaşma](/technology/bridge/cross-domain-messaging#sending-messages-from-l2-to-l1) bölümünde bulabilirsiniz. + +Sonraki bölümlerde farklı tokenlerin nasıl geri çekildiğinin ayrıntıları açıklanmaktadır. + +## ETH'i Çekme + +ETH tokenının çekilmesi şu şekilde çalışır. + +1. `L2GatewayRouter`, ETH'i L2'den L1'e çekmek için üç işlev sağlar. `withdrawETHAndCall` işlevi, aynı anda ETH'i çekebilir ve bir sözleşme çağrısı gerçekleştirebilir. + + ```solidity + function withdrawETH(uint256 _amount, uint256 _gasLimit) external payable; + + function withdrawETH(address _to, uint256 _amount, uint256 _gasLimit) public payable; + + function withdrawETHAndCall( + address _to, + uint256 _amount, + bytes calldata _data, + uint256 _gasLimit + ) external payable; + ``` + +2. `withdrawETHAndCall` işlevleri `L2ETHGateway`i çağırır. `L2ETHGateway`, çekilme mesajını kodlar ve çekilen ETH ile birlikte `L2ScrollMessenger` sözleşmesine gönderir. +3. Geri çekilen ETH tekrar `L2ScrollMessenger` sözleşmesine kilitlenir. `L2ScrollMessenger`, mesajı `L2MessageQueue` sözleşmesindeki mesaj kuyruğuna ekler. +4. L1'deki para çekme işlemi, para çekme işlemini tamamlamak için `L1ScrollMessenger.relayMessageWithProof` fonksiyonunu çağırır. ETH'in çekilmesi durumunda, `relayMessageWithProof` fonksiyonu, ETH'i L1'deki alıcı hesabına geri göndermek için `L1ETHGateway.finalizeWithdrawETH`i çağırır. +5. Kullanıcı L2'de `withdrawETHAndCall` fonksiyonunu çağırırsa, `L1ETHGateway` sözleşmesindeki `finalizeWithdrawETH`, ek verileri hedef L1 sözleşmesine iletecektir. + +## ERC20 Tokenlarının Çekilmesi + +ERC20 tokenlarının geri çekilmesi şu şekilde çalışır. + +1. ERC20 tokenlerini L1'den L2'ye çekmek için kullanıcılar aşağıda gösterilen `L2GatewayRouter.withdrawERC20` ve `L2GatewayRouter.withdrawERC20AndCall`ı kullanabilirler. + + ```solidity + function withdrawERC20(address _token, uint256 _amount, uint256 _gasLimit) external payable; + + function withdrawERC20(address _token, address _to, uint256 _amount, uint256 _gasLimit) external payable; + + function withdrawERC20AndCall( + address _token, + address _to, + uint256 _amount, + bytes memory _data, + uint256 _gasLimit + ) public payable; + ``` + +2. ERC20 tokenlerinden ağ geçidine yapılan eşlemeye bağlı olarak, `L2GatewayRouter` ilgili ağ geçidini, `L2StandardERC20Gateway`, `L2CustomERC20Gateway` veya `L2WETHGateway`i çağırır. Adımların geri kalanı ayrı ayrı açıklanacaktır. + +### Standart ve Özel ERC20 Tokenları + +Standart ve özel ERC20 tokenlarının geri çekilmesi aşağıdaki şekilde gerçekleşir. + +3. `L2StandardERC20Gateway` veya `L2CustomERC20Gateway` sözleşmesi, çekilen ERC20 tokenını yakar, çekilme işlemini bir mesaja kodlar ve `L2ScrollMessenger`a gönderir. +4. L1 para çekme işleminin kendisi, L1'deki para çekme işlemlerini tamamlamak için `L1ScrollMessenger.relayMessageWithProof` fonksiyonunu çağırır. Standart veya özel ERC20 tokenının çekilmesi durumunda, işlem sırasıyla `L1StandardERC20Gateway` veya `L1CustomERC20Gateway` sözleşmesinde `finalizeWithdrawERC20` fonksiyonunu çağırır. + - `L1StandardERC20Gateway` sözleşmesinde, eğer bu bir ERC20 tokenının ilk çekilme işlemiyse, `finalizeWithdrawERC20` işlevi, eşlemeyi `tokenMapping`de L1 token adresinden L2 token adresine güncelleyecektir. +5. L1 ERC20 token ağ geçidi, kilitli ERC20 tokenlarını kendisinden L1'deki alıcı adresine aktararak serbest bırakır. +6. Kullanıcı L2'de `withdrawERC20AndCall` çağırırsa ağ geçitleri ek verilerle hedef L1 sözleşmesini arayacaktır. + +### WETH Tokenı + +L2'de Wrapped ETH tokenı için özel bir ağ geçidi `L2WETHGateway` sağlıyoruz ve ağ geçidi adresini `L2GatewayRouter`a kaydediyoruz. WETH tokenının geri çekilmesi şu şekilde çalışır. + +3. `L2WETHGateway`, çekilen WETH tokenını kendisine aktarır ve WETH tokenını yerel ETH tokenına dönüştürür. ETH tokenı daha sonra `L2ScrollMessenger` sözleşmesine geri gönderilir. +4. `L2WETHGateway`, token çekme mesajını kodlar ve bunu `L2ScrollMessenger`a iletir. +5. L1 para çekme işleminin kendisi, L1'de para çekme işlemini tamamlamak için `L1ScrollMessenger.relayMessageWithProof` fonksiyonunu çağırır. WETH tokenının çekilmesi durumunda, işlem `L1WETHGateway.finalizeWithdrawERC20` çağrısını yapar ve ETH cinsinden çekilen tutarı `L1WETHGateway`e gönderir. +6. 'L1WETHGateway', çekilen ETH'i tekrar L1 WETH token'a sarar ve L1'deki alıcı adresine aktarır. +7. Kullanıcı L2'de `withdrawERC20AndCall` fonksiyonunu çağırırsa, `L1WETHGateway` ek verilerle birlikte hedef L1 adresini çağıracaktır. + +## ERC-721/ERC-1155 Tokenlarının Geri Çekilmesi + +ERC-721 veya ERC-1155 tokenlarının geri çekilmesi, ERC20 tokenlerine çok benzer şekilde çalışır. ERC-721 /ERC-1155 tokenlerini L2'den çekmek için `L2ERC721Gateway` veya `L2ERC1155Gateway` ağ geçidi kullanılabilir. + +```solidity +function withdrawERC721( + address _token, + uint256 _tokenId, + uint256 _gasLimit +) external payable; + +function withdrawERC721( + address _token, + address _to, + uint256 _tokenId, + uint256 _gasLimit +) external payable; + +function withdrawERC1155( + address _token, + uint256 _tokenId, + uint256 _amount, + uint256 _gasLimit +) external payable; + +function withdrawERC1155( + address _token, + address _to, + uint256 _tokenId, + uint256 _amount, + uint256 _gasLimit +) external payable; +``` + +Büyük miktarda ERC-721 veya ERC-1155 token çekimini kolaylaştırmak için, aşağıdaki işlevler aracılığıyla `L2ERC721Gateway` ve `L2ERC1155Gateway` sözleşmesinde toplu para çekme işlevleri de sağlıyoruz: + +```solidity +function batchWithdrawERC721( + address _token, + uint256[] calldata _tokenIds, + uint256 _gasLimit +) external payable; + +function batchWithdrawERC721( + address _token, + address _to, + uint256[] calldata _tokenIds, + uint256 _gasLimit +) external payable; + +function batchWithdrawERC1155( + address _token, + uint256[] calldata _tokenIds, + uint256[] calldata _amounts, + uint256 _gasLimit +) external payable; + +function batchWithdrawERC1155( + address _token, + address _to, + uint256[] calldata _tokenIds, + uint256[] calldata _amounts, + uint256 _gasLimit +) external payable; +``` + +ERC-721 veya ERC-1155 tokenleri için L1 muadil sözleşmeleri, L1'deki para çekme işlemlerini tamamlamak için `L1ERC721Gateway` ve `L1ERC1155Gateway` sözleşmeleridir. \ No newline at end of file diff --git a/src/content/docs/tr/technology/chain/accounts.mdx b/src/content/docs/tr/technology/chain/accounts.mdx new file mode 100644 index 000000000..64dff72b0 --- /dev/null +++ b/src/content/docs/tr/technology/chain/accounts.mdx @@ -0,0 +1,29 @@ +--- +section: technology +date: Last Modified +title: "Hesaplar ve Durum" +lang: "tr" +permalink: "technology/chain/accounts-and-state" +whatsnext: { "İşlemler": "/tr/technology/chain/transactions/" } +--- + +## Hesaplar + +Ethereum'da olduğu gibi Scroll'un da iki hesap türü vardır: Harici sahipli hesap (EOA - Externally-Owned Account) ve akıllı sözleşmeyi ve ek depoları tutan sözleşme hesabı. + +Scroll, durum geçişini daha verimli bir şekilde kanıtlamak amacıyla zkEVM devresini kolaylaştırmak için sözleşme bytecode'una ilişkin ek bilgileri hesapta saklar. + +Scroll'daki hesap aşağıdaki alanları içerir: + +- `nonce`: Gönderenin gönderdiği işlem sayısını gösteren sayaç. +- `balance`: Hesaptaki 'ETH' tokeninin bakiyesi (wei cinsinden birim). +- `storageRoot`: Depolama trie'sinin kök hash'i. Scroll, depolama trie'si için [zkTrie](/tr/techology/sequencer/zktrie)'yi kullandığından, "storageRoot", Poseidon hash'ini 256 bitlik bir tamsayıda saklar. +- `codeHash`: Sözleşme bytecode'unun Keccak hash'i. +- `PoseidonCodeHash` (**yeni alan**): Sözleşme bytecodu'nun 256 bitlik bir tam sayıdaki Poseidon hash'i. +- `CodeSize` (**yeni alan**): Sözleşme bytecodu'nun byte cinsinden boyutu. + +## Durum + +Bir blokzincirin durumu, hesap verilerinin bir koleksiyonudur. _state trie_, hesap verilerini ve bunlara karşılık gelen adresleri bir [Merkle ağacı](https://en.wikipedia.org/wiki/Merkle_tree) veri yapısına kodlar. Ağacın kökü veya blokzincirin durumu, ağaçta bulunan tüm hesap verilerinin kriptografik bir özetidir. + +Ethereum, hem durum trie'si hem de depolama trie'si için [Patricia Merkle Trie](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) adlı bir veri yapısı kullanır, bu yapı bir akıllı sözleşmede anahtar/değer girişlerini saklar. Scroll'da Patricia Merkle Trie'yi hem durum denemesi hem de depolama denemesi için zkTrie adı verilen daha zk dostu bir veri yapısıyla değiştiriyoruz. Yüksek düzeyde, zkTrie veri yapısı, zk dostu bir hash fonksiyonu olan [Poseidon hashini](https://eprint.iacr.org/2019/458.pdf) içeren seyrek bir ikili Merkle ağacıdır. [zkTrie](/teknoloji/sequencer/zktrie) belgesinde bu veri yapısı hakkında daha fazla detaylı bilgi açıklanmaktadır. diff --git a/src/content/docs/tr/technology/chain/blocks.mdx b/src/content/docs/tr/technology/chain/blocks.mdx new file mode 100644 index 000000000..75c36e8d6 --- /dev/null +++ b/src/content/docs/tr/technology/chain/blocks.mdx @@ -0,0 +1,39 @@ +--- +section: technology +date: Last Modified +title: "Bloklar" +lang: "tr" +permalink: "technology/chain/blocks" +whatsnext: { "Rollup Süreci": "/tr/technology/chain/rollup/" } +--- + +Blok, kendinden önceki bloğu devam ettirmeye yönelik işlemlerden ve bağlantılardan oluşan bir koleksiyondur. + +## Blok Başlığı + +Scroll'daki blok başlığı Ethereum'un yapısını yansıtır. Ancak blok başlığındaki belirli alanlar, aşağıdaki tabloda ayrıntılı olarak belirtildiği gibi, Katman 2 bağlamına uyacak şekilde değiştirilmiştir: + +| Alan | Açıklama | +| ------------------- | ------------------------------------------------------------------ | +| `parentHash` | Kendinden önceki bloğun hash'i. | +| `uncleHash` | Her zaman `keccak256(rlp([]))`. | +| `coinbase` | İşlem ücretleri önceden dağıtılan ücret kasası sözleşme adresi `0x5300000000000000000000000000000000000005`'e tahsil edilir. Çoğu durumda, RPC "madenci" alanı dönüşü sıfır adresidir `0x0000000000000000000000000000000000000000`. | +| `stateRoot` | Durum trie'sinin kök hash'i. Aynı zamanda Poseidon'dur. | +| `transactionsRoot ` | İşlem trie'sinin kök hash'i. | +| `receiptsRoot ` | İşlem makbuzu trie'sinin kök hash'i. | +| `logsBloom` | Olay kayıtlarını içeren veri yapısı. | +| `difficulty` | Her zaman 1 veya 2'dir. | +| `number` | Blok numarası. | +| `gasLimit` | Blokta izin verilen maksimum gas. | +| `gasUsed` | Blokta kullanılan gas. | +| `timestamp` | Blok zaman damgası. | +| `extraData` | Bloğu imzalayan kişinin imzası ve ardından isteğe bağlı ek veriler. | +| `mixHash` | Her zaman 0. | +| `nonce` | Her zaman 0. | +| `baseFee` | Scroll'da EIP-1559'u etkinleştirmediğimiz için şu anda boş. | + +## Blok süresi + +Blok süresi ardışık iki blok arasındaki süreyi ifade eder. Scroll'da blok süresi 3 saniyeye ayarlanmıştır. Kısaltılmış blok süresi kullanıcı deneyimini iyileştirir ve Scroll zincirinin ölçeklenebilirliğini artırır. + +3 saniyelik blok süresi en iyi çaba esasına göre korunur, protokol tarafından garanti edilmez veya zorunlu kılınmaz. diff --git a/src/content/docs/tr/technology/chain/differences.mdx b/src/content/docs/tr/technology/chain/differences.mdx new file mode 100644 index 000000000..42a90c5db --- /dev/null +++ b/src/content/docs/tr/technology/chain/differences.mdx @@ -0,0 +1,46 @@ +--- +section: technology +date: Last Modified +title: "Ethereum EVM'inden Farklar" +lang: "tr" +permalink: "technology/chain/differences" +whatsnext: { "Köprü": "/tr/technology/bridge/cross-domain-messaging/" } +--- + +## Opcode'lar + +| Opcode | Scroll Davranışı | +| --------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `BLOCKHASH` | Son 256 blok için `keccak(chain_id \|\| block_number)`nı döndürür. | +| `COINBASE` | Ücret kasası adresini döndürür (önceden konuşlandırılmış sözleşme `0x5300000000000000000000000000000000000005`). | +| `DIFFICULTY` / `PREVRANDAO` | Her zaman 0 değerini döndür. | +| `BASEFEE` | Şu anda EIP-1559'u devre dışı bıraktığımız için devre dışı bırakıldı. Opcode ile karşılaşılırsa işlem geri alınacaktır.| +| `SELFDESTRUCT` | Devre dışı bırakıldı. Opcode ile karşılaşılırsa işlem geri alınacaktır. | + +## Önceden Derlenmiş Sözleşmeler + +| Adres | İsim | Scroll Davranışı | +| ------- | ------------ | ----------------------------------------------------------------------------------------------- | +| '0x02' | 'SHA2-256' | Şu anda desteklenmiyor. | +| '0x03' | 'RIPEMD-160' | Şu anda desteklenmiyor. | +| '0x05' | 'modexp' | B, E, M giriş değerlerini $2^{256}$'dan küçük imzasız tamsayılarla sınırlar. | +| '0x08' | 'ecPairing' | Girişler hala 6 adet 32 ​​bytelık değerin tam katıdır ancak demet sayısını en fazla 4 ile sınırlandırır. +| '0x09' | 'blake2f' | Şu anda desteklenmiyor. | + +Geriye kalan önceden derlenmiş sözleşmeler Ethereum ile aynı davranışa sahiptir. Ancak bir blok içindeki maksimum kullanımları zkEVM devre kapasitesine bağlı bir limit ile sınırlıdır. + +## EIP'ler + +Sıralayıcımız başlangıçta Londra çatallanmasına dayalı olarak geliştirildi. Uyumluluğu geliştirmek için Londra çatallanmasındaki bazı EIP'leri devre dışı bıraktık ve Şanghay çatallanmasından birkaç EIP'yi tanıttık. + +Londra çatallanmasına kadar devre dışı bırakılan EIP'ler: + +- [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559): Ücret piyasası değişikliği ve EIP-1559 işlem türü +- [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930): İsteğe bağlı erişim listeleri +- [EIP-3198](https://eips.ethereum.org/EIPS/eip-3198): BASEFEE opcode + +Şangay çatallanmasından gelen EIP'ler: + +- [EIP-3651](https://eips.ethereum.org/EIPS/eip-3651): Warm `COINBASE' +- [EIP-3855](https://eips.ethereum.org/EIPS/eip-3855): PUSH0 talimatı +- [EIP-3860](https://eips.ethereum.org/EIPS/eip-3860): initcode'u sınırlar ve ölçer diff --git a/src/content/docs/tr/technology/chain/rollup.mdx b/src/content/docs/tr/technology/chain/rollup.mdx new file mode 100644 index 000000000..4588d62c8 --- /dev/null +++ b/src/content/docs/tr/technology/chain/rollup.mdx @@ -0,0 +1,155 @@ +--- +section: technology +date: Last Modified +title: "Rollup Süreci" +lang: "tr" +permalink: "technology/chain/rollup" +whatsnext: { "Ethereum EVM'inden Farklar": "/tr/technology/chain/differences/" } +--- + +import ClickToZoom from "../../../../../components/ClickToZoom.astro" +import RollupProcess from "../_images/rollup.png" + +Bu belgede Scroll'daki rollup işlemi açıklanmaktadır. + +## İş Akışı + + + +Şekilde rollup iş akışı gösterilmektedir. L2 sıralayıcısı üç modül içerir: + +- **Senkronizasyon hizmeti** L1 köprü sözleşmesinden düzenlenen etkinliğe abone olur. L1 gelen kutusuna yeni eklenen mesajları tespit ettiğinde, Senkronizasyon Hizmeti buna göre yeni bir "L1MessageTx" işlemi oluşturacak ve bunu yerel L1 işlem kuyruğuna ekleyecektir. +- **Mempool** doğrudan L2 sıralayıcısına gönderilen işlemleri toplar. +- **Yürütücü** hem L1 işlem kuyruğundan hem de L2 mempool'dan işlemleri çeker ve yeni bir L2 bloğu oluşturmak için bunları yürütür. + +Rollup düğümü üç modül içerir: + +- **Aktarıcı**, veri kullanılabilirliği ve kesinliği için taahhüt işlemlerini ve sonlandırma işlemlerini rollup sözleşmesine gönderir. +- **Parça Önerici** ve **Yığın Önerici**, [İşlem Toplu İşleme](/tr/technology/chain/transactions#transaction-batching) bölümünde açıklanan kısıtlamalara uygun olarak yeni parçalar ve yeni yığınlar önerir. + +Rollup süreci üç aşamaya ayrılabilir: işlemin yürütülmesi, yığın oluşturma ve veri taahhüdü, kanıt oluşturma ve sonuçlandırma. + +### Aşama 1. İşlemin Yürütülmesi + +1. Kullanıcılar işlemleri L1 köprü sözleşmesine veya L2 sıralayıcılara gönderir. +2. L2 sıralayıcıdaki Senkronizasyon Hizmeti, köprü sözleşmesinden en son eklenen L1 işlemlerini getirir. +3. L2 sıralayıcı, L2 blokları oluşturmak için hem L1 mesaj kuyruğundan hem de L2 bellek havuzundan gelen işlemleri işler. + +### Aşama 2. Yığın Oluşturma ve Veri Taahhüdü + +4. Rollup düğümü en son L2 bloklarını izler ve işlem verilerini getirir. +5. Kriter ([İşlem Toplu İşleme](/tr/technology/chain/transactions#transaction-batching) bölümünde açıklanan) karşılanırsa, rollup düğümü yeni bir yığın veya parça önerir ve bunu veritabanına yazar. Aksi halde rollup düğümü daha fazla blok veya parça beklemeye devam eder. +6. Yeni bir yığın oluşturulduktan sonra, rollup aktarıcısı bu yığındaki işlem verilerini toplar ve verilerin kullanılabilirliği için rollup sözleşmesine bir Taahhüt İşlemi gönderir. + +### Aşama 3. Kanıt Oluşturma ve Sonlandırma + +7. Koordinatör veri tabanından yeni bir parça veya yığını yokladığında: + - Yeni bir parça üzerine koordinatör, L2 sıralayıcıdan bu yığındaki tüm blokların yürütme izlerini sorgulayacak ve ardından rastgele seçilen bir zkEVM kanıtlayıcıya bir parça kanıtlama görevi gönderecektir. + - Yeni bir yığın üzerine, koordinatör bu yığındaki tüm parçaların parça kanıtlarını veri tabanından toplayacak ve rastgele seçilen bir toplayıcı kanıtlayıcıya bir yığın kanıtlama görevi gönderecektir. +8. Koordinatör kanıtlayıcıdan parça veya yığın kanıtı aldığında, kanıtı veri tabanına yazacaktır. +9. Rollup aktarıcısı veri tabanından yeni bir yığın seçtiğinde, kanıtı doğrulamak için rollup sözleşmesine bir Sonlandırma İşlemi gönderecektir. + +## Taahhüt İşlemi + +Taahhüt İşlemi, veri kullanılabilirliği için blok bilgilerini ve işlem verilerini L1'e gönderir. İşlem, yığın başlığını, parça verilerini ve atlanan L1 mesajının bir bit eşlemini içerir. Üst yığın başlığı, bu yığının bağlandığı önceki yığını belirtir. Üst yığın daha önce işlenmelidir; aksi takdirde işlem geri alınacaktır. Aşağıdaki `commitBatch` işlev imzasına bakın. + +```solidity +function commitBatch( + uint8 version, + bytes calldata parentBatchHeader, + bytes[] memory chunks, + bytes calldata skippedL1MessageBitmap +) external override OnlySequencer +``` + +`commitBatch` işlevi üst yığının daha önce taahhüt edildiğini doğruladıktan sonra yığının, yığın başlığını oluşturur ve yığının başlığının hash'ini `ScrollChain` sözleşmesine kaydeder. + +```solidity +mapping(uint256 => bytes32) public committedBatches; +``` + +Yığın ve parça verilerinin kodlanması [Codec](#codec) bölümünde açıklanmaktadır. Yığın başlığındaki alanların çoğu, parça verilerinden türetilecek şekilde basittir. Dikkat edilmesi gereken önemli alanlardan biri, geçerlilik kanıtını doğrulamak için kamuya açık girdinin bir parçası haline gelecek olan `dataHash`tır. Bir yığının "n" parça içerdiğini varsayarsak, `dataHash` aşağıdaki şekilde hesaplanır. + +``` +batch.dataHash := keccak(chunk[0].dataHash || ... || chunk[n-1].dataHash) +``` + +Bir parçanın 'k' blok içerdiğini varsayarsak, onun `dataHash`ı aşağıdaki şekilde hesaplanır: + +``` +chunk.dataHash := keccak(blockContext[0] || ... || blockContext[k-1] || + block[0].l1TxHashes || block[0].l2TxHashes || ... || + block[k-1].l1TxHashes || block[k-1].l2TxHashes) +``` + +Burada `block.l1TxHashes` bu bloktaki L1 işlemlerinin birleştirilmiş işlem hash'leridir ve `block.l2TxHashes` ise bu bloktaki L2 işlemlerinin birleştirilmiş işlem hash'leridir. L1 işlemlerinin işlem hash'lerinin rollup düğümü tarafından yüklenmediğini, bunun yerine bu blokta yer alan L1 mesajlarının indeks aralığı göz önüne alındığında doğrudan `L1MessageQueue` sözleşmesinden yüklendiğini unutmayın. L2 işlem hash'leri, [`Chunk`](#Chunk-Codec) içindeki `l2Transactions` alanındaki RLP kodlu bytelardan hesaplanır. + +Ek olarak, `commitBatch` fonksiyonu atlanan L1 mesajlarının bir bit eşlemini içerir. Ne yazık ki bunun nedeni kanıt taşması sorunudur. Bir L1 mesajına karşılık gelen L1 işlemi devre kapasitesi sınırını aşarsa, bu işlem için geçerli bir kanıt oluşturamayacağız ve dolayısıyla L1'de sonlandıramayız. Scroll, kanıtlama sistemimizde yapılan yükseltmeler yoluyla kanıt taşması sorununu ortadan kaldırmak için aktif olarak çalışıyor. + +## Sonlandırma İşlemi + +Sonlandırma İşlemi, daha önce taahhüt edilen yığını geçerlilik kanıtıyla sonlandırır. İşlem ayrıca toplu işlemden sonra durum kökünü ve çekilme kökünü de gönderir. İşte `finalizeBatchWithProof`un işlev imzası: + +```solidity +function finalizeBatchWithProof( + bytes calldata batchHeader, + bytes32 prevStateRoot, + bytes32 postStateRoot, + bytes32 withdrawRoot, + bytes calldata aggrProof +) external override OnlyProver +``` + +finalizeBatchWithProof` işlevi ilk olarak yığının sözleşmede taahhüt edilip edilmediğini doğrular. Daha sonra genel giriş hash'ini aşağıdaki gibi hesaplar + +``` +publicInputHash := keccak(chainId || prevStateRoot || postStateRoot || withdrawRoot || batch.dataHash) +``` + +Genel giriş hash'i ve geçerlilik kanıtı, plonk sağlamlık doğrulayıcıya gönderilir. Doğrulama başarılı olduktan sonra yeni durum kökü ve çekim kökü `ScrollChain` sözleşmesinde saklanır. + +```solidity +mapping(uint256 => bytes32) public override finalizedStateRoots; +mapping(uint256 => bytes32) public override withdrawRoots; +``` + +Bu aşamada en son sonuçlanan yığının durum kökü güvenilir bir şekilde kullanılabilir ve o yığındaki para çekme işlemleri, para çekme köküne Merkle kanıtı kullanılarak L1 üzerinden gerçekleştirilebilir. + +## Codec + +Bu bölümde rollup sözleşmesindeki üç veri yapısının codec'i açıklanmaktadır: `BatchHeader`, `Chunk`, ve `BlockContext`. + +### `BatchHeader` Codec + +| Alan | Bytes | Veri tipi | Offset | Açıklama | +| ------------------------ | ------- | ----------- | ------ | --------------------------------------------------------------- | +| `version` | 1 | `uint8` | 0 | Yığın başlık sürümü | +| `batchIndex` | 8 | `uint64` | 1 | Yığının indeksi | +| `l1MessagePopped` | 8 | `uint64` | 9 | Yığında açılan L1 mesajlarının sayısı | +| `totalL1MessagePopped` | 8 | `uint64` | 17 | Yığından sonra açılan toplam L1 mesajlarının sayısı | +| `dataHash` | 32 | `bytes32` | 25 | Yığının veri hashi | +| `parentBatchHash` | 32 | `bytes32` | 57 | Üst yığının hashi | +| `skippedL1MessageBitmap` | dynamic | `uint256[]` | 89 | Yığında hangi L1 mesajlarının atlandığını gösteren bir bit eşlem | + +### `Chunk` Codec + +| Alan | Bytes | Veri tipi | Offset | Açıklama | +| ---------------- | ------- | -------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `numBlocks` | 1 | `uint8` | 0 | Parçadaki blok sayısı | +| `block[0]` | 60 | `BlockContext` | 1 | İlk bloğun blok bilgileri | +| ... | ... | ... | ... | ... | +| `block[i]` | 60 | `BlockContext` | `60*i+1` | `i+1`inci bloğun blok bilgisi | +| ... | ... | ... | ... | ... | +| `block[n-1]` | 60 | `BlockContext` | `60*n-59` | Son bloğun blok bilgisi | +| `l2Transactions` | dynamic | `bytes` | `60*n+1` | İmzalarla L2 işlemlerinin birleştirilmiş RLP kodlaması. RLP kodlamasının bayt uzunluğu (`uint32`) her işlemden önce eklenir. | + +### `BlockContext` Codec + +| Alan | Bytes | Veri tipi | Offset | Açıklama | +| ----------------- | ----- | --------- | ------ | ----------------------------------------------------------------------------------- | +| `blockNumber` | 8 | `uint64` | 0 | Blok numarası | +| `timestamp` | 8 | `uint64` | 8 | Blok zamanı | +| `baseFee` | 32 | `uint256` | 16 | Bu bloğun taban ücreti. Şu anda her zaman 0'dır çünkü EIP-1559'u devre dışı bırakıyoruz. | +| `gasLimit` | 8 | `uint64` | 48 | Bu bloğun gaz limiti | +| `numTransactions` | 2 | `uint16` | 56 | Hem L1 hem de L2 tx'leri dahil olmak üzere bu bloktaki işlem sayısı | +| `numL1Messages` | 2 | `uint16` | 58 | Bu bloktaki L1 mesajlarının sayısı | diff --git a/src/content/docs/tr/technology/chain/transactions.mdx b/src/content/docs/tr/technology/chain/transactions.mdx new file mode 100644 index 000000000..0e09d96e2 --- /dev/null +++ b/src/content/docs/tr/technology/chain/transactions.mdx @@ -0,0 +1,91 @@ +--- +section: technology +date: Last Modified +title: "İşlemler" +lang: "tr" +permalink: "technology/chain/transactions" +whatsnext: { "Bloklar": "/tr/technology/chain/blocks/" } +--- + +import ClickToZoom from "../../../../../components/ClickToZoom.astro" +import TransactionBatching from "../_images/batching.png" + +İşlem, zincir durumuna bir durum geçişini başlatan kriptografik olarak imzalanmış bir mesajdır. Bu, basit bir bakiye transferi veya akıllı bir sözleşmenin başlatılması olabilir ve bu da durumu değiştirmek için bir program yürütür. + +## İşlem tipi + +Şu anda Scroll üç tür işlemi desteklemektedir. + +- EIP-155 Öncesi İşlem: Bu, [Singleton Factory](https://eips.ethereum.org/EIPS/eip-2470) sözleşmesini desteklemek içindir. +- Eski Tip İşlem (bkz. [EIP-155](https://eips.ethereum.org/EIPS/eip-155)) +- `L1MessageTx` Tipi Belirli İşlem (Tip: `0x7E`): Bu, aşağıda açıklandığı gibi Scroll'da tanıtılan yeni bir [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) işlemidir. Bu işlem tipi L1'de başlatılan işlemler içindir. + +Unutmayın ki [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) ve [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) işlem tipleri şu anda Scroll'da desteklenmemektedir. Scroll gelecekte bu iki işlem türünü geri getirecektir. + +### L1 Mesaj İşlemi + +L1 tarafından başlatılan işlemler için yeni bir tür işlem olan 'L1MessageTx'i sunuyoruz. Bu tür işlemler L1 köprü sözleşmesinde başlatılır. L1'deki 'L1MessageQueue' sözleşmesine her yeni mesaj eklendiğinde, L2 sıralayıcı, L2 bloklarına dahil edilecek karşılık gelen bir 'L1MessageTx' işlemi yaratacaktır. Kullanıcılar L1'de işlemi gönderdiğinde imza zaten dolaylı olarak doğrulanmış olduğundan, "L1MessageTx" işlemlerinin imzası yoktur. + +`L1MessageTx` işlem türü `0x7E` olup, yükü aşağıdaki gibi tanımlanmıştır. + +```go +type L1MessageTx struct { + QueueIndex uint64 // The queue index of the message queue in L1 contract + Gas uint64 // Gas limit + To *common.Address // Cannot be nil, we do not allow contract creation from L1 + Value *big.Int + Data []byte + Sender common.Address +} +``` + +'L1MessageTx' işlemlerinin RLP (Recursive Length Prefix) kodlaması, [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) 'TransactionType || TransactionPayload`; burada 'TransactionType', '0x7E' ve 'TransactionPayload = RLP(L1MessageTx)'dir. + +'L1MessageTx' işlemlerinin dikkat çeken iki davranışı: + +- İşlemdeki "QueueIndex", "Gönderen" hesabının "Nonce"inden farklı olarak L1 mesaj kuyruğundaki kuyruk indeksidir. Ancak gönderenin "Nonce" değeri işlem sonrasında yine 1 artacaktır. +- Bu tür işlemlerde [L2 ücreti](/tr/developers/transaction-fees-on-scroll#l2-fee) veya [L1 ücreti](/tr/developers/transaction-fees-on-scroll#l1-fee) ödenmez . Kullanıcılar L1'de işlem gönderdiğinde L2 ücreti zaten ödenir. L1MessageTx işlemlerine ait veriler L1 köprü sözleşmesinde zaten mevcut olduğundan L1 ücreti alınmaz. + +## İşlem Yaşam Döngüsü + +Scroll'daki işlem yaşam döngüsü aşağıdaki üç aşamayı içerir: + +1. **Onaylandı**: Kullanıcılar L1 köprü sözleşmesine veya L2 sıralayıcıya bir işlem gönderir. İşlem yürütülüp L2 bloğuna dahil edildikten sonra 'Onaylandı' olur. +2. **Taahhüt Edildi**: İşlemler bir gruba dahil edilir ve bu grubun verilerini içeren bir _taahhüt işlemi_ L1'e gönderilir. L1 bloklarında taahhüt işlemi tamamlandıktan sonra bu partideki işlemler 'Taahhüt Edildi' olur. +3. **Sonlandırıldı**: Bu serinin geçerlilik kanıtı L1'de oluşturulur ve doğrulanır. _Sonlandırma işlemi_ L1'de sonlandırıldıktan sonra, işlemin durumu 'Sonlandırıldı' olur ve Scroll L2 zincirinin kanonik bir parçası haline gelir. + +### İşlemlerin Gönderilmesi + +Kullanıcıların Scroll'a işlem gönderebilecekleri iki giriş noktası vardır. + +İlk olarak kullanıcılar, işlemlerini doğrudan L2 sıralayıcılara gönderebilir. Bunu yapmak için kullanıcıların cüzdanlarını yapılandırmaları ve Scroll RPC uç noktasına bağlanmaları yeterlidir. Sıralayıcı işlemi doğrular ve yerel işlem havuzunda saklar. + +İkincisi, mevduat ve icra edilen işlemler L1'den kaynaklanmaktadır. Scroll L1 köprü sözleşmesi, kullanıcılara ve akıllı sözleşmelere L1'den işlem göndermeleri için üç giriş noktası sağlar. Bu üç giriş noktası üzerinden gönderilen tüm mesajlar 'L1MessageQueue' sözleşmesine eklenecektir. + +- 'ScrollGatewayRouter' sözleşmesi ve çeşitli standart token ağ geçitleri, kullanıcıların ve sözleşmelerin standart tokenları L2'ye yatırmasına olanak tanır. Daha fazla ayrıntıyı [Yatırma Ağ Geçitleri](/tr/technology/bridge/deposit-gateways) bölümünde bulabilirsiniz. +- 'L1ScrollMessenger' sözleşmesi, kullanıcıların ve sözleşmelerin L2'ye isteğe bağlı mesajlar göndermesine olanak tanır. Daha fazla ayrıntıyı [Keyfi Mesaj Gönderme](/tr/technology/bridge/cross-domain-messaging#sending-arbitrary-messages) bölümünde bulabilirsiniz. +- 'EnforcedTxGateway' sözleşmesi, EOA'ların aynı adresten zorunlu bir işlem başlatmasına, tokenleri çekmesine veya L2'deki diğer sözleşmeleri çağırmasına olanak tanır. Daha fazla ayrıntıyı [Zorunlu İşlem Gönderme](/tr/technology/bridge/cross-domain-messaging#sending-enforced-transactions) bölümünde bulabilirsiniz. + +Scroll sıralayıcısı periyodik olarak yeni bir madencilik işi başlatır. L1 mesajlarını 'L1MessageQueue' sözleşmesinden ve L2 mempool'daki işlemlerden çeker ve bir bloğu mühürler. Bir işlem L2 bloğuna dahil edildiğinde durumu 'Onaylandı' olur. + +### İşlem Verilerinin Taahhüdü + +Rollup düğümü, yeni L2 bloklarını toplar, bunları parçalar ve gruplar halinde paketler (daha fazla ayrıntı için [İşlem Yığınları](/tr/technology/chain/transactions#transaction-batching) bölümüne bakın). Periyodik olarak, bir işlem grubunun verilerini L1 "ScrollChain" sözleşmesine gönderen bir _Taahhüt İşlemi_ gönderir. Taahhüt İşlemi L1 bloğunda sonlandırıldıktan sonra bu partideki işlemlerin durumu 'Kaydedildi' olur. Şu anda kullanıcılar, L1 sözleşmesindeki taahhüt edilen verilere dayanarak L2 durumunu kendileri tamamen yeniden yapılandırabilirler. + +### İşlemlerin Sonlandırılması + +Geçerlilik kanıtı oluşturulduktan sonra rollup düğümü, zincir içi doğrulama için bu gruptan sonra geçerlilik kanıtını ve yeni durum kökünü içeren bir _Sonlandırma İşlemi_ gönderir. Sonlandırma İşlemi başarılı olduğunda ve bir L1 bloğunda onaylandığında, bu gruptaki L2 işlemlerinin durumu 'Sonlandırıldı' olur. Yeni durum kökü üçüncü taraflarca güvenle kullanılabilir. + +## İşlem Yığınları + + + +Scroll'da işlemler birden fazla katman halinde yığın hale getirilir. + +1. Bir grup sıralı işlem bir blok halinde paketlenir. +2. Bir dizi bitişik blok, bir parça halinde gruplandırılır. Parça, zkEVM devresinin kanıt üretimi için temel birimdir. +3. Bir dizi bitişik parça bir yığın halinde gruplandırılır. Yığın, L1'de veri taahhüdü ve kanıt doğrulama için temel birimdir. Bir yığının kanıtı veya _yığın kanıtı_, bu gruptaki yığın kanıtlarının toplu kanıtıdır. + +Bu çok katmanlı gruplandırma şemasının amacı, zincir üstü veri taahhüdü ve kanıt doğrulamanın gas maliyetini azaltmaktır. Bu yaklaşım, sabit devre kapasitesini dikkate alırken L1'deki rollup birimlerinin ayrıntı düzeyini artırır. Sonuç olarak, yığın sözleşmede saklanacak verileri azaltır ve kanıt doğrulama maliyetini daha fazla L2 işlemine göre amorti eder. + +Bir parça oluşturulduktan sonra karşılık gelen bir parça kanıtlama görevi oluşturulacak ve bir zkEVM kanıtlayıcıya gönderilecektir. Yeni bir yığın oluşturulduktan sonra birbirini takip eden iki eylem gerçekleşir: (a) rollup düğümü bu yığın işlem verilerini ve blok bilgilerini L1 sözleşmesine gönderir ve (b) yığın kanıtlarını bir araya getirmek için bir parça kanıtlama görevi bir L1 kanıtlama toplayıcısı sözleşmesine gönderilir. Bir parça ve yığın önermeye yönelik standartlar [Rollup Düğümü](/tr/technology/sequencer/rollup-node) kısmında ayrıntılı olarak açıklanmıştır. diff --git a/src/content/docs/tr/technology/index.mdx b/src/content/docs/tr/technology/index.mdx new file mode 100644 index 000000000..35a8a43a1 --- /dev/null +++ b/src/content/docs/tr/technology/index.mdx @@ -0,0 +1,24 @@ +--- +section: technology +date: Last Modified +title: "Scroll Mimarisi" +lang: "tr" +permalink: "technology" +whatsnext: + { "Scroll Zinciri": "/tr/technology/chain/accounts", "Köprü": "/tr/technology/bridge/cross-domain-messaging", "Sıralayıcı": "/tr/technology/sequencer/execution-node", "zkEVM": "/tr/technology/zkevm/zkevm-overview" } +--- + +import ClickToZoom from "../../../../components/ClickToZoom.astro" +import Architecture from "./_images/arch.png" + + + +Yukarıdaki şekilde gösterildiği gibi Scroll zinciri üç katmandan oluşur: + +- **Yerleşim Katmanı**: Kanonik Scroll zinciri için veri kullanılabilirliği ve sıralama sağlar, geçerlilik kanıtlarını doğrular ve kullanıcıların ve dapp'lerin Ethereum ile Scroll arasında mesaj ve varlık göndermesine olanak tanır. Uzlaşma Katmanı olarak Ethereum'u kullanıyoruz ve köprü ve rollup sözleşmesini Ethereum'a dağıtıyoruz. +- **Sıralama Katmanı**: Scroll sıralayıcısına gönderilen işlemleri ve L1 köprü sözleşmesine gönderilen işlemleri yürüten ve L2 blokları üreten bir *Yürütme Düğümü*, ve işlemleri gruplandırıp veri kullanılabilirliği için işlem verileri ve blok bilgisini Ethereum'a gönderen ve kesinlik için geçerlilik kanıtlarını Ethereum'a gönderen bir *Rollup Düğümü* içerir. +- **Kanıtlama Katmanı**: L2 işlemlerinin doğruluğunu doğrulayan zkEVM geçerlilik kanıtlarını oluşturmaktan sorumlu olan kanıtlayıcılardan oluşan bir havuzdan ve kanıtlayıcılara kanıtlayıcı görevleri gönderen ve kanıtları Rollup Düğümüne ileterek Ethereum'da finalize edecek bir koordinatörden oluşur. + +Belgelerin bu bölümü, Scroll protokolü spesifikasyonu, köprüleme protokolü, sıralayıcı ve zkEVM devresi hakkında kapsamlı bilgi sağlar. + +*Bu bölümün geri kalanında L1 Ethereum'u, L2 ise Scroll'u ifade edecektir.* \ No newline at end of file diff --git a/src/content/docs/tr/technology/overview/scroll-upgrades.mdx b/src/content/docs/tr/technology/overview/scroll-upgrades.mdx new file mode 100644 index 000000000..9af00ea4e --- /dev/null +++ b/src/content/docs/tr/technology/overview/scroll-upgrades.mdx @@ -0,0 +1,90 @@ +--- +section: technology +date: Last Modified +title: "Scroll Yükseltmeleri" +lang: "tr" +permalink: "technology/overview/scroll-upgrades" +--- + +Ekip Scroll'un yol haritası üzerinde ilerlemeye devam ettikçe, Scroll ağını yeni özellikler ve iyileştirmeler içerecek şekilde yükselteceğiz. + +Aşağıdaki sözleşmeler, yükseltmeleri başlatmak ve iki haftalık zaman kilitleme süresinden sonra yükseltmeleri yürütmek için kullanılır: + +| Kontrat | Ağ | Adres | +| ------------------------ | ------- | - | +| L1 Scroll Multisig | Ethereum| [`0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe`](https://etherscan.io/address/0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe)| +| L1 Timelock | Ethereum| [`0x1A658B88fD0a3c82fa1a0609fCDbD32e7dd4aB9C`](https://etherscan.io/address/0x1A658B88fD0a3c82fa1a0609fCDbD32e7dd4aB9C)| +| L2 Scroll Multisig | Scroll| [`0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe`](https://scrollscan.com/address/0xEfc9D1096fb65c832207E5e7F13C2D1102244dbe)| +| L2 Timelock | Scroll | [`0xf6069DB81239E5194bb53f83aF564d282357bc99`](https://scrollscan.com/address/0xf6069DB81239E5194bb53f83aF564d282357bc99)| + +## Şubat 2024 Köprü Yükseltmesi + +### Genel Bakış + +Köprüleme maliyetlerini azaltmak için köprü ve rollup sözleşme paketimizde çeşitli gas optimizasyonları uyguladık. Kullanılan optimizasyon teknikleri aşağıdakileri içerir: + +- Artık bazı tamamlayıcı sözleşme adreslerini depolamak için depolama değişkenleri yerine sabitleri kullanacağız. Bu değerlerin (neredeyse) asla değişmemesi gerektiğinden bu mümkündür. Bu değişiklikle birkaç depolama yükleme işleminden tasarruf edebiliriz. +- `L1MessageQueue`daki içsel gas tahminini, kesin bir hesaplama yerine basit bir üst sınır kullanacak şekilde güncelledik. Çoğu köprü işlemi için iki sonuç benzer olacaktır ancak yeni uygulama önemli ölçüde daha ucuzdur. +- Bir sözleşmeden diğerine çağrı maliyetlerinden tasarruf etmek için iki sözleşme `L1MessageQueue` ve `L2GasPriceOracle`yı birleştirdik. + +### Zaman çizelgesi + + +- **Scroll Sepolia:** +- Ağ Yükseltmesi: 19 Ocak 2024 +- **Scroll Ana Ağ:** +- Yükseltme Başlatma: 7 Şubat 2024 +- Zaman Kilidinin Tamamlanması ve Yükseltilmesi: 21 Şubat 2024 + + +### Teknik detaylar + +#### Kod Değişiklikleri +- [Köprü Maliyet Optimizasyonu](https://github.com/scroll-tech/scroll/pull/1011) +- [Denetim Düzeltmeleri](https://github.com/scroll-tech/scroll/pulls?q=OZ+is%3Apr+created%3A2024-01-27..2024-02-10) +- [Önceden dağıtılan sürüm](https://github.com/scroll-tech/scroll/tree/ff380141a8cbcc214dc65f17ffa44faf4be646b6) ('ff380141a8cbcc214dc65f17ffa44faf4be646b6' işlemini gerçekleştirin) +- [Sürüm dağıtıldı](https://github.com/scroll-tech/scroll/tree/6030927680a92d0285c2c13e6bb27ed27d1f32d1) ('6030927680a92d0285c2c13e6bb27ed27d1f32d1' işlemini gerçekleştirin) + +#### Denetimler + +- [OpenZeppelin](https://blog.openzeppelin.com/scroll-bridge-gas-optimizations-audit) + +#### Değişiklik Listesi + +**L1 sözleşmelerindeki değişiklikler:** + +- `ScrollChain`de, `messageQueue` ve `verifier`ı `immutable` yaptık. +- `L1ScrollMessenger`da, `counterpart`, `rollup`, ve `messageQueue`yu `immutable` yaptık. +- Tüm token ağ geçitlerinde, `counterpart`, `router`, ve `messenger`ı `immutable` yaptık. +- `L1MessageQueue` ve `L2GasPriceOracle`ı tek bir `L1MessageQueueWithGasPriceOracle` sözleşmesinde birleştirdik (önceki `L1MessageQueue` ile aynı adrese konuşlandırıldı). Bu sözleşmede ayrıca `messenger` ve `scrollChain`i `değişmez` olarak değiştiriyoruz ve `calculateIntrinsicGasFee`yi basitleştiriyoruz. + +**L2 sözleşmelerindeki değişiklikler:** + +- `L2ScrollMessenger`da `counterpart`ı `immutable` olacak şekilde değiştirdik. +- Tüm token ağ geçitlerinde, `counterpart`, `router`, ve `messenger`ı to `immutable` olacak şekilde değiştirdik. + +**Etkilenen sözleşmeler:** + +- **L1:** `L1MessageQueue`, `L2GasPriceOracle`, `ScrollChain`, `L1WETHGateway`, `L1StandardERC20Gateway`, `L1GatewayRouter`, `L1ScrollMessenger`, `L1CustomERC20Gateway`, `L1ERC721Gateway`, `L1ERC1155Gateway`. +- **L2:** `L2ScrollMessenger`, `L2WETHGateway`, `L2StandardERC20Gateway`, `L2GatewayRouter`, `L2CustomERC20Gateway`, `L2ERC721Gateway`, `L2ERC1155Gateway`. + +#### Uyumluluk + +##### Sıralayıcı ve takipçi düğümleri (l2geth) + +`l2geth` düğümü çalıştıran operatörlerin yükseltme yapmasına gerek yoktur. Bu yükseltmedeki değişiklikler `l2geth`i etkilemeyecektir. + +##### Dapp'ler ve indexer'lar + +Sözleşmeleri sorgulayan veya sözleşme arayüzlerine dayanan dapp'lerin ve indeksleyicilerin (ve benzer zincir dışı altyapının) çoğu durumda değiştirilmesine gerek yoktur. Sözleşme değişikliklerinin çoğunluğu dahili ve/veya geriye dönük olarak uyumludur. + +Uygulamanız, Scroll'un L1'deki L2 gas fiyatını nasıl takip ettiğini izlemek için [`L2GasPriceOracle`](https://etherscan.io/address/0x987e300fDfb06093859358522a79098848C33852)'ye bağlıysa yükseltme blok numarasından izlemeye başlamanız gerekir [`L1MessageQueueWithGasPriceOracle`](https://etherscan.io/address/0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B). + +Orijinal gas fiyatı oracle sözleşmesi kullanımdan kaldırılacak: artık Scroll köprüsü tarafından güncellenmeyecek veya kullanılmayacaktır. + +- Ethereum: + - `L2GasPriceOracle`: [`0x987e300fDfb06093859358522a79098848C33852`](https://etherscan.io/address/0x987e300fDfb06093859358522a79098848C33852) + - `L1MessageQueueWithGasPriceOracle`: [`0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B`](https://etherscan.io/address/0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B) +- Sepolia: + - `L2GasPriceOracle`: [`0x247969F4fad93a33d4826046bc3eAE0D36BdE548`](https://sepolia.etherscan.io/address/0x247969F4fad93a33d4826046bc3eAE0D36BdE548) + - `L1MessageQueueWithGasPriceOracle`: [`0xF0B2293F5D834eAe920c6974D50957A1732de763`](https://sepolia.etherscan.io/address/0xF0B2293F5D834eAe920c6974D50957A1732de763) \ No newline at end of file diff --git a/src/content/docs/tr/technology/prover/proof-generation.mdx b/src/content/docs/tr/technology/prover/proof-generation.mdx new file mode 100644 index 000000000..93857ebbd --- /dev/null +++ b/src/content/docs/tr/technology/prover/proof-generation.mdx @@ -0,0 +1,7 @@ +--- +section: technology +date: Last Modified +title: "Kanıt Oluşturma" +lang: "tr" +permalink: "technology/prover/proof-generation" +--- diff --git a/src/content/docs/tr/technology/security/audits-and-bug-bounty.mdx b/src/content/docs/tr/technology/security/audits-and-bug-bounty.mdx new file mode 100644 index 000000000..e124b89d9 --- /dev/null +++ b/src/content/docs/tr/technology/security/audits-and-bug-bounty.mdx @@ -0,0 +1,71 @@ +--- +section: technology +date: Last Modified +title: "Denetimler ve Hata Ödül Programı" +lang: "tr" +permalink: "technology/security/audits-and-bug-bounty" +--- + +import Aside from "../../../../../components/Aside.astro" + +Scroll, güvenliği birinci öncelik olarak ele alır. + +Sıkı testlerin, dahili bir güvenlik ekibinin ve kapsamlı kod incelemelerinin yanı sıra, kod tabanımızda denetimler gerçekleştirmek için birden fazla güvenlik denetim firmasıyla da görüştük. Topluluğumuzun protokolümüzün güvenliğine katılmasını teşvik etmek için bir hata ödül programı da başlattık. + + + +## Bağımsız Denetimler + +Scroll, kod tabanımızı incelemek için sektör lideri birkaç güvenlik denetim firmasıyla birlikte çalıştı; [Trail of Bits](https://www.trailofbits.com/), [OpenZeppelin](https://www.openzeppelin.com/), [Zellic](https://www.zellic.io/) ve [KALOS](https://www.kalos.xyz/). + +- Trail of Bits, Zellic ve KALOS zkEVM devrelerimizi inceledi +- OpenZeppelin ve Zellic köprü ve rollup sözleşmelerimizde bağımsız denetimler gerçekleştirdi +- Trail of Bits, düğüm uygulamamızı analiz etti + +### zkEVM devreleri + +- Trail of Bits + - [1. Dalga](https://github.com/trailofbits/publications/blob/master/reviews/2023-04-scroll-zkEVM-wave1-securityreview.pdf) + - [2. Dalga](https://github.com/trailofbits/publications/blob/master/reviews/2023-08-scroll-zkEVM-wave2-securityreview.pdf) + - [3. Dalga](https://github.com/trailofbits/publications/blob/master/reviews/2023-09-scroll-zkEVM-wave3-securityreview.pdf) +- Zellic ve Kalos + - [1. Dalga](https://github.com/Zellic/publications/blob/master/Scroll%20zkEVM%20-%20Part%201%20-%20Audit%20Report.pdf) + - [2. Dalga](https://github.com/Zellic/publications/blob/master/Scroll%20zkEVM%20-%20Part%202%20-%20Audit%20Report.pdf) + +### Düğüm uygulaması + +- Trail of Bits + - [zkTrie](https://github.com/trailofbits/publications/blob/master/reviews/2023-07-scroll-zktrie-securityreview.pdf) + - [L2geth](https://github.com/trailofbits/publications/blob/master/reviews/2023-08-scrollL2geth-initial-securityreview.pdf) + - [L2geth diff](https://github.com/trailofbits/publications/blob/master/reviews/2023-08-scrollL2geth-securityreview.pdf) + +### Köprü ve rollup sözleşmesi + +- OpenZeppelin + - [1. Aşama](https://blog.openzeppelin.com/scroll-layer-1-audit-1) + - [2. Aşama](https://blog.openzeppelin.com/scroll-phase-2-audit) + - [GasSwap, Multiple Verifier, Wrapped Ether ve Diff](https://blog.openzeppelin.com/scroll-gasswap-multiple-verifier-wrapped-ether-and-diff-audit) + - [ScrollOwner and Rate Limiter](https://blog.openzeppelin.com/scrollowner-and-rate-limiter-audit) + - [USDC Ağ Geçidi](https://blog.openzeppelin.com/scroll-usdc-gateway-audit) + - [Contract diff](https://blog.openzeppelin.com/scroll-diff-audit-report) +- Zellic + - [Rapor 1](https://github.com/Zellic/publications/blob/master/Scroll%20-%2005.26.23%20Zellic%20Audit%20Report.pdf) + - [Rapor 2](https://github.com/Zellic/publications/blob/master/Scroll%20-%2009.27.23%20Zellic%20Audit%20Report.pdf) + +## Hata Ödül Programı + +Scroll'un, önde gelen bir hata ödül platformu olan aktif bir [Immunefi'de Hata Ödül Programı](https://immunefi.com/bounty/scroll/) vardır. Program herkese açık olup, herkesi katılmaya davet ediyoruz. + +Ödüller, bildirilen güvenlik açıklarının ciddiyetine bağlıdır: + +- **Kritik**: 1.000.000$'a kadar +- **Yüksek**: 10.000$ - 50.000$ +- **Orta**: 5.000$ + +### Kapsam + +Hata ödül programının kapsamı, blokzincir altyapısını ve köprüleme ve rolluplara yönelik akıllı sözleşmeleri kapsıyor. Hata kategorilerinin ayrıntılı bir dökümü için lütfen hata ödülü sayfasına bakın. + +Hata ödül programında listelenen kapsamların yanı sıra, tespit edilen tüm güvenlik açıklarının Immunefi'ye bildirilmesini de teşvik ediyoruz; bunları ödül olarak değerlendirmeye devam edeceğiz. Hata ödül programının kapsamı dışındaki kritik güvenlik açıklarının keşfi için lütfen security@scroll.io adresine de rapor gönderin. \ No newline at end of file diff --git a/src/content/docs/tr/technology/sequencer/execution-node.mdx b/src/content/docs/tr/technology/sequencer/execution-node.mdx new file mode 100644 index 000000000..f536c649f --- /dev/null +++ b/src/content/docs/tr/technology/sequencer/execution-node.mdx @@ -0,0 +1,82 @@ +--- +section: technology +date: Last Modified +title: "Yürütme Düğümü" +lang: "tr" +permalink: "technology/sequencer/execution-node" +whatsnext: { "Rollup Düğümü": "/tr/technology/sequencer/rollup-node/" } +--- + +import Aside from "../../../../../components/Aside.astro" + +Yürütme düğümü, Scroll protokolündeki temel bileşenlerden biridir, L2 blokzincirinin devamlılığından sorumludur. Yürütme düğümü sayesinde Scroll'daki kullanıcı ve geliştirici deneyimi Ethereum'daki kullanıcı ve geliştirici deneyimine benzer. Bu benzerliği doğrudan Ethereum'dan miras aldığı EVM ve RPC davranışını minimal değişiklikle koruyarak başarır. + +Scroll'un yürütme düğümünün ana işlevleri şunlardır: +- L1 ve L2'den işlemleri toplar. +- İşlemleri doğrular ve bu işlemleri L2 bloklarına paketler. +- Blokları yürütür ve L2 zinciri sürdürür. + +L1'den L2'ye token ve mesaj köprülemenin de yürütme düğümünün sorumluluğunda olduğunu vurgulamakta fayda var. Öte yandan L2'den L1'e gerçekleşen mesajlar L1'deki herhangi bir kullanıcı tarafından yürütülebilir. + +Scroll'un yürütme düğümünün ikincil işlevleri şunlardır: +- Standart Ethereum RPC API'leri ve bazı Scroll eklenti API'leri sunar. +- Eşlerin (takipçi düğümlerinin), Ethereum'un eşler arası protokolünü kullanarak blokzincirini senkronize etmesine olanak sağlar. + +[go-ethereum](https://github.com/ethereum/go-ethereum)'un bir çatallanması olan yürütme düğümü, işlevlerinin çoğunu Ethereum'dan devralır. Buna işlem ve blok veri yapıları, EVM yürütme, RPC ve p2p protokolleri dahildir. Bu veri yapıları ve protokoller doğrudan `go-ethereum`dan miras alındığı için, Scroll'un Ethereum ile uyumluluğu konusunda çok yüksek bir kesinliğe sahip olabiliriz. + +Aşağıdaki bölümlerde yürütme düğümünün ana bileşenleri, ek doğrulama kuralları ve değişiklik ayrıntılarının özeti tanıtılacaktır. + +## `l2geth` Bileşenleri + +[`l2geth`](https://github.com/scroll-tech/go-ethereum), Scroll'un [go-ethereum](https://github.com/ethereum/go-ethereum) çatallanmasıdır. Blokların oluşturulmasından, yürütülmesinden ve blokzincir durumunun sürdürülmesinden sorumludur. `l2geth`, aşağıda listelenen bazı önemli farklılıklarla birlikte, işlevlerinin çoğunu Ethereum'dan devralmaktadır. `l2geth` aşağıdaki alt modüllere sahiptir (kapsamlı liste değildir): +- **Storage**: LevelDB kullanılarak uygulanan defter ve durum depolaması. +- **EVM**: Ethereum'un durum geçiş kuralları. +- **Worker:** Yeni L2 blokları oluşturmaktan sorumludur. +- **L1 SyncService**: L1 mesajlarını `l2geth` yerel veritabanında senkronize eder ve saklar. +- **API katmanı**: Standart Ethereum RPC ve p2p arayüzleri. +- **Transaction pool**: L2 işlemleri için mempool. +- **Circuit capacity checker**: bir işlemin veya bloğun devre kapasitesi sınırını aşıp aşmadığını kontrol eder. + +### Devre Kapasitesi Denetleyicisi + +Scroll'un mevcut zkEVM devreleri ile zkEVM devresine uymadığı için kanıtlanamayan işlem ve bloklar oluşturmak mümkün. Biz buna *kanıt taşması* diyoruz. Bunu önlemek için l2geth'in parçası olarak bir *devre kapasitesi denetleyicisi* modülü uyguladık. Devre kapasitesi denetleyicisi hem blok oluşturma hem de blok doğrulama sırasında kullanılır. + +Blok oluşturma sırasında eğer bir sonraki işlem kanıt taşmasına neden olacaksa bloğu mühürleyip işlemi bir sonraki bloğa bırakıyoruz. Tek bir işlem kanıt taşmasına yol açarsa l2geth bunu iptal eder. Bu mekanizmaya *atlama* diyoruz. + +L2 işlemlerini atlamak, onları basitçe atmak anlamına gelir. Bu durumda, kullanıcının devam edebilmesi için kanıt taşmasına yol açmayacak aynı nonce ile başka bir işlem göndermesi gerekir. + +L1 mesajlarını atlamak daha açık bir süreçtir. Hem L1'deki `ScrollChain` sözleşmesi hem de zkEVM, `L1MessageQueue`daki her L1 işleminin ya dahil edildiğini ve yürütüldüğünü ya da atlandığını doğrular. Toplu kodlama L1 işlemlerini içermese de, hangi L1 mesajlarının atlandığını `ScrollChain`e gösteren bir *atlama bit eşlemi* içerir. Bir L1 depozito mesajı atlanırsa, kullanıcı L1'de tokenlarının iadesini alabilir. + + + +zkEVM kanıtlama birimi yığın olduğundan, yığınlar için de kanıt taşmasından kaçınılmalıdır. +Bu, asla kanıtlanamaz parçalar önermediğinden emin olmak için devre kapasitesi denetleyicisinin rollup rölesine dahil edilmesiyle elde edilir. + +## Doğrulama Kuralları + +Scroll, Ethereum'un blok doğrulama kurallarına ek olarak birkaç doğrulama kuralı ekler. Bu yeni kurallar, L1 mesajının dahil edilmesinin L2 davranışını ve zkEVM devre kapasitesi limitini kısıtlar. + +- Yukarıda özetlenen [devre kapasitesi denetleyicisi](/es/technology/sequencer/execution-node/#devre-kapasitesi-denetleyicisi) modülü + bloğun zkEVM devresinin devre alanı kapasitesine sığabileceğini doğrular. +- L1 mesajlarıyla ilgili kurallar: + - Bir bloktaki L1 mesajları bitişik ve bloğun önünde olmalıdır. + - Bir bloktaki L1 mesajları `L1MessageQueue`daki sırasına göre dahil edilmelidir, yani artan `QueueIndex` ile dahil edilmelidir. + - Bir bloktaki L1 mesajları `L1MessageQueue` sözleşmesindekilerle eşleşmelidir. +- Bu kuralların çoğu hem blok oluşturma hem de blok doğrulama sırasında dikkate alınır. Sonuç olarak, eğer blok öneren düğüm bu kurallardan herhangi birini ihlal ederse, takipçi düğümler bloklarını reddedecektir. + +## Değişikliklerin Özeti + +Scroll yürütme düğümü, Ethereum'un davranışlarının çoğunu devralır. Ancak daha verimli kanıtlamayı mümkün kılmak için `l2geth`te bazı önemli değişiklikler yapmamız gerekiyordu. Bu bölümde, gerekçeleriyle birlikte değişikliklerin kapsamlı olmayan bir listesi sunulmaktadır. + +- **State and storage tree**: Ethereum, durum ve sözleşme depolama veri yapısı olarak MPT'yi (Merkle-Partricia Trie) kullanır. Bu trie'nin yapısı ve Keccak hash değerini kullanması, onu ZK devreleri için aşırı derecede pahalı hale getirecektir. `l2geth` bunun yerine [zkTrie](/tr/technology/sequencer/zktrie) kullanır: durumu ve sözleşme depolaması için Poseidon hash değerine sahip ikili bir Merkle trie'si. +- **StateAccount**: Durum hesabının değiştirilmesi [Hesaplar ve Durum] bölümünde açıklanmıştır(/tr/technology/chain/accounts). +- **EVM**: Değişiklikler [Ethereum'dan EVM Farkları] bölümünde açıklanmıştır(/tr/technology/chain/differences). +- **İşlem ücretleri** + - L2'de toplanan tüm ücretler, Scroll tarafından korunan bir L2 ücret kasası sözleşmesine gönderilir. + - L1 ücreti: L2 blok alanı ve uygulama masraflarını kapsayan L2 gaz ücretine ek olarak, işlemin L1'e gerçekleştirilme masraflarını kapsayan bir L1 ücreti de alıyoruz. Bu ücret, RLP kodlu işlemin boyutuyla orantılıdır. Gerçek maliyet, L2'deki `L1GasOracle` sözleşmesinde saklanan mevcut ayarlara bağlıdır. Bu ücret doğrudan gönderenin bakiyesinden kesilir (gaz ödeneğinden değil). +- **L1MessageTx**: Yeni bir işlem türü olan 'L1MessageTx'i tanıttık. Ayrıca bu tür işlemleri ve ilgili meta verileri depolamak için veritabanı arayüzleri de ekledik. +- **SyncService**: L1'deki sonlandırılmış blokları izler ve bunlardan L1 mesajlarını toplar. +- **New API**: `l2geth`, kanıtlayıcıların kanıt oluşturmak amacıyla izleme bilgilerini sorgulaması için bir izleme API'si olan `scroll_traceBlockByNumberOrHash` sunar. diff --git a/src/content/docs/tr/technology/sequencer/rollup-node.mdx b/src/content/docs/tr/technology/sequencer/rollup-node.mdx new file mode 100644 index 000000000..2cd4abdd2 --- /dev/null +++ b/src/content/docs/tr/technology/sequencer/rollup-node.mdx @@ -0,0 +1,33 @@ +--- +section: technology +date: Last Modified +title: "Rollup Düğümü" +lang: "tr" +permalink: "technology/sequencer/rollup-node" +whatsnext: { "zkTrie": "/tr/technology/sequencer/zktrie/" } +--- + +Rollup düğümü, Scroll blokzincirini L1'de kanıtlama ve taahhüt için uygun bölümlere bölmekten sorumludur. Bunun iki ana birimi *parçalar* ve *yığınlar*dır. +* Bir parça, L2 defterinin bitişik bir bölümüdür, L2 bloklarının bir koleksiyonudur ve parçalar, zkEVM kanıtlama birimidir. +* Öte yandan bir yığın, toplu bir kanıtla birlikte L1'e gönderilen parçaların bir koleksiyonudur. + +Rollup düğümü aşağıdaki alt modüllere sahiptir: +- Parça Önerici: L2 bloklarını toplar ve belirli sınırları zorlayarak parçaları önerir (aşağıya bakın). +- Yığın Önerici: belirli sınırları uygulayarak parçaları toplayın ve yığınları önerir (aşağıya bakın). +- Aktarıcı: Yığın verilerini ve yığın kanıtlarını L1'e gönderir. + +## Parça ve yığın kısıtlamaları + +Yürütme düğümüyle karşılaştırıldığında rollup düğümü çok daha basit ve basit bir bileşendir. +L2 bloklarını toplar, parçalar ve yığınlar oluşturur ve bunları L1'e gönderir. +Bu bölümde, parça ve yığın oluşturma sırasında rollup düğümünün uygulaması gereken ana sınırları özetlemekteyiz. + +Parçalardaki kısıtlamalar: +- **Kanıt taşması:** Devre kapasitesi denetleyicisini kullanarak, bir parçaya, yine de kanıt taşmasına yol açmayacak kadar çok bloğun dahil edildiğinden emin oluruz. +- **L1 yükü:** Yığın önericiden devralınan kısıtlamalar; işlem yükü 128 KB'yi aşamaz. + +Yığınlardaki kısıtlamalar: +- **L1 yükü:** Ethereum'un işlem yükü boyutunda sabit kodlanmış 128 KB sınırı vardır. +- **L1 işleme gas maliyeti:** Bir yığını işlemenin gas maliyeti, içindeki blokların ve işlemlerin sayısıyla orantılıdır. Bu maliyetin L1 blok gas limitini aşmadığından emin olmalıyız. +- **Parça sayısı:** Bir yığın, rollup kanıtlayıcısı için en uygun sayıda parçayı içerir. + diff --git a/src/content/docs/tr/technology/sequencer/zktrie.mdx b/src/content/docs/tr/technology/sequencer/zktrie.mdx new file mode 100644 index 000000000..eab1a688b --- /dev/null +++ b/src/content/docs/tr/technology/sequencer/zktrie.mdx @@ -0,0 +1,204 @@ +--- +section: technology +date: Last Modified +title: "zkTrie" +lang: "tr" +permalink: "technology/sequencer/zktrie" +whatsnext: { "zkEVM": "/tr/technology/zkevm/intro-to-zkevm/" } +excerpt: "zkTrie, Poseidon hashi kullanılarak oluşturulmuş seyrek bir ikili (binary) Merkle Patricia Trie'dir." +--- + +import Aside from "../../../../../components/Aside.astro" +import ClickToZoom from "../../../../../components/ClickToZoom.astro" +import zktrie1 from "../_images/zktrie-arch.png" +import zktrie2 from "../_images/zktrie-insertion.png" +import zktrie3 from "../_images/zktrie-deletion.png" + +Bu belgede, anahtar/değer çiftlerini verimli bir şekilde depolamak için kullanılan seyrek bir ikili Merkle Patricia Trie olan zkTrie açıklanmaktadır. Ekleme ve silme de dahil olmak üzere ağaç yapısını, yapımını, düğüm hash işlemini ve ağaç işlemlerini açıklar. + +Ayrıca [zktrie repomuzu](https://github.com/scroll-tech/zktrie) de inceleyebilirsiniz. + +## Ağaç Yapısı + +zkTrie, aşağıdaki şekilde gösterildiği şekilde seyrek bir ikili Merkle Patricia Trie'dir. +Seyrek İkili Merkle Patricia Trie konusuna dalmadan önce Merkle Trees ve Patricia Tries'e kısaca değinelim. +* **Merkle Tree**: Merkle Tree, her yaprak düğümünün bir veri bloğunun hash değerini temsil ettiği ve yaprak olmayan her düğümün, alt düğümlerinin hash değerini temsil ettiği bir ağaçtır. +* **Patricia Trie**: Patricia Trie, anahtar/değer çiftlerini verimli bir şekilde depolamak için kullanılan bir tür taban ağacı veya sıkıştırılmış trie'dir. Yolun düğüm anahtarının değeri tarafından belirlendiği ortak yolu paylaşmak için düğümleri aynı anahtar önekiyle kodlar. + +Şekil 1'de gösterildiği gibi zkTrie'de üç tip düğüm vardır. +- Dal Düğümü: zkTrie'nin ikili bir ağaç olduğu göz önüne alındığında, bir dal düğümünün iki alt düğümü vardır. +- Yaprak Düğümü: Bir yaprak düğümü, bir anahtar/değer çiftinin verilerini tutar. +- Boş Düğüm: Boş bir düğüm, aynı öneki paylaşan alt grubun boş olduğunu belirten özel bir düğüm türüdür. + +zkTrie'de, düğüm hash değerini hesaplamak için Poseidon hash değerini kullanırız çünkü bunu zk devresinde kanıtlamak daha kolay ve verimlidir. + + + +## Ağaç Yapımı + +Bir anahtar/değer çifti verildiğinde, ilk önce Poseidon hash işlevini kullanarak orijinal anahtarı (yani hesap adresi ve depolama anahtarının) hashleyerek ilgili yaprak düğüm için bir *güvenli anahtar* hesaplarız. Bu, anahtarın anahtar alanı üzerinde tekdüze (uniform) dağıtılmasını sağlar. Düğüm anahtarı hash yöntemi, aşağıdaki [Node Hashing](#node-hashing) bölümünde açıklanmaktadır. + +Yeni bir yaprak düğümün yolunu, güvenli anahtarı En Az Önemli Bit'ten (LSB) En Önemli Bit'e (MSB) geçerek kodluyoruz. Her adımda, eğer bit 0 ise sol alt düğüme; aksi halde sağ alt düğüme geçiyoruz. + +ZkTrie'nin maksimum derinliğini 248 ile sınırlandırıyoruz; bu, ağacın anahtarın yalnızca alt 248 bitini geçeceği anlamına gelir. Güvenli anahtar alanı, Poseidon hashi tarafından kullanılan ve $2^{256}$ aralığının tamamını kaplamayan sonlu bir alan olduğundan, anahtarın bit temsili sonlu alanda belirsiz olabilir ve bu nedenle, zk devresinde bir sağlamlık sorunuyla sonuçlanır. + +Yalnızca bir yaprak düğümü olan bir alt ağacı tek bir yaprak düğümüne daraltarak ağaç derinliğini azaltacak bir optimizasyon uyguluyoruz. Örneğin, Şekil 1'de ağacın toplamda '0100', '0010' ve '1010' tuşlarına sahip üç düğümü vardır. '00' son ekine sahip yalnızca bir düğüm olduğundan, '0100' anahtarının yaprak düğümü yalnızca '00' son ekini geçer ve 4 derinliğine neden olacak anahtarını tam olarak genişletmez. + +## Ağaç İşlemleri + +### Ekleme + + + +Bir zkTrie'ye yeni bir yaprak düğüm eklediğimizde, Şekil 2'de gösterilen iki durum vardır. + +1. Düğüm anahtarının yolunu izlerken boş bir düğüme ulaşılıyor (Şekil 2a). Bu durumda, bu boş düğümü bu yaprak düğümle değiştirmemiz ve dal düğümlerinin merkle hashini köke kadar güncellemek için yolu geriye doğru izlememiz gerekiyor. +2. Düğüm anahtarının yolunu kat ederken başka bir yaprak düğüm olan 'b'ye ulaşır (Şekil 2b). Bu durumda, iki yaprak düğümün düğüm anahtarlarındaki bir sonraki bit farklılaşana kadar mevcut yaprak düğümü 'b'yi aşağı itmemiz gerekir. Her aşağı itme adımında, dal düğümüne boş bir kardeş düğüm eklememiz gerekir. Bitlerin farklı olduğu seviyeye ulaştığımızda, bitlerine bağlı olarak sol alt düğüm ve sağ alt düğüm olarak iki yaprak düğümü 'b' ve 'd' yerleştiririz. Sonunda yolu geriye doğru izleriz ve tüm dal düğümlerinin Merkle hashini güncelleriz. + +### Silme + + + +Bir yaprak düğümün silinmesi ekleme işlemine benzer. Şekil 3'te gösterilen iki durum vardır. + +1. Silinecek yaprak düğümün kardeş düğümü, +dal düğümü (Şekil 3a). Bu durumda, 'a' düğümünü boş bir düğümle değiştirebilir ve atalarının düğüm hash değerini kök düğüme kadar güncelleyebiliriz. +2. Silinecek yaprak düğümün kardeş düğümü bir yaprak düğümdür (Şekil 3b). Durum 1'e benzer şekilde, önce yaprak düğümü boş bir düğümle değiştiririz ve kardeş düğümü boş bir düğüm olmayana kadar kardeş düğümünü yukarı doğru daraltmaya başlarız. Örneğin, Şekil 3b'de 'b' yaprak düğümünü boş bir düğümle değiştiriyoruz. 'c' düğümünün kardeşi artık boş bir düğüm haline geldiğinden, 'c' düğümünü bir seviye yukarı taşımamız ve ebeveynini değiştirmemiz gerekiyor. 'C' düğümünün yeni kardeşi 'e' düğümü hâlâ boş bir düğümdür. Böylece yine 'c' düğümünü yukarı doğru hareket ettiriyoruz. Artık 'c' düğümünün kardeşi bir yaprak düğüm olan 'a' düğümü olduğuna göre, silme işlemi tamamlanmıştır. + +Geçerli bir zkTrie'deki yaprak düğümün kardeşinin boş bir düğüm olamayacağını unutmayın. Aksi halde her zaman alt ağacı budamalı ve yaprak düğümünü yukarı doğru hareket ettirmeliyiz. + +## Düğüm Hash İşlemi + +Bu bölümde yaprak güvenlik anahtarının ve düğüm Merkle hash'inin nasıl hesaplandığını anlatacağız. Her iki hash hesaplaması için arity 2 ile Poseidon hash değerini kullanıyoruz. Scroll'da, Poseidon hash işlevi her seferinde iki alan öğesi girişi ve etki alanı ayırma için başlangıç ​​bağlamı olarak aşağıda belirtilen bir `domain_value` alacak şekilde yapılandırılmıştır. +``` +h{domain_value}(input1, input2) +``` + +### Boş Düğüm + +Boş bir düğümün düğüm hashi 0'dır. + +### Dal Düğümü + +Dal düğümü hashi aşağıdaki şekilde hesaplanır: + +```go +branchNodeHash = h{BranchNodeType}(leftChildHash, rightChildHash) +``` + +### Yaprak düğümü + +Bir yaprak düğümün düğüm hashi aşağıdaki şekilde hesaplanır: + +```go +leafNodeHash = h{LeafNodeType}(nodeKey, valueHash) +``` + +Hesaplama, `nodeKey` ve `valueHash` olmak üzere iki alanı içerir. +- `nodeKey` orijinal anahtardan hashe dönüştürülür. Poseidon hashinde kullanılan alan adı değeri 256'dır. +- `valueHash`, yaprak düğüm değerinin hashlenmesiyle hesaplanır. Poseidon hashinde kullanılan etki alanı değeri '256 * n'dir; burada 'n', yaprak düğüm değerindeki öğelerin sayısıdır. + +İki tür yaprak düğüm vardır: Ethereum hesapları ve depolama anahtar/değer çiftleri. Daha sonra, her bir yaprak düğüm türü için sırasıyla düğüm anahtarının ve değer hashinin hesaplama yöntemini açıklayacağız. + +#### Ethereum Hesabı Yaprak Düğümü +Bir Ethereum Hesabı Yaprak Düğümü, bir Ethereum adresinden ve bir durum hesabı veri yapısından oluşur. Güvenli anahtar Ethereum adresinden türetilir. +```go +var address byte[20] // 20 bytes in big-endian +valHi := address[0:16] +valLo := address[16:20] * 2^96 // padding 12 bytes of 0 at the end +nodeKey := h{256}(valHi, valLo) +``` + +Scroll'daki bir durum hesabı yapısı aşağıdaki alanlardan oluşur ('Fr' sonlu alanı belirtir ve 254 bitlik bir değerdir) + +- `Nonce`: u64 +- `Balance`: u256, ancak Fr olarak kabul edilir +- `StorageRoot`: Fr +- `KeccakCodeHash`: u256 +- `PoseidonCodeHash`: Fr +- `CodeSize`: u64 + +Değer hashini hesaplamadan önce, durum hesabı ilk olarak `u256` değerlerinin yer aldığı bir listeye sıralanır. Sıralama şeması + +```text +(The following scheme assumes the big-endian encoding) +[0:32] + [0:16] Reserved with all 0 + [16:24] CodeSize, uint64 in big-endian + [24:32] Nonce, uint64 in big-endian +[32:64] Balance +[64:96] StorageRoot +[96:128] KeccakCodeHash +[128:160] PoseidonCodehash +(total 160 bytes) +``` + +Marshal işlevi aynı zamanda `u256` değerlerinden oluşan bir vektörle birlikte bir `flag` değeri de döndürür. `Flag`, bir `u256` değerinin alan öğesi (Fr) olarak değerlendirilip değerlendirilemeyeceğini belirten bir bit eşlemdir. Durum hesabı için `flag` değeri aşağıda gösterildiği gibi 8'dir. + +``` + +--------------------+---------+------+----------+----------+ + index | 0 | 1 | 2 | 3 | 4 | + +--------------------+---------+------+----------+----------+ + u256 | nonce||codesize||0 | balance | root | keccak | poseidon | + +--------------------+---------+------+----------+----------+ +flag bit | 0 | 0 | 0 | 1 | 0 | + +--------------------+---------+------+----------+----------+ + (LSB) (MSB) +``` + +Değer hashi iki adımda hesaplanır: +1. Poseidon hashinin alan öğesi olarak temsil edilemeyen değerini alan öğesine dönüştürün. +2. Ağaç kökü değer hashi olarak ele alınana kadar alan öğelerini ikili ağaç yapısında birleştirin. + +İlk adımda, `flag`daki bit, alan elemanı olarak değerlendirilemeyen `u256` değerini belirten 1 olduğunda, değeri yüksek 128 bitlik değere ve düşük-128 bitlik değere bölüyoruz ve ardından bunları bir alan öğesi değeri üretmek için Poseidon hashine dönüştürüyoruz. + +```go +// convert Keccak codehash to a field element +compressedKeccakCodeHash := h{512}(keccakCodeHash[0:16], keccakCodeHash[16:32]) +``` + +İkinci olarak değer hashi şu şekilde hesaplanır. + +```go +domain := 256 * 5 // 5 elements to compute the valueHash +valueHash := + h{domain}( + h{domain}( + h{domain}(nonce||codesize||0, balance), + h{domain}( + storageRoot, + compressedKeccakCodeHash, + ), + ), + poseidonCodeHash, + ) +``` + +#### Depolama Yaprak Düğümü + +Depolama Yaprağı Düğümü, hem anahtar hem de değerin `u256` değerleri olduğu bir anahtar/değer çiftini kodlar. Bu yaprak düğümün güvenli anahtarı, depolama anahtarından türetilir. + +```go +var storageKey byte[32] // 32 bytes in big-endian +valHi := storageKey[0:16] +valLo := storageKey[16:32] +nodeKey := h{256}(valHi, valLo) +``` + +Depolama değeri bir `u256` değeridir. Depolama değeri için `flag` aşağıda gösterilen 1'dir. + +``` + +--------------+ + index | 0 | + +--------------+ + u256 | storageValue | + +--------------+ +flag bit | 1 | + +--------------+ +``` + +Değer hashi aşağıdaki şekilde hesaplanır + +```go +valueHash = h{512}(storageValue[0:16], storageValue[16:32]) +``` diff --git a/src/content/docs/tr/technology/zkevm/intro-to-zkevm.md b/src/content/docs/tr/technology/zkevm/intro-to-zkevm.md new file mode 100644 index 000000000..8de318f51 --- /dev/null +++ b/src/content/docs/tr/technology/zkevm/intro-to-zkevm.md @@ -0,0 +1,30 @@ +--- +section: technology +date: Last Modified +title: "zkEVM'e Giriş" +lang: "tr" +permalink: "technology/intro-to-zkevm" +excerpt: "ZK rolluplar, Ethereum için ideal ölçeklendirme çözümü olarak geniş çapta kabul edilmektedir." +whatsnext: { "zkEVM Overview": "/tr/technology/zkevm/zkevm-overview" } +--- + +## Giriş ve motivasyon + +ZK rolluplar, Ethereum için ideal ölçeklendirme çözümü olarak geniş çapta kabul edilmektedir. Ethereum'un güçlü güvenliğini miras alırlar ve diğer L2 çözümleriyle karşılaştırıldığında en hızlı işlem kesinliğini sunarlar. + +ZK rollupların temel fikri, işlemleri zincir dışında yürütmek ve yürütmenin geçerliliğine dair kısa ve öz kanıtlar oluşturmaktır. Bu kısa ve öz kanıtlar daha sonra Ethereum'a gönderilebilir ve doğrulanabilir. ZK rolluplar, bir grup işlem için kanıtın doğrulanması, işlem kümesinin yeniden yürütülmesinden çok daha ucuz olduğundan ölçeklenebilirliği artırır. + +ZK rolluplar, destekledikleri işlem türlerine göre uygulamaya özel ve genel amaçlı rolluplar olarak kategorize edilebilir. Uygulamaya özel ZK rolluplar, ödemeler ve takaslar gibi belirli işlem kümeleri veya bir oyuncunun zincir üstü bir oyun için eylem kümesi için tasarlanmıştır. Bu durumlarda, rolluplar yalnızca oyun oyuncuları için geçerli durum geçişleri gibi desteklenen temel öğelerin doğruluğunu kanıtlayan kanıtlar üretmesi gerekir. + +Öte yandan, genel amaçlı ZK rolluplar daha geniş bir işlem ve hesaplama yelpazesini destekler. Bu rolluplar, derleme kodunu yürütmek için bir sanal makine (VM) kullanır ve ardından yürütmenin VM'nin özelliklerine göre doğru şekilde yapıldığını gösteren bir kanıt oluşturur. Bir ZK rollup'ın hesaplama için kullandığı belirli VM, birçok ZK rollup projesi arasında farklılık gösterir. Bazı projeler, hızlı kanıt oluşturma için optimize edilmiş kendi VM'lerini oluşturmayı tercih ediyor. Diğer projeler, Ethereum ekosistemiyle optimum uyumluluk için EVM'yi kullanmayı seçiyor. + +Scroll, zincir dışı hesaplamalar için EVM'yi kullanan genel amaçlı bir ZK rollup'tır. Scroll'un yürütme katmanı Ethereum'unkine benzer şekilde çalışır; işlemler bloklar halinde gruplanır ve ardından bloklar [EVM](https://ethereum.org/en/developers/docs/evm/) spesifikasyonlarına göre yürütülür (aslında [Geth'in](https://geth.ethereum.org/) biraz [değiştirilmiş versiyonu](https://github.com/scroll-tech/go-ethereum)). Bu, kullanıcıların Scroll ile Ethereum ile etkileşimde oldukları şekilde etkileşime girebilecekleri anlamına gelir. Bu aynı zamanda geliştiricilerin Ethereum'un üzerinde geliştirdikleri gibi Scroll'un üzerinde de geliştirebilecekleri anlamına geliyor. + +Bununla birlikte, bir ZK rollup ile Ethereum uyumluluğunun sağlanması büyük bir zorluk teşkil ediyor; rollup'ın, zincir dışı bir EVM hesaplamasının doğru şekilde yürütüldüğünü kanıtlayan bir kanıt oluşturabilmesi gerekiyor. Temel olarak “zkEVM” budur: **zkEVM, EVM'nin doğru şekilde yürütüldüğünü kanıtlayan bir sistemdir**. + +EVM, başlangıçta ZK rollupları düşünülmeden tasarlandı ve bir zkEVM oluşturmanın oldukça zorlu olduğu ortaya çıktı. Ancak biz Scroll olarak bu zorluklardan yılmadık ve zkEVM'yi gerçeğe dönüştürmek için [Ethereum Privacy and Scaling Explorations](https://appliedzkp.org/) ekibiyle işbirliği içinde yoğun bir şekilde çalışıyoruz. + +## Daha fazla bilgi edin + +- [Blog yazısı](https://scroll.io/blog/zkEVM) zkEVM'yi tanıtıyor +- [zkEVM'ye genel bakış](https://youtu.be/NHwd-gJ8xg4) - Haichen Shen diff --git a/src/content/docs/tr/technology/zkevm/zkevm-overview.mdx b/src/content/docs/tr/technology/zkevm/zkevm-overview.mdx new file mode 100644 index 000000000..655e105ff --- /dev/null +++ b/src/content/docs/tr/technology/zkevm/zkevm-overview.mdx @@ -0,0 +1,56 @@ +--- +section: technology +date: Last Modified +title: "zkEVM Genel Bakış" +lang: "tr" +permalink: "technology/zkevm-overview" +excerpt: "EVM'nin çalışmasını kanıtlayan zkEVM'nin nasıl oluşturulacağını anlamak için öncelikle EVM'nin kendisine bakmamız gerekiyor." +--- + +import ClickToZoom from "../../../../../components/ClickToZoom.astro" +import zkevm1 from "../_images/zkevm1.png" +import zkevm2 from "../_images/zkevm2.png" +import zkevm3 from "../_images/zkevm3.png" + +## EVM + +EVM'nin çalışmasını kanıtlayan zkEVM'nin nasıl oluşturulacağını anlamak için öncelikle EVM'nin kendisine bakmamız gerekiyor. + +EVM, durum geçiş fonksiyonu olarak modellenebilir. Başlangıç dünya durumu `S` ve bir `T` işlemi verildiğinde, yeni bir dünya durumu `S’`: `f(S,T) = S'` üreten bir geçiş fonksiyonu `f`yi belirtir. + +"Dünya durumu", [değiştirilmiş Merkle-Patricia Trie](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) (MPT) olarak modellenmiştir. Bu trie ağın tüm kalıcı verilerini içerir. Bu, tüm harici sahipli hesapların (EOA'lar) ve akıllı sözleşme hesaplarının bilgilerini içerir. Akıllı sözleşme hesapları, akıllı sözleşmenin bytecode'unu ve kalıcı depolamayı tutan alt trie'lere sahiptir. + +EVM, ortaya çıkan hesaplamaları yürüterek ve buna göre dünya durumunda değişiklikler yaparak yeni bir işlemi işler. EVM hesaplaması, geçici veri depolarının (stack and memory) yanı sıra kalıcı veri depoları (contract bytecode ve storage) üzerinde de çalışır. + + + +Bireysel bir işlem tarafından tetiklenen hesaplama, EVM'nin doğrudan anlayıp yürütebileceği "opcodes" adı verilen küçük makine talimatlarına bölünür. Her bir opcode'un davranışı [Ethereum Yellow Paper](https://ethereum.github.io/yellowpaper/paper.pdf)'da belirtilmiştir. Bu nedenle bir işlemin yürütülmesi, yalnızca opcode yürütmelerinin sıralı bir listesi olan bir "yürütme izi" ile özetlenebilir. [Geth](https://geth.ethereum.org/) gibi Ethereum yürütme istemcileri, gerçekleştirdiği hesaplama için açıkça adım adım yürütme takibi çıktısı alabilir. + + + +Opcode'lar yürütüldükçe durum trie'si değiştirilir. Bu, yeni bir durum köküne sahip yeni bir durum trie'si sonuçlanır. + +## Bir EVM yürütmesinin kanıtlanması + +zkEVM'nin amacı, bir işlemin yürütülmesinin geçerliliğini doğrulayan bir kanıt oluşturmaktır. Başka bir deyişle, başlangıç dünya durumu `S`, bir işlem `T` ve sonuçta ortaya çıkan dünya durumu `S` verildiğinde, zkEVM'nin `f(S,T) = S` olduğuna dair bir kanıt üretmesi gerekir; burada `f`, Ethereum Yellow Paper'da belirtilen durum geçiş fonksiyonudur. + +Geçiş fonksiyonu yürütmesinin geçerliliğini kanıtlamak için yürütmeyi adım adım yürütme izine böleriz. `f(S,T)`nin yürütülmesi, sıralı opcode yürütmelerinin bir listesine genişletilir. Yürütme izi, `f(S,T) = S` durum geçişinin doğruluğunu onaylayan bir "tanık" görevi görür - iz, bir anlamda, durumun `S`den `S'`e nasıl geçiş yaptığını adım adım açıklayan bir açıklamadır. + +Daha sonra sorun aşağıdakileri kanıtlamaya indirgenir: + +- Yürütme izlemesi _doğru_. + - Her bir opcode, Ethereum Yellow Paper spesifikasyonuna göre doğru şekilde yürütülür. + - Örneğin, `ADD` opcode'u, yığından iki değerin çıkarılması ve bunların toplamının yığına aktarılmasıyla sonuçlanmalıdır. + - Bir kanıt, geçici veri depolarında (stack and memory) veya kalıcı veri depolarında yapılan değişiklikler de dahil olmak üzere her bir opcode'unun uygun davranışla yürütüldüğünü göstermelidir. + - Yürütülen opcodelarının sıralı listesi aslında işlem tarafından tetiklenen opcodelarının doğru listesidir. + - Bu, ilk işlem çağrı verilerinin ve çağrılan sözleşmelerin bytecode'unun doğru şekilde yüklenmesini içerir. +- Yürütme izlemesi başlangıç durumu `S` ile başlar ve `S` durumuyla sonuçlanır. + + + +Sonraki bölümlerde EVM yürütme izlerinin doğruluğunun nasıl kanıtlanabileceğinin ayrıntılarına gireceğiz. + +## Daha fazla bilgi edin + +- EVM'de Cypherpunk'lar [GitBook bölümü](https://cypherpunks-core.github.io/ethereumbook/13evm.html) +- [zkEVM'ye genel bakış](https://youtu.be/NHwd-gJ8xg4) - Haichen Shen diff --git a/src/content/docs/tr/user-guide/_images/bridge1.png b/src/content/docs/tr/user-guide/_images/bridge1.png new file mode 100644 index 000000000..dd552310e Binary files /dev/null and b/src/content/docs/tr/user-guide/_images/bridge1.png differ diff --git a/src/content/docs/tr/user-guide/_images/bridge2.png b/src/content/docs/tr/user-guide/_images/bridge2.png new file mode 100644 index 000000000..e3fe4701f Binary files /dev/null and b/src/content/docs/tr/user-guide/_images/bridge2.png differ diff --git a/src/content/docs/tr/user-guide/_images/bridge3.png b/src/content/docs/tr/user-guide/_images/bridge3.png new file mode 100644 index 000000000..03772fee9 Binary files /dev/null and b/src/content/docs/tr/user-guide/_images/bridge3.png differ diff --git a/src/content/docs/tr/user-guide/_images/bridge4.png b/src/content/docs/tr/user-guide/_images/bridge4.png new file mode 100644 index 000000000..a060b2ce3 Binary files /dev/null and b/src/content/docs/tr/user-guide/_images/bridge4.png differ diff --git a/src/content/docs/tr/user-guide/_images/bridge5.png b/src/content/docs/tr/user-guide/_images/bridge5.png new file mode 100644 index 000000000..7e75aeb4d Binary files /dev/null and b/src/content/docs/tr/user-guide/_images/bridge5.png differ diff --git a/src/content/docs/tr/user-guide/_images/bridge6.png b/src/content/docs/tr/user-guide/_images/bridge6.png new file mode 100644 index 000000000..80066a330 Binary files /dev/null and b/src/content/docs/tr/user-guide/_images/bridge6.png differ diff --git a/src/content/docs/tr/user-guide/_images/bridge7.png b/src/content/docs/tr/user-guide/_images/bridge7.png new file mode 100644 index 000000000..66ee3ff94 Binary files /dev/null and b/src/content/docs/tr/user-guide/_images/bridge7.png differ diff --git a/src/content/docs/tr/user-guide/_images/bridge8.png b/src/content/docs/tr/user-guide/_images/bridge8.png new file mode 100644 index 000000000..4b78a8b9e Binary files /dev/null and b/src/content/docs/tr/user-guide/_images/bridge8.png differ diff --git a/src/content/docs/tr/user-guide/bridge.mdx b/src/content/docs/tr/user-guide/bridge.mdx new file mode 100644 index 000000000..dafaeef7c --- /dev/null +++ b/src/content/docs/tr/user-guide/bridge.mdx @@ -0,0 +1,124 @@ +--- +section: gettingStarted +date: Last Modified +title: "Köprü" +lang: "tr" +permalink: "user-guide/bridge/" +excerpt: "Sepolia'dan varlıkları köprülemeye başlamak için Portal Bridge uygulamasına gidin." +--- + +{/* // import ClickToZoom from "../../../../components/ClickToZoom.astro" */} +{/* // import bridge1 from "./\_images/bridge1.png" */} +{/* // import bridge2 from "./\_images/bridge2.png" */} +{/* // import bridge3 from "./\_images/bridge3.png" */} +{/* // import bridge4 from "./\_images/bridge4.png" */} +{/* // import bridge5 from "./\_images/bridge5.png" */} +{/* // import bridge6 from "./\_images/bridge6.png" */} +{/* // import bridge7 from "./\_images/bridge7.png" */} +{/* // import bridge8 from "./\_images/bridge8.png" */} + +{/* TODO: Update all instructions after being able to walk through the whole flow. */} + +Başlamak için [Köprü](https://sepolia.scroll.io/bridge) uygulamamızı ziyaret edin![^thanks-hop] Köprü, varlık **Yatırma** ve **Çekme** işlemlerini destekler ve kullanıcılara Sepolia Test Ağı'ndan Scroll Sepolia Test Ağı'na varlıkları güvenle taşıma imkanı sunar. +[^thanks-hop]: [Hop Exchange](https://hop.exchange/)’in kullanıcı arayüzünden forklanmıştır 🙌 + +Yatırılan varlıkların Scroll üzerinde kullanılabilir hale gelmesi 15 dakikaya kadar sürebilir. + +Varlık çekme işlemleri, çekim işlemi tamamlandıktan sonra Sepolia'da ikinci bir ek etkileşim gerektirmesinden dolayı çok daha uzun sürebilir. + +:::caution[Köprü işlemi için uzun süredir bekliyor musunuz?] +Yukarıdaki zaman tahminleri, normal ağ davranışı ve etkinlik seviyeleri içindir. Bir L2 bloğunda, yalnızca belirli sayıda sıralanmış L1 işlemini işlediğimizden, köprülenmiş mesajların Scroll’a dahil edilmesi, istisnai ağ kullanım durumlarında daha uzun sürebilir. +::: + +## Sepolia'dan Scroll Sepolia'ya Yatırma + +### Talimatlar + +1. İlk olarak, [Scroll Köprüsü'ne](https://sepolia.scroll.io/bridge) gidin ve "Cüzdanı Bağla" düğmesine basın. +1. Uygulamada, **Ethereum Sepolia**'nın en üstte ve **Scroll Sepolia**'nın en altta olduğundan emin olun. Pozisyonlarını değiştirmek için "**↓**" düğmesine tıklayabilirsiniz. +1. Sepolia'dan Scroll Sepolia'ya transfer etmek istediğiniz tokenı seçin. İlk kez köprü kullanıyorsanız, "ETH"yi deneyin. +1. Eğer belirli bir ERC20 tokenını ilk kez transfer ediyorsanız, Sepolia Köprü sözleşmesine ERC20 tokenınıza erişim izni vermek için **Onayla**'yı seçmelisiniz. +1. Ardından, yatırma işlemi yapmak için **Scroll Sepolia'ya Gönder** düğmesine tıklayın. Cüzdanınız transfer işlemini onaylamanızı isteyecektir. +1. Transfer işlemi gönderildikten ve onaylandıktan sonra, token Sepolia cüzdanınızdan düşecektir. +1. Bir işlemin durumunu her zaman sağ üst köşede cüzdan adresinizin yanındaki "Geçmiş" simgesine basarak kontrol edebilirsiniz. + +### Tokenlarınız Scroll Sepolia cüzdanınıza ne zaman ulaşır? + +Tokenlarınızın Scroll Sepolia cüzdanınıza gelmesi **8 ile 14 dakika** arasında sürebilir. (Sepolia'da [_Güvenli_](https://www.alchemy.com/overviews/ethereum-commitment-levels#what-are-ethereum-commitment-levels) duruma gelmesi bekleniyor). + +{/* You can check the progress of deposit transactions as follows: */} + +{/* ##### 1. Click the "History" icon next to your wallet address in the top-right corner. */} + +{/* */} + +{/* The pop-up panel lists the most recent transactions made in the Bridge app. There are two statuses: Sepolia status and Scroll Sepolia status. For deposit transactions (L1 -> L2), once your transaction becomes _Safe_ on Sepolia (**8 to 14 minutes**), you will see the **`success`** status shown. Your funds will be relayed to Scoll Sepolia after this. */} + +{/* The Recent Bridge Transactions window should give you an estimate of the time expected before your transaction is _Safe_ on Sepolia. */} + +{/* ##### 2. Click on the most recent transaction’s Sepolia transaction hash. */} + +{/* */} + +{/* It will open the Transaction Details page in a new tab. You can see this transaction is confirmed on Sepolia. To check the Block's confirmation status, click the Block number and read the "Status" field. */} + +{/* */} + +{/* ##### 3. Return to the Bridge app and wait! */} + +{/* Once your transaction status shows **`success`** on Scroll Sepolia, you should see the funds in your Scroll L2 wallet and a transaction hash: */} + +{/* */} + +## Scroll Sepolia'dan Sepolia'ya Varlık Çekme + +### Talimatlar + +#### İlk Çekim İşleminizi Gönderme + +1. İlk olarak, cüzdanınızda **Scroll Sepolia** Ağı'na geçin. +1. Uygulamada, **Scroll Sepolia**'nın en üstte ve **Ethereum Sepolia**'nın en altta olduğundan emin olun. Pozisyonlarını değiştirmek için "**↓**" butonuna tıklayabilirsiniz. +1. **Scroll Sepolia**'dan **Sepolia**'ya aktarmak istediğiniz tokenı seçin. İlk kez köprü kullanıyorsanız, "ETH"yi deneyin. +1. Eğer belirli bir ERC20 tokenını ilk kez transfer ediyorsanız, Scroll Sepolia Köprü sözleşmesine ERC20 tokenınıza erişim izni vermek için **Onayla**'yı seçmelisiniz. +1. Ardından, varlık çekme işlemi yapmak için **Ethereum Sepolia'ya Gönder** düğmesine tıklayın. Cüzdanınız transfer işlemini onaylamanızı isteyecektir. +1. Transfer işlemi gönderildikten ve onaylandıktan sonra, token Scroll Sepolia cüzdanınızdan düşecektir. + +#### Çekim Gerçekleştirme İşlemi Göndermek + +_Kalan adımlar Scroll Sepolia'da gerçekleşiyor, ama işleminizin Ethereum Sepolia'da tamamen kanıtlanması ("kesinleşmesi") beklenmelidir. Bu süreç en fazla dört saat sürebilir._ + +1. Varlık çekme işleminiz Ethereum Sepolia'da tamamlandığında, Son İşlemler alanındaki "Talep Et" butonunun sabit hale geldiğini göreceksiniz. +1. "Talep Et" düğmesine tıklayarak Çekim Gerçekleştirme işlemini gönderin. +1. Gönderildikten sonra, çekilen fonlarınız Sepolia cüzdanınızda hemen görünmelidir. + +### Tokenlarınız ne zaman Sepolia cüzdanınıza ulaşır? + +Transfer edilen token, Çekim Gerçekleştirme işlemi Sepolia'da onaylandıktan hemen sonra Sepolia cüzdanınıza ulaşacaktır. + +{/* TODO: check architecture link is live */} + +:::tip[Rollup Durumu] +Rollup durumu `Kesinleştirildi`, bu bloktaki işlemlerin doğru bir şekilde yürütülmesinin Sepolia üzerinde bir geçerlilik kanıtının doğrulanmasıyla kanıtlandığını belirtir. Rollup durumu hakkında daha fazla bilgi için [Scroll Mimarisine Genel Bakış](/tr/technology)'a bakın. +::: + +{/* You can check the progress of withdrawal transactions as follows: */} + +{/* 1. Click your wallet address at the top-right corner of the Bridge web app. */} + +{/* */} + +{/* The pop-up panel lists the most recent transactions you made in the Bridge app (see the image below). There are two statuses: L1 status and L2 status. In this case, because we are bridging from L2 -> L1, we will quickly get a **`success`** status after submitting the transaction to the L2 Bridge. L1, on the other hand, takes **10 minutes to a few hours** to reach **`success`**. */} + +{/* 1. Click on the most recent transaction’s L2 transaction hash: */} + +{/* */} + +{/* It will open the _Transaction Details_ page in a new tab. You can see this transaction is confirmed on L2. */} + +{/* */} + +{/* The transaction is confirmed on L2, but still needs to be finalized on Goerli. */} + +{/* 1. Go back to the [Bridge](https://scroll.io/bridge) app. It takes about 10 minutes before the token shows up in your Goerli wallet. Once your transaction status shows success on L2, you should see the funds in your Goerli wallet and a transaction hash: */} + +{/* */} diff --git a/src/content/docs/tr/user-guide/common-errors.mdx b/src/content/docs/tr/user-guide/common-errors.mdx new file mode 100644 index 000000000..42285c7f5 --- /dev/null +++ b/src/content/docs/tr/user-guide/common-errors.mdx @@ -0,0 +1,41 @@ +--- +section: gettingStarted +date: Last Modified +title: "Yaygın Hatalar" +lang: "tr" +permalink: "user-guide/common-errors/" +excerpt: "Scroll Sepolia Test Ağı ile etkileşim kurmaya çalışırken bir hata mı görüyorsunuz? İşte bazı yaygın yapılandırma hataları ve bunları hızlıca nasıl düzeltebileceğiniz hakkında bilgiler." +--- + +## MetaMask'te işlem gönderirken yanlış nonce hatası + +MetaMask cüzdanınızda depolanan yerel nonce, Scroll Test Ağı düğümündeki nonce'tan farklı olduğunda bu hatayla karşılaşırsınız. Bunun nedeni yakın zamanda bekleyen bir işleminiz olması olabilir. + +Bu sorunu düzeltmek için MetaMask hesabınızı Scroll Sepolia Test Ağı için sıfırlamanız gerekir. Hesabı sıfırlamak için izlenmesi gereken adımlar şunlardır: + +1. Tarayıcıda **MetaMask** uzantısını açın +2. Üst bölgede **Scroll Sepolia Test Ağı'nı** seçin +3. Sağ üst köşedeki yuvarlak **hesap simgesine** tıklayın +4. **Ayarlar**'ı seçin +5. **Gelişmiş** bölümüne gidin +6. **Hesabı sıfırla**'ya tıklayın + +MetaMask hesabınızı sıfırlarken hiçbir varlık kaybolmaz. + +:::caution[Caution] +Bir ağı kaldırmak ve yeniden eklemek bu sorunu düzeltmek için YETERLİ DEĞİLDİR - hesabınızı sıfırlamanız gerekir. +::: + +## Köprüleme/değiştirme işlemi onaylandığında hiçbir şey olmuyor ise + +Eğer hata veya konsol kayıtları görünmüyorsa, büyük olasılıkla bir nonce sorunu vardır. Lütfen MetaMask hesabınızı yukarıda belirtilen şekilde [sıfırlayın](/tr/user-guide/common-errors). + +## Blok Gezgini "Dahili sunucu hatası" gösteriyor + +Bir gizli pencere kullanın veya tarayıcıdan geliştirici konsolunu açıp `_explorer_key` çerezini (veya tüm çerezleri) kaldırın. [Çerezlerin nasıl kaldırılacağı hakkında bu kılavuzu inceleyin.](https://www.contentstack.com/docs/developers/how-to-guides/clear-caches-and-cookies-in-different-browsers/). + +## MetaMask'te maksimum Ether gönderme "Başarısız" hatası veriyor + +MetaMask kullanarak Ether gönderirken, "Maksimum" miktarı göndermeyi denerseniz, "Başarısız" hatasıyla sonuçlanacaktır. Bunun nedeni, MetaMask'ın, rollup'ların normal gaz ücretlerinin yanı sıra ek "L1 Ücreti"ni hesaba katmaması ve işlemin gazını ödemek için gereken küçük bir miktarın yetersiz kalmasıdır. + +Bunu çözmek için, ether miktarını önerilenden biraz daha az olacak şekilde manuel olarak azaltın; işlem gerçekleşecektir. diff --git a/src/content/docs/tr/user-guide/faucet.mdx b/src/content/docs/tr/user-guide/faucet.mdx new file mode 100644 index 000000000..63322e572 --- /dev/null +++ b/src/content/docs/tr/user-guide/faucet.mdx @@ -0,0 +1,39 @@ +--- +section: gettingStarted +date: Last Modified +title: "Musluk" +lang: "tr" +permalink: "user-guide/faucet/" +whatsnext: { "ETH'nizi Scroll Sepolia'ya köprüleyin": "/tr/user-guide/bridge" } +excerpt: "Test ağımızla etkileşimde bulunmak için öncelikle Sepolia ETH elde etmeniz gerekiyor. Başlamak için birkaç Sepolia musluk uygulaması bulunmaktadır." +--- + +Test ağımız ile etkileşimde bulunmak için öncelikle _Sepolia Test Ağı'nda_ test ağı ETH'i almanız gerekmektedir. Daha sonra _Sepolia Test Ağı_ üzerinden _Scroll Sepolia Test Ağı'na_ köprüleme yapabilirsiniz. + +## Sepolia Muslukları + +Her musluk kendi kurallarına ve şartlarına sahiptir, bu nedenle işinize yarayacak bir musluk bulana kadar birkaç tanesini denemeniz gerekebilir. + +İşte birkaç Sepolia musluk uygulaması: + +- [https://sepoliafaucet.com](https://sepoliafaucet.com/) +- [https://sepolia-faucet.pk910.de](https://sepolia-faucet.pk910.de) +- [https://faucet.quicknode.com/drip](https://faucet.quicknode.com/drip) +- [https://faucet.chainstack.com](https://faucet.chainstack.com) +- [https://infura.io/faucet/sepolia](https://infura.io/faucet/sepolia) + +Sepolia'da ETH aldıktan sonra, bunları cüzdanınızda _Sepolia Ağı_ üzerinde görmelisiniz. Görünmeleri birkaç saniye sürebilir, ancak [Sepolia Blok Gezgini](https://sepolia.etherscan.io/) üzerinde adresinize yapılan bir işlemi kontrol ederek durumu kontrol edebilirsiniz. + +:::note[Yavaşlayın!] +Çoğu musluk, test tokenları için yalnızca 24 saatte bir talep oluşturmanıza izin verir. +::: + +## Scroll Sepolia Muslukları + +Köprü ile etkileşime geçmek istemiyorsanız, bazı musluklar doğrudan Scroll Sepolia ETH dağıtır. + +- [https://scroll.l2scan.co/faucet](https://scroll.l2scan.co/faucet) +- [https://www.covalenthq.com/faucet/](https://www.covalenthq.com/faucet) +- [https://faucet.quicknode.com/scroll/sepolia](https://faucet.quicknode.com/scroll/sepolia) +- [https://bwarelabs.com/faucets/scroll-testnet](https://bwarelabs.com/faucets/scroll-testnet) +- [https://scroll.faucetme.pro](https://scroll.faucetme.pro) diff --git a/src/content/docs/tr/user-guide/index.mdx b/src/content/docs/tr/user-guide/index.mdx new file mode 100644 index 000000000..5abdb281a --- /dev/null +++ b/src/content/docs/tr/user-guide/index.mdx @@ -0,0 +1,44 @@ +--- +section: gettingStarted +date: Last Modified +title: "Scroll Sepolia Kullanıcı Kılavuzu" +lang: "tr" +permalink: "user-guide/" +excerpt: "Sepolia Test Ağı'mızı denediğiniz için teşekkür ederiz. Sepolia Ağı, Ethereum Sepolia Test Ağı'nı ve Scroll Sepolia Test Ağı'nı içerir." +whatsnext: { "Cüzdanınızı Kurun": "/tr/user-guide/setup" } +--- + +import Aside from "../../../../components/Aside.astro" + + + +Scroll Sepolia Test Ağı'nı denediğiniz için teşekkür ederiz. Sorularınız varsa veya geri bildirimde bulunmak istiyorsanız, [Discord](https://discord.gg/scroll)'umuza katılın! + +Sepolia Test Ağı, _Ethereum Sepolia Test Ağı_ ve _Scroll Sepolia Test Ağı'ndan_ oluşur. Sepolia, bir Ethereum test ağıdır; Scroll Sepolia ise, bu test ağının üstüne kurulmuş bir zero knowledge rollup(zk rollup) test ağıdır. Önceden dağıtılmış bazı demo uygulamalar bulunmaktadır: _Sepolia_ ile _Scroll Sepolia_ arasında bir [köprü](https://sepolia.scroll.io/bridge),[^1] _Scroll Sepolia_ için bir [blok gezgini](https://sepolia-blockscout.scroll.io/),[^2] ve bir [rollup gezgini](https://sepolia.scroll.io/rollupscan). + +L1 işlemlerini görüntülemek için Etherscan'in [Sepolia gezgini](https://sepolia.etherscan.io/). +L2 işlemlerini görüntülemek için [Scrollscan](https://sepolia.scrollscan.com) veya Scroll'un [Blockscout](https://sepolia-blockscout.scroll.io/)'unu kullanabilirsiniz, ancak ayrıca [Dora](https://www.ondora.xyz/network/scroll-sepolia/interactions) veya [L2Scan](https://scroll-sepolia.l2scan.co/)'in sağladığı ek işlevleri de denemek isteyebilirsiniz. + +Test ağını keşfetmek için önerilen iş akışı aşağıdaki gibidir: + +1. Cüzdanınıza [Sepolia Test Ağı](https://sepolia.scroll.io/portal) yapılandırmalarını ekleyin +2. Herhangi bir Ethereum Musluğu uygulamasından _Sepolia_ ağında test tokenları isteyin. (bkz. [Musluk](/tr/user-guide/faucet) makalesi) +3. _Sepolia_ ile _Scroll Sepolia_ arasında [Köprü](https://sepolia.scroll.io/bridge) uygulaması aracılığıyla test tokenlarını aktarın. +4. Cüzdanınızı kullanarak _Scroll Sepolia_'daki diğer cüzdanlara token aktarın. +5. [Uniswap](https://uniswap-showcase.sepolia.scroll.xyz/) veya [Aave](https://app.aave.com) gibi akıllı sözleşmelerle etkileşimde bulunarak ekosistemimizi keşfedin. +6. _Scroll Sepolia_'dan _Sepolia_'ya tokenları [Köprü](https://sepolia.scroll.io/bridge) uygulaması aracılığıyla çekin. + +Her uygulama için talimatları bu kullanıcı kılavuzunun geri kalanında bulabilirsiniz. + +## Sorular ve Geri Bildirim + +Herhangi bir sorunla karşılaşırsanız, [Discord](https://discord.gg/scroll)'a katılın ve `#general-support` kanalında bizimle konuşun. Ayrıca deneyiminizi nasıl iyileştirebileceğimiz hakkındaki düşüncelerinizi veya geri bildirimlerinizi de duymaktan mutluluk duyarız. + +[^1]: [Hop Exchange](https://hop.exchange/) arayüzünden forklanmıştır 🐇🙌 +[^2]: [Blockscout](https://blockscout.com/)'un harika açık kaynaklı blok gezgini \ No newline at end of file diff --git a/src/content/docs/tr/user-guide/setup.mdx b/src/content/docs/tr/user-guide/setup.mdx new file mode 100644 index 000000000..2dda51c18 --- /dev/null +++ b/src/content/docs/tr/user-guide/setup.mdx @@ -0,0 +1,40 @@ +--- +section: gettingStarted +date: Last Modified +title: "Kurulum" +lang: "tr" +permalink: "user-guide/setup/" +whatsnext: { "Sepolia ETH'sini bir musluktan alabilirsiniz": "/tr/user-guide/faucet" } +excerpt: "Scroll Test Ağı ile etkileşimde bulunmak için bir cüzdana ihtiyacınız var. Bazı örnek cüzdanlara ve yapılandırma ipuçlarına işte buradan ulaşabilirsiniz." +--- + +import Aside from "../../../../components/Aside.astro" + +## Cüzdan + +Scroll Sepolia Test Ağı'ndaki dApp'lerle etkileşimde bulunmak için bir cüzdana ihtiyacınız olacak. Aşağıda bazı örnek cüzdanları ve yapılandırma ipuçlarını bulabilirsiniz. Köprü uygulamamız MetaMask, Coinbase Wallet veya WalletConnect desteği olan herhangi bir cüzdanı destekler. + +### MetaMask + +MetaMask'i [resmi web sitelerinden](https://metamask.io/download/) indirebilirsiniz. + +Scroll Sepolia Test Ağı yapılandırmalarını MetaMask cüzdanınıza içe aktarabilirsiniz. Bunun için, [Scroll Sepolia portalına](https://sepolia.scroll.io/portal) gidin, ardından "Cüzdanı Bağla" düğmesine tıklayın ve MetaMask'i seçin. Sonraki adımda, Sepolia Test Ağı ve Scroll Sepolia Test Ağı için "MetaMask'e Ekle" düğmelerine tıklayın. Bu işlem, Scroll Sepolia Test Ağı için zincir kimliği ve RPC URL'lerini içe aktaracaktır. Sepolia Test Ağı ayrıca MetaMask'te varsayılan olarak yapılandırılmıştır. Onu göstermek için, MetaMask ağ seçim açılır menüsünde "Test ağlarını göster/gizle" yi tıklayın. + +### Manuel ağ yapılandırması (diğer cüzdanlar için) + +**Cüzdan Ekle** bağlantıları her cüzdanla uyumlu olmayabilir. Bunları kullanırken sorun yaşıyorsanız, _Sepolia Test Ağı_ ve _Scroll Sepolia Ağı'nı_ tablodaki yapılandırma detaylarını manuel olarak eklemeniz gerekebilir: + +| Ağ Adı | Scroll Sepolia Test Ağı | Sepolia Test Ağı | +| ------------------ | ---------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| RPC URL | [https://sepolia-rpc.scroll.io/](https://sepolia-rpc.scroll.io/) | [https://eth-sepolia-public.unifra.io](https://eth-sepolia-public.unifra.io) | +| Zincir Kimliği | 534351 | 11155111 | +| Para Birimi Sembolü| ETH | ETH | +| Blok Gezgini URL'si| [https://sepolia.scrollscan.com](https://sepolia.scrollscan.com) | [https://sepolia.etherscan.io](https://sepolia.etherscan.io) | + + diff --git a/src/content/docs/tr/user-guide/transfer-tokens.md b/src/content/docs/tr/user-guide/transfer-tokens.md new file mode 100644 index 000000000..854a2cb5b --- /dev/null +++ b/src/content/docs/tr/user-guide/transfer-tokens.md @@ -0,0 +1,18 @@ +--- +section: gettingStarted +date: Last Modified +title: "Tokenları Aktar" +lang: "tr" +permalink: "user-guide/transfer-tokens/" +excerpt: "Scroll Sepolia Test Ağı'nda tokenları aktarmak için cüzdanınızı her zamanki gibi kullanabilirsiniz." +--- + +Scroll Sepolia Test Ağı'nda token aktarmak için cüzdanınızın normal işlevini kullanabilirsiniz -- hiçbir ek yapılandırmaya gerek yoktur. + +## MetaMask'te bir token gönderme + +1. Cüzdanınızı açın ve **Scroll Sepolia Test Ağı**'na geçin. +2. Ortadaki **Gönder** düğmesine tıklayın ve metin kutusuna transfer yapmak istediğiniz adresi yazın. +3. **Varlık** kutusunda tokenı seçin ve aktarmak istediğiniz token miktarını yazın. +4. İşlemi göndermek için **İleri** düğmesine ve ardından **Onayla** düğmesine tıklayın. +5. Gönderdikten sonra işlemi cüzdanınızın **Aktivite** sekmesinde bulabilirsiniz. diff --git a/src/pages/tr/[...redirect].astro b/src/pages/tr/[...redirect].astro new file mode 100644 index 000000000..e81067797 --- /dev/null +++ b/src/pages/tr/[...redirect].astro @@ -0,0 +1,30 @@ +--- +import { changeLanguage } from "i18next" +import { GetStaticPathsResult } from "astro" +import redirects from "../../features/redirects/redirects.json" + +changeLanguage("tr") + +export async function getStaticPaths(): Promise { + const sanitizeSource = (source: string) => { + let newSource = source + if (newSource[newSource.length - 1] === "/") newSource = newSource.slice(0, newSource.length - 1) + if (newSource[0] === "/") return newSource.slice(1, newSource.length) + return newSource + } + return redirects.redirects.map((entry) => { + return { + params: { redirect: sanitizeSource(entry.source) }, + props: { + to: + entry.destination.charAt(0) === "/" || entry.destination.includes("https://") + ? entry.destination + : "/" + entry.destination, + }, + } + }) +} +const { to } = Astro.props +--- + + diff --git a/src/pages/tr/home/ConnectUs.astro b/src/pages/tr/home/ConnectUs.astro new file mode 100644 index 000000000..bcc78345d --- /dev/null +++ b/src/pages/tr/home/ConnectUs.astro @@ -0,0 +1,152 @@ +--- +import SectionHeader from "~/components/SectionHeader/index.astro" +import LinkArrowSvg from "~/assets/svgs/home/home-link-arrow.svg?raw" +import DiscordSvg from "~/assets/svgs/home/Discord.svg?raw" +import ForumSvg from "~/assets/svgs/home/Forum.svg?raw" +import ContributeSvg from "~/assets/svgs/home/Contribute.svg?raw" + +const mediaList = [ + { + icon: DiscordSvg, + name: "Discord'umuza Katılın", + content: "Diğer Scroll geliştiricileri ve kullanıcılarıyla bağlantı kurun.", + link: "https://discord.gg/scroll", + }, + { + icon: ForumSvg, + name: "Topluluk Forumu", + content: "Scroll'un temel protokollerindeki değişiklikleri tartışın ve önerin.", + link: "http://community.scroll.io/", + }, + { + icon: ContributeSvg, + name: "Scroll'a Katkıda Bulunun", + content: "Diğer geliştiricilerle birlikte inşa edin.", + link: "https://github.com/scroll-tech/contribute-to-scroll", + }, +] +--- + +
+ +
+ { + mediaList.map(({ icon, name, content, link }) => ( + +
+ + + + + + +
+ + {name} + {content} +
+ )) + } +
+
+ + diff --git a/src/pages/tr/home/Navigate.astro b/src/pages/tr/home/Navigate.astro new file mode 100644 index 000000000..60f311693 --- /dev/null +++ b/src/pages/tr/home/Navigate.astro @@ -0,0 +1,63 @@ +--- +import NavCard from "~/components/NavCard.astro" +import StartSvg from "~/assets/svgs/home/home-start.svg?raw" +import DevelopSvg from "~/assets/svgs/home/home-develop.svg?raw" +import TechnologySvg from "~/assets/svgs/home/home-technology.svg?raw" +import LearnSvg from "~/assets/svgs/home/home-learn.svg?raw" +import SectionHeader from "~/components/SectionHeader/index.astro" + +const navList = [ + { + icon: StartSvg, + name: "Başla", + content: "Scroll'a geçiş yapın ve dApp ekosistemimizi keşfedin.", + link: "/tr/getting-started/overview", + }, + { + icon: DevelopSvg, + name: "Geliştiriciler", + content: "Scroll'un geliştirici dokümanlarını inceleyin.", + link: "/tr/developers", + }, + { + icon: TechnologySvg, + name: "Teknoloji", + content: "Scroll'un zkEVM mimarisine genel bakış.", + link: "/tr/technology", + }, + { + icon: LearnSvg, + name: "Öğren", + content: "ZK ve ölçeklenebilirliğin dünyasına giriş.", + link: "/tr/learn", + }, +] +--- + + + + diff --git a/src/pages/tr/home/QuickStart.astro b/src/pages/tr/home/QuickStart.astro new file mode 100644 index 000000000..cf3aaf0e2 --- /dev/null +++ b/src/pages/tr/home/QuickStart.astro @@ -0,0 +1,111 @@ +--- +import SectionHeader from "~/components/SectionHeader/index.astro" +import EtherSvg from "~/assets/svgs/home/EthersJS.svg?raw" + +const toolList = [ + { icon: "/svgs/Hardhat.svg", name: "Hardhat", link: "https://hardhat.org/", quickstartAnchor: "hardhat" }, + { icon: "/svgs/Foundry.svg", name: "Foundry", link: "https://getfoundry.sh/", quickstartAnchor: "foundry" }, + { icon: "/svgs/Remix.svg", name: "Remix", link: "https://remix-project.org/", quickstartAnchor: "remix-web-ide" }, + { + icon: EtherSvg, + color: "text-[#2A4B78] dark:text-white", + name: "EthersJS", + link: "https://ethers.org/", + quickstartAnchor: "ethersjs", + }, + { icon: "/svgs/Brownie.svg", name: "Brownie", link: "https://github.com/eth-brownie", quickstartAnchor: "brownie" }, + { icon: "/svgs/Truffle.svg", name: "Truffle", link: "https://trufflesuite.com/", quickstartAnchor: "truffle" }, +] +--- + +
+ +
+ { + toolList.map(({ icon, name, quickstartAnchor, color }) => ( + +
+ {color ? : {name}} +
+ {name} +
+ )) + } +
+
+ + diff --git a/src/pages/tr/home/index.astro b/src/pages/tr/home/index.astro new file mode 100644 index 000000000..dfab9cde7 --- /dev/null +++ b/src/pages/tr/home/index.astro @@ -0,0 +1,61 @@ +--- +import { changeLanguage } from "i18next" +import HomeLayout from "../../../layouts/HomeLayout.astro" +import Search from "../../../components/HomeSearch" +import QuickStart from "./QuickStart.astro" +import Navigate from "./Navigate.astro" +import ConnectUs from "./ConnectUs.astro" + +changeLanguage("tr") +--- + + +
+
+

Scroll Dokümantasyonu'na
Hoş Geldiniz!

+ +
+
+
+
+ + + +
+
+
+ + diff --git a/src/pages/tr/index.astro b/src/pages/tr/index.astro new file mode 100644 index 000000000..77f88f7e0 --- /dev/null +++ b/src/pages/tr/index.astro @@ -0,0 +1,6 @@ +--- +import i18next, { changeLanguage } from "i18next" +changeLanguage("tr") +--- + + diff --git a/src/pages/tr/search-index.astro b/src/pages/tr/search-index.astro new file mode 100644 index 000000000..c37802e1e --- /dev/null +++ b/src/pages/tr/search-index.astro @@ -0,0 +1,51 @@ +--- +import { changeLanguage } from "i18next" +import { MarkdownInstance } from "astro" +import fs from "node:fs" + +changeLanguage("tr") + +// import .astro files +const pages = await Astro.glob("../**/*.astro") +// import .md files +const posts = [...(await Astro.glob("../../content/docs/en/**/*.md")).filter((post) => !post.frontmatter.draft)] +const postsMdx = [...(await Astro.glob("../../content/docs/en/**/*.mdx")).filter((post) => !post.frontmatter.draft)] +const postsMdxWithContent = postsMdx.map((post) => { + const url = new URL(post.file, import.meta.url) + const content = fs.readFileSync(url, "utf-8") + return { ...post, rawContent: () => content } +}) +const markDownFiles = [...posts, ...postsMdxWithContent] +const allContent = [...pages, ...posts, ...postsMdx] + +function transformPath(path) { + path = path.split("src/content/docs")[1] + + path = path.substring(0, path.lastIndexOf(".")) || path + + return path +} + +const transformMarkdownInstancesToIndexes = async (instances: MarkdownInstance>[]) => { + return Promise.all( + instances.map(async (instance) => { + const { title, section, metadata } = instance.frontmatter + const headings = await instance.getHeadings() + const content = !!instance.rawContent ? await instance.rawContent() : undefined + return { + title, + headings, + url: transformPath(instance.file), + section, + description: metadata?.description ?? undefined, + content, + } + }) + ) +} +const index = await transformMarkdownInstancesToIndexes(markDownFiles) +const stringifiedJson = JSON.stringify({ index }, null, 2) +fs.writeFileSync(`${process.cwd()}/public/search-index.json`, stringifiedJson) +--- + +