diff --git a/.nojekyll b/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.40.05.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.40.05.png new file mode 100644 index 0000000..e182f88 Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.40.05.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.40.23.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.40.23.png new file mode 100644 index 0000000..386e446 Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.40.23.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.40.42.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.40.42.png new file mode 100644 index 0000000..8bd1f1e Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.40.42.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.46.35.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.46.35.png new file mode 100644 index 0000000..9975cec Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.46.35.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.49.26.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.49.26.png new file mode 100644 index 0000000..9aaaa77 Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.49.26.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.50.09.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.50.09.png new file mode 100644 index 0000000..02c0537 Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_10.50.09.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.13.22.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.13.22.png new file mode 100644 index 0000000..6233123 Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.13.22.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.15.45.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.15.45.png new file mode 100644 index 0000000..10f9e5b Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.15.45.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.53.47.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.53.47.png new file mode 100644 index 0000000..81b57a9 Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.53.47.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.54.48.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.54.48.png new file mode 100644 index 0000000..428d95d Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.54.48.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.55.24.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.55.24.png new file mode 100644 index 0000000..e260bbb Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.55.24.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.55.57.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.55.57.png new file mode 100644 index 0000000..68f05bb Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_11.55.57.png differ diff --git a/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_12.06.37.png b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_12.06.37.png new file mode 100644 index 0000000..bab3754 Binary files /dev/null and b/15f2701f826d80b493ebd2884bcc9fb0/Screenshot_2024-12-17_at_12.06.37.png differ diff --git a/1602701f-826d-8012-86ad-f9093714245f/funki-logo-1200x1200.png b/1602701f-826d-8012-86ad-f9093714245f/funki-logo-1200x1200.png new file mode 100644 index 0000000..42ec299 Binary files /dev/null and b/1602701f-826d-8012-86ad-f9093714245f/funki-logo-1200x1200.png differ diff --git a/1602701f-826d-8012-86ad-f9093714245f/logo.png b/1602701f-826d-8012-86ad-f9093714245f/logo.png new file mode 100644 index 0000000..8c49f3f Binary files /dev/null and b/1602701f-826d-8012-86ad-f9093714245f/logo.png differ diff --git a/1602701f-826d-803f-97cd-c8eba7633228/funki-logo-1200x1200.png b/1602701f-826d-803f-97cd-c8eba7633228/funki-logo-1200x1200.png new file mode 100644 index 0000000..42ec299 Binary files /dev/null and b/1602701f-826d-803f-97cd-c8eba7633228/funki-logo-1200x1200.png differ diff --git a/1602701f-826d-803f-97cd-c8eba7633228/logo.png b/1602701f-826d-803f-97cd-c8eba7633228/logo.png new file mode 100644 index 0000000..8c49f3f Binary files /dev/null and b/1602701f-826d-803f-97cd-c8eba7633228/logo.png differ diff --git a/1602701f-826d-8072-b0cc-fcbc72c1c8e0/1000001.mp4 b/1602701f-826d-8072-b0cc-fcbc72c1c8e0/1000001.mp4 new file mode 100644 index 0000000..d38d6a5 Binary files /dev/null and b/1602701f-826d-8072-b0cc-fcbc72c1c8e0/1000001.mp4 differ diff --git a/1602701f-826d-8072-b0cc-fcbc72c1c8e0/funki-logo-1200x1200.png b/1602701f-826d-8072-b0cc-fcbc72c1c8e0/funki-logo-1200x1200.png new file mode 100644 index 0000000..42ec299 Binary files /dev/null and b/1602701f-826d-8072-b0cc-fcbc72c1c8e0/funki-logo-1200x1200.png differ diff --git a/1602701f-826d-8072-b0cc-fcbc72c1c8e0/logo.png b/1602701f-826d-8072-b0cc-fcbc72c1c8e0/logo.png new file mode 100644 index 0000000..8c49f3f Binary files /dev/null and b/1602701f-826d-8072-b0cc-fcbc72c1c8e0/logo.png differ diff --git a/1602701f-826d-808e-a478-cb739fe1dcd8/funki-logo-1200x1200.png b/1602701f-826d-808e-a478-cb739fe1dcd8/funki-logo-1200x1200.png new file mode 100644 index 0000000..42ec299 Binary files /dev/null and b/1602701f-826d-808e-a478-cb739fe1dcd8/funki-logo-1200x1200.png differ diff --git a/1602701f-826d-808e-a478-cb739fe1dcd8/logo.png b/1602701f-826d-808e-a478-cb739fe1dcd8/logo.png new file mode 100644 index 0000000..8c49f3f Binary files /dev/null and b/1602701f-826d-808e-a478-cb739fe1dcd8/logo.png differ diff --git a/1602701f-826d-80b1-9709-d2969fd59bd2/funki-logo-1200x1200.png b/1602701f-826d-80b1-9709-d2969fd59bd2/funki-logo-1200x1200.png new file mode 100644 index 0000000..42ec299 Binary files /dev/null and b/1602701f-826d-80b1-9709-d2969fd59bd2/funki-logo-1200x1200.png differ diff --git a/1602701f-826d-80b1-9709-d2969fd59bd2/logo.png b/1602701f-826d-80b1-9709-d2969fd59bd2/logo.png new file mode 100644 index 0000000..8c49f3f Binary files /dev/null and b/1602701f-826d-80b1-9709-d2969fd59bd2/logo.png differ diff --git a/1602701f-826d-80dd-9aca-cfff7f072973/funki-logo-1200x1200.png b/1602701f-826d-80dd-9aca-cfff7f072973/funki-logo-1200x1200.png new file mode 100644 index 0000000..42ec299 Binary files /dev/null and b/1602701f-826d-80dd-9aca-cfff7f072973/funki-logo-1200x1200.png differ diff --git a/1602701f-826d-80dd-9aca-cfff7f072973/logo.png b/1602701f-826d-80dd-9aca-cfff7f072973/logo.png new file mode 100644 index 0000000..8c49f3f Binary files /dev/null and b/1602701f-826d-80dd-9aca-cfff7f072973/logo.png differ diff --git a/404.html b/404.html index 802e905..39e8264 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@ Page Not Found | Funki Docs - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/4b98da7d-a3a0-427a-a41d-1d5ced4ee25e/funki-logo-1200x1200.png b/4b98da7d-a3a0-427a-a41d-1d5ced4ee25e/funki-logo-1200x1200.png new file mode 100644 index 0000000..42ec299 Binary files /dev/null and b/4b98da7d-a3a0-427a-a41d-1d5ced4ee25e/funki-logo-1200x1200.png differ diff --git a/4b98da7d-a3a0-427a-a41d-1d5ced4ee25e/logo.png b/4b98da7d-a3a0-427a-a41d-1d5ced4ee25e/logo.png new file mode 100644 index 0000000..8c49f3f Binary files /dev/null and b/4b98da7d-a3a0-427a-a41d-1d5ced4ee25e/logo.png differ diff --git a/62b41ca2-b94c-4102-9d33-319215d447fc/funki-logo-1200x1200.png b/62b41ca2-b94c-4102-9d33-319215d447fc/funki-logo-1200x1200.png new file mode 100644 index 0000000..42ec299 Binary files /dev/null and b/62b41ca2-b94c-4102-9d33-319215d447fc/funki-logo-1200x1200.png differ diff --git a/62b41ca2-b94c-4102-9d33-319215d447fc/logo.png b/62b41ca2-b94c-4102-9d33-319215d447fc/logo.png new file mode 100644 index 0000000..8c49f3f Binary files /dev/null and b/62b41ca2-b94c-4102-9d33-319215d447fc/logo.png differ diff --git a/assets/images/6163883f-4a86-4ed9-b259-46227aa84fa5-0e650fe8c868e080079a72e2f374604e.png b/assets/images/6163883f-4a86-4ed9-b259-46227aa84fa5-0e650fe8c868e080079a72e2f374604e.png new file mode 100644 index 0000000..80d96f7 Binary files /dev/null and b/assets/images/6163883f-4a86-4ed9-b259-46227aa84fa5-0e650fe8c868e080079a72e2f374604e.png differ diff --git a/assets/images/Screenshot_2024-09-06_at_14.17.59-83ad33543798e5312c99b73fc26186a5.png b/assets/images/Screenshot_2024-09-06_at_14.17.59-83ad33543798e5312c99b73fc26186a5.png new file mode 100644 index 0000000..c028666 Binary files /dev/null and b/assets/images/Screenshot_2024-09-06_at_14.17.59-83ad33543798e5312c99b73fc26186a5.png differ diff --git a/assets/images/Screenshot_2024-09-06_at_16.39.36-cb3b9f7d3986562a0dece064a0f3a35e.png b/assets/images/Screenshot_2024-09-06_at_16.39.36-cb3b9f7d3986562a0dece064a0f3a35e.png new file mode 100644 index 0000000..87bff1b Binary files /dev/null and b/assets/images/Screenshot_2024-09-06_at_16.39.36-cb3b9f7d3986562a0dece064a0f3a35e.png differ diff --git a/assets/images/Screenshot_2024-09-06_at_16.39.57-4f373b7329c39bdec1f53ca70b069c62.png b/assets/images/Screenshot_2024-09-06_at_16.39.57-4f373b7329c39bdec1f53ca70b069c62.png new file mode 100644 index 0000000..1090265 Binary files /dev/null and b/assets/images/Screenshot_2024-09-06_at_16.39.57-4f373b7329c39bdec1f53ca70b069c62.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_10.40.05-ed232ee1156e8a3da5013a46d89975fb.png b/assets/images/Screenshot_2024-12-17_at_10.40.05-ed232ee1156e8a3da5013a46d89975fb.png new file mode 100644 index 0000000..e182f88 Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_10.40.05-ed232ee1156e8a3da5013a46d89975fb.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_10.40.23-8726c0b48426d07f11b6cfe664eb6d8f.png b/assets/images/Screenshot_2024-12-17_at_10.40.23-8726c0b48426d07f11b6cfe664eb6d8f.png new file mode 100644 index 0000000..386e446 Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_10.40.23-8726c0b48426d07f11b6cfe664eb6d8f.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_10.40.42-5bccbba9eda2463bc9c41e2358a425c2.png b/assets/images/Screenshot_2024-12-17_at_10.40.42-5bccbba9eda2463bc9c41e2358a425c2.png new file mode 100644 index 0000000..8bd1f1e Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_10.40.42-5bccbba9eda2463bc9c41e2358a425c2.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_10.46.35-201bcf483a89b07ce617a55aebcfe23e.png b/assets/images/Screenshot_2024-12-17_at_10.46.35-201bcf483a89b07ce617a55aebcfe23e.png new file mode 100644 index 0000000..9975cec Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_10.46.35-201bcf483a89b07ce617a55aebcfe23e.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_10.49.26-c703c3395dd7a673a1fee8c7b04b1914.png b/assets/images/Screenshot_2024-12-17_at_10.49.26-c703c3395dd7a673a1fee8c7b04b1914.png new file mode 100644 index 0000000..9aaaa77 Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_10.49.26-c703c3395dd7a673a1fee8c7b04b1914.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_10.50.09-582ffcecc57db4bfa3e90cb51abc8a8b.png b/assets/images/Screenshot_2024-12-17_at_10.50.09-582ffcecc57db4bfa3e90cb51abc8a8b.png new file mode 100644 index 0000000..02c0537 Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_10.50.09-582ffcecc57db4bfa3e90cb51abc8a8b.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_11.13.22-011c91d2c3ad7991fea076aedc3dee64.png b/assets/images/Screenshot_2024-12-17_at_11.13.22-011c91d2c3ad7991fea076aedc3dee64.png new file mode 100644 index 0000000..6233123 Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_11.13.22-011c91d2c3ad7991fea076aedc3dee64.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_11.15.45-3f9948cebb9fc5bca34013d0dd68a204.png b/assets/images/Screenshot_2024-12-17_at_11.15.45-3f9948cebb9fc5bca34013d0dd68a204.png new file mode 100644 index 0000000..10f9e5b Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_11.15.45-3f9948cebb9fc5bca34013d0dd68a204.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_11.53.47-0d4e4c5dc197596db5d82cec341e4305.png b/assets/images/Screenshot_2024-12-17_at_11.53.47-0d4e4c5dc197596db5d82cec341e4305.png new file mode 100644 index 0000000..81b57a9 Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_11.53.47-0d4e4c5dc197596db5d82cec341e4305.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_11.54.48-efa405d42beced4613eb87c18920c215.png b/assets/images/Screenshot_2024-12-17_at_11.54.48-efa405d42beced4613eb87c18920c215.png new file mode 100644 index 0000000..428d95d Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_11.54.48-efa405d42beced4613eb87c18920c215.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_11.55.24-b54691dfa3811fdf45e5c39b0cc83364.png b/assets/images/Screenshot_2024-12-17_at_11.55.24-b54691dfa3811fdf45e5c39b0cc83364.png new file mode 100644 index 0000000..e260bbb Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_11.55.24-b54691dfa3811fdf45e5c39b0cc83364.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_11.55.57-62a94d87ebae59703d54b38ce3d4de4e.png b/assets/images/Screenshot_2024-12-17_at_11.55.57-62a94d87ebae59703d54b38ce3d4de4e.png new file mode 100644 index 0000000..68f05bb Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_11.55.57-62a94d87ebae59703d54b38ce3d4de4e.png differ diff --git a/assets/images/Screenshot_2024-12-17_at_12.06.37-7091554e8c233cf7faaf6badfdfbf734.png b/assets/images/Screenshot_2024-12-17_at_12.06.37-7091554e8c233cf7faaf6badfdfbf734.png new file mode 100644 index 0000000..bab3754 Binary files /dev/null and b/assets/images/Screenshot_2024-12-17_at_12.06.37-7091554e8c233cf7faaf6badfdfbf734.png differ diff --git a/assets/images/Screenshot_2024-12-18_at_09.14.36-09c84f9024222041aab9a4f41d768789.png b/assets/images/Screenshot_2024-12-18_at_09.14.36-09c84f9024222041aab9a4f41d768789.png new file mode 100644 index 0000000..1b1685e Binary files /dev/null and b/assets/images/Screenshot_2024-12-18_at_09.14.36-09c84f9024222041aab9a4f41d768789.png differ diff --git a/assets/images/Screenshot_2024-12-18_at_09.21.45-7b8de09a3d161c7c917e93e9e1cdbcd3.png b/assets/images/Screenshot_2024-12-18_at_09.21.45-7b8de09a3d161c7c917e93e9e1cdbcd3.png new file mode 100644 index 0000000..76e3fc6 Binary files /dev/null and b/assets/images/Screenshot_2024-12-18_at_09.21.45-7b8de09a3d161c7c917e93e9e1cdbcd3.png differ diff --git a/assets/images/Screenshot_2024-12-18_at_09.22.58-26ba362ceb3ceec2b2d856c37eccb196.png b/assets/images/Screenshot_2024-12-18_at_09.22.58-26ba362ceb3ceec2b2d856c37eccb196.png new file mode 100644 index 0000000..1c82264 Binary files /dev/null and b/assets/images/Screenshot_2024-12-18_at_09.22.58-26ba362ceb3ceec2b2d856c37eccb196.png differ diff --git a/assets/images/thirdweb-mint-22461769d7cc23ae9e594f86870f1000.png b/assets/images/thirdweb-mint-22461769d7cc23ae9e594f86870f1000.png deleted file mode 100644 index 9654fbb..0000000 Binary files a/assets/images/thirdweb-mint-22461769d7cc23ae9e594f86870f1000.png and /dev/null differ diff --git a/assets/images/thridweb-success-contract-a45a98f4bdfc156f7443ff785e14143d.png b/assets/images/thridweb-success-contract-a45a98f4bdfc156f7443ff785e14143d.png deleted file mode 100644 index 0104975..0000000 Binary files a/assets/images/thridweb-success-contract-a45a98f4bdfc156f7443ff785e14143d.png and /dev/null differ diff --git a/assets/js/0058b4c6.264d1a89.js b/assets/js/0058b4c6.264d1a89.js new file mode 100644 index 0000000..b068bc3 --- /dev/null +++ b/assets/js/0058b4c6.264d1a89.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[849],{6164:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docSidebar":[{"type":"link","label":"About Funki","href":"/docs/","docId":"overview","unlisted":false},{"type":"link","label":"The Dokodemo Protocol","href":"/docs/the-dokodemo-protocol","docId":"the-dokodemo-protocol","unlisted":false},{"type":"link","label":"Using Funki","href":"/docs/using-funki","docId":"using-funki","unlisted":false},{"type":"category","label":"Building On Funki","collapsed":false,"collapsible":false,"items":[{"type":"link","label":"Network Information","href":"/docs/network-information","docId":"building-on-funki/network-information","unlisted":false},{"type":"link","label":"Funki Contracts","href":"/docs/funki-contracts","docId":"building-on-funki/funki-contracts","unlisted":false},{"type":"link","label":"Fees","href":"/docs/fees","docId":"building-on-funki/fees","unlisted":false},{"type":"link","label":"Differences between Ethereum and Funki","href":"/docs/differences","docId":"building-on-funki/differences","unlisted":false}]},{"type":"category","label":"Tutorials","collapsed":false,"collapsible":false,"items":[{"type":"link","label":"Deploying a smart contract using Hardhat","href":"/docs/tutorials/deploy-sm-using-hardhat","docId":"tutorials/deploy-sm-using-hardhat","unlisted":false},{"type":"link","label":"Deploying a smart contract using Foundry","href":"/docs/tutorials/deploy-sm-using-foundry","docId":"tutorials/deploy-sm-using-foundry","unlisted":false},{"type":"link","label":"Deploying a smart contract using Remix","href":"/docs/tutorials/deploy-sm-using-remix","docId":"tutorials/deploy-sm-using-remix","unlisted":false},{"type":"link","label":"Deploying a smart contract using thirdweb","href":"/docs/tutorials/deploy-sm-using-thirdweb","docId":"tutorials/deploy-sm-using-thirdweb","unlisted":false},{"type":"link","label":"Verify a Smart Contract on FunkiScan","href":"/docs/tutorials/verify-sm-on-funkichain","docId":"tutorials/verify-sm-on-funkichain","unlisted":false},{"type":"link","label":"Simple NFTs","href":"/docs/tutorials/simple-nfts","docId":"tutorials/simple-nfts","unlisted":false},{"type":"link","label":"Simple Fungible Tokens","href":"/docs/tutorials/simple-fungible-tokens","docId":"tutorials/simple-fungible-tokens","unlisted":false},{"type":"link","label":"Interact with Standard Bridge","href":"/docs/tutorials/interact-with-standard-bridge","docId":"tutorials/interact-with-standard-bridge","unlisted":false},{"type":"link","label":"Connect Metamask","href":"/docs/tutorials/connect-metamask","docId":"tutorials/connect-metamask","unlisted":false},{"type":"link","label":"Connect WalletConnect via AppKit","href":"/docs/tutorials/connect-walletconnect-appkit","docId":"tutorials/connect-walletconnect-appkit","unlisted":false}]},{"type":"category","label":"Tools","collapsed":false,"collapsible":false,"items":[{"type":"link","label":"Block Explorers","href":"/docs/tools/block-explorers","docId":"tools/block-explorers","unlisted":false},{"type":"link","label":"Node Providers","href":"/docs/tools/node-providers","docId":"tools/node-providers","unlisted":false},{"type":"link","label":"Network Faucets","href":"/docs/tools/network-faucets","docId":"tools/network-faucets","unlisted":false},{"type":"link","label":"Cross-chain","href":"/docs/tools/cross-chain","docId":"tools/cross-chain","unlisted":false},{"type":"category","label":"Dexs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Funki DEX","href":"/docs/tools/dexs/funki-dex","docId":"tools/dexs/funki-dex","unlisted":false},{"type":"link","label":"Funki DEX-FAQ","href":"/docs/tools/dexs/funki-dex-faq","docId":"tools/dexs/funki-dex-faq","unlisted":false}]},{"type":"link","label":"Onramps","href":"/docs/tools/onramps","docId":"tools/onramps","unlisted":false},{"type":"category","label":"Bridges","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Funki Bridge - FAQ","href":"/docs/tools/bridges/funki-bridges-faq","docId":"tools/bridges/funki-bridge-faq","unlisted":false},{"type":"link","label":"Mainnet","href":"/docs/tools/bridges/mainnet","docId":"tools/bridges/bridges-mainnet","unlisted":false},{"type":"link","label":"Testnet","href":"/docs/tools/bridges/testnet","docId":"tools/bridges/bridges-testnet","unlisted":false}]},{"type":"category","label":"Toolchains","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Hardhat","href":"/docs/tools/toolchains/hardhat","docId":"tools/toolchains/hardhat","unlisted":false},{"type":"link","label":"Foundry","href":"/docs/tools/toolchains/foundry","docId":"tools/toolchains/foundry","unlisted":false},{"type":"link","label":"thirdweb CLI","href":"/docs/tools/toolchains/thirdweb-cli","docId":"tools/toolchains/thirdweb-cli","unlisted":false}]},{"type":"category","label":"Clients","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"ethers.js","href":"/docs/tools/clients/ethers","docId":"tools/clients/ethers","unlisted":false},{"type":"link","label":"thirdweb SDK","href":"/docs/tools/clients/thirdweb-sdk","docId":"tools/clients/thirdweb-sdk","unlisted":false},{"type":"link","label":"viem","href":"/docs/tools/clients/viem","docId":"tools/clients/viem","unlisted":false},{"type":"link","label":"web3.js","href":"/docs/tools/clients/web3","docId":"tools/clients/web3","unlisted":false}]}]},{"type":"category","label":"Tokens","collapsed":false,"collapsible":false,"items":[{"type":"link","label":"Bridging an L1 token to Funki","href":"/docs/tokens/bridging-an-l1-token-to-funki","docId":"tokens/token-list","unlisted":false},{"type":"link","label":"Adding tokens to MetaMask","href":"/docs/tokens/adding-tokens-to-metamask","docId":"tokens/wallet","unlisted":false}]},{"type":"link","label":"Security","href":"/docs/security","docId":"security","unlisted":false},{"type":"link","label":"Privacy Policy","href":"/docs/privacy-policy","docId":"privacy-policy","unlisted":false},{"type":"link","label":"Terms of Use","href":"/docs/terms-of-use","docId":"terms-of-use","unlisted":false}]},"docs":{"building-on-funki/differences":{"id":"building-on-funki/differences","title":"Differences between Ethereum and Funki","description":"Documentation covering the differences between Ethereum and Funki. This page includes details on differences between opcodes, blocks, network specifications, and transaction costs.","sidebar":"docSidebar"},"building-on-funki/fees":{"id":"building-on-funki/fees","title":"Fees","description":"Documentation about network fees on Funki. This page covers details of the two-component cost system involving L2 execution fees and L1 security fees, and offers insights on fee variations and cost-saving strategies.","sidebar":"docSidebar"},"building-on-funki/funki-contracts":{"id":"building-on-funki/funki-contracts","title":"Funki Contracts","description":"A comprehensive list of L2 contract addresses for Funki Mainnet and Funki Testnet, including links to their respective blockchain explorers.","sidebar":"docSidebar"},"building-on-funki/network-information":{"id":"building-on-funki/network-information","title":"Network Information","description":"Documentation about Funki Mainnet and Funki Testnet. This page covers network information for the Funki network, including network names, descriptions, RPC endpoints, chain IDs, currency symbols, and block explorers.","sidebar":"docSidebar"},"overview":{"id":"overview","title":"About Funki","description":"A summary of Funki, an Ethereum Layer 2 platform developed by Atherlabs, highlighting its secure, cost-effective, and developer-oriented attributes, as well as its dedication to decentralization and its role in enhancing accessibility within the worldwide cryptoeconomy.","sidebar":"docSidebar"},"privacy-policy":{"id":"privacy-policy","title":"Privacy Policy","description":"The Privacy Policy for Funki. Covers how we collect, use, and share personal information of users and developers through our services, including legal bases and data retention.","sidebar":"docSidebar"},"security":{"id":"security","title":"Security","description":"The Funki bug bounty program and procedures for reporting vulnerabilities.","sidebar":"docSidebar"},"terms-of-use":{"id":"terms-of-use","title":"Terms of Use","description":"The Terms of Use for using Funki, a layer-two optimistic rollup on Ethereum.","sidebar":"docSidebar"},"the-dokodemo-protocol":{"id":"the-dokodemo-protocol","title":"The Dokodemo Protocol","description":"The Dokodemo Protocol is a game-changer in the Funki Chain universe, flipping the script on how we play with digital assets, namely Non-Fungible Tokens (NFTs)","sidebar":"docSidebar"},"tokens/token-list":{"id":"tokens/token-list","title":"Bridging an L1 token to Funki","description":"How to submit ERC-20 tokens for bridging between Ethereum and Funki as a token issuer.","sidebar":"docSidebar"},"tokens/wallet":{"id":"tokens/wallet","title":"Adding tokens to MetaMask","description":"A simple step by step guide to ensure ERC-20 tokens show immediately on MetaMask once deployed.","sidebar":"docSidebar"},"tools/block-explorers":{"id":"tools/block-explorers","title":"Block Explorers","description":"Documentation for block explorers for the Funki network.","sidebar":"docSidebar"},"tools/bridges/bridges-mainnet":{"id":"tools/bridges/bridges-mainnet","title":"Mainnet","description":"Documentation for bridging assets to the Funki mainnet. This page covers how to bridge ETH and ERC-20s between Ethereum mainnet and Funki mainnet, with essential cautions and contract information.","sidebar":"docSidebar"},"tools/bridges/bridges-testnet":{"id":"tools/bridges/bridges-testnet","title":"Testnet","description":"Documentation for bridging assets to the Funki testnet. This page covers how to bridge ETH and ERC-20s between Ethereum testnet and Funki testnet, with essential cautions and contract information.","sidebar":"docSidebar"},"tools/bridges/funki-bridge-faq":{"id":"tools/bridges/funki-bridge-faq","title":"Funki Bridge - FAQ","description":"An FAQ for Funki Bridge, detailing its features, usage, compatibility with Ethereum wallets, transaction processes, fees, benefits, risks, and guidelines for new users.","sidebar":"docSidebar"},"tools/clients/ethers":{"id":"tools/clients/ethers","title":"ethers.js","description":"Documentation for using ethers.js, a JavaScript library for EVM-compatible blockchain interactions. This page covers installation, setup, connecting to the Funki network, reading and writing blockchain data, and interacting with smart contracts.","sidebar":"docSidebar"},"tools/clients/thirdweb-sdk":{"id":"tools/clients/thirdweb-sdk","title":"thirdweb SDK","description":"Documentation for using the thirdweb SDK for building web3 applications and interacting with smart contracts on Funki. This page covers installation, initialization, and functionalities in various programming languages.","sidebar":"docSidebar"},"tools/clients/viem":{"id":"tools/clients/viem","title":"viem","description":"Documentation for using Viem, a TypeScript interface for EVM-compatible blockchains. This page covers installation, setup, and various functionalities such as reading and writing blockchain data and interacting with smart contracts on Funki.","sidebar":"docSidebar"},"tools/clients/web3":{"id":"tools/clients/web3","title":"web3.js","description":"Documentation for using web3.js, a JavaScript library for interacting with EVM-compatible blockchains. This page covers installation, setup, connecting to the Funki network and interacting with smart contracts.","sidebar":"docSidebar"},"tools/cross-chain":{"id":"tools/cross-chain","title":"Cross-chain","description":"Documentation for cross-chain communication and messaging on the Funki network. This page covers integrating tools like LayerZero with Funki for web3 transactions, cross-chain messaging, and secure blockchain communication.","sidebar":"docSidebar"},"tools/dexs/funki-dex":{"id":"tools/dexs/funki-dex","title":"Funki DEX","description":"An FAQ for Funki DEX, detailing its features, trading capabilities, liquidity provision, token swaps, security audits, and guidelines for users.","sidebar":"docSidebar"},"tools/dexs/funki-dex-faq":{"id":"tools/dexs/funki-dex-faq","title":"Funki DEX-FAQ","description":"An FAQ for Funki DEX, detailing its features, trading capabilities, liquidity provision, token swaps, security audits, and guidelines for users.","sidebar":"docSidebar"},"tools/network-faucets":{"id":"tools/network-faucets","title":"Network Faucets","description":"Documentation for Testnet Faucets for the Funki network. Details how to obtain Funki testnet ETH.","sidebar":"docSidebar"},"tools/node-providers":{"id":"tools/node-providers","title":"Node Providers","description":"Documentation for Node Providers for the Funki network. Including details on their services, supported networks, and pricing plans.","sidebar":"docSidebar"},"tools/onramps":{"id":"tools/onramps","title":"Onramps","description":"Documentation for fiat-to-crypto onramps for the Funki network.","sidebar":"docSidebar"},"tools/toolchains/foundry":{"id":"tools/toolchains/foundry","title":"Foundry","description":"Documentation for Foundry, a toolchain for smart contract development. Provides instructions on deploying and verifying contracts on Funki\'s mainnet and testnet using Foundry.","sidebar":"docSidebar"},"tools/toolchains/hardhat":{"id":"tools/toolchains/hardhat","title":"Hardhat","description":"Documentation for configuring Hardhat for smart contract development on Funki, including setup instructions for mainnet, testnet, and local development environments.","sidebar":"docSidebar"},"tools/toolchains/thirdweb-cli":{"id":"tools/toolchains/thirdweb-cli","title":"thirdweb CLI","description":"Documentation for using the thirdweb CLI for creating, deploying, and publishing smart contracts and web3 applications on the Funki network, including detailed instructions and options for project creation and deployment.","sidebar":"docSidebar"},"tutorials/connect-metamask":{"id":"tutorials/connect-metamask","title":"Connect Metamask","description":"","sidebar":"docSidebar"},"tutorials/connect-walletconnect-appkit":{"id":"tutorials/connect-walletconnect-appkit","title":"Connect WalletConnect via AppKit","description":"","sidebar":"docSidebar"},"tutorials/deploy-sm-using-foundry":{"id":"tutorials/deploy-sm-using-foundry","title":"Deploying a smart contract using Foundry","description":"","sidebar":"docSidebar"},"tutorials/deploy-sm-using-hardhat":{"id":"tutorials/deploy-sm-using-hardhat","title":"Deploying a smart contract using Hardhat","description":"","sidebar":"docSidebar"},"tutorials/deploy-sm-using-remix":{"id":"tutorials/deploy-sm-using-remix","title":"Deploying a smart contract using Remix","description":"Remix is a web-based Integrated Development Environment (IDE) designed for efficient smart contract development and deployment. It serves as an excellent starting point for those new to smart contracts, eliminating the need for complex local environment configurations.","sidebar":"docSidebar"},"tutorials/deploy-sm-using-thirdweb":{"id":"tutorials/deploy-sm-using-thirdweb","title":"Deploying a smart contract using thirdweb","description":"","sidebar":"docSidebar"},"tutorials/interact-with-standard-bridge":{"id":"tutorials/interact-with-standard-bridge","title":"Interact with Standard Bridge","description":"","sidebar":"docSidebar"},"tutorials/simple-fungible-tokens":{"id":"tutorials/simple-fungible-tokens","title":"Simple Fungible Tokens","description":"","sidebar":"docSidebar"},"tutorials/simple-nfts":{"id":"tutorials/simple-nfts","title":"Simple NFTs","description":"","sidebar":"docSidebar"},"tutorials/verify-sm-on-funkichain":{"id":"tutorials/verify-sm-on-funkichain","title":"Verify a Smart Contract on FunkiScan","description":"","sidebar":"docSidebar"},"using-funki":{"id":"using-funki","title":"Using Funki","description":"How to integrate Funki with popular wallets like MetaMask, covering both mainnet and testnet configurations.","sidebar":"docSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/0058b4c6.e51c0304.js b/assets/js/0058b4c6.e51c0304.js deleted file mode 100644 index 4788415..0000000 --- a/assets/js/0058b4c6.e51c0304.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[849],{6164:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docSidebar":[{"type":"link","label":"About Funki","href":"/docs/","docId":"overview","unlisted":false},{"type":"link","label":"The Dokodemo Protocol","href":"/docs/the-dokodemo-protocol","docId":"the-dokodemo-protocol","unlisted":false},{"type":"link","label":"Using Funki","href":"/docs/using-funki","docId":"using-funki","unlisted":false},{"type":"category","label":"Building On Funki","collapsed":false,"collapsible":false,"items":[{"type":"link","label":"Network Information","href":"/docs/network-information","docId":"building-on-funki/network-information","unlisted":false},{"type":"link","label":"Funki Contracts","href":"/docs/funki-contracts","docId":"building-on-funki/funki-contracts","unlisted":false},{"type":"link","label":"Fees","href":"/docs/fees","docId":"building-on-funki/fees","unlisted":false},{"type":"link","label":"Differences between Ethereum and Funki","href":"/docs/differences","docId":"building-on-funki/differences","unlisted":false}]},{"type":"category","label":"Tutorials","collapsed":false,"collapsible":false,"items":[{"type":"link","label":"Deploying a smart contract using Hardhat","href":"/docs/tutorials/deploy-sm-using-hardhat","docId":"tutorials/deploy-sm-using-hardhat","unlisted":false},{"type":"link","label":"Deploying a smart contract using Foundry","href":"/docs/tutorials/deploy-sm-using-foundry","docId":"tutorials/deploy-sm-using-foundry","unlisted":false},{"type":"link","label":"Deploying a smart contract using Remix","href":"/docs/tutorials/deploy-sm-using-remix","docId":"tutorials/deploy-sm-using-remix","unlisted":false},{"type":"link","label":"Deploying a smart contract using thirdweb","href":"/docs/tutorials/deploy-sm-using-thirdweb","docId":"tutorials/deploy-sm-using-thirdweb","unlisted":false},{"type":"link","label":"Building an onchain app using thirdweb","href":"/docs/tutorials/building-onchain-app-thirdweb","docId":"tutorials/building-onchain-app-thirdweb","unlisted":false},{"type":"link","label":"Verify a Smart Contract on FunkiScan","href":"/docs/tutorials/verify-sm-on-funkichain","docId":"tutorials/verify-sm-on-funkichain","unlisted":false},{"type":"link","label":"Simple NFTs","href":"/docs/tutorials/simple-nfts","docId":"tutorials/simple-nfts","unlisted":false},{"type":"link","label":"Simple Fungible Tokens","href":"/docs/tutorials/simple-fungible-tokens","docId":"tutorials/simple-fungible-tokens","unlisted":false},{"type":"link","label":"Interact with Standard Bridge","href":"/docs/tutorials/interact-with-standard-bridge","docId":"tutorials/interact-with-standard-bridge","unlisted":false},{"type":"link","label":"Connect Metamask","href":"/docs/tutorials/connect-metamask","docId":"tutorials/connect-metamask","unlisted":false},{"type":"link","label":"Connect WalletConnect via AppKit","href":"/docs/tutorials/connect-walletconnect-appkit","docId":"tutorials/connect-walletconnect-appkit","unlisted":false}]},{"type":"category","label":"Tools","collapsed":false,"collapsible":false,"items":[{"type":"link","label":"Block Explorers","href":"/docs/tools/block-explorers","docId":"tools/block-explorers","unlisted":false},{"type":"link","label":"Node Providers","href":"/docs/tools/node-providers","docId":"tools/node-providers","unlisted":false},{"type":"link","label":"Network Faucets","href":"/docs/tools/network-faucets","docId":"tools/network-faucets","unlisted":false},{"type":"link","label":"Cross-chain","href":"/docs/tools/cross-chain","docId":"tools/cross-chain","unlisted":false},{"type":"category","label":"Dexs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Funki DEX","href":"/docs/tools/dexs/funki-dex","docId":"tools/dexs/funki-dex","unlisted":false},{"type":"link","label":"Funki DEX-FAQ","href":"/docs/tools/dexs/funki-dex-faq","docId":"tools/dexs/funki-dex-faq","unlisted":false}]},{"type":"link","label":"Onramps","href":"/docs/tools/onramps","docId":"tools/onramps","unlisted":false},{"type":"category","label":"Bridges","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Bridge FAQ","href":"/docs/tools/bridges/bridges-faq","docId":"tools/bridges/bridges-faq","unlisted":false},{"type":"link","label":"Mainnet","href":"/docs/tools/bridges/mainnet","docId":"tools/bridges/bridges-mainnet","unlisted":false},{"type":"link","label":"Testnet","href":"/docs/tools/bridges/testnet","docId":"tools/bridges/bridges-testnet","unlisted":false}]},{"type":"category","label":"Toolchains","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Hardhat","href":"/docs/tools/toolchains/hardhat","docId":"tools/toolchains/hardhat","unlisted":false},{"type":"link","label":"Foundry","href":"/docs/tools/toolchains/foundry","docId":"tools/toolchains/foundry","unlisted":false},{"type":"link","label":"thirdweb CLI","href":"/docs/tools/toolchains/thirdweb-cli","docId":"tools/toolchains/thirdweb-cli","unlisted":false}]},{"type":"category","label":"Clients","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"ethers.js","href":"/docs/tools/clients/ethers","docId":"tools/clients/ethers","unlisted":false},{"type":"link","label":"thirdweb SDK","href":"/docs/tools/clients/thirdweb-sdk","docId":"tools/clients/thirdweb-sdk","unlisted":false},{"type":"link","label":"viem","href":"/docs/tools/clients/viem","docId":"tools/clients/viem","unlisted":false},{"type":"link","label":"web3.js","href":"/docs/tools/clients/web3","docId":"tools/clients/web3","unlisted":false}]}]},{"type":"category","label":"Tokens","collapsed":false,"collapsible":false,"items":[{"type":"link","label":"Bridging an L1 token to Funki","href":"/docs/tokens/bridging-an-l1-token-to-funki","docId":"tokens/token-list","unlisted":false},{"type":"link","label":"Adding tokens to MetaMask","href":"/docs/tokens/adding-tokens-to-metamask","docId":"tokens/wallet","unlisted":false}]},{"type":"link","label":"Security","href":"/docs/security","docId":"security","unlisted":false},{"type":"link","label":"Privacy Policy","href":"/docs/privacy-policy","docId":"privacy-policy","unlisted":false},{"type":"link","label":"Terms of Use","href":"/docs/terms-of-use","docId":"terms-of-use","unlisted":false}]},"docs":{"building-on-funki/differences":{"id":"building-on-funki/differences","title":"Differences between Ethereum and Funki","description":"Documentation covering the differences between Ethereum and Funki. This page includes details on differences between opcodes, blocks, network specifications, and transaction costs.","sidebar":"docSidebar"},"building-on-funki/fees":{"id":"building-on-funki/fees","title":"Fees","description":"Documentation about network fees on Funki. This page covers details of the two-component cost system involving L2 execution fees and L1 security fees, and offers insights on fee variations and cost-saving strategies.","sidebar":"docSidebar"},"building-on-funki/funki-contracts":{"id":"building-on-funki/funki-contracts","title":"Funki Contracts","description":"A comprehensive list of L2 contract addresses for Funki Mainnet and Funki Testnet, including links to their respective blockchain explorers.","sidebar":"docSidebar"},"building-on-funki/network-information":{"id":"building-on-funki/network-information","title":"Network Information","description":"Documentation about Funki Mainnet and Funki Testnet. This page covers network information for the Funki network, including network names, descriptions, RPC endpoints, chain IDs, currency symbols, and block explorers.","sidebar":"docSidebar"},"overview":{"id":"overview","title":"About Funki","description":"A summary of Funki, an Ethereum Layer 2 platform developed by Atherlabs, highlighting its secure, cost-effective, and developer-oriented attributes, as well as its dedication to decentralization and its role in enhancing accessibility within the worldwide cryptoeconomy.","sidebar":"docSidebar"},"privacy-policy":{"id":"privacy-policy","title":"Privacy Policy","description":"The Privacy Policy for Funki. Covers how we collect, use, and share personal information of users and developers through our services, including legal bases and data retention.","sidebar":"docSidebar"},"security":{"id":"security","title":"Security","description":"The Funki bug bounty program and procedures for reporting vulnerabilities.","sidebar":"docSidebar"},"terms-of-use":{"id":"terms-of-use","title":"Terms of Use","description":"The Terms of Use for using Funki, a layer-two optimistic rollup on Ethereum.","sidebar":"docSidebar"},"the-dokodemo-protocol":{"id":"the-dokodemo-protocol","title":"The Dokodemo Protocol","description":"The Dokodemo Protocol is a game-changer in the Funki Chain universe, flipping the script on how we play with digital assets, namely Non-Fungible Tokens (NFTs)","sidebar":"docSidebar"},"tokens/token-list":{"id":"tokens/token-list","title":"Bridging an L1 token to Funki","description":"How to submit ERC-20 tokens for bridging between Ethereum and Funki as a token issuer.","sidebar":"docSidebar"},"tokens/wallet":{"id":"tokens/wallet","title":"Adding tokens to MetaMask","description":"A simple step by step guide to ensure ERC-20 tokens show immediately on MetaMask once deployed.","sidebar":"docSidebar"},"tools/block-explorers":{"id":"tools/block-explorers","title":"Block Explorers","description":"Documentation for block explorers for the Funki network.","sidebar":"docSidebar"},"tools/bridges/bridges-faq":{"id":"tools/bridges/bridges-faq","title":"Bridge FAQ","description":"An FAQ for Funki Bridge, detailing its features, usage, compatibility with Ethereum wallets, transaction processes, fees, benefits, risks, and guidelines for new users.","sidebar":"docSidebar"},"tools/bridges/bridges-mainnet":{"id":"tools/bridges/bridges-mainnet","title":"Mainnet","description":"Documentation for bridging assets to the Funki mainnet. This page covers how to bridge ETH and ERC-20s between Ethereum mainnet and Funki mainnet, with essential cautions and contract information.","sidebar":"docSidebar"},"tools/bridges/bridges-testnet":{"id":"tools/bridges/bridges-testnet","title":"Testnet","description":"Documentation for bridging assets to the Funki testnet. This page covers how to bridge ETH and ERC-20s between Ethereum testnet and Funki testnet, with essential cautions and contract information.","sidebar":"docSidebar"},"tools/clients/ethers":{"id":"tools/clients/ethers","title":"ethers.js","description":"Documentation for using ethers.js, a JavaScript library for EVM-compatible blockchain interactions. This page covers installation, setup, connecting to the Funki network, reading and writing blockchain data, and interacting with smart contracts.","sidebar":"docSidebar"},"tools/clients/thirdweb-sdk":{"id":"tools/clients/thirdweb-sdk","title":"thirdweb SDK","description":"Documentation for using the thirdweb SDK for building web3 applications and interacting with smart contracts on Funki. This page covers installation, initialization, and functionalities in various programming languages.","sidebar":"docSidebar"},"tools/clients/viem":{"id":"tools/clients/viem","title":"viem","description":"Documentation for using Viem, a TypeScript interface for EVM-compatible blockchains. This page covers installation, setup, and various functionalities such as reading and writing blockchain data and interacting with smart contracts on Funki.","sidebar":"docSidebar"},"tools/clients/web3":{"id":"tools/clients/web3","title":"web3.js","description":"Documentation for using web3.js, a JavaScript library for interacting with EVM-compatible blockchains. This page covers installation, setup, connecting to the Funki network and interacting with smart contracts.","sidebar":"docSidebar"},"tools/cross-chain":{"id":"tools/cross-chain","title":"Cross-chain","description":"Documentation for cross-chain communication and messaging on the Funki network. This page covers integrating tools like LayerZero with Funki for web3 transactions, cross-chain messaging, and secure blockchain communication.","sidebar":"docSidebar"},"tools/dexs/funki-dex":{"id":"tools/dexs/funki-dex","title":"Funki DEX","description":"An FAQ for Funki DEX, detailing its features, trading capabilities, liquidity provision, token swaps, security audits, and guidelines for users.","sidebar":"docSidebar"},"tools/dexs/funki-dex-faq":{"id":"tools/dexs/funki-dex-faq","title":"Funki DEX-FAQ","description":"An FAQ for Funki DEX, detailing its features, trading capabilities, liquidity provision, token swaps, security audits, and guidelines for users.","sidebar":"docSidebar"},"tools/network-faucets":{"id":"tools/network-faucets","title":"Network Faucets","description":"Documentation for Testnet Faucets for the Funki network. Details how to obtain Funki testnet ETH.","sidebar":"docSidebar"},"tools/node-providers":{"id":"tools/node-providers","title":"Node Providers","description":"Documentation for Node Providers for the Funki network. Including details on their services, supported networks, and pricing plans.","sidebar":"docSidebar"},"tools/onramps":{"id":"tools/onramps","title":"Onramps","description":"Documentation for fiat-to-crypto onramps for the Funki network.","sidebar":"docSidebar"},"tools/toolchains/foundry":{"id":"tools/toolchains/foundry","title":"Foundry","description":"Documentation for Foundry, a toolchain for smart contract development. Provides instructions on deploying and verifying contracts on Funki\'s mainnet and testnet using Foundry.","sidebar":"docSidebar"},"tools/toolchains/hardhat":{"id":"tools/toolchains/hardhat","title":"Hardhat","description":"Documentation for configuring Hardhat for smart contract development on Funki, including setup instructions for mainnet, testnet, and local development environments.","sidebar":"docSidebar"},"tools/toolchains/thirdweb-cli":{"id":"tools/toolchains/thirdweb-cli","title":"thirdweb CLI","description":"Documentation for using the thirdweb CLI for creating, deploying, and publishing smart contracts and web3 applications on the Funki network, including detailed instructions and options for project creation and deployment.","sidebar":"docSidebar"},"tutorials/building-onchain-app-thirdweb":{"id":"tutorials/building-onchain-app-thirdweb","title":"Building an onchain app using thirdweb","description":"","sidebar":"docSidebar"},"tutorials/connect-metamask":{"id":"tutorials/connect-metamask","title":"Connect Metamask","description":"","sidebar":"docSidebar"},"tutorials/connect-walletconnect-appkit":{"id":"tutorials/connect-walletconnect-appkit","title":"Connect WalletConnect via AppKit","description":"","sidebar":"docSidebar"},"tutorials/deploy-sm-using-foundry":{"id":"tutorials/deploy-sm-using-foundry","title":"Deploying a smart contract using Foundry","description":"","sidebar":"docSidebar"},"tutorials/deploy-sm-using-hardhat":{"id":"tutorials/deploy-sm-using-hardhat","title":"Deploying a smart contract using Hardhat","description":"","sidebar":"docSidebar"},"tutorials/deploy-sm-using-remix":{"id":"tutorials/deploy-sm-using-remix","title":"Deploying a smart contract using Remix","description":"Remix is a web-based Integrated Development Environment (IDE) designed for efficient smart contract development and deployment. It serves as an excellent starting point for those new to smart contracts, eliminating the need for complex local environment configurations.","sidebar":"docSidebar"},"tutorials/deploy-sm-using-thirdweb":{"id":"tutorials/deploy-sm-using-thirdweb","title":"Deploying a smart contract using thirdweb","description":"","sidebar":"docSidebar"},"tutorials/interact-with-standard-bridge":{"id":"tutorials/interact-with-standard-bridge","title":"Interact with Standard Bridge","description":"","sidebar":"docSidebar"},"tutorials/simple-fungible-tokens":{"id":"tutorials/simple-fungible-tokens","title":"Simple Fungible Tokens","description":"","sidebar":"docSidebar"},"tutorials/simple-nfts":{"id":"tutorials/simple-nfts","title":"Simple NFTs","description":"","sidebar":"docSidebar"},"tutorials/verify-sm-on-funkichain":{"id":"tutorials/verify-sm-on-funkichain","title":"Verify a Smart Contract on FunkiScan","description":"","sidebar":"docSidebar"},"using-funki":{"id":"using-funki","title":"Using Funki","description":"How to integrate Funki with popular wallets like MetaMask, covering both mainnet and testnet configurations.","sidebar":"docSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/0f709c71.0c781e0f.js b/assets/js/0f709c71.0c781e0f.js new file mode 100644 index 0000000..253874b --- /dev/null +++ b/assets/js/0f709c71.0c781e0f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[6312],{8914:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"tutorials/verify-sm-on-funkichain","title":"Verify a Smart Contract on FunkiScan","description":"","source":"@site/docs/tutorials/verify-sm-on-funkichain.md","sourceDirName":"tutorials","slug":"/tutorials/verify-sm-on-funkichain","permalink":"/docs/tutorials/verify-sm-on-funkichain","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tutorials/verify-sm-on-funkichain.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Verify a Smart Contract on FunkiScan","slug":"/tutorials/verify-sm-on-funkichain","order":5.6,"description":""},"sidebar":"docSidebar","previous":{"title":"Deploying a smart contract using thirdweb","permalink":"/docs/tutorials/deploy-sm-using-thirdweb"},"next":{"title":"Simple NFTs","permalink":"/docs/tutorials/simple-nfts"}}');var r=t(1085),o=t(1184);const a={title:"Verify a Smart Contract on FunkiScan",slug:"/tutorials/verify-sm-on-funkichain",order:5.6,description:""},s=void 0,c={},l=[{value:"Objectives",id:"objectives",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Hardhat verification",id:"hardhat-verification",level:2},{value:"Foundry verification",id:"foundry-verification",level:2},{value:"FunkiScan verify contract with files",id:"funkiscan-verify-contract-with-files",level:2},{value:"Interact with the Contract on FunkiScan",id:"interact-with-the-contract-on-funkiscan",level:2},{value:"Conclusion",id:"conclusion",level:2}];function h(n){const e={a:"a",code:"code",em:"em",h2:"h2",hr:"hr",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.a,{href:"https://funkiscan.io/",children:"FunkiScan"})," is a block explorer tailored for Funki Mainnet, offering developers a platform to interact with and verify smart contracts deployed on the network. Smart contract verification is essential for ensuring the transparency and security of on-chain applications, allowing others to review and validate the source code of deployed contracts. This tutorial will guide you through popular methods to verify a contract, as several approaches are available."]}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.a,{href:"https://funkiscan.io/",children:"FunkiScan"})," uses the ",(0,r.jsx)(e.a,{href:"https://routescan.io/documentation/api-swagger",children:"RouterScan API"})," for contract verification. Currently, no API key is required, and your requests fall under their free plan."]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["As of writing these docs, the RouteScan API free tier allows you to use the API without an API key, offering up to ",(0,r.jsx)(e.strong,{children:"2 requests per second (rps)"})," and ",(0,r.jsx)(e.strong,{children:"a daily limit of 10,000 calls"}),". Read more at ",(0,r.jsx)(e.a,{href:"https://routescan.io/documentation#api-plans",children:"RouterScan API Plans"})]}),"\n",(0,r.jsxs)(e.li,{children:["To verify a contract on Funki Testnet, simply switch the chain information to ",(0,r.jsx)(e.a,{href:"https://docs.funkichain.com/docs/network-information",children:"Funki Testnet"}),". Currently, Funki Testnet is an L2 of Sepolia Testnet, and its explorer is publicly available at ",(0,r.jsx)(e.a,{href:"http://testnet.funkiscan.io/",children:"Funki Testnet Explorer"})]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"objectives",children:"Objectives"}),"\n",(0,r.jsx)(e.p,{children:"By the end of this tutorial, you should be able to:"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Verify your deployed contract with popular Frameworks and toolkits."}),"\n",(0,r.jsxs)(e.li,{children:["Verify contract directly on ",(0,r.jsx)(e.a,{href:"https://funkiscan.io/",children:"FunkiScan"}),"."]}),"\n"]}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.strong,{children:"Familiarity with smart contract development and the Solidity programming language"}),"\nSolidity is the primary language for writing smart contracts on Ethereum and Ethereum-compatible blockchains like Funki. You should be comfortable writing, compiling, and deploying basic smart contracts using Solidity.\n",(0,r.jsx)(e.strong,{children:"Basic understanding of popular frameworks and toolkits for Ethereum development"}),"\nFrameworks and toolkits streamline the process of deploying, testing, and interacting with smart contracts. You should be familiar with popular smart contract development tools like Hardhat, Foundry"]}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{id:"hardhat-verification",children:"Hardhat verification"}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.a,{href:"https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify",children:(0,r.jsx)(e.strong,{children:"hardhat-verify"})})," is a Hardhat plugin that simplifies the smart contract verification process on Etherscan. Thanks to the Etherscan Compatible Verify Contract API, you can also use this tool to verify your smart contract on ",(0,r.jsx)(e.a,{href:"https://funkiscan.io/",children:"FunkiScan"}),"."]}),"\n",(0,r.jsx)(e.p,{children:"Here's an example of a hardhat.config.ts file:"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-jsx",children:'import { HardhatUserConfig } from "hardhat/config";\nimport "@nomicfoundation/hardhat-toolbox";\nimport "@nomiclabs/hardhat-verify";\n\nconst config: HardhatUserConfig = {\n etherscan: {\n apiKey: {\n funkiscan: "funkiscan", // apiKey is not required, just set a placeholder\n },\n customChains: [\n {\n network: "funki",\n chainId: 33979,\n urls: {\n apiURL: "https://api.routescan.io/v2/network/mainnet/evm/33979_2/etherscan/api",\n browserURL: "https://funkiscan.io"\n }\n }\n ]\n },\n networks: {\n funki: {\n url: \'https://rpc-mainnet.funkichain.com\',\n accounts: [process.env.PRIVATE_KEY]\n },\n },\n};\n\nexport default config;\n'})}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.strong,{children:"Deploy"})}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-jsx",children:"npx hardhat run scripts/deploy.ts --network funki\n"})}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.strong,{children:"Verify"})}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-jsx",children:"export PRIVATE_KEY=...\nnpx hardhat verify --network funki 0x...\n"})}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{id:"foundry-verification",children:"Foundry verification"}),"\n",(0,r.jsxs)(e.p,{children:["Foundry allows you to verify contracts either during deployment or as a separate step. Be sure to include the ",(0,r.jsx)(e.code,{children:"--verifier-url"})," option in your deploy or verify script."]}),"\n",(0,r.jsx)(e.p,{children:"To verify at deployment time:"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-jsx",children:"forge script scripts/Deploy.s.sol\n--broadcast --rpc-url [NETWORK_RPC_URL]\n--verifier-url 'https://api.routescan.io/v2/network/mainnet/evm/33979_2/etherscan/api'\n--etherscan-api-key \"verifyContract\"\n"})}),"\n",(0,r.jsx)(e.p,{children:"To verify a contract that has already been deployed:"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-jsx",children:'forge verify-contract [contract-address] [src/path/ContractPath.sol:ContractName]\n--verifier-url \'https://api.routescan.io/v2/network/mainnet/evm/33979_2/etherscan/api\'\n--etherscan-api-key "verifyContract"\n--num-of-optimizations 200\n--compiler-version [solc compiler version]\n--constructor-args $(cast abi-encode "constructor(address param1, uint256 param2,...)" param1 param2 ...)\n\n'})}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{id:"funkiscan-verify-contract-with-files",children:(0,r.jsx)(e.strong,{children:"FunkiScan verify contract with files"})}),"\n",(0,r.jsxs)(e.p,{children:["You can verify contracts using the ",(0,r.jsx)(e.a,{href:"https://funkiscan.io/verifycontract",children:"FunkiScan verification tool"}),". This method is particularly useful if you've deployed your contract with Remix IDE and need to verify it."]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Step 1: Enter your deployed contract's address."}),"\n",(0,r.jsx)(e.li,{children:"Step 2: Choose your programming language."}),"\n",(0,r.jsx)(e.li,{children:"Step 3: Provide the compiler information and upload your file(s). Make sure this information exactly matches what you used when compiling your contract for deployment. You can upload either multiple files or a single flattened file."}),"\n",(0,r.jsx)(e.li,{children:'Step 4: Click "Verify Contract" and wait for the result.'}),"\n"]}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"image.png",src:t(8389).A+"",width:"2000",height:"1025"})}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsxs)(e.h2,{id:"interact-with-the-contract-on-funkiscan",children:["Interact with the Contract on FunkiScan",(0,r.jsx)(e.a,{href:"#interact-with-the-contract"})]}),"\n",(0,r.jsxs)(e.p,{children:["You can now interact with your contract using ",(0,r.jsx)(e.a,{href:"https://docs.funkichain.com/docs/network-information",children:"FunkiChain"}),". Click the ",(0,r.jsx)(e.em,{children:"Contract"})," tab. If your contract is verified, you'll see the contract's source code and all its functions under the ",(0,r.jsx)(e.code,{children:"Read Contract"})," and ",(0,r.jsx)(e.code,{children:"Write Contract"})," buttons. Note that only write functions require an on-chain transaction."]}),"\n",(0,r.jsxs)(e.p,{children:["To interact with write functions, you need to sign in to ",(0,r.jsx)(e.a,{href:"https://docs.funkichain.com/docs/network-information",children:"FunkiChain"})," with your wallet. Currently, you can choose from any of the supported wallet providers that appear."]}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"image.png",src:t(6435).A+"",width:"699",height:"470"})}),"\n",(0,r.jsx)(e.p,{children:"Once connected, you're all set to interact with any write function of the contract. Make sure your input is correct and double-check the transaction details before confirming any transaction."}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,r.jsx)(e.p,{children:"Congratulations! You've now mastered the art of deploying smart contracts to the blockchain. While you've only deployed to a test network so far, the process for real networks is identical\u2014just remember, it comes with a heftier price tag!"})]})}function d(n={}){const{wrapper:e}={...(0,o.R)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(h,{...n})}):h(n)}},6435:(n,e,t)=>{t.d(e,{A:()=>i});const i=t.p+"assets/images/connect-wallet-3f6cd0a9668c620b7a2cd773c3d00f22.png"},8389:(n,e,t)=>{t.d(e,{A:()=>i});const i=t.p+"assets/images/verify-contract-with-file-7f5acc1adfe433ecdacf59c98ef288f2.png"},1184:(n,e,t)=>{t.d(e,{R:()=>a,x:()=>s});var i=t(4041);const r={},o=i.createContext(r);function a(n){const e=i.useContext(o);return i.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function s(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:a(n.components),i.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f709c71.7fd8d401.js b/assets/js/0f709c71.7fd8d401.js deleted file mode 100644 index 2fa4306..0000000 --- a/assets/js/0f709c71.7fd8d401.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[6312],{8914:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"tutorials/verify-sm-on-funkichain","title":"Verify a Smart Contract on FunkiScan","description":"","source":"@site/docs/tutorials/verify-sm-on-funkichain.md","sourceDirName":"tutorials","slug":"/tutorials/verify-sm-on-funkichain","permalink":"/docs/tutorials/verify-sm-on-funkichain","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tutorials/verify-sm-on-funkichain.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Verify a Smart Contract on FunkiScan","slug":"/tutorials/verify-sm-on-funkichain","order":5.6,"description":""},"sidebar":"docSidebar","previous":{"title":"Building an onchain app using thirdweb","permalink":"/docs/tutorials/building-onchain-app-thirdweb"},"next":{"title":"Simple NFTs","permalink":"/docs/tutorials/simple-nfts"}}');var r=t(1085),o=t(1184);const a={title:"Verify a Smart Contract on FunkiScan",slug:"/tutorials/verify-sm-on-funkichain",order:5.6,description:""},s=void 0,c={},l=[{value:"Objectives",id:"objectives",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Hardhat verification",id:"hardhat-verification",level:2},{value:"Foundry verification",id:"foundry-verification",level:2},{value:"FunkiScan verify contract with files",id:"funkiscan-verify-contract-with-files",level:2},{value:"Interact with the Contract on FunkiScan",id:"interact-with-the-contract-on-funkiscan",level:2},{value:"Conclusion",id:"conclusion",level:2}];function h(n){const e={a:"a",code:"code",em:"em",h2:"h2",hr:"hr",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.a,{href:"https://funkiscan.io/",children:"FunkiScan"})," is a block explorer tailored for Funki Mainnet, offering developers a platform to interact with and verify smart contracts deployed on the network. Smart contract verification is essential for ensuring the transparency and security of on-chain applications, allowing others to review and validate the source code of deployed contracts. This tutorial will guide you through popular methods to verify a contract, as several approaches are available."]}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.a,{href:"https://funkiscan.io/",children:"FunkiScan"})," uses the ",(0,r.jsx)(e.a,{href:"https://routescan.io/documentation/api-swagger",children:"RouterScan API"})," for contract verification. Currently, no API key is required, and your requests fall under their free plan."]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["As of writing these docs, the RouteScan API free tier allows you to use the API without an API key, offering up to ",(0,r.jsx)(e.strong,{children:"2 requests per second (rps)"})," and ",(0,r.jsx)(e.strong,{children:"a daily limit of 10,000 calls"}),". Read more at ",(0,r.jsx)(e.a,{href:"https://routescan.io/documentation#api-plans",children:"RouterScan API Plans"})]}),"\n",(0,r.jsxs)(e.li,{children:["To verify a contract on Funki Testnet, simply switch the chain information to ",(0,r.jsx)(e.a,{href:"https://docs.funkichain.com/docs/network-information",children:"Funki Testnet"}),". Currently, Funki Testnet is an L2 of Sepolia Testnet, and its explorer is publicly available at ",(0,r.jsx)(e.a,{href:"http://testnet.funkiscan.io/",children:"Funki Testnet Explorer"})]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"objectives",children:"Objectives"}),"\n",(0,r.jsx)(e.p,{children:"By the end of this tutorial, you should be able to:"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Verify your deployed contract with popular Frameworks and toolkits."}),"\n",(0,r.jsxs)(e.li,{children:["Verify contract directly on ",(0,r.jsx)(e.a,{href:"https://funkiscan.io/",children:"FunkiScan"}),"."]}),"\n"]}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.strong,{children:"Familiarity with smart contract development and the Solidity programming language"}),"\nSolidity is the primary language for writing smart contracts on Ethereum and Ethereum-compatible blockchains like Funki. You should be comfortable writing, compiling, and deploying basic smart contracts using Solidity.\n",(0,r.jsx)(e.strong,{children:"Basic understanding of popular frameworks and toolkits for Ethereum development"}),"\nFrameworks and toolkits streamline the process of deploying, testing, and interacting with smart contracts. You should be familiar with popular smart contract development tools like Hardhat, Foundry"]}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{id:"hardhat-verification",children:"Hardhat verification"}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.a,{href:"https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify",children:(0,r.jsx)(e.strong,{children:"hardhat-verify"})})," is a Hardhat plugin that simplifies the smart contract verification process on Etherscan. Thanks to the Etherscan Compatible Verify Contract API, you can also use this tool to verify your smart contract on ",(0,r.jsx)(e.a,{href:"https://funkiscan.io/",children:"FunkiScan"}),"."]}),"\n",(0,r.jsx)(e.p,{children:"Here's an example of a hardhat.config.ts file:"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-jsx",children:'import { HardhatUserConfig } from "hardhat/config";\nimport "@nomicfoundation/hardhat-toolbox";\nimport "@nomiclabs/hardhat-verify";\n\nconst config: HardhatUserConfig = {\n etherscan: {\n apiKey: {\n funkiscan: "funkiscan", // apiKey is not required, just set a placeholder\n },\n customChains: [\n {\n network: "funki",\n chainId: 33979,\n urls: {\n apiURL: "https://api.routescan.io/v2/network/mainnet/evm/33979_2/etherscan/api",\n browserURL: "https://funkiscan.io"\n }\n }\n ]\n },\n networks: {\n funki: {\n url: \'https://rpc-mainnet.funkichain.com\',\n accounts: [process.env.PRIVATE_KEY]\n },\n },\n};\n\nexport default config;\n'})}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.strong,{children:"Deploy"})}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-jsx",children:"npx hardhat run scripts/deploy.ts --network funki\n"})}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.strong,{children:"Verify"})}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-jsx",children:"export PRIVATE_KEY=...\nnpx hardhat verify --network funki 0x...\n"})}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{id:"foundry-verification",children:"Foundry verification"}),"\n",(0,r.jsxs)(e.p,{children:["Foundry allows you to verify contracts either during deployment or as a separate step. Be sure to include the ",(0,r.jsx)(e.code,{children:"--verifier-url"})," option in your deploy or verify script."]}),"\n",(0,r.jsx)(e.p,{children:"To verify at deployment time:"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-jsx",children:"forge script scripts/Deploy.s.sol\n--broadcast --rpc-url [NETWORK_RPC_URL]\n--verifier-url 'https://api.routescan.io/v2/network/mainnet/evm/33979_2/etherscan/api'\n--etherscan-api-key \"verifyContract\"\n"})}),"\n",(0,r.jsx)(e.p,{children:"To verify a contract that has already been deployed:"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-jsx",children:'forge verify-contract [contract-address] [src/path/ContractPath.sol:ContractName]\n--verifier-url \'https://api.routescan.io/v2/network/mainnet/evm/33979_2/etherscan/api\'\n--etherscan-api-key "verifyContract"\n--num-of-optimizations 200\n--compiler-version [solc compiler version]\n--constructor-args $(cast abi-encode "constructor(address param1, uint256 param2,...)" param1 param2 ...)\n\n'})}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{id:"funkiscan-verify-contract-with-files",children:(0,r.jsx)(e.strong,{children:"FunkiScan verify contract with files"})}),"\n",(0,r.jsxs)(e.p,{children:["You can verify contracts using the ",(0,r.jsx)(e.a,{href:"https://funkiscan.io/verifycontract",children:"FunkiScan verification tool"}),". This method is particularly useful if you've deployed your contract with Remix IDE and need to verify it."]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Step 1: Enter your deployed contract's address."}),"\n",(0,r.jsx)(e.li,{children:"Step 2: Choose your programming language."}),"\n",(0,r.jsx)(e.li,{children:"Step 3: Provide the compiler information and upload your file(s). Make sure this information exactly matches what you used when compiling your contract for deployment. You can upload either multiple files or a single flattened file."}),"\n",(0,r.jsx)(e.li,{children:'Step 4: Click "Verify Contract" and wait for the result.'}),"\n"]}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"image.png",src:t(8389).A+"",width:"2000",height:"1025"})}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsxs)(e.h2,{id:"interact-with-the-contract-on-funkiscan",children:["Interact with the Contract on FunkiScan",(0,r.jsx)(e.a,{href:"#interact-with-the-contract"})]}),"\n",(0,r.jsxs)(e.p,{children:["You can now interact with your contract using ",(0,r.jsx)(e.a,{href:"https://docs.funkichain.com/docs/network-information",children:"FunkiChain"}),". Click the ",(0,r.jsx)(e.em,{children:"Contract"})," tab. If your contract is verified, you'll see the contract's source code and all its functions under the ",(0,r.jsx)(e.code,{children:"Read Contract"})," and ",(0,r.jsx)(e.code,{children:"Write Contract"})," buttons. Note that only write functions require an on-chain transaction."]}),"\n",(0,r.jsxs)(e.p,{children:["To interact with write functions, you need to sign in to ",(0,r.jsx)(e.a,{href:"https://docs.funkichain.com/docs/network-information",children:"FunkiChain"})," with your wallet. Currently, you can choose from any of the supported wallet providers that appear."]}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"image.png",src:t(6435).A+"",width:"699",height:"470"})}),"\n",(0,r.jsx)(e.p,{children:"Once connected, you're all set to interact with any write function of the contract. Make sure your input is correct and double-check the transaction details before confirming any transaction."}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,r.jsx)(e.p,{children:"Congratulations! You've now mastered the art of deploying smart contracts to the blockchain. While you've only deployed to a test network so far, the process for real networks is identical\u2014just remember, it comes with a heftier price tag!"})]})}function d(n={}){const{wrapper:e}={...(0,o.R)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(h,{...n})}):h(n)}},6435:(n,e,t)=>{t.d(e,{A:()=>i});const i=t.p+"assets/images/connect-wallet-3f6cd0a9668c620b7a2cd773c3d00f22.png"},8389:(n,e,t)=>{t.d(e,{A:()=>i});const i=t.p+"assets/images/verify-contract-with-file-7f5acc1adfe433ecdacf59c98ef288f2.png"},1184:(n,e,t)=>{t.d(e,{R:()=>a,x:()=>s});var i=t(4041);const r={},o=i.createContext(r);function a(n){const e=i.useContext(o);return i.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function s(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:a(n.components),i.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/30d18d7f.5d82af00.js b/assets/js/30d18d7f.5d82af00.js deleted file mode 100644 index e5afd9c..0000000 --- a/assets/js/30d18d7f.5d82af00.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[8860],{5936:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"tools/bridges/bridges-mainnet","title":"Mainnet","description":"Documentation for bridging assets to the Funki mainnet. This page covers how to bridge ETH and ERC-20s between Ethereum mainnet and Funki mainnet, with essential cautions and contract information.","source":"@site/docs/tools/bridges/bridges-mainnet.md","sourceDirName":"tools/bridges","slug":"/tools/bridges/mainnet","permalink":"/docs/tools/bridges/mainnet","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tools/bridges/bridges-mainnet.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Mainnet","slug":"/tools/bridges/mainnet","order":"6.7.2","description":"Documentation for bridging assets to the Funki mainnet. This page covers how to bridge ETH and ERC-20s between Ethereum mainnet and Funki mainnet, with essential cautions and contract information.","keywords":["Funki","Funki network","bridging","bridge to Funki","bridge ETH","bridge ETH to Funki","Funki Bridge","Ethereum Mainnet","Funki Mainnet","ETH","ERC-20 tokens","asset bridging"]},"sidebar":"docSidebar","previous":{"title":"Bridge FAQ","permalink":"/docs/tools/bridges/bridges-faq"},"next":{"title":"Testnet","permalink":"/docs/tools/bridges/testnet"}}');var s=t(1085),o=t(1184);const r={title:"Mainnet",slug:"/tools/bridges/mainnet",order:"6.7.2",description:"Documentation for bridging assets to the Funki mainnet. This page covers how to bridge ETH and ERC-20s between Ethereum mainnet and Funki mainnet, with essential cautions and contract information.",keywords:["Funki","Funki network","bridging","bridge to Funki","bridge ETH","bridge ETH to Funki","Funki Bridge","Ethereum Mainnet","Funki Mainnet","ETH","ERC-20 tokens","asset bridging"]},a="Bridges",d={},c=[{value:"Funki Bridge",id:"funki-bridge",level:2}];function u(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"bridges",children:"Bridges"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"funki-bridge",children:"Funki Bridge"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"https://funkichain.com/bridge",children:"Funki Bridge"})," allows you to bridge ETH and certain ERC-20s from Ethereum to Funki and vice versa."]}),"\n",(0,s.jsx)(n.p,{children:"To bridge to or from Funki:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Visit ",(0,s.jsx)(n.a,{href:"https://funkichain.com/bridge",children:"Funki Bridge"})]}),"\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.strong,{children:"Connect wallet"})]}),"\n",(0,s.jsx)(n.li,{children:"Connect your wallet"}),"\n",(0,s.jsx)(n.li,{children:"Choose the amount of ETH (or the asset of your choice that's available) you'd like to deposit or withdraw"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["For frequently asked questions about Funki Bridge, be sure to check out the ",(0,s.jsx)(n.a,{href:"/docs/tools/bridge-faq/",children:"Bridge FAQ"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Double check the token address for ERC-20s"})," You can use any ERC-20 that is\nsupported on the network. You can check what assets are on Funki and the\ncorresponding contract address via ",(0,s.jsx)(n.a,{href:"https://github.com/ethereum-optimism/ethereum-optimism.github.io/tree/master/data",children:"this hub"}),".\nAlways test with small amounts to ensure the system is working as expected."]})}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"This implementation only can bridge assets to Funki. Do not attempt to alter the\ncode to withdraw the assets."})}),"\n",(0,s.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},1184:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var i=t(4041);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/30d18d7f.74755bb2.js b/assets/js/30d18d7f.74755bb2.js new file mode 100644 index 0000000..0e20c4a --- /dev/null +++ b/assets/js/30d18d7f.74755bb2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[8860],{5936:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"tools/bridges/bridges-mainnet","title":"Mainnet","description":"Documentation for bridging assets to the Funki mainnet. This page covers how to bridge ETH and ERC-20s between Ethereum mainnet and Funki mainnet, with essential cautions and contract information.","source":"@site/docs/tools/bridges/bridges-mainnet.md","sourceDirName":"tools/bridges","slug":"/tools/bridges/mainnet","permalink":"/docs/tools/bridges/mainnet","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tools/bridges/bridges-mainnet.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Mainnet","slug":"/tools/bridges/mainnet","order":"6.7.2","description":"Documentation for bridging assets to the Funki mainnet. This page covers how to bridge ETH and ERC-20s between Ethereum mainnet and Funki mainnet, with essential cautions and contract information.","keywords":["Funki","Funki network","bridging","bridge to Funki","bridge ETH","bridge ETH to Funki","Funki Bridge","Ethereum Mainnet","Funki Mainnet","ETH","ERC-20 tokens","asset bridging"]},"sidebar":"docSidebar","previous":{"title":"Funki Bridge - FAQ","permalink":"/docs/tools/bridges/funki-bridges-faq"},"next":{"title":"Testnet","permalink":"/docs/tools/bridges/testnet"}}');var s=t(1085),o=t(1184);const r={title:"Mainnet",slug:"/tools/bridges/mainnet",order:"6.7.2",description:"Documentation for bridging assets to the Funki mainnet. This page covers how to bridge ETH and ERC-20s between Ethereum mainnet and Funki mainnet, with essential cautions and contract information.",keywords:["Funki","Funki network","bridging","bridge to Funki","bridge ETH","bridge ETH to Funki","Funki Bridge","Ethereum Mainnet","Funki Mainnet","ETH","ERC-20 tokens","asset bridging"]},a="Bridges",d={},c=[{value:"Funki Bridge",id:"funki-bridge",level:2}];function u(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"bridges",children:"Bridges"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"funki-bridge",children:"Funki Bridge"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"https://funkichain.com/bridge",children:"Funki Bridge"})," allows you to bridge ETH and certain ERC-20s from Ethereum to Funki and vice versa."]}),"\n",(0,s.jsx)(n.p,{children:"To bridge to or from Funki:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Visit ",(0,s.jsx)(n.a,{href:"https://funkichain.com/bridge",children:"Funki Bridge"})]}),"\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.strong,{children:"Connect wallet"})]}),"\n",(0,s.jsx)(n.li,{children:"Connect your wallet"}),"\n",(0,s.jsx)(n.li,{children:"Choose the amount of ETH (or the asset of your choice that's available) you'd like to deposit or withdraw"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["For frequently asked questions about Funki Bridge, be sure to check out the ",(0,s.jsx)(n.a,{href:"/docs/tools/bridge-faq/",children:"Bridge FAQ"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Double check the token address for ERC-20s"})," You can use any ERC-20 that is\nsupported on the network. You can check what assets are on Funki and the\ncorresponding contract address via ",(0,s.jsx)(n.a,{href:"https://github.com/ethereum-optimism/ethereum-optimism.github.io/tree/master/data",children:"this hub"}),".\nAlways test with small amounts to ensure the system is working as expected."]})}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"This implementation only can bridge assets to Funki. Do not attempt to alter the\ncode to withdraw the assets."})}),"\n",(0,s.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},1184:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var i=t(4041);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4289016b.3eced381.js b/assets/js/4289016b.3eced381.js deleted file mode 100644 index 78e35ed..0000000 --- a/assets/js/4289016b.3eced381.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[349],{1419:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"tutorials/building-onchain-app-thirdweb","title":"Building an onchain app using thirdweb","description":"","source":"@site/docs/tutorials/building-onchain-app-thirdweb.md","sourceDirName":"tutorials","slug":"/tutorials/building-onchain-app-thirdweb","permalink":"/docs/tutorials/building-onchain-app-thirdweb","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tutorials/building-onchain-app-thirdweb.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Building an onchain app using thirdweb","slug":"/tutorials/building-onchain-app-thirdweb","order":5.5,"description":""},"sidebar":"docSidebar","previous":{"title":"Deploying a smart contract using thirdweb","permalink":"/docs/tutorials/deploy-sm-using-thirdweb"},"next":{"title":"Verify a Smart Contract on FunkiScan","permalink":"/docs/tutorials/verify-sm-on-funkichain"}}');var l=t(1085),o=t(1184);const r={title:"Building an onchain app using thirdweb",slug:"/tutorials/building-onchain-app-thirdweb",order:5.5,description:""},a=void 0,s={},c=[{value:"Objectives",id:"objectives",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"1. Setting Up a Web3 wallet",id:"1-setting-up-a-web3-wallet",level:3},{value:"2. Wallet Funding",id:"2-wallet-funding",level:3},{value:"Creating an NFT Collection",id:"creating-an-nft-collection",level:2},{value:"Building an NFT Gallery App",id:"building-an-nft-gallery-app",level:2},{value:"Running the Application",id:"running-the-application",level:2},{value:"Conclusion",id:"conclusion",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(n.p,{children:["In this tutorial, you'll learn how to build an app on Funki using the ",(0,l.jsx)(n.a,{href:"https://portal.thirdweb.com/",children:"thirdweb"})," platform."]}),"\n",(0,l.jsx)(n.p,{children:"You'll deploy a smart contract for an NFT collection and create an NFT gallery app to display the metadata details of each NFT within the collection."}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"objectives",children:"Objectives"}),"\n",(0,l.jsx)(n.p,{children:"By the end of this tutorial, you'll be able to:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Create an NFT collection and mint new NFTs using thirdweb."}),"\n",(0,l.jsx)(n.li,{children:"Develop an NFT gallery app using a prebuilt thirdweb template."}),"\n"]}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsxs)(n.h2,{id:"prerequisites",children:["Prerequisites",(0,l.jsx)(n.a,{href:"#prerequisites"})]}),"\n",(0,l.jsxs)(n.h3,{id:"1-setting-up-a-web3-wallet",children:["1. Setting Up a Web3 wallet",(0,l.jsx)(n.a,{href:"#1-setting-up-a-coinbase-wallet"})]}),"\n",(0,l.jsx)(n.p,{children:"To begin developing an app on Funki, you first need to set up a web3 wallet. We recommend using the Coinbase Wallet or Metamask Wallet, which can be easily created by downloading the Coinbase Wallet browser extension."}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Install ",(0,l.jsx)(n.a,{href:"https://chromewebstore.google.com/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?utm_source=metamask.io&pli=1",children:"MetaMask Wallet"})]}),"\n",(0,l.jsxs)(n.li,{children:["Install ",(0,l.jsx)(n.a,{href:"https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad?hl=en",children:"Coinbase Wallet"})]}),"\n"]}),"\n",(0,l.jsxs)(n.h3,{id:"2-wallet-funding",children:["2. Wallet Funding",(0,l.jsx)(n.a,{href:"#2-wallet-funding"})]}),"\n",(0,l.jsx)(n.p,{children:"Blockchain transactions, including deploying smart contracts, necessitate a gas fee. Therefore, you will need to fund your wallet with ETH to cover those gas fees."}),"\n",(0,l.jsxs)(n.p,{children:["For this tutorial, you will be deploying a contract to the FunkiSepolia. You can fund your wallet with Funki Sepolia ETH using one of the faucets listed on the Funki\xa0",(0,l.jsx)(n.a,{href:"https://funkichain.com/portfolio/tokens?modal=claim-faucet",children:"Network Faucets"}),"\xa0page."]}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsxs)(n.h2,{id:"creating-an-nft-collection",children:["Creating an NFT Collection",(0,l.jsx)(n.a,{href:"#creating-an-nft-collection"})]}),"\n",(0,l.jsx)(n.p,{children:"Before developing an app, you need to create an NFT collection via thirdweb."}),"\n",(0,l.jsx)(n.p,{children:"Follow these steps to set up your NFT collection:"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Visit the\xa0",(0,l.jsx)(n.a,{href:"https://thirdweb.com/dashboard",children:"thirdweb dashboard"}),"."]}),"\n",(0,l.jsxs)(n.li,{children:["Click the\xa0",(0,l.jsx)(n.strong,{children:"Connect Wallet"}),"\xa0button located in the upper right corner to connect your wallet."]}),"\n",(0,l.jsxs)(n.li,{children:["From the dashboard, select\xa0",(0,l.jsx)(n.a,{href:"https://thirdweb.com/explore",children:(0,l.jsx)(n.strong,{children:"Browse contracts"})}),"\xa0to explore a list of deployable smart contracts."]}),"\n",(0,l.jsxs)(n.li,{children:["Navigate to the\xa0",(0,l.jsx)(n.strong,{children:"NFTs"}),"\xa0section and select the\xa0",(0,l.jsx)(n.a,{href:"https://thirdweb.com/thirdweb.eth/TokenERC721",children:(0,l.jsx)(n.strong,{children:"NFT Collection"})}),"\xa0smart contract."]}),"\n",(0,l.jsxs)(n.li,{children:["Click the\xa0",(0,l.jsx)(n.strong,{children:"Deploy now"}),"\xa0button."]}),"\n",(0,l.jsxs)(n.li,{children:["Provide the required details for your NFT collection:","\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsx)(n.li,{children:"Contract metadata (i.e. image, name, symbol, description)"}),"\n",(0,l.jsx)(n.li,{children:"Network (Choose\xa0Funki Sepolia Sandbox)"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Click\xa0",(0,l.jsx)(n.strong,{children:"Deploy Now"}),"."]}),"\n"]}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.img,{alt:"images/png",src:t(6393).A+"",width:"790",height:"1204"})}),"\n",(0,l.jsx)(n.admonition,{type:"info",children:(0,l.jsxs)(n.p,{children:["For production / mainnet deployments select\xa0",(0,l.jsx)(n.code,{children:"FunkiMainet"}),"\xa0 as the network rather than\xa0",(0,l.jsx)(n.code,{children:"Funki Sepolia Sandbox"}),"."]})}),"\n",(0,l.jsxs)(n.p,{children:["Post-deployment, you can manage your smart contract via the\xa0",(0,l.jsx)(n.a,{href:"https://thirdweb.com/dashboard/contracts",children:"thirdweb dashboard"}),"."]}),"\n",(0,l.jsx)(n.p,{children:"Currently, your NFT Collection lacks NFTs. To populate our upcoming NFT Gallery app, we will need to create several NFTs."}),"\n",(0,l.jsx)(n.p,{children:"Follow the steps below to set metadata for new NFTs:"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Visit the\xa0",(0,l.jsx)(n.a,{href:"https://thirdweb.com/dashboard",children:"thirdweb dashboard"}),"."]}),"\n",(0,l.jsxs)(n.li,{children:["From the dashboard, select\xa0",(0,l.jsx)(n.a,{href:"https://thirdweb.com/dashboard/contracts",children:(0,l.jsx)(n.strong,{children:"View contracts"})}),"\xa0to view all your previously deployed contracts."]}),"\n",(0,l.jsx)(n.li,{children:"Select the NFT Collection smart contract you deployed."}),"\n",(0,l.jsxs)(n.li,{children:["Navigate to the\xa0",(0,l.jsx)(n.strong,{children:"NFTs"}),"\xa0tab on the left-hand sidebar."]}),"\n",(0,l.jsxs)(n.li,{children:["Click\xa0",(0,l.jsx)(n.strong,{children:"+Set NFT Metadata"}),"."]}),"\n",(0,l.jsx)(n.li,{children:"Fill in the metadata details for the NFT (name, media, description, properties)."}),"\n",(0,l.jsxs)(n.li,{children:["Click\xa0",(0,l.jsx)(n.strong,{children:"Set NFT Metadata"}),"."]}),"\n"]}),"\n",(0,l.jsx)(n.p,{children:"Repeat these steps to set NFT Metadata as many NFTs as you'd like."}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.img,{alt:"images/png",src:t(2635).A+"",width:"675",height:"851"})}),"\n",(0,l.jsxs)(n.h2,{id:"building-an-nft-gallery-app",children:["Building an NFT Gallery App",(0,l.jsx)(n.a,{href:"#building-an-nft-gallery-app"})]}),"\n",(0,l.jsxs)(n.p,{children:["Now that we have our NFT Collection, let's build an NFT Gallery App. The ",(0,l.jsx)(n.a,{href:"https://portal.thirdweb.com/cli",children:"thirdweb CLI"})," offers a variety of prebuilt and starter ",(0,l.jsx)(n.a,{href:"https://portal.thirdweb.com/templates",children:"templates"})," for popular app use-cases, significantly speeding up your development process."]}),"\n",(0,l.jsxs)(n.p,{children:["For this tutorial, we'll use the ",(0,l.jsx)(n.a,{href:"https://portal.thirdweb.com/cli",children:"thirdweb CLI"})," to create a new app project with the ",(0,l.jsx)(n.a,{href:"https://github.com/thirdweb-example/nft-gallery",children:"NFT Gallery template"}),"."]}),"\n",(0,l.jsx)(n.p,{children:"Execute the following command:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"npx thirdweb create --template nft-gallery\n"})}),"\n",(0,l.jsx)(n.p,{children:"By default, the template is configured for an NFT collection on the Ethereum Mainnet. We'll modify the code to adapt our NFT collection to the FunkiSepolia."}),"\n",(0,l.jsx)(n.p,{children:"Follow these steps to update the template:"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsx)(n.li,{children:"Open the project in your preferred code editor."}),"\n",(0,l.jsxs)(n.li,{children:["Locate and open the ",(0,l.jsx)(n.code,{children:"src/consts/parameters.ts"})," file.","\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Change the ",(0,l.jsx)(n.code,{children:"contractAddress"})," variable to your NFT collection's contract address (found on the thirdweb dashboard)."]}),"\n",(0,l.jsxs)(n.li,{children:["Set the ",(0,l.jsx)(n.code,{children:"chain"})," variable to ",(0,l.jsx)(n.code,{children:"funkiSepolia"}),"."]}),"\n",(0,l.jsxs)(n.li,{children:["Update the ",(0,l.jsx)(n.code,{children:"blockExplorer"})," variable to ",(0,l.jsx)(n.code,{children:"https://testnet.funkiscan.io/"}),"."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Open the ",(0,l.jsx)(n.code,{children:"src/main.tsx"})," file."]}),"\n",(0,l.jsx)(n.li,{children:"Replace the entire contents of the file with the following code:"}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-solidity",children:'import React from "react";\nimport ReactDOM from "react-dom/client";\nimport App from "./App";\nimport "./index.css";\nimport { ThirdwebProvider } from "@thirdweb-dev/react";\nimport { FunkiSepolia } from "@thirdweb-dev/chains";\n\nReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(\n \n \n \n \n ,\n);\n'})}),"\n",(0,l.jsxs)(n.p,{children:["The above code imports and uses\xa0",(0,l.jsx)(n.code,{children:"FunkiSepolia"}),"\xa0to be the\xa0",(0,l.jsx)(n.code,{children:"activeChain"}),"."]}),"\n",(0,l.jsx)(n.admonition,{type:"info",children:(0,l.jsxs)(n.p,{children:["For production / mainnet deployments, update the information above so that the\xa0chain\xa0variable is\xa0Funki\xa0(step ii), the\xa0blockExplorer\xa0is\xa0",(0,l.jsx)(n.a,{href:"https://funkiscan.io",children:"https://funkiscan.io"}),"\xa0(step iii), and update both instances of\xa0",(0,l.jsx)(n.code,{children:"FunkiSepolia"}),"\xa0to\xa0",(0,l.jsx)(n.code,{children:"FunkiMainnet"}),"\xa0in the example javascript code."]})}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"running-the-application",children:"Running the Application"}),"\n",(0,l.jsx)(n.p,{children:"Now that you've updated the FunkiSepolia chain and your NFT collection's address, you're ready to view your NFT collection in the application."}),"\n",(0,l.jsx)(n.p,{children:"To launch the application, execute the following command in the root directory:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"yarn dev\n"})}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,l.jsx)(n.p,{children:"Congratulations on completing this tutorial! You've successfully learned how to create an NFT collection using Thirdweb, mint new NFTs, and build an NFT gallery app on the Funki blockchain."}),"\n",(0,l.jsxs)(n.p,{children:["For your next project, explore other prebuilt ",(0,l.jsx)(n.a,{href:"https://thirdweb.com/explore",children:"smart contracts"})," and starter ",(0,l.jsx)(n.a,{href:"https://portal.thirdweb.com/templates",children:"templates"})," offered by the ",(0,l.jsx)(n.a,{href:"https://portal.thirdweb.com/",children:"thirdweb"})," platform. These resources can help you develop your next onchain app on Funki with ease and efficiency."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},2635:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/thirdweb-mint-22461769d7cc23ae9e594f86870f1000.png"},6393:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/thridweb-success-contract-a45a98f4bdfc156f7443ff785e14143d.png"},1184:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var i=t(4041);const l={},o=i.createContext(l);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/51c73bd5.44f6ffc8.js b/assets/js/51c73bd5.44f6ffc8.js new file mode 100644 index 0000000..c118aec --- /dev/null +++ b/assets/js/51c73bd5.44f6ffc8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[5761],{5651:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>c,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"tutorials/deploy-sm-using-thirdweb","title":"Deploying a smart contract using thirdweb","description":"","source":"@site/docs/tutorials/deploy-sm-using-thirdweb.md","sourceDirName":"tutorials","slug":"/tutorials/deploy-sm-using-thirdweb","permalink":"/docs/tutorials/deploy-sm-using-thirdweb","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tutorials/deploy-sm-using-thirdweb.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Deploying a smart contract using thirdweb","slug":"/tutorials/deploy-sm-using-thirdweb","order":5.4,"description":""},"sidebar":"docSidebar","previous":{"title":"Deploying a smart contract using Remix","permalink":"/docs/tutorials/deploy-sm-using-remix"},"next":{"title":"Verify a Smart Contract on FunkiScan","permalink":"/docs/tutorials/verify-sm-on-funkichain"}}');var i=r(1085),o=r(1184);const c={title:"Deploying a smart contract using thirdweb",slug:"/tutorials/deploy-sm-using-thirdweb",order:5.4,description:""},s=void 0,a={},h=[{value:"Objectives",id:"objectives",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Creating a project",id:"creating-a-project",level:2},{value:"Exploring the project",id:"exploring-the-project",level:3},{value:"Deploying the contract",id:"deploying-the-contract",level:2},{value:"Interacting with your contract",id:"interacting-with-your-contract",level:2},{value:"Exploring the project",id:"exploring-the-project-1",level:3},{value:"Interacting with the contract",id:"interacting-with-the-contract",level:3},{value:"Deploying the project",id:"deploying-the-project",level:3}];function l(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://thirdweb.com/",children:"Thirdweb"})," is a powerful development framework that enables you to integrate web3 functionality into your applications. This tutorial will guide you through using the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/cli",children:"thirdweb CLI"})," to deploy a smart contract on the FunkiSepolia."]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"objectives",children:"Objectives"}),"\n",(0,i.jsx)(t.p,{children:"By the end of this lesson, you'll be able to:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Create a project with a smart contract using thirdweb"}),"\n",(0,i.jsx)(t.li,{children:"Deploy smart contracts using thirdweb"}),"\n",(0,i.jsx)(t.li,{children:"Interact with deployed smart contracts using thirdweb"}),"\n"]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(t.p,{children:["The interactive thirdweb ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/cli",children:"command line interface (CLI)"})," provides all the tools necessary to create, build, and deploy smart contracts and apps to Funki."]}),"\n",(0,i.jsx)(t.p,{children:"For the most up-to-date version, we recommend using npx. However, you can also install the CLI globally on your machine:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-solidity",children:"npm i -g @thirdweb-dev/cli\n"})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"creating-a-project",children:"Creating a project"}),"\n",(0,i.jsxs)(t.p,{children:["The thirdweb ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/cli",children:"CLI"})," enables you to create a new project with a smart contract. You can also deploy pre-built contracts for NFTs, Tokens, or Marketplaces directly from the thirdweb ",(0,i.jsx)(t.a,{href:"http://thirdweb.com/explore",children:"Explore"})," page."]}),"\n",(0,i.jsx)(t.p,{children:"To create a new project using the CLI, run this command:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"npx thirdweb create contract\n"})}),"\n",(0,i.jsx)(t.p,{children:"This will initiate an interactive series of prompts to guide you through the setup process:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Name your project"}),"\n",(0,i.jsxs)(t.li,{children:["Choose ",(0,i.jsx)(t.code,{children:"Hardhat"})," as the framework"]}),"\n",(0,i.jsxs)(t.li,{children:["Select ",(0,i.jsx)(t.code,{children:"ERC721"})," for the base contract"]}),"\n",(0,i.jsxs)(t.li,{children:['Opt for "None" when asked about optional ',(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/contractkit/extensions",children:"extensions"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"exploring-the-project",children:"Exploring the project"}),"\n",(0,i.jsx)(t.p,{children:"The create command generates a new directory with your project name. Open this directory in your text editor."}),"\n",(0,i.jsxs)(t.p,{children:["Inside the ",(0,i.jsx)(t.code,{children:"contracts"})," folder, you'll find a ",(0,i.jsx)(t.code,{children:"Contract.sol"})," file\u2014this is your smart contract written in Solidity!"]}),"\n",(0,i.jsxs)(t.p,{children:["Examining the code, you'll see that our contract inherits the functionality of ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/contractkit/base-contracts/erc-721/erc721base",children:(0,i.jsx)(t.code,{children:"ERC721Base"})})," by:"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://solidity-by-example.org/import/",children:"Importing"})," the contract"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://docs.soliditylang.org/en/v0.8.17/contracts.html#inheritance",children:"Inheriting"})," the contract (declaring that our contract is ERC721Base)"]}),"\n",(0,i.jsxs)(t.li,{children:["Implementing ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/contractkit/base-contracts/erc-721/erc721base#implementing-the-contract",children:"required methods"}),", such as the ",(0,i.jsx)(t.a,{href:"https://docs.soliditylang.org/en/v0.8.17/contracts.html#constructors",children:"constructor"})]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-solidity",children:'// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport "@thirdweb-dev/contracts/base/ERC721Base.sol";\n\ncontract Contract is ERC721Base {\n constructor(\n string memory _name,\n string memory _symbol,\n address _royaltyRecipient,\n uint128 _royaltyBps\n ) ERC721Base(_name, _symbol, _royaltyRecipient, _royaltyBps) {}\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"This inheritance pattern lets us use functionality from other contracts inside of ours, modify it, and add custom logic."}),"\n",(0,i.jsxs)(t.p,{children:["For example, our contract currently implements all of the logic inside the ",(0,i.jsx)(t.a,{href:"https://github.com/thirdweb-dev/contracts/blob/main/contracts/base/ERC721Base.sol",children:(0,i.jsx)(t.code,{children:"ERC721Base.sol"})})," contract, which implements the ",(0,i.jsx)(t.a,{href:"https://github.com/thirdweb-dev/contracts/blob/main/contracts/eip/ERC721A.sol",children:(0,i.jsx)(t.code,{children:"ERC721A"})})," standard with several useful ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/contractkit/extensions",children:"extensions"}),"."]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"deploying-the-contract",children:"Deploying the contract"}),"\n",(0,i.jsxs)(t.p,{children:["You can use the thirdweb ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/cli",children:"CLI"})," to deploy a smart contract to Funki."]}),"\n",(0,i.jsx)(t.p,{children:"To deploy your smart contracts, from the root directory of your project, run:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"npx thirdweb deploy\n"})}),"\n",(0,i.jsx)(t.p,{children:"Running this command will:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Compile all contracts in the current directory"}),"\n",(0,i.jsx)(t.li,{children:"Allow you to select which contract(s) to deploy"}),"\n",(0,i.jsxs)(t.li,{children:["Upload your contract's source code (",(0,i.jsx)(t.a,{href:"https://docs.soliditylang.org/en/v0.8.17/abi-spec.html",children:"ABI"}),") to ",(0,i.jsx)(t.a,{href:"https://docs.ipfs.tech/concepts/what-is-ipfs/",children:"IPFS"})]}),"\n",(0,i.jsx)(t.li,{children:"Open the deployment flow in the dashboard"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"From the dashboard, you'll need to enter the values for your contract's constructor:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"_name"}),": Your contract's name"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"_symbol"}),': The "ticker" symbol for your contract\'s tokens']}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"_royaltyRecipient"}),": The wallet address receiving royalties from secondary sales"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"_royaltyBps"}),": The basis points (bps) for royalties on each secondary sale (e.g., 500 = 5%)"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Lastly, choose the FunkiSepolia as your deployment ",(0,i.jsx)(t.a,{href:"https://blog.thirdweb.com/guides/which-network-should-you-use/",children:"network"}),", then click ",(0,i.jsx)(t.strong,{children:"Deploy Now"}),"."]}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsxs)(t.p,{children:["For production / mainnet deployments select ",(0,i.jsx)(t.code,{children:"FunkiMainet"})," as the network rather than ",(0,i.jsx)(t.code,{children:"FunkiSepolia"}),"."]})}),"\n",(0,i.jsxs)(t.p,{children:["Once your contract is deployed, you'll be redirected to a ",(0,i.jsx)(t.a,{href:"https://thirdweb.com/dashboard",children:"dashboard"})," for managing your contract."]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"interacting-with-your-contract",children:"Interacting with your contract"}),"\n",(0,i.jsxs)(t.p,{children:["Thirdweb provides SDKs for various programming languages, including ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react",children:"React"}),", ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react-native",children:"React Native"}),", ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/typescript",children:"TypeScript"}),", ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/python",children:"Python"}),", ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/go",children:"Go"}),", and ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/unity",children:"Unity"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["To interact with your smart contract, you can use the thirdweb ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/cli",children:"CLI"})," to create a web application that is pre-configured with the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react",children:"thirdweb React SDK"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"To create a web application preconfigured with the thirdweb SDK, run:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"npx thirdweb create app --evm\n"})}),"\n",(0,i.jsx)(t.p,{children:"This will kick off an interactive series of questions to help you get started:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Give your project a name"}),"\n",(0,i.jsxs)(t.li,{children:["Select ",(0,i.jsx)(t.a,{href:"https://reactjs.org/docs/create-a-new-react-app.html#create-react-app",children:(0,i.jsx)(t.code,{children:"Create React App"})})," as the framework"]}),"\n",(0,i.jsxs)(t.li,{children:["Select ",(0,i.jsx)(t.code,{children:"TypeScript"})," as the language"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"exploring-the-project-1",children:"Exploring the project"}),"\n",(0,i.jsx)(t.p,{children:"The create command generates a new directory with your project name. Open this directory in your text editor."}),"\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.a,{href:"https://github.com/thirdweb-example/cra-typescript-starter/blob/main/src/index.tsx#L17-L19",children:(0,i.jsx)(t.code,{children:"index.tsx"})})," file, you'll find the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/sdk/set-up-the-sdk/frontend#manual-installation",children:(0,i.jsx)(t.code,{children:"ThirdwebProvider"})})," wrapping the entire application."]}),"\n",(0,i.jsxs)(t.p,{children:["This wrapper enables the use of all ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react",children:"React SDK"})," hooks and ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react/react.web3button",children:"UI Components"})," throughout the application. It also allows you to configure an ",(0,i.jsx)(t.code,{children:"activeChain"}),", which specifies the blockchain network for your smart contracts."]}),"\n",(0,i.jsxs)(t.p,{children:["Since we deployed our smart contract to the Funki network, we'll set the ",(0,i.jsx)(t.code,{children:"activeChain"})," to ",(0,i.jsx)(t.code,{children:"FunkiSepolia"}),":"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-solidity",children:'...\nimport { FunkiSepolia } from "@thirdweb-dev/chains";\nimport { ThirdwebProvider } from "@thirdweb-dev/react";\n\nconst container = document.getElementById("root");\nconst root = createRoot(container!);\nroot.render(\n <React.StrictMode>\n <ThirdwebProvider activeChain={FunkiSepolia}>\n <App />\n </ThirdwebProvider>\n </React.StrictMode>\n);\n'})}),"\n",(0,i.jsx)(t.h3,{id:"interacting-with-the-contract",children:"Interacting with the contract"}),"\n",(0,i.jsxs)(t.p,{children:["To connect to your smart contract in the application, provide your smart contract address (which you can get from the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/dashboard",children:"dashboard"}),") to the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/sdk/interacting-with-contracts/custom-contracts/getting-a-contract#connect-to-a-contract",children:(0,i.jsx)(t.code,{children:"useContract"})})," hook like so:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-solidity",children:"import { useContract } from '@thirdweb-dev/react';\n\nexport default function Home() {\n const { contract } = useContract('<CONTRACT_ADDRESS>');\n\n // Now you can use the contract in the rest of the component!\n}\n"})}),"\n",(0,i.jsxs)(t.p,{children:["You can now call any function on your smart contract with ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/sdk/interacting-with-contracts/custom-contracts/using-contracts#read-contract-data",children:(0,i.jsx)(t.code,{children:"useContractRead"})})," and ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/sdk/interacting-with-contracts/custom-contracts/using-contracts#write-transactions",children:(0,i.jsx)(t.code,{children:"useContractWrite"})})," hooks."]}),"\n",(0,i.jsxs)(t.p,{children:["For example, you can call ",(0,i.jsx)(t.code,{children:"useContractRead"})," to get the name of the contract:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-solidity",children:"const { data, isLoading } = useContractRead(contract, 'name');\n"})}),"\n",(0,i.jsxs)(t.p,{children:["The thirdweb SDK offers hooks for various interfaces and ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/contractkit/extensions",children:"extensions"}),", simplifying data reading and writing. For instance, we can use ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/sdk/interacting-with-contracts/erc721",children:"ERC721 hooks"})," to retrieve metadata for our NFT contract."]}),"\n",(0,i.jsxs)(t.p,{children:["To learn more about interacting with smart contracts using the thirdweb SDK, check out the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react",children:"thirdweb developer documentation"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"deploying-the-project",children:"Deploying the project"}),"\n",(0,i.jsxs)(t.p,{children:["To ",(0,i.jsx)(t.a,{href:"https://blog.thirdweb.com/guides/how-to-host-your-web-app-on-ipfs/",children:"host your application on IPFS"}),", run the following command:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"yarn deploy\n"})}),"\n",(0,i.jsxs)(t.p,{children:["This command uses ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/storage",children:"Storage"})," to:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Create a production build of your application"}),"\n",(0,i.jsx)(t.li,{children:"Upload the build to IPFS"}),"\n",(0,i.jsx)(t.li,{children:"Generate a URL where your app is permanently hosted"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"That's it! You now have a web application that interacts with smart contracts deployed to Funki!"})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},1184:(e,t,r)=>{r.d(t,{R:()=>c,x:()=>s});var n=r(4041);const i={},o=n.createContext(i);function c(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/51c73bd5.fa440c29.js b/assets/js/51c73bd5.fa440c29.js deleted file mode 100644 index a7dd95c..0000000 --- a/assets/js/51c73bd5.fa440c29.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[5761],{5651:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>c,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"tutorials/deploy-sm-using-thirdweb","title":"Deploying a smart contract using thirdweb","description":"","source":"@site/docs/tutorials/deploy-sm-using-thirdweb.md","sourceDirName":"tutorials","slug":"/tutorials/deploy-sm-using-thirdweb","permalink":"/docs/tutorials/deploy-sm-using-thirdweb","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tutorials/deploy-sm-using-thirdweb.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Deploying a smart contract using thirdweb","slug":"/tutorials/deploy-sm-using-thirdweb","order":5.4,"description":""},"sidebar":"docSidebar","previous":{"title":"Deploying a smart contract using Remix","permalink":"/docs/tutorials/deploy-sm-using-remix"},"next":{"title":"Building an onchain app using thirdweb","permalink":"/docs/tutorials/building-onchain-app-thirdweb"}}');var i=r(1085),o=r(1184);const c={title:"Deploying a smart contract using thirdweb",slug:"/tutorials/deploy-sm-using-thirdweb",order:5.4,description:""},s=void 0,a={},h=[{value:"Objectives",id:"objectives",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Creating a project",id:"creating-a-project",level:2},{value:"Exploring the project",id:"exploring-the-project",level:3},{value:"Deploying the contract",id:"deploying-the-contract",level:2},{value:"Interacting with your contract",id:"interacting-with-your-contract",level:2},{value:"Exploring the project",id:"exploring-the-project-1",level:3},{value:"Interacting with the contract",id:"interacting-with-the-contract",level:3},{value:"Deploying the project",id:"deploying-the-project",level:3}];function l(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://thirdweb.com/",children:"Thirdweb"})," is a powerful development framework that enables you to integrate web3 functionality into your applications. This tutorial will guide you through using the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/cli",children:"thirdweb CLI"})," to deploy a smart contract on the FunkiSepolia."]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"objectives",children:"Objectives"}),"\n",(0,i.jsx)(t.p,{children:"By the end of this lesson, you'll be able to:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Create a project with a smart contract using thirdweb"}),"\n",(0,i.jsx)(t.li,{children:"Deploy smart contracts using thirdweb"}),"\n",(0,i.jsx)(t.li,{children:"Interact with deployed smart contracts using thirdweb"}),"\n"]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(t.p,{children:["The interactive thirdweb ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/cli",children:"command line interface (CLI)"})," provides all the tools necessary to create, build, and deploy smart contracts and apps to Funki."]}),"\n",(0,i.jsx)(t.p,{children:"For the most up-to-date version, we recommend using npx. However, you can also install the CLI globally on your machine:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-solidity",children:"npm i -g @thirdweb-dev/cli\n"})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"creating-a-project",children:"Creating a project"}),"\n",(0,i.jsxs)(t.p,{children:["The thirdweb ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/cli",children:"CLI"})," enables you to create a new project with a smart contract. You can also deploy pre-built contracts for NFTs, Tokens, or Marketplaces directly from the thirdweb ",(0,i.jsx)(t.a,{href:"http://thirdweb.com/explore",children:"Explore"})," page."]}),"\n",(0,i.jsx)(t.p,{children:"To create a new project using the CLI, run this command:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"npx thirdweb create contract\n"})}),"\n",(0,i.jsx)(t.p,{children:"This will initiate an interactive series of prompts to guide you through the setup process:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Name your project"}),"\n",(0,i.jsxs)(t.li,{children:["Choose ",(0,i.jsx)(t.code,{children:"Hardhat"})," as the framework"]}),"\n",(0,i.jsxs)(t.li,{children:["Select ",(0,i.jsx)(t.code,{children:"ERC721"})," for the base contract"]}),"\n",(0,i.jsxs)(t.li,{children:['Opt for "None" when asked about optional ',(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/contractkit/extensions",children:"extensions"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"exploring-the-project",children:"Exploring the project"}),"\n",(0,i.jsx)(t.p,{children:"The create command generates a new directory with your project name. Open this directory in your text editor."}),"\n",(0,i.jsxs)(t.p,{children:["Inside the ",(0,i.jsx)(t.code,{children:"contracts"})," folder, you'll find a ",(0,i.jsx)(t.code,{children:"Contract.sol"})," file\u2014this is your smart contract written in Solidity!"]}),"\n",(0,i.jsxs)(t.p,{children:["Examining the code, you'll see that our contract inherits the functionality of ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/contractkit/base-contracts/erc-721/erc721base",children:(0,i.jsx)(t.code,{children:"ERC721Base"})})," by:"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://solidity-by-example.org/import/",children:"Importing"})," the contract"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://docs.soliditylang.org/en/v0.8.17/contracts.html#inheritance",children:"Inheriting"})," the contract (declaring that our contract is ERC721Base)"]}),"\n",(0,i.jsxs)(t.li,{children:["Implementing ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/contractkit/base-contracts/erc-721/erc721base#implementing-the-contract",children:"required methods"}),", such as the ",(0,i.jsx)(t.a,{href:"https://docs.soliditylang.org/en/v0.8.17/contracts.html#constructors",children:"constructor"})]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-solidity",children:'// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport "@thirdweb-dev/contracts/base/ERC721Base.sol";\n\ncontract Contract is ERC721Base {\n constructor(\n string memory _name,\n string memory _symbol,\n address _royaltyRecipient,\n uint128 _royaltyBps\n ) ERC721Base(_name, _symbol, _royaltyRecipient, _royaltyBps) {}\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"This inheritance pattern lets us use functionality from other contracts inside of ours, modify it, and add custom logic."}),"\n",(0,i.jsxs)(t.p,{children:["For example, our contract currently implements all of the logic inside the ",(0,i.jsx)(t.a,{href:"https://github.com/thirdweb-dev/contracts/blob/main/contracts/base/ERC721Base.sol",children:(0,i.jsx)(t.code,{children:"ERC721Base.sol"})})," contract, which implements the ",(0,i.jsx)(t.a,{href:"https://github.com/thirdweb-dev/contracts/blob/main/contracts/eip/ERC721A.sol",children:(0,i.jsx)(t.code,{children:"ERC721A"})})," standard with several useful ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/contractkit/extensions",children:"extensions"}),"."]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"deploying-the-contract",children:"Deploying the contract"}),"\n",(0,i.jsxs)(t.p,{children:["You can use the thirdweb ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/cli",children:"CLI"})," to deploy a smart contract to Funki."]}),"\n",(0,i.jsx)(t.p,{children:"To deploy your smart contracts, from the root directory of your project, run:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"npx thirdweb deploy\n"})}),"\n",(0,i.jsx)(t.p,{children:"Running this command will:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Compile all contracts in the current directory"}),"\n",(0,i.jsx)(t.li,{children:"Allow you to select which contract(s) to deploy"}),"\n",(0,i.jsxs)(t.li,{children:["Upload your contract's source code (",(0,i.jsx)(t.a,{href:"https://docs.soliditylang.org/en/v0.8.17/abi-spec.html",children:"ABI"}),") to ",(0,i.jsx)(t.a,{href:"https://docs.ipfs.tech/concepts/what-is-ipfs/",children:"IPFS"})]}),"\n",(0,i.jsx)(t.li,{children:"Open the deployment flow in the dashboard"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"From the dashboard, you'll need to enter the values for your contract's constructor:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"_name"}),": Your contract's name"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"_symbol"}),': The "ticker" symbol for your contract\'s tokens']}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"_royaltyRecipient"}),": The wallet address receiving royalties from secondary sales"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"_royaltyBps"}),": The basis points (bps) for royalties on each secondary sale (e.g., 500 = 5%)"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Lastly, choose the FunkiSepolia as your deployment ",(0,i.jsx)(t.a,{href:"https://blog.thirdweb.com/guides/which-network-should-you-use/",children:"network"}),", then click ",(0,i.jsx)(t.strong,{children:"Deploy Now"}),"."]}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsxs)(t.p,{children:["For production / mainnet deployments select ",(0,i.jsx)(t.code,{children:"FunkiMainet"})," as the network rather than ",(0,i.jsx)(t.code,{children:"FunkiSepolia"}),"."]})}),"\n",(0,i.jsxs)(t.p,{children:["Once your contract is deployed, you'll be redirected to a ",(0,i.jsx)(t.a,{href:"https://thirdweb.com/dashboard",children:"dashboard"})," for managing your contract."]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"interacting-with-your-contract",children:"Interacting with your contract"}),"\n",(0,i.jsxs)(t.p,{children:["Thirdweb provides SDKs for various programming languages, including ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react",children:"React"}),", ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react-native",children:"React Native"}),", ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/typescript",children:"TypeScript"}),", ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/python",children:"Python"}),", ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/go",children:"Go"}),", and ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/unity",children:"Unity"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["To interact with your smart contract, you can use the thirdweb ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/cli",children:"CLI"})," to create a web application that is pre-configured with the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react",children:"thirdweb React SDK"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"To create a web application preconfigured with the thirdweb SDK, run:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"npx thirdweb create app --evm\n"})}),"\n",(0,i.jsx)(t.p,{children:"This will kick off an interactive series of questions to help you get started:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Give your project a name"}),"\n",(0,i.jsxs)(t.li,{children:["Select ",(0,i.jsx)(t.a,{href:"https://reactjs.org/docs/create-a-new-react-app.html#create-react-app",children:(0,i.jsx)(t.code,{children:"Create React App"})})," as the framework"]}),"\n",(0,i.jsxs)(t.li,{children:["Select ",(0,i.jsx)(t.code,{children:"TypeScript"})," as the language"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"exploring-the-project-1",children:"Exploring the project"}),"\n",(0,i.jsx)(t.p,{children:"The create command generates a new directory with your project name. Open this directory in your text editor."}),"\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.a,{href:"https://github.com/thirdweb-example/cra-typescript-starter/blob/main/src/index.tsx#L17-L19",children:(0,i.jsx)(t.code,{children:"index.tsx"})})," file, you'll find the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/sdk/set-up-the-sdk/frontend#manual-installation",children:(0,i.jsx)(t.code,{children:"ThirdwebProvider"})})," wrapping the entire application."]}),"\n",(0,i.jsxs)(t.p,{children:["This wrapper enables the use of all ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react",children:"React SDK"})," hooks and ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react/react.web3button",children:"UI Components"})," throughout the application. It also allows you to configure an ",(0,i.jsx)(t.code,{children:"activeChain"}),", which specifies the blockchain network for your smart contracts."]}),"\n",(0,i.jsxs)(t.p,{children:["Since we deployed our smart contract to the Funki network, we'll set the ",(0,i.jsx)(t.code,{children:"activeChain"})," to ",(0,i.jsx)(t.code,{children:"FunkiSepolia"}),":"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-solidity",children:'...\nimport { FunkiSepolia } from "@thirdweb-dev/chains";\nimport { ThirdwebProvider } from "@thirdweb-dev/react";\n\nconst container = document.getElementById("root");\nconst root = createRoot(container!);\nroot.render(\n <React.StrictMode>\n <ThirdwebProvider activeChain={FunkiSepolia}>\n <App />\n </ThirdwebProvider>\n </React.StrictMode>\n);\n'})}),"\n",(0,i.jsx)(t.h3,{id:"interacting-with-the-contract",children:"Interacting with the contract"}),"\n",(0,i.jsxs)(t.p,{children:["To connect to your smart contract in the application, provide your smart contract address (which you can get from the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/dashboard",children:"dashboard"}),") to the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/sdk/interacting-with-contracts/custom-contracts/getting-a-contract#connect-to-a-contract",children:(0,i.jsx)(t.code,{children:"useContract"})})," hook like so:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-solidity",children:"import { useContract } from '@thirdweb-dev/react';\n\nexport default function Home() {\n const { contract } = useContract('<CONTRACT_ADDRESS>');\n\n // Now you can use the contract in the rest of the component!\n}\n"})}),"\n",(0,i.jsxs)(t.p,{children:["You can now call any function on your smart contract with ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/sdk/interacting-with-contracts/custom-contracts/using-contracts#read-contract-data",children:(0,i.jsx)(t.code,{children:"useContractRead"})})," and ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/sdk/interacting-with-contracts/custom-contracts/using-contracts#write-transactions",children:(0,i.jsx)(t.code,{children:"useContractWrite"})})," hooks."]}),"\n",(0,i.jsxs)(t.p,{children:["For example, you can call ",(0,i.jsx)(t.code,{children:"useContractRead"})," to get the name of the contract:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-solidity",children:"const { data, isLoading } = useContractRead(contract, 'name');\n"})}),"\n",(0,i.jsxs)(t.p,{children:["The thirdweb SDK offers hooks for various interfaces and ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/contractkit/extensions",children:"extensions"}),", simplifying data reading and writing. For instance, we can use ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/sdk/interacting-with-contracts/erc721",children:"ERC721 hooks"})," to retrieve metadata for our NFT contract."]}),"\n",(0,i.jsxs)(t.p,{children:["To learn more about interacting with smart contracts using the thirdweb SDK, check out the ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/react",children:"thirdweb developer documentation"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"deploying-the-project",children:"Deploying the project"}),"\n",(0,i.jsxs)(t.p,{children:["To ",(0,i.jsx)(t.a,{href:"https://blog.thirdweb.com/guides/how-to-host-your-web-app-on-ipfs/",children:"host your application on IPFS"}),", run the following command:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"yarn deploy\n"})}),"\n",(0,i.jsxs)(t.p,{children:["This command uses ",(0,i.jsx)(t.a,{href:"https://portal.thirdweb.com/storage",children:"Storage"})," to:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Create a production build of your application"}),"\n",(0,i.jsx)(t.li,{children:"Upload the build to IPFS"}),"\n",(0,i.jsx)(t.li,{children:"Generate a URL where your app is permanently hosted"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"That's it! You now have a web application that interacts with smart contracts deployed to Funki!"})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},1184:(e,t,r)=>{r.d(t,{R:()=>c,x:()=>s});var n=r(4041);const i={},o=n.createContext(i);function c(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89c7d0f1.d4f82e44.js b/assets/js/89c7d0f1.d4f82e44.js deleted file mode 100644 index 446403f..0000000 --- a/assets/js/89c7d0f1.d4f82e44.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[411],{8714:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"tools/dexs/funki-dex-faq","title":"Funki DEX-FAQ","description":"An FAQ for Funki DEX, detailing its features, trading capabilities, liquidity provision, token swaps, security audits, and guidelines for users.","source":"@site/docs/tools/dexs/funki-dex-faq.md","sourceDirName":"tools/dexs","slug":"/tools/dexs/funki-dex-faq","permalink":"/docs/tools/dexs/funki-dex-faq","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tools/dexs/funki-dex-faq.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Funki DEX-FAQ","slug":"/tools/dexs/funki-dex-faq","order":"6.5.2","description":"An FAQ for Funki DEX, detailing its features, trading capabilities, liquidity provision, token swaps, security audits, and guidelines for users.","keywords":["Funki DEX","FAQ","frequently asked questions","decentralized exchange","token swaps","liquidity pools","UniswapV3","cryptocurrency trading","DeFi","smart contracts","security audits","trading fees"]},"sidebar":"docSidebar","previous":{"title":"Funki DEX","permalink":"/docs/tools/dexs/funki-dex"},"next":{"title":"Onramps","permalink":"/docs/tools/onramps"}}');var t=n(1085),r=n(1184);const o={title:"Funki DEX-FAQ",slug:"/tools/dexs/funki-dex-faq",order:"6.5.2",description:"An FAQ for Funki DEX, detailing its features, trading capabilities, liquidity provision, token swaps, security audits, and guidelines for users.",keywords:["Funki DEX","FAQ","frequently asked questions","decentralized exchange","token swaps","liquidity pools","UniswapV3","cryptocurrency trading","DeFi","smart contracts","security audits","trading fees"]},a=void 0,l={},c=[{value:"General",id:"general",level:2},{value:"1. What is FUNKI Swap?",id:"1-what-is-funki-swap",level:3},{value:"FUNKI DEX can save swappers money in the following ways:",id:"funki-dex-can-save-swappers-money-in-the-following-ways",level:3},{value:"2. Connected Wallets on Funki Swap - Security Measures",id:"2-connected-wallets-on-funki-swap---security-measures",level:3},{value:"Best Practices for Staying Safe",id:"best-practices-for-staying-safe",level:3},{value:"3. Who uses the FUNKI protocol?",id:"3-who-uses-the-funki-protocol",level:3},{value:"a. Liquidity Providers:",id:"a-liquidity-providers",level:3},{value:"Different types of LP:",id:"different-types-of-lp",level:3},{value:"b. Traders",id:"b-traders",level:3},{value:"c. Developers",id:"c-developers",level:3},{value:"4. What are FUNKI Swap\u2019s fees?",id:"4-what-are-funki-swaps-fees",level:3},{value:"5. Supported Token List",id:"5-supported-token-list",level:3},{value:"6. Unsupported Token and NFT Policy",id:"6-unsupported-token-and-nft-policy",level:3},{value:"a. Asset blocking policy",id:"a-asset-blocking-policy",level:3},{value:"b. Ways that Access can be Restricted on FUNKI Interfaces",id:"b-ways-that-access-can-be-restricted-on-funki-interfaces",level:3},{value:"c. Criteria for Restricting Access on FUNKI Interfaces",id:"c-criteria-for-restricting-access-on-funki-interfaces",level:3},{value:"7. How to initiate an appeal request",id:"7-how-to-initiate-an-appeal-request",level:3},{value:"8. How to add liquidity to FUNKI",id:"8-how-to-add-liquidity-to-funki",level:3},{value:"9. How to remove liquidity from FUNKI",id:"9-how-to-remove-liquidity-from-funki",level:3},{value:"10. How to collect fees from a liquidity pool on FUNKI",id:"10-how-to-collect-fees-from-a-liquidity-pool-on-funki",level:3}];function d(e){const s={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Details:n}=s;return n||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"general",children:"General"}),"\n",(0,t.jsx)(s.h3,{id:"1-what-is-funki-swap",children:(0,t.jsx)(s.strong,{children:"1. What is FUNKI Swap?"})}),"\n",(0,t.jsx)(s.p,{children:"FUNKI Swap is a new permissionless, open source (GPL), auction-based protocol for trading across AMMs and other liquidity sources. FUNKI Swap is built based on Uniswap protocol."}),"\n",(0,t.jsx)(s.p,{children:"FUNKI Swap is available on FUNKI for Funkichain (EVM) only and will be expanding to other chains in the future"}),"\n",(0,t.jsx)(s.h3,{id:"funki-dex-can-save-swappers-money-in-the-following-ways",children:(0,t.jsx)(s.strong,{children:"FUNKI DEX can save swappers money in the following ways:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Better prices by aggregating liquidity sources"}),"\n",(0,t.jsxs)(s.li,{children:["Swapping without\xa0",(0,t.jsx)(s.a,{href:"https://support.uniswap.org/hc/en-us/articles/8370337377805",children:"network costs"})]}),"\n",(0,t.jsxs)(s.li,{children:["Protection against\xa0",(0,t.jsx)(s.a,{href:"https://coinmarketcap.com/alexandria/glossary/front-running",children:"MEV attacks"}),"\xa0(front-running)"]}),"\n",(0,t.jsxs)(s.li,{children:["No\xa0",(0,t.jsx)(s.a,{href:"https://support.uniswap.org/hc/en-us/articles/8370337377805",children:"network costs"}),"\xa0for failed transactions"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"2-connected-wallets-on-funki-swap---security-measures",children:(0,t.jsx)(s.strong,{children:"2. Connected Wallets on Funki Swap - Security Measures"})}),"\n",(0,t.jsx)(s.p,{children:"The Wallets connected on FUNKI Swap are self-custody wallets. They gives you full control over your digital assets, but also means you're responsible for safeguarding your recovery phrase, verifying transactions, and protecting yourself from scams. FUNKI cannot reverse transactions or recover funds on your behalf."}),"\n",(0,t.jsx)(s.p,{children:"We are supporting some wallets: Metamask, Wallet Connect, \u2026"}),"\n",(0,t.jsx)(s.h3,{id:"best-practices-for-staying-safe",children:(0,t.jsx)(s.strong,{children:"Best Practices for Staying Safe"})}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"Never share your private keys or recovery phrase with anyone."}),"\n",(0,t.jsx)(s.li,{children:"Double-check all transaction details before signing."}),"\n",(0,t.jsx)(s.li,{children:"Be wary of unsolicited offers or requests involving your crypto."}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"3-who-uses-the-funki-protocol",children:(0,t.jsx)(s.strong,{children:"3. Who uses the FUNKI protocol?"})}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"The FUNKI ecosystem includes three types of users: Liquidity Providers, Traders, and Developers."})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Liquidity Providers (LPs)"}),": People who provide their crypto assets to help with trading."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Traders:"}),"\xa0People who swap one token for another."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Developers"}),": People who work with FUNKI smart contracts to power new and exciting experiences."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"In total, interactions between these classes create a positive feedback loop.\xa0 They are the fuel that our digital economies need to define a common language. This common language allows users to pool and trade tokens."}),"\n",(0,t.jsx)(s.h3,{id:"a-liquidity-providers",children:(0,t.jsx)(s.strong,{children:"a. Liquidity Providers:"})}),"\n",(0,t.jsx)(s.p,{children:"Liquidity providers, or LPs, provide ERC-20 tokens to FUNKI liquidity pools. Large pools generate higher-volume trades with better pricing than smaller pools."}),"\n",(0,t.jsx)(s.p,{children:"Hence LPs play the very important role of providing liquidity for traders. In return, LPs earn a fee\xa0on every trade in the pool, split pro rata across LPs of that pool."}),"\n",(0,t.jsx)(s.h3,{id:""}),"\n",(0,t.jsx)(s.h3,{id:"different-types-of-lp",children:(0,t.jsx)(s.strong,{children:"Different types of LP:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Passive LPs:"}),"\xa0token holders who wish to invest their assets to accumulate trading fees. This can generate passive income."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Professional LPs"}),": focus on market making as their primary strategy. They develop tools and ways of tracking their liquidity positions across different projects."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"DeFi Pioneers"}),": explore complex liquidity provision interactions.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Examples include incentivized liquidity, liquidity as collateral, and other experimental strategies. The FUNKI protocol is perfect for projects to experiment with these kinds of ideas."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Token Projects"}),": sometimes choose to become LPs to create a liquid market for their token. This allows users a simple way to buy and sell tokens."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"b-traders",children:(0,t.jsx)(s.strong,{children:"b. Traders"})}),"\n",(0,t.jsx)(s.p,{children:"There are a several categories of traders in the protocol ecosystem:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Speculators"}),": individuals who use various community tools and products to swap tokens."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Arbitrage Bots:"}),"\xa0These are our profit seeking bots! They compare prices across different platforms to find any competitive advantage. These bots actually help keep prices fair and equal."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"dapp Users:"}),"\xa0Individuals who buy tokens from the FUNKI protocol. They later trade these tokens in other applications on the Ethereum network."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Smart contracts:"}),"\xa0execute trades on the protocol by implementing swap functionality. These products include DEX aggregators to custom Solidity scripts."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"In all cases, trades are subject to the same flat fee for trading on the protocol. Each is important for increasing the accuracy of prices and incentivizing liquidity."}),"\n",(0,t.jsx)(s.h3,{id:"c-developers",children:(0,t.jsx)(s.strong,{children:"c. Developers"})}),"\n",(0,t.jsx)(s.p,{children:"Developers build apps and services on top of the FUNKI protocol. There are too many to count across the Ethereum ecosystem, but some examples include:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["FUNKI is completely\xa0",(0,t.jsx)(s.a,{href:"https://github.com/Uniswap/",children:"open-source"}),". Countless developers have launched their own front-ends to interact with the FUNKI protocol. You can find FUNKI functions in most of the major DeFi dashboard projects. There are also many FUNKI protocol tools built by the community."]}),"\n",(0,t.jsx)(s.li,{children:"Wallets can integrate swapping and liquidity functionality as a core offering."}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://www.lcx.com/role-of-dex-aggregators-in-defi/#:~:text=DEX%20aggregators%20are%20financial%20protocols,an%20Ethereum%2Dbased%20DEX%20aggregator.",children:"DEX aggregators"}),")\xa0pull liquidity from several liquidity protocols. This allows them to offer traders the best available prices. The Uniswap protocol is the biggest single decentralized liquidity source for these projects."]}),"\n",(0,t.jsxs)(s.li,{children:["Smart contract developers can invent new tools and experiment with other various ideas. Examples include projects like\xa0",(0,t.jsx)(s.a,{href:"https://unisocks.exchange/",children:"Unisocks"}),"\xa0or\xa0",(0,t.jsx)(s.a,{href:"https://zora.co/",children:"Zora"}),", but the possibilities are limitless!"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Many members of the FUNKI ecosystem take part in more than one of these roles. You can be a Liquidity Provider, Trader, and a Developer all at the same time!"}),"\n",(0,t.jsx)(s.h3,{id:"4-what-are-funki-swaps-fees",children:(0,t.jsx)(s.strong,{children:"4. What are FUNKI Swap\u2019s fees?"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Liquidity Provider Fee (LP Fee) is set by Liquidity Providers. There are 3 tiers:"}),"\n",(0,t.jsx)(s.li,{children:"0.05%"}),"\n",(0,t.jsx)(s.li,{children:"0.3%"}),"\n",(0,t.jsx)(s.li,{children:"1%"}),"\n",(0,t.jsx)(s.li,{children:"Protocol Fee/ Platform Fee"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"At the moment there are no protocol fees. However, it is possible for a 0.05% fee to be turned on in the future."}),"\n",(0,t.jsx)(s.h3,{id:"5-supported-token-list",children:(0,t.jsx)(s.strong,{children:"5. Supported Token List"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Currently, FUNKI Swap supports ETH, USDT, & SIPHER token only."}),"\n",(0,t.jsx)(s.li,{children:"We will support more tokens in the near future"}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"6-unsupported-token-and-nft-policy",children:(0,t.jsx)(s.strong,{children:"6. Unsupported Token and NFT Policy"})}),"\n",(0,t.jsx)(s.h3,{id:"a-asset-blocking-policy",children:(0,t.jsx)(s.strong,{children:"a. Asset blocking policy"})}),"\n",(0,t.jsx)(s.p,{children:"The FUNKI Protocol is a self-executing, permissionless, decentralized series of smart contracts that cannot be changed by anyone."}),"\n",(0,t.jsx)(s.p,{children:"FUNKI maintains one of many ways to interact with the Protocol, and as a company based in the United States is subject to certain laws and regulations."}),"\n",(0,t.jsx)(s.p,{children:"As such, there may be certain circumstances under which Labs blocks access to certain products through our own interfaces."}),"\n",(0,t.jsx)(s.h3,{id:"b-ways-that-access-can-be-restricted-on-funki-interfaces",children:(0,t.jsx)(s.strong,{children:"b. Ways that Access can be Restricted on FUNKI Interfaces"})}),"\n",(0,t.jsx)(s.p,{children:"Blocks may be applied in two ways:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["We can block\xa0",(0,t.jsx)(s.em,{children:"specific token contracts"}),"\xa0by adding them to the Unsupported Tokens List. If a token contract is blocked:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Any user viewing the corresponding token info page should see a message that the token is not supported; and"}),"\n",(0,t.jsx)(s.li,{children:"Interactions (including both direct user actions and routing) with any liquidity pool including the blocked token should be disabled."}),"\n",(0,t.jsx)(s.li,{children:"Wallet users may still send and receive unsupported tokens."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["We can also block\xa0",(0,t.jsx)(s.em,{children:"individual addresses"}),". If a user attempts to connect or use a blocked address, all actions that would modify chain state are disabled. This\xa0",(0,t.jsx)(s.a,{href:"https://support.uniswap.org/hc/en-us/articles/8671777747597-Address-Screening-Guide",children:"type of block"}),"\xa0will generally be applied on the basis of sanctions lists or other third-party screening."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Blocking criteria will be identical across all our products (e.g., web, wallet)."}),"\n",(0,t.jsx)(s.h3,{id:"c-criteria-for-restricting-access-on-funki-interfaces",children:(0,t.jsx)(s.strong,{children:"c. Criteria for Restricting Access on FUNKI Interfaces"})}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["We\xa0",(0,t.jsx)(s.em,{children:"will"}),"\xa0block token contracts for four main reasons:"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Legal and regulatory requirements. An U.S. agency settlement or court judgment against the token\u2019s issuer finds that the tokens/NFTs are regulated financial instruments (e.g., securities or derivatives) when traded in secondary transactions;\xa0or otherwise, upon internal legal review, and consultation with counsel; Fraud allegations. A major financial or criminal regulator files fraud allegations against the issuer; Intellectual property claims. A holder of intellectual property serves us with notice of plausible infringement of (i) a copyright (subject to notice and takedown provisions of the DMCA), or (ii) a trademark (not subject to the DMCA and its established counter-notice procedures), or (iii) the publicity rights of a third party (beyond the mere usage of a common name, and again not subject to the DMCA); or Risks to users. We believe there are technical, fraud, or other risks that could significantly affect user safety."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["We\xa0",(0,t.jsx)(s.em,{children:"will"}),"\xa0block individual or smart contract addresses that are subject to U.S. government sanctions or associated with certain types of illegal activity."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["We\xa0",(0,t.jsx)(s.em,{children:"may"}),"\xa0block individual or smart contract addresses for any other reason at our discretion. For example, we might have reason to believe that an address is associated with fraud, theft, or market manipulation, or that a smart contract has unacceptable security vulnerabilities."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"7-how-to-initiate-an-appeal-request",children:(0,t.jsx)(s.strong,{children:"7. How to initiate an appeal request"})}),"\n",(0,t.jsx)(s.p,{children:"To initiate an appeal for an unsupported asset on FUNKI interface, please follow these steps:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Email to\xa0",(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"hello@funkichain.com"})}),"\xa0with \u201cAppeal request\u201d in the subject line."]}),"\n",(0,t.jsx)(s.li,{children:"Include the name of the asset, contract address, and reason you\u2019re appealing."}),"\n",(0,t.jsx)(s.li,{children:"FUNKI compliance team will acknowledge receipt of the request within xx business day."}),"\n",(0,t.jsx)(s.li,{children:"FUNKI will internally review appeal requests on a case-by-case basis."}),"\n"]}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)(s.strong,{children:"Can I change slippage when using FUNKI Swap?"})}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/a3360061-c189-4218-86d4-ce77005efd37/Screenshot_2024-09-06_at_14.17.59.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142227Z&X-Amz-Expires=3600&X-Amz-Signature=6aae8f7154586d5307576f8aee8ff9dbf33ea6fb21194e94603f1a361d409aed&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-09-06_at_14.17.59.png"})}),(0,t.jsx)(s.p,{children:"Slippage can be adjusted for swaps using FUNKI Swap"})]}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)(s.strong,{children:"How to swap on FUNKI Swap"})}),(0,t.jsx)(s.p,{children:"Here\u2019s how to swap tokens on FUNKI Swap:"}),(0,t.jsx)(s.p,{children:"[steps & screenshots]"})]}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)(s.strong,{children:"Is there a swap minimum for a FUNKI DEX transaction?"})}),(0,t.jsx)(s.p,{children:"No minimum has been set yet."})]}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)(s.strong,{children:"Why can my swap not be filled?"})}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"A swap might not be filled for the following reasons:"})}),(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"An error occurred while submitting the swap"}),"\n",(0,t.jsx)(s.li,{children:"An error occurred while signing the submission"}),"\n",(0,t.jsx)(s.li,{children:"A\xa0token approval may need to be\xa0revoked and approved again"}),"\n"]}),(0,t.jsx)(s.p,{children:"There are no\xa0network costs charged when an unfilled or failed swap, so the swap can be submitted again."})]}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)(s.strong,{children:"Why did my swap expire?"})}),(0,t.jsx)(s.p,{children:"Swaps expire when swap is not filled within the designated time frame."}),(0,t.jsx)(s.p,{children:"The deadline for a FUNKI DEX swap to be filled is 1 minute. If no filler fills the swap by then the swap will expire."}),(0,t.jsx)(s.p,{children:"There are no\xa0network costs charged when an unfilled or failed swap, so the swap can be submitted again."})]}),"\n",(0,t.jsx)(s.h3,{id:"8-how-to-add-liquidity-to-funki",children:(0,t.jsx)(s.strong,{children:"8. How to add liquidity to FUNKI"})}),"\n",(0,t.jsx)(s.p,{children:"FUNKI allows you to concentrate your liquidity position within a custom price range."}),"\n",(0,t.jsx)(s.p,{children:"You can create a pair and pool for these supported tokens: ETH, WETH, USDT, USDC, SIPHER"}),"\n",(0,t.jsx)(s.h3,{id:"9-how-to-remove-liquidity-from-funki",children:(0,t.jsx)(s.strong,{children:"9. How to remove liquidity from FUNKI"})}),"\n",(0,t.jsx)(s.p,{children:"When removing liquidity from FUNKI, you will remove your liquidity position and collect earned fees."}),"\n",(0,t.jsx)(s.p,{children:"Or, you only collect liquidity provider fees earned, without removing liquidity."}),"\n",(0,t.jsx)(s.h3,{id:"10-how-to-collect-fees-from-a-liquidity-pool-on-funki",children:(0,t.jsx)(s.strong,{children:"10. How to collect fees from a liquidity pool on FUNKI"})}),"\n",(0,t.jsx)(s.p,{children:"FUNKI allows fees earned to be collected from the liquidity pool without removing liquidity."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/e2f514af-9134-4969-bcd4-9f0e1af1f284/Screenshot_2024-09-06_at_16.39.36.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142225Z&X-Amz-Expires=3600&X-Amz-Signature=f339c67d271270268afbf826e35460eb37055a225aed097b39d50d04a97005d2&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-09-06_at_16.39.36.png"})}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/7257da7b-b963-47bf-a7a4-79e91335e847/Screenshot_2024-09-06_at_16.39.57.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142225Z&X-Amz-Expires=3600&X-Amz-Signature=2cad7863789f8bb0ff80b3f1d85674a603367421bba00b48867d94aff236e461&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-09-06_at_16.39.57.png"})})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1184:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>a});var i=n(4041);const t={},r=i.createContext(t);function o(e){const s=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89c7d0f1.e20c2e90.js b/assets/js/89c7d0f1.e20c2e90.js new file mode 100644 index 0000000..1cc9c0d --- /dev/null +++ b/assets/js/89c7d0f1.e20c2e90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[411],{8714:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"tools/dexs/funki-dex-faq","title":"Funki DEX-FAQ","description":"An FAQ for Funki DEX, detailing its features, trading capabilities, liquidity provision, token swaps, security audits, and guidelines for users.","source":"@site/docs/tools/dexs/funki-dex-faq.md","sourceDirName":"tools/dexs","slug":"/tools/dexs/funki-dex-faq","permalink":"/docs/tools/dexs/funki-dex-faq","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tools/dexs/funki-dex-faq.md","tags":[],"version":"current","lastUpdatedAt":1734600716000,"frontMatter":{"title":"Funki DEX-FAQ","slug":"/tools/dexs/funki-dex-faq","order":"6.5.2","description":"An FAQ for Funki DEX, detailing its features, trading capabilities, liquidity provision, token swaps, security audits, and guidelines for users.","keywords":["Funki DEX","FAQ","frequently asked questions","decentralized exchange","token swaps","liquidity pools","UniswapV3","cryptocurrency trading","DeFi","smart contracts","security audits","trading fees"]},"sidebar":"docSidebar","previous":{"title":"Funki DEX","permalink":"/docs/tools/dexs/funki-dex"},"next":{"title":"Onramps","permalink":"/docs/tools/onramps"}}');var t=s(1085),r=s(1184);const o={title:"Funki DEX-FAQ",slug:"/tools/dexs/funki-dex-faq",order:"6.5.2",description:"An FAQ for Funki DEX, detailing its features, trading capabilities, liquidity provision, token swaps, security audits, and guidelines for users.",keywords:["Funki DEX","FAQ","frequently asked questions","decentralized exchange","token swaps","liquidity pools","UniswapV3","cryptocurrency trading","DeFi","smart contracts","security audits","trading fees"]},a=void 0,l={},c=[{value:"General",id:"general",level:2},{value:"1. What is FUNKI Swap?",id:"1-what-is-funki-swap",level:3},{value:"FUNKI DEX can save swappers money in the following ways:",id:"funki-dex-can-save-swappers-money-in-the-following-ways",level:3},{value:"2. Connected Wallets on Funki Swap - Security Measures",id:"2-connected-wallets-on-funki-swap---security-measures",level:3},{value:"Best Practices for Staying Safe",id:"best-practices-for-staying-safe",level:3},{value:"3. Who uses the FUNKI protocol?",id:"3-who-uses-the-funki-protocol",level:3},{value:"a. Liquidity Providers:",id:"a-liquidity-providers",level:3},{value:"Different types of LP:",id:"different-types-of-lp",level:3},{value:"b. Traders",id:"b-traders",level:3},{value:"c. Developers",id:"c-developers",level:3},{value:"4. What are FUNKI Swap\u2019s fees?",id:"4-what-are-funki-swaps-fees",level:3},{value:"5. Supported Token List",id:"5-supported-token-list",level:3},{value:"6. Unsupported Token and NFT Policy",id:"6-unsupported-token-and-nft-policy",level:3},{value:"a. Asset blocking policy",id:"a-asset-blocking-policy",level:3},{value:"b. Ways that Access can be Restricted on FUNKI Interfaces",id:"b-ways-that-access-can-be-restricted-on-funki-interfaces",level:3},{value:"c. Criteria for Restricting Access on FUNKI Interfaces",id:"c-criteria-for-restricting-access-on-funki-interfaces",level:3},{value:"7. How to initiate an appeal request",id:"7-how-to-initiate-an-appeal-request",level:3},{value:"8. Can I change slippage when using FUNKI Swap?",id:"8-can-i-change-slippage-when-using-funki-swap",level:3},{value:"9. How to swap on FUNKI Swap",id:"9-how-to-swap-on-funki-swap",level:3},{value:"10. Is there a swap minimum for a FUNKI DEX transaction?",id:"10-is-there-a-swap-minimum-for-a-funki-dex-transaction",level:3},{value:"11. Why can my swap not be filled?",id:"11-why-can-my-swap-not-be-filled",level:3},{value:"12. Why did my swap expire?",id:"12-why-did-my-swap-expire",level:3},{value:"13. How to add liquidity to FUNKI",id:"13-how-to-add-liquidity-to-funki",level:3},{value:"14. How to remove liquidity from FUNKI",id:"14-how-to-remove-liquidity-from-funki",level:3},{value:"15. How to collect fees from a liquidity pool on FUNKI",id:"15-how-to-collect-fees-from-a-liquidity-pool-on-funki",level:3}];function d(e){const n={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"general",children:"General"}),"\n",(0,t.jsx)(n.h3,{id:"1-what-is-funki-swap",children:(0,t.jsx)(n.strong,{children:"1. What is FUNKI Swap?"})}),"\n",(0,t.jsx)(n.p,{children:"FUNKI Swap is a new permissionless, open source (GPL), auction-based protocol for trading across AMMs and other liquidity sources. FUNKI Swap is built based on Uniswap protocol."}),"\n",(0,t.jsx)(n.p,{children:"FUNKI Swap is available on FUNKI for Funkichain (EVM) only and will be expanding to other chains in the future"}),"\n",(0,t.jsx)(n.h3,{id:"funki-dex-can-save-swappers-money-in-the-following-ways",children:(0,t.jsx)(n.strong,{children:"FUNKI DEX can save swappers money in the following ways:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Better prices by aggregating liquidity sources"}),"\n",(0,t.jsxs)(n.li,{children:["Swapping without\xa0",(0,t.jsx)(n.a,{href:"https://support.uniswap.org/hc/en-us/articles/8370337377805",children:"network costs"})]}),"\n",(0,t.jsxs)(n.li,{children:["Protection against\xa0",(0,t.jsx)(n.a,{href:"https://coinmarketcap.com/alexandria/glossary/front-running",children:"MEV attacks"}),"\xa0(front-running)"]}),"\n",(0,t.jsxs)(n.li,{children:["No\xa0",(0,t.jsx)(n.a,{href:"https://support.uniswap.org/hc/en-us/articles/8370337377805",children:"network costs"}),"\xa0for failed transactions"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"2-connected-wallets-on-funki-swap---security-measures",children:(0,t.jsx)(n.strong,{children:"2. Connected Wallets on Funki Swap - Security Measures"})}),"\n",(0,t.jsx)(n.p,{children:"The Wallets connected on FUNKI Swap are self-custody wallets. They gives you full control over your digital assets, but also means you're responsible for safeguarding your recovery phrase, verifying transactions, and protecting yourself from scams. FUNKI cannot reverse transactions or recover funds on your behalf."}),"\n",(0,t.jsx)(n.p,{children:"We are supporting some wallets: Metamask, Wallet Connect, \u2026"}),"\n",(0,t.jsx)(n.h3,{id:"best-practices-for-staying-safe",children:(0,t.jsx)(n.strong,{children:"Best Practices for Staying Safe"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Never share your private keys or recovery phrase with anyone."}),"\n",(0,t.jsx)(n.li,{children:"Double-check all transaction details before signing."}),"\n",(0,t.jsx)(n.li,{children:"Be wary of unsolicited offers or requests involving your crypto."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"3-who-uses-the-funki-protocol",children:(0,t.jsx)(n.strong,{children:"3. Who uses the FUNKI protocol?"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"The FUNKI ecosystem includes three types of users: Liquidity Providers, Traders, and Developers."})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Liquidity Providers (LPs)"}),": People who provide their crypto assets to help with trading."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Traders:"}),"\xa0People who swap one token for another."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Developers"}),": People who work with FUNKI smart contracts to power new and exciting experiences."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"In total, interactions between these classes create a positive feedback loop.\xa0 They are the fuel that our digital economies need to define a common language. This common language allows users to pool and trade tokens."}),"\n",(0,t.jsx)(n.h3,{id:"a-liquidity-providers",children:(0,t.jsx)(n.strong,{children:"a. Liquidity Providers:"})}),"\n",(0,t.jsx)(n.p,{children:"Liquidity providers, or LPs, provide ERC-20 tokens to FUNKI liquidity pools. Large pools generate higher-volume trades with better pricing than smaller pools."}),"\n",(0,t.jsx)(n.p,{children:"Hence LPs play the very important role of providing liquidity for traders. In return, LPs earn a fee\xa0on every trade in the pool, split pro rata across LPs of that pool."}),"\n",(0,t.jsx)(n.h3,{id:""}),"\n",(0,t.jsx)(n.h3,{id:"different-types-of-lp",children:(0,t.jsx)(n.strong,{children:"Different types of LP:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Passive LPs:"}),"\xa0token holders who wish to invest their assets to accumulate trading fees. This can generate passive income."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Professional LPs"}),": focus on market making as their primary strategy. They develop tools and ways of tracking their liquidity positions across different projects."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"DeFi Pioneers"}),": explore complex liquidity provision interactions.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Examples include incentivized liquidity, liquidity as collateral, and other experimental strategies. The FUNKI protocol is perfect for projects to experiment with these kinds of ideas."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Token Projects"}),": sometimes choose to become LPs to create a liquid market for their token. This allows users a simple way to buy and sell tokens."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"b-traders",children:(0,t.jsx)(n.strong,{children:"b. Traders"})}),"\n",(0,t.jsx)(n.p,{children:"There are a several categories of traders in the protocol ecosystem:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Speculators"}),": individuals who use various community tools and products to swap tokens."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Arbitrage Bots:"}),"\xa0These are our profit seeking bots! They compare prices across different platforms to find any competitive advantage. These bots actually help keep prices fair and equal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"dapp Users:"}),"\xa0Individuals who buy tokens from the FUNKI protocol. They later trade these tokens in other applications on the Ethereum network."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Smart contracts:"}),"\xa0execute trades on the protocol by implementing swap functionality. These products include DEX aggregators to custom Solidity scripts."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"In all cases, trades are subject to the same flat fee for trading on the protocol. Each is important for increasing the accuracy of prices and incentivizing liquidity."}),"\n",(0,t.jsx)(n.h3,{id:"c-developers",children:(0,t.jsx)(n.strong,{children:"c. Developers"})}),"\n",(0,t.jsx)(n.p,{children:"Developers build apps and services on top of the FUNKI protocol. There are too many to count across the Ethereum ecosystem, but some examples include:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["FUNKI is completely\xa0",(0,t.jsx)(n.a,{href:"https://github.com/Uniswap/",children:"open-source"}),". Countless developers have launched their own front-ends to interact with the FUNKI protocol. You can find FUNKI functions in most of the major DeFi dashboard projects. There are also many FUNKI protocol tools built by the community."]}),"\n",(0,t.jsx)(n.li,{children:"Wallets can integrate swapping and liquidity functionality as a core offering."}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://www.lcx.com/role-of-dex-aggregators-in-defi/#:~:text=DEX%20aggregators%20are%20financial%20protocols,an%20Ethereum%2Dbased%20DEX%20aggregator.",children:"DEX aggregators"}),")\xa0pull liquidity from several liquidity protocols. This allows them to offer traders the best available prices. The Uniswap protocol is the biggest single decentralized liquidity source for these projects."]}),"\n",(0,t.jsxs)(n.li,{children:["Smart contract developers can invent new tools and experiment with other various ideas. Examples include projects like\xa0",(0,t.jsx)(n.a,{href:"https://unisocks.exchange/",children:"Unisocks"}),"\xa0or\xa0",(0,t.jsx)(n.a,{href:"https://zora.co/",children:"Zora"}),", but the possibilities are limitless!"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Many members of the FUNKI ecosystem take part in more than one of these roles. You can be a Liquidity Provider, Trader, and a Developer all at the same time!"}),"\n",(0,t.jsx)(n.h3,{id:"4-what-are-funki-swaps-fees",children:(0,t.jsx)(n.strong,{children:"4. What are FUNKI Swap\u2019s fees?"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Liquidity Provider Fee (LP Fee) is set by Liquidity Providers. There are 3 tiers:"}),"\n",(0,t.jsx)(n.li,{children:"0.05%"}),"\n",(0,t.jsx)(n.li,{children:"0.3%"}),"\n",(0,t.jsx)(n.li,{children:"1%"}),"\n",(0,t.jsx)(n.li,{children:"Protocol Fee/ Platform Fee"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"At the moment there are no protocol fees. However, it is possible for a 0.05% fee to be turned on in the future."}),"\n",(0,t.jsx)(n.h3,{id:"5-supported-token-list",children:(0,t.jsx)(n.strong,{children:"5. Supported Token List"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Currently, FUNKI Swap supports ETH, USDT, & SIPHER token only."}),"\n",(0,t.jsx)(n.li,{children:"We will support more tokens in the near future"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"6-unsupported-token-and-nft-policy",children:(0,t.jsx)(n.strong,{children:"6. Unsupported Token and NFT Policy"})}),"\n",(0,t.jsx)(n.h3,{id:"a-asset-blocking-policy",children:(0,t.jsx)(n.strong,{children:"a. Asset blocking policy"})}),"\n",(0,t.jsx)(n.p,{children:"The FUNKI Protocol is a self-executing, permissionless, decentralized series of smart contracts that cannot be changed by anyone."}),"\n",(0,t.jsx)(n.p,{children:"FUNKI maintains one of many ways to interact with the Protocol, and as a company based in the United States is subject to certain laws and regulations."}),"\n",(0,t.jsx)(n.p,{children:"As such, there may be certain circumstances under which Labs blocks access to certain products through our own interfaces."}),"\n",(0,t.jsx)(n.h3,{id:"b-ways-that-access-can-be-restricted-on-funki-interfaces",children:(0,t.jsx)(n.strong,{children:"b. Ways that Access can be Restricted on FUNKI Interfaces"})}),"\n",(0,t.jsx)(n.p,{children:"Blocks may be applied in two ways:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["We can block\xa0",(0,t.jsx)(n.em,{children:"specific token contracts"}),"\xa0by adding them to the Unsupported Tokens List. If a token contract is blocked:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Any user viewing the corresponding token info page should see a message that the token is not supported; and"}),"\n",(0,t.jsx)(n.li,{children:"Interactions (including both direct user actions and routing) with any liquidity pool including the blocked token should be disabled."}),"\n",(0,t.jsx)(n.li,{children:"Wallet users may still send and receive unsupported tokens."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["We can also block\xa0",(0,t.jsx)(n.em,{children:"individual addresses"}),". If a user attempts to connect or use a blocked address, all actions that would modify chain state are disabled. This\xa0",(0,t.jsx)(n.a,{href:"https://support.uniswap.org/hc/en-us/articles/8671777747597-Address-Screening-Guide",children:"type of block"}),"\xa0will generally be applied on the basis of sanctions lists or other third-party screening."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Blocking criteria will be identical across all our products (e.g., web, wallet)."}),"\n",(0,t.jsx)(n.h3,{id:"c-criteria-for-restricting-access-on-funki-interfaces",children:(0,t.jsx)(n.strong,{children:"c. Criteria for Restricting Access on FUNKI Interfaces"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["We\xa0",(0,t.jsx)(n.em,{children:"will"}),"\xa0block token contracts for four main reasons:"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Legal and regulatory requirements. An U.S. agency settlement or court judgment against the token\u2019s issuer finds that the tokens/NFTs are regulated financial instruments (e.g., securities or derivatives) when traded in secondary transactions;\xa0or otherwise, upon internal legal review, and consultation with counsel; Fraud allegations. A major financial or criminal regulator files fraud allegations against the issuer; Intellectual property claims. A holder of intellectual property serves us with notice of plausible infringement of (i) a copyright (subject to notice and takedown provisions of the DMCA), or (ii) a trademark (not subject to the DMCA and its established counter-notice procedures), or (iii) the publicity rights of a third party (beyond the mere usage of a common name, and again not subject to the DMCA); or Risks to users. We believe there are technical, fraud, or other risks that could significantly affect user safety."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["We\xa0",(0,t.jsx)(n.em,{children:"will"}),"\xa0block individual or smart contract addresses that are subject to U.S. government sanctions or associated with certain types of illegal activity."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["We\xa0",(0,t.jsx)(n.em,{children:"may"}),"\xa0block individual or smart contract addresses for any other reason at our discretion. For example, we might have reason to believe that an address is associated with fraud, theft, or market manipulation, or that a smart contract has unacceptable security vulnerabilities."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"7-how-to-initiate-an-appeal-request",children:(0,t.jsx)(n.strong,{children:"7. How to initiate an appeal request"})}),"\n",(0,t.jsx)(n.p,{children:"To initiate an appeal for an unsupported asset on FUNKI interface, please follow these steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Email to\xa0",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"hello@funkichain.com"})}),"\xa0with \u201cAppeal request\u201d in the subject line."]}),"\n",(0,t.jsx)(n.li,{children:"Include the name of the asset, contract address, and reason you\u2019re appealing."}),"\n",(0,t.jsx)(n.li,{children:"FUNKI compliance team will acknowledge receipt of the request within xx business day."}),"\n",(0,t.jsx)(n.li,{children:"FUNKI will internally review appeal requests on a case-by-case basis."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"8-can-i-change-slippage-when-using-funki-swap",children:(0,t.jsx)(n.strong,{children:"8. Can I change slippage when using FUNKI Swap?"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Screenshot_2024-09-06_at_14.17.59.png",src:s(2728).A+"",width:"477",height:"304"})}),"\n",(0,t.jsx)(n.p,{children:"Slippage can be adjusted for swaps using FUNKI Swap"}),"\n",(0,t.jsx)(n.h3,{id:"9-how-to-swap-on-funki-swap",children:(0,t.jsx)(n.strong,{children:"9. How to swap on FUNKI Swap"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Step 1 \u2014 Connect your wallet"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Be sure your wallet supports all Chains & Funki Chain mainnet you will be bridging onto."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"6163883f-4a86-4ed9-b259-46227aa84fa5.png",src:s(2787).A+"",width:"1063",height:"755"})}),"\n",(0,t.jsx)(n.p,{children:"Add Funki Chain Mainnet to your Wallet"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Network name:\xa0Funki Mainnet"}),"\n",(0,t.jsx)(n.li,{children:"Network RPC URL:"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"https://rpc-mainnet.funkichain.com/",children:"https://rpc-mainnet.funkichain.com"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Chain ID:\xa033979"}),"\n",(0,t.jsx)(n.li,{children:"Currency symbol:\xa0ETH"}),"\n",(0,t.jsx)(n.li,{children:"Block explorer URL:"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"https://funkiscan.io/",children:"https://funkiscan.io/"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Step 2: Select tokens & specify the amount to be swapped"})}),"\n",(0,t.jsx)(n.p,{children:"This is the on-chain swap. Currently, we just support users to swap SIPHER, ETH, USDT, USDC on Funki Swap"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Screenshot_2024-12-18_at_09.14.36.png",src:s(8463).A+"",width:"2748",height:"1364"})}),"\n",(0,t.jsx)(n.p,{children:"And then specify the amount you would like to swap. An estimate of the amount returned should appear in the quote field."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Step 3"})," - ",(0,t.jsx)(n.strong,{children:"Review the swap details, and then select \u201cConfirm Swap\u201d."})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Step 4 - Approve Spending"})}),"\n",(0,t.jsx)(n.p,{children:"In your wallet, approve spending for the token you are swapping."}),"\n",(0,t.jsx)(n.p,{children:"This will require a network cost. If this is your first time swapping the token with the Uniswap protocol, then you\u2019ll need\xa0to approve the token in order to trade it."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Step 5 - In your wallet, sign the message. This transaction will not require a network cost."})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Step 6 - In your wallet, confirm the swap."})}),"\n",(0,t.jsx)(n.p,{children:"This transaction requires network costs."}),"\n",(0,t.jsx)(n.p,{children:"Once confirmed, your swap is submitted to the blockchain and is pending."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Screenshot_2024-12-18_at_09.21.45.png",src:s(4725).A+"",width:"1390",height:"1206"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"You will see \u201cSwap success\u201d and a green checkmark on screen when the transaction is successfully completed."})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Screenshot_2024-12-18_at_09.22.58.png",src:s(2758).A+"",width:"1622",height:"974"})}),"\n",(0,t.jsx)(n.h3,{id:"10-is-there-a-swap-minimum-for-a-funki-dex-transaction",children:(0,t.jsx)(n.strong,{children:"10. Is there a swap minimum for a FUNKI DEX transaction?"})}),"\n",(0,t.jsx)(n.p,{children:"No minimum has been set yet."}),"\n",(0,t.jsx)(n.h3,{id:"11-why-can-my-swap-not-be-filled",children:(0,t.jsx)(n.strong,{children:"11. Why can my swap not be filled?"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"A swap might not be filled for the following reasons:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"An error occurred while submitting the swap"}),"\n",(0,t.jsx)(n.li,{children:"An error occurred while signing the submission"}),"\n",(0,t.jsx)(n.li,{children:"A\xa0token approval may need to be\xa0revoked and approved again"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"There are no\xa0network costs charged when an unfilled or failed swap, so the swap can be submitted again."}),"\n",(0,t.jsx)(n.h3,{id:"12-why-did-my-swap-expire",children:(0,t.jsx)(n.strong,{children:"12. Why did my swap expire?"})}),"\n",(0,t.jsx)(n.p,{children:"Swaps expire when swap is not filled within the designated time frame."}),"\n",(0,t.jsx)(n.p,{children:"The deadline for a FUNKI DEX swap to be filled is 1 minute. If no filler fills the swap by then the swap will expire."}),"\n",(0,t.jsx)(n.p,{children:"There are no\xa0network costs charged when an unfilled or failed swap, so the swap can be submitted again."}),"\n",(0,t.jsx)(n.h3,{id:"13-how-to-add-liquidity-to-funki",children:(0,t.jsx)(n.strong,{children:"13. How to add liquidity to FUNKI"})}),"\n",(0,t.jsx)(n.p,{children:"FUNKI allows you to concentrate your liquidity position within a custom price range."}),"\n",(0,t.jsx)(n.p,{children:"You can create a pair and pool for these supported tokens: ETH, WETH, USDT, USDC, SIPHER"}),"\n",(0,t.jsx)(n.h3,{id:"14-how-to-remove-liquidity-from-funki",children:(0,t.jsx)(n.strong,{children:"14. How to remove liquidity from FUNKI"})}),"\n",(0,t.jsx)(n.p,{children:"When removing liquidity from FUNKI, you will remove your liquidity position and collect earned fees."}),"\n",(0,t.jsx)(n.p,{children:"Or, you only collect liquidity provider fees earned, without removing liquidity."}),"\n",(0,t.jsx)(n.h3,{id:"15-how-to-collect-fees-from-a-liquidity-pool-on-funki",children:(0,t.jsx)(n.strong,{children:"15. How to collect fees from a liquidity pool on FUNKI"})}),"\n",(0,t.jsx)(n.p,{children:"FUNKI allows fees earned to be collected from the liquidity pool without removing liquidity."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Screenshot_2024-09-06_at_16.39.36.png",src:s(1991).A+"",width:"510",height:"778"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Screenshot_2024-09-06_at_16.39.57.png",src:s(6212).A+"",width:"1220",height:"1062"})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},2787:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/6163883f-4a86-4ed9-b259-46227aa84fa5-0e650fe8c868e080079a72e2f374604e.png"},2728:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/Screenshot_2024-09-06_at_14.17.59-83ad33543798e5312c99b73fc26186a5.png"},1991:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/Screenshot_2024-09-06_at_16.39.36-cb3b9f7d3986562a0dece064a0f3a35e.png"},6212:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/Screenshot_2024-09-06_at_16.39.57-4f373b7329c39bdec1f53ca70b069c62.png"},8463:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/Screenshot_2024-12-18_at_09.14.36-09c84f9024222041aab9a4f41d768789.png"},4725:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/Screenshot_2024-12-18_at_09.21.45-7b8de09a3d161c7c917e93e9e1cdbcd3.png"},2758:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/Screenshot_2024-12-18_at_09.22.58-26ba362ceb3ceec2b2d856c37eccb196.png"},1184:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var i=s(4041);const t={},r=i.createContext(t);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9ce57062.dbba7209.js b/assets/js/9ce57062.dbba7209.js deleted file mode 100644 index 4527c03..0000000 --- a/assets/js/9ce57062.dbba7209.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[6424],{683:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>o});const s=JSON.parse('{"id":"tools/bridges/bridges-faq","title":"Bridge FAQ","description":"An FAQ for Funki Bridge, detailing its features, usage, compatibility with Ethereum wallets, transaction processes, fees, benefits, risks, and guidelines for new users.","source":"@site/docs/tools/bridges/bridges-faq.md","sourceDirName":"tools/bridges","slug":"/tools/bridges/bridges-faq","permalink":"/docs/tools/bridges/bridges-faq","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tools/bridges/bridges-faq.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Bridge FAQ","slug":"/tools/bridges/bridges-faq","order":"6.7.1","description":"An FAQ for Funki Bridge, detailing its features, usage, compatibility with Ethereum wallets, transaction processes, fees, benefits, risks, and guidelines for new users.","keywords":["Funki Bridge","FAQ","frequently asked questions","bridging to Funki","how to bridge to Funki","Ethereum","blockchain technology","digital asset transfer","cryptocurrency","wallet compatibility","transaction security","network fees"]},"sidebar":"docSidebar","previous":{"title":"Onramps","permalink":"/docs/tools/onramps"},"next":{"title":"Mainnet","permalink":"/docs/tools/bridges/mainnet"}}');var i=t(1085),a=t(1184);const r={title:"Bridge FAQ",slug:"/tools/bridges/bridges-faq",order:"6.7.1",description:"An FAQ for Funki Bridge, detailing its features, usage, compatibility with Ethereum wallets, transaction processes, fees, benefits, risks, and guidelines for new users.",keywords:["Funki Bridge","FAQ","frequently asked questions","bridging to Funki","how to bridge to Funki","Ethereum","blockchain technology","digital asset transfer","cryptocurrency","wallet compatibility","transaction security","network fees"]},d=void 0,c={},o=[];function l(e){const n={a:"a",em:"em",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"What is Funki Native Bridge"})}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Funki Native Bridge is only available for bridging SIPHER, USDT, ETH from Ethereum mainnet to Funki Chain."}),"\n",(0,i.jsx)(n.li,{children:"Native bridge is a great option for moving larger token amounts. But when moving small amounts, the gas costs for the transactions can sometimes add up, making it too expensive. For bridging smaller amounts we recommend choosing a different route, either Relay or Superbridge if available."}),"\n",(0,i.jsx)(n.li,{children:"When using Native Bridge, a minimum 7-day challenge period is required to withdraw funds to Ethereum."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Here\u2019s some of the benefits of using the Native Bridge"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"You get the canonical, native asset on the destination chain."}),"\n",(0,i.jsx)(n.li,{children:"There are no extra fees imposed"}),"\n",(0,i.jsx)(n.li,{children:"It\u2019s generally the most secure form of bridging, because by using the Native Bridge you have the same trust assumptions as using the rollup itself"}),"\n"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Native Bridge Fees & charges"}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We do not add extra fees for Native Bridge."}),"\n",(0,i.jsx)(n.li,{children:"However, normal network fees (gas fees) still apply."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Please note:"})}),"\n",(0,i.jsx)(n.p,{children:"Bridging from Ethereum mainnet to a Settlement Chain (like Funki) requires multiple transactions. So network fees can add up. When bridging smaller amounts, it might be worth considering an alternate bridge route to save on network fees."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"How to bridge assets from Ethereum mainnet to Funki Chain on Funki Native Bridge (Deposit)"})}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Step 1 \u2014 Connect your wallet"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Be sure your wallet supports all Chains & Funki Chain mainnet you will be bridging onto."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/c34f5619-7aa4-46a0-831a-6c318431b0fe/Screenshot_2024-12-17_at_10.40.05.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=9c140d83b6de48567eec3ba6d8bd1aeb53dd216eec0489d044d55cb8a8243b3f&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_10.40.05.png"})}),"\n",(0,i.jsx)(n.p,{children:"Add Funki Chain Mainnet to your Wallet"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Network name:\xa0Funki Mainnet"}),"\n",(0,i.jsx)(n.li,{children:"Network RPC URL:"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://rpc-mainnet.funkichain.com/",children:"https://rpc-mainnet.funkichain.com"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Chain ID:\xa033979"}),"\n",(0,i.jsx)(n.li,{children:"Currency symbol:\xa0ETH"}),"\n",(0,i.jsx)(n.li,{children:"Block explorer URL:"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://funkiscan.io/",children:"https://funkiscan.io/"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/43393392-c204-4c2a-ba84-56f86e3a3537/Screenshot_2024-12-17_at_10.40.42.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=b7d349b9a0d829f7136ecabb39cedd3073729aa718137a83a5e4bc8f8728e8bd&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_10.40.42.png"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/97e96905-824e-4da1-a9f2-0ef028c061a8/Screenshot_2024-12-17_at_10.40.23.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=68f781f9bc8b01d8457247a14401bb65a26ba776f3ed7d270c1e36bf32c1c816&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_10.40.23.png"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Step 2 \u2014 Select a token to bridge"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Select the token you wish to bridge, and enter the amount."}),"\n",(0,i.jsx)(n.p,{children:"Funki Native Bridge is only available for bridging SIPHER, USDT, ETH from Ethereum mainnet to Funki Chain."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/c2641479-95a2-4e13-923c-eae5546a8507/Screenshot_2024-12-17_at_10.46.35.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=d66916b415c928c72850519820eb1b2238c4d477c2db5d74e8963dd6834626f5&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_10.46.35.png"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Step 3 \u2014 Review your bridge"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Tap the ",(0,i.jsx)(n.em,{children:"Review Bridge"})," button and review your bridge details."]}),"\n",(0,i.jsx)(n.p,{children:"Please note the approximate transaction cost, and bridging time."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/8b32f94b-e428-4652-90b4-c7ad3de1e31a/Screenshot_2024-12-17_at_10.49.26.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=0d493d28e9470cd65e9ab51342e4c6f3195c77309e2664dbf60cdafde98b5ac0&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_10.49.26.png"})}),"\n",(0,i.jsx)(n.p,{children:"To proceed check the boxes indicating you understand the following:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The approximate time that the bridge will take."}),"\n",(0,i.jsx)(n.li,{children:"That the indicated network fees for each step are approximate and are subject to change depending on network activity."}),"\n",(0,i.jsx)(n.li,{children:"That you cannot cancel or reverse a bridge once it has been started."}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Step 4 \u2014 Start your bridge"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Depending on the token, you may need to approve it first. This is so the bridge contract can use your funds for bridging. Note that we only request an approval for the amount you're bridging, this helps secure your wallet in case the bridge contracts are compromised."}),"\n",(0,i.jsx)(n.p,{children:"Next, start your bridge and continue with the transaction in your wallet."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/67dde86a-6ee4-4ebc-9fac-4ac368333614/Screenshot_2024-12-17_at_10.50.09.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=9f1e41c6ce42a0ada4232457a76308c02bd2e597657d8c920c46b253941ce716&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_10.50.09.png"})}),"\n",(0,i.jsx)(n.p,{children:"Once the transaction is successful, all you need to do is wait a for approximately the indicated time and your tokens will arrive on the chain! Each Rollup differs in how long this takes, but generally we see these bridges clearing in 2 to 10 minutes."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/ea17d7d1-6f56-4a20-a986-2ca76174c695/Screenshot_2024-12-17_at_11.13.22.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=c68da51a2b9eab8d52fa6700ae6b8c1de83a4a5dd391e6cba24d736b0b368333&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_11.13.22.png"})}),"\n",(0,i.jsx)(n.p,{children:"You can view your bridge progress from the activity screen."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/9afc9028-339a-49a1-9690-2b5a301f811f/Screenshot_2024-12-17_at_11.15.45.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=b36d0bafc461f3b33308ce80b34ae00d674df67fc4ddc75026f7b6294e2c8f11&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_11.15.45.png"})}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"How to bridge assets from Funki Chain to Ethereum Mainnet on Funki Native Bridge (withdraw)"})}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Bridging off assets from Funki to Ethereum Mainnet on Funki Native Bridge is a multi-step process and requires multiple transactions. There is also a significant wait period (usually 7 days)."}),"\n",(0,i.jsx)(n.li,{children:"Please note:\nNative bridge is a great option for moving larger token amounts. But when moving small amounts, the gas costs for the transactions can sometimes add up, making it too expensive. For bridging smaller amounts we recommend choosing a different route, like Relay if available."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Step 1 \u2014 Connect your wallet"})}),"\n",(0,i.jsx)(n.p,{children:"Be sure your wallet supports all Chains & Funki Chain mainnet you will be bridging onto."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/c34f5619-7aa4-46a0-831a-6c318431b0fe/Screenshot_2024-12-17_at_10.40.05.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=9c140d83b6de48567eec3ba6d8bd1aeb53dd216eec0489d044d55cb8a8243b3f&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_10.40.05.png"})}),"\n",(0,i.jsx)(n.p,{children:"Add Funki Chain Mainnet to your Wallet"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Network name:\xa0Funki Mainnet"}),"\n",(0,i.jsx)(n.li,{children:"Network RPC URL:"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://rpc-mainnet.funkichain.com/",children:"https://rpc-mainnet.funkichain.com"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Chain ID:\xa033979"}),"\n",(0,i.jsx)(n.li,{children:"Currency symbol:\xa0ETH"}),"\n",(0,i.jsx)(n.li,{children:"Block explorer URL:"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://funkiscan.io/",children:"https://funkiscan.io/"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/43393392-c204-4c2a-ba84-56f86e3a3537/Screenshot_2024-12-17_at_10.40.42.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=b7d349b9a0d829f7136ecabb39cedd3073729aa718137a83a5e4bc8f8728e8bd&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_10.40.42.png"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/97e96905-824e-4da1-a9f2-0ef028c061a8/Screenshot_2024-12-17_at_10.40.23.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=68f781f9bc8b01d8457247a14401bb65a26ba776f3ed7d270c1e36bf32c1c816&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_10.40.23.png"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Step 2 \u2014 Select a token to bridge"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Select the token you wish to bridge, and enter the amount."}),"\n",(0,i.jsx)(n.p,{children:"Funki Native Bridge is only available for bridging SIPHER, USDT, ETH from Ethereum mainnet to Funki Chain and back."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/f7999994-2542-49bc-b6a8-64374dfd95b2/Screenshot_2024-12-17_at_11.53.47.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142222Z&X-Amz-Expires=3600&X-Amz-Signature=065d175986c2055b92aedde012a0dd9e12aeaa2e847315f5b879ca18498779af&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_11.53.47.png"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/99fe586f-672d-4d21-ba57-d8b6df773563/Screenshot_2024-12-17_at_11.54.48.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142223Z&X-Amz-Expires=3600&X-Amz-Signature=d0c544e0c8f787bb520c4b9ce73b5c810c4a5895624185ff369a95d59a40015d&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_11.54.48.png"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/c03e53be-f11d-4ca7-9dce-7420f4275f74/Screenshot_2024-12-17_at_11.55.24.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142220Z&X-Amz-Expires=3600&X-Amz-Signature=c23c6bf49e75efce2f236f269f6137cf3213e295014c122ed7cca092674e2725&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_11.55.24.png"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Step 3 - Check the process in the Activity log"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/0ecc3b90-4700-4e10-a93a-e00165e13fe6/Screenshot_2024-12-17_at_12.06.37.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142223Z&X-Amz-Expires=3600&X-Amz-Signature=c96d9af2ce0b669beff5043aa55b6073092a902eb8921e67abffac7d09af232a&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_12.06.37.png"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://prod-files-secure.s3.us-west-2.amazonaws.com/a29d0ad0-5c40-46dc-afd9-2ba0cc23a350/bed80a25-7f2d-4002-add4-640311b59ee3/Screenshot_2024-12-17_at_11.55.57.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241217T142223Z&X-Amz-Expires=3600&X-Amz-Signature=bcd13e0119bbc6bc530b6e9e5756f7777f77fb465aeeb87eb737859d41e7790e&X-Amz-SignedHeaders=host&x-id=GetObject",alt:"Screenshot_2024-12-17_at_11.55.57.png"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Wait for the Challenge Period"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"The Challenge Period is a security measure built into the Native Bridge contracts for Optimism and other L2s based on Optimism like Funki. You will need to wait for the designated period of time before continuing with your bridge. The Challenge Period usually takes 7 days."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Please check this progress bar often. There are some stages need your action to execute."}),"\n",(0,i.jsx)(n.p,{children:"1: Waiting Prove"}),"\n",(0,i.jsx)(n.p,{children:"2:\xa0Ready to\xa0Prove"}),"\n",(0,i.jsx)(n.p,{children:"3:\xa0Proved"}),"\n",(0,i.jsx)(n.p,{children:"4:\xa0Waiting Finalize"}),"\n",(0,i.jsx)(n.p,{children:"5:\xa0Finalized"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Alternative bridges"})}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"You can use Superbridge - a powered the Native Bridge contracts for official Superchain rollup blockchains to bridge assets from other L2s to Funki"}),"\n",(0,i.jsx)(n.li,{children:"Or you can use Relay - a instant, low-cost bridging and cross-chain execution to bridge ETH, USDT, $SIPHER from Ethereum mainnet and Solana & other L2s to Funki"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"*** These are third-party service providers is for your convenience.\nFunki has no responsibility for their operation. DYOR"})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},1184:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>d});var s=t(4041);const i={},a=s.createContext(i);function r(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c0bee978.d2ea308b.js b/assets/js/c0bee978.d2ea308b.js new file mode 100644 index 0000000..882e226 --- /dev/null +++ b/assets/js/c0bee978.d2ea308b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[3026],{7686:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"tools/bridges/funki-bridge-faq","title":"Funki Bridge - FAQ","description":"An FAQ for Funki Bridge, detailing its features, usage, compatibility with Ethereum wallets, transaction processes, fees, benefits, risks, and guidelines for new users.","source":"@site/docs/tools/bridges/funki-bridge-faq.md","sourceDirName":"tools/bridges","slug":"/tools/bridges/funki-bridges-faq","permalink":"/docs/tools/bridges/funki-bridges-faq","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tools/bridges/funki-bridge-faq.md","tags":[],"version":"current","lastUpdatedAt":1734600716000,"frontMatter":{"title":"Funki Bridge - FAQ","slug":"/tools/bridges/funki-bridges-faq","order":"6.7.1","description":"An FAQ for Funki Bridge, detailing its features, usage, compatibility with Ethereum wallets, transaction processes, fees, benefits, risks, and guidelines for new users.","keywords":["Funki Bridge","FAQ","frequently asked questions","bridging to Funki","how to bridge to Funki","Ethereum","blockchain technology","digital asset transfer","cryptocurrency","wallet compatibility","transaction security","network fees"]},"sidebar":"docSidebar","previous":{"title":"Onramps","permalink":"/docs/tools/onramps"},"next":{"title":"Mainnet","permalink":"/docs/tools/bridges/mainnet"}}');var s=i(1085),r=i(1184);const a={title:"Funki Bridge - FAQ",slug:"/tools/bridges/funki-bridges-faq",order:"6.7.1",description:"An FAQ for Funki Bridge, detailing its features, usage, compatibility with Ethereum wallets, transaction processes, fees, benefits, risks, and guidelines for new users.",keywords:["Funki Bridge","FAQ","frequently asked questions","bridging to Funki","how to bridge to Funki","Ethereum","blockchain technology","digital asset transfer","cryptocurrency","wallet compatibility","transaction security","network fees"]},o=void 0,d={},c=[{value:"1. What is Funki Native Bridge",id:"1-what-is-funki-native-bridge",level:3},{value:"2. Native Bridge Fees & charges",id:"2-native-bridge-fees--charges",level:3},{value:"3. How to bridge assets from Ethereum mainnet to Funki Chain on Funki Native Bridge (Deposit)",id:"3-how-to-bridge-assets-from-ethereum-mainnet-to-funki-chain-on-funki-native-bridge-deposit",level:3},{value:"4. How to bridge assets from Funki Chain to Ethereum Mainnet on Funki Native Bridge (withdraw)",id:"4-how-to-bridge-assets-from-funki-chain-to-ethereum-mainnet-on-funki-native-bridge-withdraw",level:3},{value:"5. Alternative bridges",id:"5-alternative-bridges",level:3}];function l(e){const n={a:"a",blockquote:"blockquote",em:"em",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h3,{id:"1-what-is-funki-native-bridge",children:(0,s.jsx)(n.strong,{children:"1. What is Funki Native Bridge"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Funki Native Bridge is only available for bridging SIPHER, USDT, ETH from Ethereum mainnet to Funki Chain."}),"\n",(0,s.jsx)(n.li,{children:"Native bridge is a great option for moving larger token amounts. But when moving small amounts, the gas costs for the transactions can sometimes add up, making it too expensive. For bridging smaller amounts we recommend choosing a different route, either Relay or Superbridge if available."}),"\n",(0,s.jsx)(n.li,{children:"When using Native Bridge, a minimum 7-day challenge period is required to withdraw funds to Ethereum."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Here\u2019s some of the benefits of using the Native Bridge"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"You get the canonical, native asset on the destination chain."}),"\n",(0,s.jsx)(n.li,{children:"There are no extra fees imposed"}),"\n",(0,s.jsx)(n.li,{children:"It\u2019s generally the most secure form of bridging, because by using the Native Bridge you have the same trust assumptions as using the rollup itself"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"2-native-bridge-fees--charges",children:"2. Native Bridge Fees & charges"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"We do not add extra fees for Native Bridge."}),"\n",(0,s.jsx)(n.li,{children:"However, normal network fees (gas fees) still apply."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Please note:"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Bridging from Ethereum mainnet to a Settlement Chain (like Funki) requires multiple transactions. So network fees can add up. When bridging smaller amounts, it might be worth considering an alternate bridge route to save on network fees."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"3-how-to-bridge-assets-from-ethereum-mainnet-to-funki-chain-on-funki-native-bridge-deposit",children:(0,s.jsx)(n.strong,{children:"3. How to bridge assets from Ethereum mainnet to Funki Chain on Funki Native Bridge (Deposit)"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Step 1 \u2014 Connect your wallet"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Be sure your wallet supports all Chains & Funki Chain mainnet you will be bridging onto."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_10.40.05.png",src:i(845).A+"",width:"2722",height:"1312"})}),"\n",(0,s.jsx)(n.p,{children:"Add Funki Chain Mainnet to your Wallet"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Network name:\xa0Funki Mainnet"}),"\n",(0,s.jsx)(n.li,{children:"Network RPC URL:"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://rpc-mainnet.funkichain.com/",children:"https://rpc-mainnet.funkichain.com"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Chain ID:\xa033979"}),"\n",(0,s.jsx)(n.li,{children:"Currency symbol:\xa0ETH"}),"\n",(0,s.jsx)(n.li,{children:"Block explorer URL:"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://funkiscan.io/",children:"https://funkiscan.io/"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_10.40.42.png",src:i(2238).A+"",width:"1192",height:"766"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_10.40.23.png",src:i(2350).A+"",width:"1112",height:"654"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Step 2 \u2014 Select a token to bridge"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Select the token you wish to bridge, and enter the amount."}),"\n",(0,s.jsx)(n.p,{children:"Funki Native Bridge is only available for bridging SIPHER, USDT, ETH from Ethereum mainnet to Funki Chain."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_10.46.35.png",src:i(8282).A+"",width:"2716",height:"1208"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Step 3 \u2014 Review your bridge"})}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Tap the ",(0,s.jsx)(n.em,{children:"Review Bridge"})," button and review your bridge details."]}),"\n",(0,s.jsx)(n.p,{children:"Please note the approximate transaction cost, and bridging time."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_10.49.26.png",src:i(8279).A+"",width:"1024",height:"1146"})}),"\n",(0,s.jsx)(n.p,{children:"To proceed check the boxes indicating you understand the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The approximate time that the bridge will take."}),"\n",(0,s.jsx)(n.li,{children:"That the indicated network fees for each step are approximate and are subject to change depending on network activity."}),"\n",(0,s.jsx)(n.li,{children:"That you cannot cancel or reverse a bridge once it has been started."}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Step 4 \u2014 Start your bridge"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Depending on the token, you may need to approve it first. This is so the bridge contract can use your funds for bridging. Note that we only request an approval for the amount you're bridging, this helps secure your wallet in case the bridge contracts are compromised."}),"\n",(0,s.jsx)(n.p,{children:"Next, start your bridge and continue with the transaction in your wallet."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_10.50.09.png",src:i(3624).A+"",width:"1114",height:"1458"})}),"\n",(0,s.jsx)(n.p,{children:"Once the transaction is successful, all you need to do is wait a for approximately the indicated time and your tokens will arrive on the chain! Each Rollup differs in how long this takes, but generally we see these bridges clearing in 2 to 10 minutes."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_11.13.22.png",src:i(2277).A+"",width:"967",height:"558"})}),"\n",(0,s.jsx)(n.p,{children:"You can view your bridge progress from the activity screen."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_11.15.45.png",src:i(1842).A+"",width:"992",height:"734"})}),"\n",(0,s.jsx)(n.h3,{id:"4-how-to-bridge-assets-from-funki-chain-to-ethereum-mainnet-on-funki-native-bridge-withdraw",children:(0,s.jsx)(n.strong,{children:"4. How to bridge assets from Funki Chain to Ethereum Mainnet on Funki Native Bridge (withdraw)"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Bridging off assets from Funki to Ethereum Mainnet on Funki Native Bridge is a multi-step process and requires multiple transactions. There is also a significant wait period (usually 7 days)."}),"\n",(0,s.jsx)(n.li,{children:"Please note:\nNative bridge is a great option for moving larger token amounts. But when moving small amounts, the gas costs for the transactions can sometimes add up, making it too expensive. For bridging smaller amounts we recommend choosing a different route, like Relay if available."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Step 1 \u2014 Connect your wallet"})}),"\n",(0,s.jsx)(n.p,{children:"Be sure your wallet supports all Chains & Funki Chain mainnet you will be bridging onto."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_10.40.05.png",src:i(845).A+"",width:"2722",height:"1312"})}),"\n",(0,s.jsx)(n.p,{children:"Add Funki Chain Mainnet to your Wallet"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Network name:\xa0Funki Mainnet"}),"\n",(0,s.jsxs)(n.li,{children:["Network RPC URL: ",(0,s.jsx)(n.a,{href:"https://rpc-mainnet.funkichain.com/",children:"https://rpc-mainnet.funkichain.com"})]}),"\n",(0,s.jsx)(n.li,{children:"Chain ID:\xa033979"}),"\n",(0,s.jsx)(n.li,{children:"Currency symbol:\xa0ETH"}),"\n",(0,s.jsxs)(n.li,{children:["Block explorer URL: ",(0,s.jsx)(n.a,{href:"https://funkiscan.io/",children:"https://funkiscan.io/"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_10.40.42.png",src:i(2238).A+"",width:"1192",height:"766"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_10.40.23.png",src:i(2350).A+"",width:"1112",height:"654"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Step 2 \u2014 Select a token to bridge"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Select the token you wish to bridge, and enter the amount."}),"\n",(0,s.jsx)(n.p,{children:"Funki Native Bridge is only available for bridging SIPHER, USDT, ETH from Ethereum mainnet to Funki Chain and back."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_11.53.47.png",src:i(6862).A+"",width:"432",height:"492"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_11.54.48.png",src:i(100).A+"",width:"420",height:"480"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_11.55.24.png",src:i(5085).A+"",width:"1102",height:"598"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Step 3 - Check the process in the Activity log"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_12.06.37.png",src:i(7914).A+"",width:"410",height:"378"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Screenshot_2024-12-17_at_11.55.57.png",src:i(6807).A+"",width:"1248",height:"642"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Wait for the Challenge Period"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Challenge Period is a security measure built into the Native Bridge contracts for Optimism and other L2s based on Optimism like Funki. You will need to wait for the designated period of time before continuing with your bridge. The Challenge Period usually takes 7 days."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Please check this progress bar often. There are some stages need your action to execute."}),"\n",(0,s.jsx)(n.p,{children:"1: Waiting Prove"}),"\n",(0,s.jsx)(n.p,{children:"2:\xa0Ready to\xa0Prove"}),"\n",(0,s.jsx)(n.p,{children:"3:\xa0Proved"}),"\n",(0,s.jsx)(n.p,{children:"4:\xa0Waiting Finalize"}),"\n",(0,s.jsx)(n.p,{children:"5:\xa0Finalized"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"5-alternative-bridges",children:(0,s.jsx)(n.strong,{children:"5. Alternative bridges"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"You can use Superbridge - a powered the Native Bridge contracts for official Superchain rollup blockchains to bridge assets from other L2s to Funki"}),"\n",(0,s.jsx)(n.li,{children:"Or you can use Relay - a instant, low-cost bridging and cross-chain execution to bridge ETH, USDT, $SIPHER from Ethereum mainnet and Solana & other L2s to Funki"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"*** These are third-party service providers is for your convenience.\nFunki has no responsibility for their operation. DYOR"})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},845:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_10.40.05-ed232ee1156e8a3da5013a46d89975fb.png"},2350:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_10.40.23-8726c0b48426d07f11b6cfe664eb6d8f.png"},2238:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_10.40.42-5bccbba9eda2463bc9c41e2358a425c2.png"},8282:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_10.46.35-201bcf483a89b07ce617a55aebcfe23e.png"},8279:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_10.49.26-c703c3395dd7a673a1fee8c7b04b1914.png"},3624:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_10.50.09-582ffcecc57db4bfa3e90cb51abc8a8b.png"},2277:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_11.13.22-011c91d2c3ad7991fea076aedc3dee64.png"},1842:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_11.15.45-3f9948cebb9fc5bca34013d0dd68a204.png"},6862:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_11.53.47-0d4e4c5dc197596db5d82cec341e4305.png"},100:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_11.54.48-efa405d42beced4613eb87c18920c215.png"},5085:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_11.55.24-b54691dfa3811fdf45e5c39b0cc83364.png"},6807:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_11.55.57-62a94d87ebae59703d54b38ce3d4de4e.png"},7914:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Screenshot_2024-12-17_at_12.06.37-7091554e8c233cf7faaf6badfdfbf734.png"},1184:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>o});var t=i(4041);const s={},r=t.createContext(s);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f79d90bb.1eaeebb6.js b/assets/js/f79d90bb.1eaeebb6.js new file mode 100644 index 0000000..929a66b --- /dev/null +++ b/assets/js/f79d90bb.1eaeebb6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[7990],{7:(o,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>r,toc:()=>p});const r=JSON.parse('{"id":"tools/onramps","title":"Onramps","description":"Documentation for fiat-to-crypto onramps for the Funki network.","source":"@site/docs/tools/onramps.md","sourceDirName":"tools","slug":"/tools/onramps","permalink":"/docs/tools/onramps","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tools/onramps.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Onramps","slug":"/tools/onramps","order":6.6,"description":"Documentation for fiat-to-crypto onramps for the Funki network.","keywords":["fiat-to-crypto onramps","crypto onramp","onramps","Funki","Funki network","cryptocurrency","ETH on Funki","payment gateway","payments","fiat to crypto","fiat","MoonPay","Onramp"]},"sidebar":"docSidebar","previous":{"title":"Funki DEX-FAQ","permalink":"/docs/tools/dexs/funki-dex-faq"},"next":{"title":"Funki Bridge - FAQ","permalink":"/docs/tools/bridges/funki-bridges-faq"}}');var e=n(1085),s=n(1184);const a={title:"Onramps",slug:"/tools/onramps",order:6.6,description:"Documentation for fiat-to-crypto onramps for the Funki network.",keywords:["fiat-to-crypto onramps","crypto onramp","onramps","Funki","Funki network","cryptocurrency","ETH on Funki","payment gateway","payments","fiat to crypto","fiat","MoonPay","Onramp"]},i="Onramps",c={},p=[];function d(o){const t={h1:"h1",header:"header",hr:"hr",p:"p",...(0,s.R)(),...o.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(t.header,{children:(0,e.jsx)(t.h1,{id:"onramps",children:"Onramps"})}),"\n",(0,e.jsx)(t.hr,{}),"\n",(0,e.jsx)(t.p,{children:"Coming soon"})]})}function m(o={}){const{wrapper:t}={...(0,s.R)(),...o.components};return t?(0,e.jsx)(t,{...o,children:(0,e.jsx)(d,{...o})}):d(o)}},1184:(o,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var r=n(4041);const e={},s=r.createContext(e);function a(o){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof o?o(t):{...t,...o}}),[t,o])}function i(o){let t;return t=o.disableParentContext?"function"==typeof o.components?o.components(e):o.components||e:a(o.components),r.createElement(s.Provider,{value:t},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/f79d90bb.8fa2d966.js b/assets/js/f79d90bb.8fa2d966.js deleted file mode 100644 index 7828bba..0000000 --- a/assets/js/f79d90bb.8fa2d966.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[7990],{7:(o,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>r,toc:()=>p});const r=JSON.parse('{"id":"tools/onramps","title":"Onramps","description":"Documentation for fiat-to-crypto onramps for the Funki network.","source":"@site/docs/tools/onramps.md","sourceDirName":"tools","slug":"/tools/onramps","permalink":"/docs/tools/onramps","draft":false,"unlisted":false,"editUrl":"https://github.com/funkichain/docs/edit/main/packages/frontend/docs/tools/onramps.md","tags":[],"version":"current","lastUpdatedAt":1734445511000,"frontMatter":{"title":"Onramps","slug":"/tools/onramps","order":6.6,"description":"Documentation for fiat-to-crypto onramps for the Funki network.","keywords":["fiat-to-crypto onramps","crypto onramp","onramps","Funki","Funki network","cryptocurrency","ETH on Funki","payment gateway","payments","fiat to crypto","fiat","MoonPay","Onramp"]},"sidebar":"docSidebar","previous":{"title":"Funki DEX-FAQ","permalink":"/docs/tools/dexs/funki-dex-faq"},"next":{"title":"Bridge FAQ","permalink":"/docs/tools/bridges/bridges-faq"}}');var e=n(1085),s=n(1184);const a={title:"Onramps",slug:"/tools/onramps",order:6.6,description:"Documentation for fiat-to-crypto onramps for the Funki network.",keywords:["fiat-to-crypto onramps","crypto onramp","onramps","Funki","Funki network","cryptocurrency","ETH on Funki","payment gateway","payments","fiat to crypto","fiat","MoonPay","Onramp"]},i="Onramps",c={},p=[];function d(o){const t={h1:"h1",header:"header",hr:"hr",p:"p",...(0,s.R)(),...o.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(t.header,{children:(0,e.jsx)(t.h1,{id:"onramps",children:"Onramps"})}),"\n",(0,e.jsx)(t.hr,{}),"\n",(0,e.jsx)(t.p,{children:"Coming soon"})]})}function m(o={}){const{wrapper:t}={...(0,s.R)(),...o.components};return t?(0,e.jsx)(t,{...o,children:(0,e.jsx)(d,{...o})}):d(o)}},1184:(o,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var r=n(4041);const e={},s=r.createContext(e);function a(o){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof o?o(t):{...t,...o}}),[t,o])}function i(o){let t;return t=o.disableParentContext?"function"==typeof o.components?o.components(e):o.components||e:a(o.components),r.createElement(s.Provider,{value:t},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.19957c9b.js b/assets/js/main.19957c9b.js deleted file mode 100644 index 9ce8b05..0000000 --- a/assets/js/main.19957c9b.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.19957c9b.js.LICENSE.txt */ -(self.webpackChunk_funki_docs_frontend=self.webpackChunk_funki_docs_frontend||[]).push([[8792],{8415:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(4041),o=n(1085);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},9842:(e,t,n)=>{"use strict";var r=n(4041),o=n(5873),a=n(2004),i=n(3664),s=n(4784),l=n(9531);const c=[n(1255),n(2200),n(5268),n(5080)];var u=n(7694),d=n(6090),f=n(8150),p=n(1085);function h(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(9058),g=n(396),y=n(5215),b=n(2520),v=n(145),w=n(1893),k=n(9924);const x="default";var S=n(2102),E=n(6613);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.A)(),r=(0,w.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(m.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.A)(),{pathname:r}=(0,d.zy)();return e+(0,S.Ks)((0,y.Ay)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function A(){const{i18n:{currentLocale:e}}=(0,g.A)(),{metadata:t,image:n}=(0,b.p)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:k.w})]}),n&&(0,p.jsx)(v.be,{image:n}),(0,p.jsx)(C,{}),(0,p.jsx)(_,{}),(0,p.jsx)(E.A,{tag:x,locale:e}),(0,p.jsx)(m.A,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;var N=n(8415),j=n(2183),O=n(3351);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const L=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,O.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,f.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(L,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(d.qh,{location:t,render:()=>e})})}}const F=I,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${M}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,p.jsx)(F,{location:e,children:G})}function K(){return(0,p.jsx)(W.A,{children:(0,p.jsx)(j.l,{children:(0,p.jsxs)(N.x,{children:[(0,p.jsxs)(h,{children:[(0,p.jsx)(H,{}),(0,p.jsx)(A,{}),(0,p.jsx)(U,{}),(0,p.jsx)(Y,{})]}),(0,p.jsx)(q,{})]})})})}var Q=n(4054);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var X=n(1411);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,f.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(Q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),R(e))},re=Object.freeze(ne);function oe(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,p.jsx)(i.I9,{children:t}):(0,p.jsx)(i.Kd,{children:t})}const ae=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(a.vd,{children:(0,p.jsx)(oe,{children:(0,p.jsx)(K,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ae)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};R(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},2183:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>f});var r=n(4041),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"overview","docs":[{"id":"building-on-funki/differences","path":"/docs/differences","sidebar":"docSidebar"},{"id":"building-on-funki/fees","path":"/docs/fees","sidebar":"docSidebar"},{"id":"building-on-funki/funki-contracts","path":"/docs/funki-contracts","sidebar":"docSidebar"},{"id":"building-on-funki/network-information","path":"/docs/network-information","sidebar":"docSidebar"},{"id":"overview","path":"/docs/","sidebar":"docSidebar"},{"id":"privacy-policy","path":"/docs/privacy-policy","sidebar":"docSidebar"},{"id":"security","path":"/docs/security","sidebar":"docSidebar"},{"id":"terms-of-use","path":"/docs/terms-of-use","sidebar":"docSidebar"},{"id":"the-dokodemo-protocol","path":"/docs/the-dokodemo-protocol","sidebar":"docSidebar"},{"id":"tokens/token-list","path":"/docs/tokens/bridging-an-l1-token-to-funki","sidebar":"docSidebar"},{"id":"tokens/wallet","path":"/docs/tokens/adding-tokens-to-metamask","sidebar":"docSidebar"},{"id":"tools/block-explorers","path":"/docs/tools/block-explorers","sidebar":"docSidebar"},{"id":"tools/bridges/bridges-faq","path":"/docs/tools/bridges/bridges-faq","sidebar":"docSidebar"},{"id":"tools/bridges/bridges-mainnet","path":"/docs/tools/bridges/mainnet","sidebar":"docSidebar"},{"id":"tools/bridges/bridges-testnet","path":"/docs/tools/bridges/testnet","sidebar":"docSidebar"},{"id":"tools/clients/ethers","path":"/docs/tools/clients/ethers","sidebar":"docSidebar"},{"id":"tools/clients/thirdweb-sdk","path":"/docs/tools/clients/thirdweb-sdk","sidebar":"docSidebar"},{"id":"tools/clients/viem","path":"/docs/tools/clients/viem","sidebar":"docSidebar"},{"id":"tools/clients/web3","path":"/docs/tools/clients/web3","sidebar":"docSidebar"},{"id":"tools/cross-chain","path":"/docs/tools/cross-chain","sidebar":"docSidebar"},{"id":"tools/dexs/funki-dex","path":"/docs/tools/dexs/funki-dex","sidebar":"docSidebar"},{"id":"tools/dexs/funki-dex-faq","path":"/docs/tools/dexs/funki-dex-faq","sidebar":"docSidebar"},{"id":"tools/network-faucets","path":"/docs/tools/network-faucets","sidebar":"docSidebar"},{"id":"tools/node-providers","path":"/docs/tools/node-providers","sidebar":"docSidebar"},{"id":"tools/onramps","path":"/docs/tools/onramps","sidebar":"docSidebar"},{"id":"tools/toolchains/foundry","path":"/docs/tools/toolchains/foundry","sidebar":"docSidebar"},{"id":"tools/toolchains/hardhat","path":"/docs/tools/toolchains/hardhat","sidebar":"docSidebar"},{"id":"tools/toolchains/thirdweb-cli","path":"/docs/tools/toolchains/thirdweb-cli","sidebar":"docSidebar"},{"id":"tutorials/building-onchain-app-thirdweb","path":"/docs/tutorials/building-onchain-app-thirdweb","sidebar":"docSidebar"},{"id":"tutorials/connect-metamask","path":"/docs/tutorials/connect-metamask","sidebar":"docSidebar"},{"id":"tutorials/connect-walletconnect-appkit","path":"/docs/tutorials/connect-walletconnect-appkit","sidebar":"docSidebar"},{"id":"tutorials/deploy-sm-using-foundry","path":"/docs/tutorials/deploy-sm-using-foundry","sidebar":"docSidebar"},{"id":"tutorials/deploy-sm-using-hardhat","path":"/docs/tutorials/deploy-sm-using-hardhat","sidebar":"docSidebar"},{"id":"tutorials/deploy-sm-using-remix","path":"/docs/tutorials/deploy-sm-using-remix","sidebar":"docSidebar"},{"id":"tutorials/deploy-sm-using-thirdweb","path":"/docs/tutorials/deploy-sm-using-thirdweb","sidebar":"docSidebar"},{"id":"tutorials/interact-with-standard-bridge","path":"/docs/tutorials/interact-with-standard-bridge","sidebar":"docSidebar"},{"id":"tutorials/simple-fungible-tokens","path":"/docs/tutorials/simple-fungible-tokens","sidebar":"docSidebar"},{"id":"tutorials/simple-nfts","path":"/docs/tutorials/simple-nfts","sidebar":"docSidebar"},{"id":"tutorials/verify-sm-on-funkichain","path":"/docs/tutorials/verify-sm-on-funkichain","sidebar":"docSidebar"},{"id":"using-funki","path":"/docs/using-funki","sidebar":"docSidebar"}],"draftIds":[],"sidebars":{"docSidebar":{"link":{"path":"/docs/","label":"overview"}}}}],"breadcrumbs":true}},"docusaurus-lunr-search":{"default":{"fileNames":{"searchDoc":"search-doc-1734446767636.json","lunrIndex":"lunr-index-1734446767636.json"}}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(2654);const l=JSON.parse('{"docusaurusVersion":"3.6.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.6.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.6.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.6.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.6.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.6.3"},"tailwind-plugin":{"type":"local"},"docusaurus-lunr-search":{"type":"package","name":"docusaurus-lunr-search","version":"3.4.0"}}}');var c=n(1085);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function f(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},9903:(e,t,n)=>{"use strict";n.d(t,{A:()=>m});var r=n(4041),o=n(9531),a=n(9058),i=n(2102),s=n(6193),l=n(4720),c=n(1085);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function f(e){let{children:t}=e;return(0,c.jsx)(l.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function p(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(f,{children:(0,c.jsxs)(m,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.A,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const h=e=>(0,c.jsx)(p,{...e});class m extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??h)(e)}return e??null}}},9531:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},9058:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(4041);var r=n(2004),o=n(1085);function a(e){return(0,o.jsx)(r.mg,{...e})}},2436:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(4041),o=n(3664),a=n(2102),i=n(396),s=n(5436),l=n(9531),c=n(6357),u=n(5215),d=n(1085);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:h,isActive:m,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:v}=(0,i.A)(),{trailingSlash:w,baseUrl:k}=v,x=v.future.experimental_router,{withBaseUrl:S}=(0,u.hH)(),E=(0,c.A)(),_=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>_.current));const C=f||p;const A=(0,s.A)(C),T=C?.replace("pathname://","");let N=void 0!==T?(j=T,y&&(e=>e.startsWith("/"))(j)?S(j):j):void 0;var j;"hash"===x&&N?.startsWith("./")&&(N=N?.slice(1)),N&&A&&(N=(0,a.Ks)(N,{trailingSlash:w,baseUrl:k}));const O=(0,r.useRef)(!1),P=n?o.k2:o.N_,L=l.A.canUseIntersectionObserver,R=(0,r.useRef)(),I=()=>{O.current||null==N||(window.docusaurus.preload(N),O.current=!0)};(0,r.useEffect)((()=>(!L&&A&&l.A.canUseDOM&&null!=N&&window.docusaurus.prefetch(N),()=>{L&&R.current&&R.current.disconnect()})),[R,N,L,A]);const F=N?.startsWith("#")??!1,M=!b.target||"_self"===b.target,D=!N||!A||!M||F&&"hash"!==x;g||!F&&D||E.collectLink(N),b.id&&E.collectAnchor(b.id);const z={};return D?(0,d.jsx)("a",{ref:_,href:N,...C&&!A&&{target:"_blank",rel:"noopener noreferrer"},...b,...z}):(0,d.jsx)(P,{...b,onMouseEnter:I,onTouchStart:I,innerRef:e=>{_.current=e,L&&e&&A&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=N&&window.docusaurus.prefetch(N))}))})),R.current.observe(e))},to:N,...n&&{isActive:m,activeClassName:h},...z})}const p=r.forwardRef(f)},9082:(e,t,n)=>{"use strict";n.d(t,{A:()=>c,T:()=>l});var r=n(4041),o=n(1085);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},467:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},5436:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},5215:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,hH:()=>i});var r=n(4041),o=n(396),a=n(5436);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,a.z)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},6357:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(4041);n(1085);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},396:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(4041),o=n(2183);function a(){return(0,r.useContext)(o.o)}},3142:(e,t,n)=>{"use strict";n.d(t,{P_:()=>i,kh:()=>a});var r=n(396),o=n(467);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},213:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(4041),o=n(8415);function a(){return(0,r.useContext)(o.o)}},3351:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(4041);const o=n(9531).A.canUseDOM?r.useLayoutEffect:r.useEffect},1411:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},4720:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(4041),o=n(1085);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},6392:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>g,g1:()=>b});var r=n(4041),o=n(6169),a=n(467),i=n(2520),s=n(2198),l=n(1786),c=n(1085);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,s.Wf)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,s.Wf)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,s.Wf)(u(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function h(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=h();return(0,c.jsx)(p.Provider,{value:n,children:t})}function g(e){let{children:t}=e;return(0,c.jsx)(m,{children:t})}function y(){const e=(0,r.useContext)(p);if(!e)throw new l.dV("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},5487:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>c});var r=n(4041),o=n(1786),a=n(1085);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},3348:(e,t,n)=>{"use strict";n.d(t,{Nr:()=>f,w8:()=>m,B5:()=>S,Vd:()=>w,QB:()=>x,fW:()=>k,OF:()=>v,Y:()=>y});var r=n(4041),o=n(6090),a=n(8150),i=n(6169),s=n(4271);function l(e){return Array.from(new Set(e))}var c=n(6392),u=n(4647),d=n(5487);function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const p=(e,t)=>void 0!==e&&(0,s.ys)(e,t),h=(e,t)=>e.some((e=>m(e,t)));function m(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||h(e.items,t))}function g(e,t){switch(e.type){case"category":return m(e,t)||e.items.some((e=>g(e,t)));case"link":return!e.unlisted||m(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>g(e,t)))),[e,t])}function b(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,s.ys)(a.href,n)||e(a.items))||"link"===a.type&&(0,s.ys)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function v(){const e=(0,d.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?b({sidebarItems:e.items,pathname:t}):null}function w(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,c.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)((()=>l([t,n,o].filter(Boolean))),[t,n,o])}function k(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function x(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${l(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function S(e){let{route:t}=e;const n=(0,o.zy)(),r=(0,u.r)(),i=t.routes,s=i.find((e=>(0,o.B6)(n.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?r.docsSidebars[l]:void 0;return{docElement:(0,a.v)(i),sidebarName:l,sidebarItems:c}}},4647:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(4041),o=n(1786),a=n(1085);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},6169:(e,t,n)=>{"use strict";n.d(t,{zK:()=>p,vT:()=>u,Gy:()=>l,HW:()=>h,ht:()=>c,r7:()=>f,jh:()=>d});var r=n(6090),o=n(3142);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=function(e,t){return[...e.versions].sort(((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0)).find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const s={},l=()=>(0,o.kh)("docusaurus-plugin-content-docs")??s,c=e=>{try{return(0,o.P_)("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function u(e){void 0===e&&(e={});const t=l(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function d(e){return c(e).versions}function f(e){const t=c(e);return a(t)}function p(e){const t=c(e),{pathname:n}=(0,r.zy)();return i(t,n)}function h(e){const t=c(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=a(e);return{latestDocSuggestion:i(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},5268:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(9586),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},2200:(e,t,n)=>{"use strict";var r=n(4370),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t,a=globalThis.Prism;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(1803),n(8523)(`./prism-${e}`)})),delete globalThis.Prism,void 0!==a&&(globalThis.Prism=e)}(r.My)},4441:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(4041);var r=n(4357),o=n(9082),a=n(2520),i=n(2436),s=n(6357);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_fF9Z",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_Yh18"};var c=n(1085);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.A)(),{navbar:{hideOnScroll:f}}=(0,a.p)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const p=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.A)("anchor",f?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":p,title:p,children:"\u200b"})]})}},2196:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(4041);const r={iconExternalLink:"iconExternalLink_awgD"};var o=n(1085);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},6193:(e,t,n)=>{"use strict";n.d(t,{A:()=>vt});var r=n(4041),o=n(4357),a=n(9903),i=n(145),s=n(6090),l=n(9082),c=n(9404),u=n(1085);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const h=(0,l.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??h,{containerRef:n,onClick:r}=p();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":h,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(7473),y=n(9924);const b={skipToContent:"skipToContent_G6ar"};function v(){return(0,u.jsx)(m,{className:b.skipToContent})}var w=n(2520),k=n(9303);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_rfix"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_L1uV"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_ncOr",announcementBarPlaceholder:"announcementBarPlaceholder_ajMw",announcementBarClose:"announcementBarClose_c9u4",announcementBarContent:"announcementBarContent__57G"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.M)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:A.announcementBarPlaceholder}),(0,u.jsx)(C,{className:A.announcementBarContent}),a&&(0,u.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var N=n(2106),j=n(1034);var O=n(1786),P=n(7226);const L=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,N.M)(),t=(0,P.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,O.ZC)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(L.Provider,{value:n,children:t})}function I(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function F(){const e=(0,r.useContext)(L);if(!e)throw new O.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,P.YL)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:I(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=F();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var D=n(2727),z=n(213);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_OLSw",toggleButton:"toggleButton_wYmb",darkToggleIcon:"darkToggleIcon_Yem1",lightToggleIcon:"lightToggleIcon_Sxwe",toggleButtonDisabled:"toggleButtonDisabled_vaDU"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.A)(),s=(0,l.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.A)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite","aria-pressed":"dark"===r?"true":"false",children:[(0,u.jsx)(B,{className:(0,o.A)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const W=r.memo(H),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_wZ1H"};function q(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,D.G)();return r?null:(0,u.jsx)(W,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var G=n(1631);function Y(){return(0,u.jsx)(G.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,N.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Q(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Y,{}),(0,u.jsx)(q,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Z=n(2436),X=n(5215),J=n(5436);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(2196);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Ay)(r),f=(0,X.Ay)(t),p=(0,X.Ay)(o,{forcePrependBaseUrl:!0}),h=a&&o&&!(0,J.A)(o),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,h&&(0,u.jsx)(te.A,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(Z.A,{href:l?p:o,...c,...m}):(0,u.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},...c,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.A)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(6476),se=n(4271),le=n(396);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_yXZl"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.A)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Oe,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function fe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:h}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&h(!d)}),[c,d,h]),(0,u.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.A)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),p()},children:l.children??l.label}),(0,u.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:t.map(((e,t)=>(0,r.createElement)(Oe,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?fe:de;return(0,u.jsx)(r,{...n})}var he=n(1893);function me(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ge="iconLanguage_xrmG";function ye(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t{if(!e.state?.highlightState||0===e.state.highlightState.wordToHighlight.length)return;a(e.state.highlightState);const{highlightState:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.highlightState,t,e]),(0,r.useEffect)((()=>{if(0===o.wordToHighlight.length)return;const e=document.getElementsByTagName("article")[0]??document.getElementsByTagName("main")[0];if(!e)return;const t=new(ke())(e),n={ignoreJoiners:!0};return t.mark(o.wordToHighlight,n),()=>t.unmark(n)}),[o,n]),null}const Se=e=>{const t=(0,r.useRef)(!1),o=(0,r.useRef)(null),[a,i]=(0,r.useState)(!1),l=(0,s.W6)(),{siteConfig:c={}}=(0,le.A)(),d=(c.plugins||[]).find((e=>Array.isArray(e)&&"string"==typeof e[0]&&e[0].includes("docusaurus-lunr-search"))),f=(0,z.A)(),{baseUrl:p}=c,h=d&&d[1]?.assetUrl||p,m=(0,ve.P_)("docusaurus-lunr-search"),g=()=>{t.current||(Promise.all([fetch(`${h}${m.fileNames.searchDoc}`).then((e=>e.json())),fetch(`${h}${m.fileNames.lunrIndex}`).then((e=>e.json())),Promise.all([n.e(597),n.e(2601)]).then(n.bind(n,1707)),Promise.all([n.e(1869),n.e(638)]).then(n.bind(n,638))]).then((e=>{let[t,n,{default:r}]=e;const{searchDocs:o,options:a}=t;o&&0!==o.length&&(((e,t,n,r)=>{new n({searchDocs:e,searchIndex:t,baseUrl:p,inputSelector:"#search_input_react",handleSelected:(e,t,n)=>{const o=n.url||"/";document.createElement("a").href=o,e.setVal(""),t.target.blur();let a="";if(r.highlightResult)try{const e=(n.text||n.subcategory||n.title).match(new RegExp("\\w*","g"));if(e&&e.length>0){const t=document.createElement("div");t.innerHTML=e[0],a=t.textContent}}catch(i){console.log(i)}l.push(o,{highlightState:{wordToHighlight:a}})},maxHits:r.maxHits})})(o,n,r,a),i(!0))})),t.current=!0)},y=(0,r.useCallback)((t=>{o.current.contains(t.target)||o.current.focus(),e.handleSearchBarToggle&&e.handleSearchBarToggle(!e.isSearchBarExpanded)}),[e.isSearchBarExpanded]);let b;return f&&(g(),b=window.navigator.platform.startsWith("Mac")?"Search \u2318+K":"Search Ctrl+K"),(0,r.useEffect)((()=>{e.autoFocus&&a&&o.current.focus()}),[a]),(0,u.jsxs)("div",{className:"navbar__search",children:[(0,u.jsx)("span",{"aria-label":"expand searchbar",role:"button",className:be("search-icon",{"search-icon-hidden":e.isSearchBarExpanded}),onClick:y,onKeyDown:y,tabIndex:0}),(0,u.jsx)("input",{id:"search_input_react",type:"search",placeholder:a?b:"Loading...","aria-label":"Search",className:be("navbar__search-input",{"search-bar-expanded":e.isSearchBarExpanded},{"search-bar":!e.isSearchBarExpanded}),onClick:g,onMouseOver:g,onFocus:y,onBlur:y,ref:o,disabled:!a}),(0,u.jsx)(xe,{})]},"search-box")},Ee={navbarSearchContainer:"navbarSearchContainer_bmvg"};function _e(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.A)(n,Ee.navbarSearchContainer),children:t})}var Ce=n(6169),Ae=n(3348);var Te=n(6392);function Ne(e,t){return t.alternateDocVersions[e.name]??function(e){return e.docs.find((t=>t.id===e.mainDocId))}(e)}const je={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.A)(),f=(0,he.o)(),{search:p,hash:h}=(0,s.zy)(),m=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${h}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,l.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(pe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(me,{className:ge}),g]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(_e,{className:n,children:(0,u.jsx)(Se,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.A)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,Ce.zK)(r),i=(0,Ae.QB)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,Ce.zK)(r),i=(0,Ae.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,Ae.Vd)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.zy)(),f=(0,Ce.zK)(n),p=(0,Ce.jh)(n),{savePreferredVersionName:h}=(0,Te.g1)(n),m=[...o,...p.map((function(e){const t=Ne(e,f);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),...a],g=(0,Ae.Vd)(n)[0],y=t&&m.length>1?(0,l.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,b=t&&m.length>1?void 0:Ne(g,f).path;return m.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,u.jsx)(pe,{...i,mobile:t,label:y,to:b,items:m,isActive:r?()=>!1:void 0})}};function Oe(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=je[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function Pe(){const e=(0,N.M)(),t=(0,w.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Oe,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Le(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Re(){const e=0===(0,w.p)().navbar.items.length,t=F();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Le,{onClick:()=>t.hide()}),t.content]})}function Ie(){const e=(0,N.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(M,{header:(0,u.jsx)(Q,{}),primaryMenu:(0,u.jsx)(Pe,{}),secondaryMenu:(0,u.jsx)(Re,{})}):null}const Fe={navbarHideable:"navbarHideable_bChn",navbarHidden:"navbarHidden_zsXl"};function Me(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function De(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.p)(),i=(0,N.M)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,j.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)("navbar","navbar--fixed-top",n&&[Fe.navbarHideable,!d&&Fe.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Me,{onClick:i.toggle}),(0,u.jsx)(Ie,{})]})}var ze=n(2102);const Be={errorBoundaryError:"errorBoundaryError_FiLL",errorBoundaryFallback:"errorBoundaryFallback_lv4I"};function $e(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Ue(e){let{error:t}=e;const n=(0,ze.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Be.errorBoundaryError,children:n})}class He extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const We="right";function Ve(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function qe(){const{toggle:e,shown:t}=(0,N.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(Ve,{})})}const Ge={colorModeToggle:"colorModeToggle_Hg9V"};function Ye(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(He,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(Oe,{...e})},t)))})}function Ke(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Qe(){const e=(0,N.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??We)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(Ke,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(qe,{}),(0,u.jsx)(Y,{}),(0,u.jsx)(Ye,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Ye,{items:r}),(0,u.jsx)(q,{className:Ge.colorModeToggle}),!o&&(0,u.jsx)(_e,{children:(0,u.jsx)(Se,{})})]})})}function Ze(){return(0,u.jsx)(De,{children:(0,u.jsx)(Qe,{})})}function Xe(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,X.Ay)(n),l=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Z.A,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.A)(r)&&(0,u.jsx)(te.A,{})]})}function Je(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(Xe,{item:t})},t.href??t.to)}function et(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(Je,{item:e},t)))})]})}function tt(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(et,{column:e},t)))})}function nt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function rt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(Xe,{item:t})}function ot(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(rt,{item:e}),t.length!==n+1&&(0,u.jsx)(nt,{})]},n)))})})}function at(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(tt,{columns:t}):(0,u.jsx)(ot,{links:t})}var it=n(1220);const st={footerLogoLink:"footerLogoLink_zxYv"};function lt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(it.A,{className:(0,o.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function ct(e){let{logo:t}=e;return t.href?(0,u.jsx)(Z.A,{href:t.href,className:st.footerLogoLink,target:t.target,children:(0,u.jsx)(lt,{logo:t})}):(0,u.jsx)(lt,{logo:t})}function ut(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function dt(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.A)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function ft(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(dt,{style:o,links:n&&n.length>0&&(0,u.jsx)(at,{links:n}),logo:r&&(0,u.jsx)(ct,{logo:r}),copyright:t&&(0,u.jsx)(ut,{copyright:t})})}const pt=r.memo(ft),ht=(0,O.fM)([D.a,k.o,j.Tv,Te.VQ,i.Jx,function(e){let{children:t}=e;return(0,u.jsx)(P.y_,{children:(0,u.jsx)(N.e,{children:(0,u.jsx)(R,{children:t})})})}]);function mt(e){let{children:t}=e;return(0,u.jsx)(ht,{children:t})}var gt=n(4441);function yt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(gt.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)($e,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Ue,{error:t})})]})})})}const bt={mainWrapper:"mainWrapper_UyTV"};function vt(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,y.J)(),(0,u.jsxs)(mt,{children:[(0,u.jsx)(i.be,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(T,{}),(0,u.jsx)(Ze,{}),(0,u.jsx)("div",{id:d,className:(0,o.A)(g.G.wrapper.main,bt.mainWrapper,r),children:(0,u.jsx)(a.A,{fallback:e=>(0,u.jsx)(yt,{...e}),children:t})}),!n&&(0,u.jsx)(pt,{})]})}},1631:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(4041);var r=n(2436),o=n(5215),a=n(396),i=n(2520),s=n(1220),l=n(1085);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Ay)(t.src),dark:(0,o.Ay)(t.srcDark||t.src)},i=(0,l.jsx)(s.A,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:n,logo:s}}=(0,i.p)(),{imageClassName:u,titleClassName:d,...f}=e,p=(0,o.Ay)(s?.href||"/"),h=n?"":t,m=s?.alt??h;return(0,l.jsxs)(r.A,{to:p,...f,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:m,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},6613:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(4041);var r=n(9058),o=n(1085);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.A,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},1220:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(4041),o=n(4357),a=n(213),i=n(2727);const s={themedComponent:"themedComponent_DHUr","themedComponent--light":"themedComponent--light_DIHH","themedComponent--dark":"themedComponent--dark_Bv2M"};var l=n(1085);function c(e){let{className:t,children:n}=e;const c=(0,a.A)(),{colorMode:u}=(0,i.G)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.A)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},6476:(e,t,n)=>{"use strict";n.d(t,{N:()=>y,u:()=>c});var r=n(4041),o=n(9531),a=n(3351),i=n(2631),s=n(1085);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return f(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function h(e){if(!o.A.canUseDOM)return e?u:d}function m(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return p({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:h(n),onTransitionEnd:e=>{"height"===e.propertyName&&(f(u.current,n),i?.(n))},className:l,children:o})}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.A)((()=>{t||i(!0)}),[t]),(0,a.A)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(m,{...n,collapsed:l}):null}function y(e){let{lazy:t,...n}=e;const r=t?g:m;return(0,s.jsx)(r,{...n})}},9303:(e,t,n)=>{"use strict";n.d(t,{M:()=>m,o:()=>h});var r=n(4041),o=n(213),a=n(2198),i=n(1786),s=n(2520),l=n(1085);const c=(0,a.Wf)("docusaurus.announcement.dismiss"),u=(0,a.Wf)("docusaurus.announcement.id"),d=()=>"true"===c.get(),f=e=>c.set(String(e)),p=r.createContext(null);function h(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.p)(),t=(0,o.A)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{f(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&f(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(p.Provider,{value:n,children:t})}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},2727:(e,t,n)=>{"use strict";n.d(t,{G:()=>y,a:()=>g});var r=n(4041),o=n(9531),a=n(1786),i=n(2198),s=n(2520),l=n(1085);const c=r.createContext(void 0),u="theme",d=(0,i.Wf)(u),f={light:"light",dark:"dark"},p=e=>e===f.dark?f.dark:f.light,h=e=>o.A.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{d.set(p(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.p)(),[o,a]=(0,r.useState)(h(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===f.dark},setLightTheme(){i(f.light)},setDarkTheme(){i(f.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(c);if(null==e)throw new a.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},2106:(e,t,n)=>{"use strict";n.d(t,{e:()=>p,M:()=>h});var r=n(4041),o=n(7226),a=n(1187),i=n(6090),s=n(1786);function l(e){!function(e){const t=(0,i.W6)(),n=(0,s._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(2520),u=n(1085);const d=r.createContext(void 0);function f(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,c.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function p(e){let{children:t}=e;const n=f();return(0,u.jsx)(d.Provider,{value:n,children:t})}function h(){const e=r.useContext(d);if(void 0===e)throw new s.dV("NavbarMobileSidebarProvider");return e}},7226:(e,t,n)=>{"use strict";n.d(t,{GX:()=>c,YL:()=>l,y_:()=>s});var r=n(4041),o=n(1786),a=n(1085);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Be)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},9924:(e,t,n)=>{"use strict";n.d(t,{w:()=>o,J:()=>a});var r=n(4041);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},1187:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(4041),o=n(9531);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7473:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},2631:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},145:(e,t,n)=>{"use strict";n.d(t,{e3:()=>p,be:()=>d,Jx:()=>h});var r=n(4041),o=n(4357),a=n(9058),i=n(4720);function s(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(5215),c=n(396);var u=n(1085);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const s=function(e){const{siteConfig:t}=(0,c.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.hH)(),f=o?d(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.A,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,u.jsx)("meta",{property:"og:image",content:f}),f&&(0,u.jsx)("meta",{name:"twitter:image",content:f}),i]})}const f=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(f),s=(0,o.A)(i,t);return(0,u.jsxs)(f.Provider,{value:s,children:[(0,u.jsx)(a.A,{children:(0,u.jsx)("html",{className:s})}),n]})}function h(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(p,{className:(0,o.A)(r,a),children:t})}},1786:(e,t,n)=>{"use strict";n.d(t,{Be:()=>c,ZC:()=>s,_q:()=>i,dV:()=>l,fM:()=>u});var r=n(4041),o=n(3351),a=n(1085);function i(e){const t=(0,r.useRef)(e);return(0,o.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.A)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},4271:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>s,ys:()=>i});var r=n(4041),o=n(7694),a=n(396);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.A,baseUrl:e})),[e])}},1034:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>f,Tv:()=>c,gk:()=>p});var r=n(4041),o=n(9531),a=n(213),i=(n(3351),n(1786)),s=n(1085);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,a.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2198:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>c});n(4041);const r=JSON.parse('{"N":"localStorage","M":""}'),o=r.N;function a(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function i(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){const n=`${e}${r.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const o=i(t?.persistence);return null===o?l:{get:()=>{try{return o.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=o.getItem(n);o.setItem(n,e),a({key:n,oldValue:t,newValue:e,storage:o})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=o.getItem(n);o.removeItem(n),a({key:n,oldValue:e,newValue:null,storage:o})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===o&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}},1893:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(396),o=n(6090),a=n(2102);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.A)(),{pathname:l}=(0,o.zy)(),c=(0,a.Ks)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},9404:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(4041),o=n(6090),a=n(1786);function i(e){const t=(0,o.zy)(),n=(0,a.ZC)(t),i=(0,a._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},2520:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(396);function o(){return(0,r.A)().siteConfig.themeConfig}},3105:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,c=n,c?o(l):a(l));var l,c;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a;const r=n(8268);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}},8783:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},2102:(e,t,n)=>{"use strict";t.rA=t.Ks=void 0;const r=n(5608);var o=n(3105);Object.defineProperty(t,"Ks",{enumerable:!0,get:function(){return r.__importDefault(o).default}});var a=n(8268);var i=n(8783);Object.defineProperty(t,"rA",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},8268:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},7694:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});n(4041);var r=n(2780),o=n.n(r),a=n(4054);const i={"0058b4c6":[()=>n.e(849).then(n.t.bind(n,6164,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-175.json",6164],"0f709c71":[()=>n.e(6312).then(n.bind(n,8914)),"@site/docs/tutorials/verify-sm-on-funkichain.md",8914],"0f8cca8e":[()=>n.e(1219).then(n.bind(n,1375)),"@site/docs/terms-of-use.md",1375],17896441:[()=>Promise.all([n.e(1869),n.e(1640),n.e(8401)]).then(n.bind(n,7913)),"@theme/DocItem",7913],"1db64337":[()=>n.e(8413).then(n.bind(n,4629)),"@site/docs/overview.md",4629],"1df93b7f":[()=>n.e(4583).then(n.bind(n,5553)),"@site/src/pages/index.tsx",5553],"1e65a63e":[()=>n.e(979).then(n.bind(n,298)),"@site/docs/tutorials/connect-metamask.md",298],"1f391b9e":[()=>Promise.all([n.e(1869),n.e(1640),n.e(6061)]).then(n.bind(n,8639)),"@theme/MDXPage",8639],"23cc3488":[()=>n.e(637).then(n.bind(n,4468)),"@site/docs/building-on-funki/funki-contracts.md",4468],"250d140b":[()=>n.e(7057).then(n.bind(n,3437)),"@site/docs/the-dokodemo-protocol.md",3437],"2e5979cf":[()=>n.e(1117).then(n.bind(n,6053)),"@site/docs/tutorials/deploy-sm-using-hardhat.md",6053],"30d18d7f":[()=>n.e(8860).then(n.bind(n,5936)),"@site/docs/tools/bridges/bridges-mainnet.md",5936],"393be207":[()=>n.e(4134).then(n.bind(n,6006)),"@site/src/pages/markdown-page.md",6006],"4289016b":[()=>n.e(349).then(n.bind(n,1419)),"@site/docs/tutorials/building-onchain-app-thirdweb.md",1419],"445652e7":[()=>n.e(2639).then(n.bind(n,5326)),"@site/docs/tools/clients/web3.md",5326],"4625d2ba":[()=>n.e(3).then(n.bind(n,4064)),"@site/docs/tools/toolchains/hardhat.md",4064],"4898c25f":[()=>n.e(3818).then(n.bind(n,8694)),"@site/docs/tools/node-providers.md",8694],"51c73bd5":[()=>n.e(5761).then(n.bind(n,5651)),"@site/docs/tutorials/deploy-sm-using-thirdweb.md",5651],"5889b3a0":[()=>n.e(4227).then(n.bind(n,4595)),"@site/docs/tutorials/deploy-sm-using-foundry.md",4595],"5e95c892":[()=>n.e(9647).then(n.bind(n,3531)),"@theme/DocsRoot",3531],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"63fb37ef":[()=>n.e(7745).then(n.bind(n,2279)),"@site/docs/building-on-funki/fees.md",2279],"6855d851":[()=>n.e(1189).then(n.bind(n,3280)),"@site/docs/tools/cross-chain.md",3280],"86f24ab4":[()=>n.e(42).then(n.bind(n,599)),"@site/docs/tutorials/interact-with-standard-bridge.md",599],"87ed754d":[()=>n.e(4143).then(n.bind(n,1151)),"@site/docs/tools/clients/ethers.md",1151],"87f8f082":[()=>n.e(3810).then(n.bind(n,9623)),"@site/docs/tools/toolchains/foundry.md",9623],"89c7d0f1":[()=>n.e(411).then(n.bind(n,8714)),"@site/docs/tools/dexs/funki-dex-faq.md",8714],"8c5da4da":[()=>n.e(453).then(n.bind(n,7178)),"@site/docs/privacy-policy.md",7178],"8f132481":[()=>n.e(3506).then(n.bind(n,8664)),"@site/docs/tutorials/deploy-sm-using-remix.md",8664],"923a0390":[()=>n.e(3342).then(n.bind(n,8697)),"@site/docs/tutorials/connect-walletconnect-appkit.md",8697],"92c22dfd":[()=>n.e(8677).then(n.bind(n,2533)),"@site/docs/building-on-funki/differences.md",2533],"9a789939":[()=>n.e(1846).then(n.bind(n,2634)),"@site/docs/tools/block-explorers.md",2634],"9ce57062":[()=>n.e(6424).then(n.bind(n,683)),"@site/docs/tools/bridges/bridges-faq.md",683],"9f2d8313":[()=>n.e(5427).then(n.bind(n,2556)),"@site/docs/tutorials/simple-nfts.md",2556],a442b4ba:[()=>n.e(387).then(n.bind(n,9612)),"@site/docs/tools/dexs/funki-dex.md",9612],a529579c:[()=>n.e(9962).then(n.bind(n,8599)),"@site/docs/tutorials/simple-fungible-tokens.md",8599],a7456010:[()=>n.e(1235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,3045)),"@theme/DocVersionRoot",3045],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,6067)),"@theme/DocRoot",6067],a9f1c254:[()=>n.e(602).then(n.bind(n,9237)),"@site/docs/tools/clients/thirdweb-sdk.md",9237],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],ca1db23a:[()=>n.e(7832).then(n.bind(n,6348)),"@site/docs/tools/clients/viem.md",6348],cb1eebe9:[()=>n.e(4209).then(n.bind(n,5459)),"@site/docs/tokens/wallet.md",5459],ced3a373:[()=>n.e(326).then(n.bind(n,4229)),"@site/docs/building-on-funki/network-information.md",4229],d8bf45b5:[()=>n.e(3285).then(n.bind(n,946)),"@site/docs/using-funki.md",946],db32d859:[()=>n.e(4884).then(n.bind(n,3254)),"@site/docs/security.md",3254],dccced77:[()=>n.e(5399).then(n.bind(n,9261)),"@site/docs/tools/bridges/bridges-testnet.md",9261],dea5ae6e:[()=>n.e(4341).then(n.bind(n,913)),"@site/docs/tokens/token-list.md",913],eec36cf0:[()=>n.e(7128).then(n.bind(n,8104)),"@site/docs/tools/network-faucets.md",8104],f79d90bb:[()=>n.e(7990).then(n.bind(n,7)),"@site/docs/tools/onramps.md",7],fbe54920:[()=>n.e(7466).then(n.bind(n,2461)),"@site/docs/tools/toolchains/thirdweb-cli.md",2461]};var s=n(1085);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(1411),u=n(4720);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(5723).then(n.bind(n,5723)),modules:["@theme/NotFound"],webpack:()=>[5723],render(e,t){const n=e.default;return(0,s.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},f=[],p=[],h=(0,c.A)(r);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),o().Map({loading:l,loader:d,modules:f,webpack:()=>p,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const l=o.__props;return delete o.__props,(0,s.jsx)(u.W,{value:i,children:(0,s.jsx)(a,{...o,...l,...n})})}})}const f=[{path:"/markdown-page",component:d("/markdown-page","3d7"),exact:!0},{path:"/docs",component:d("/docs","dea"),routes:[{path:"/docs",component:d("/docs","732"),routes:[{path:"/docs",component:d("/docs","dca"),routes:[{path:"/docs/",component:d("/docs/","661"),exact:!0,sidebar:"docSidebar"},{path:"/docs/differences",component:d("/docs/differences","d8e"),exact:!0,sidebar:"docSidebar"},{path:"/docs/fees",component:d("/docs/fees","8ba"),exact:!0,sidebar:"docSidebar"},{path:"/docs/funki-contracts",component:d("/docs/funki-contracts","ca7"),exact:!0,sidebar:"docSidebar"},{path:"/docs/network-information",component:d("/docs/network-information","d4b"),exact:!0,sidebar:"docSidebar"},{path:"/docs/privacy-policy",component:d("/docs/privacy-policy","3c0"),exact:!0,sidebar:"docSidebar"},{path:"/docs/security",component:d("/docs/security","987"),exact:!0,sidebar:"docSidebar"},{path:"/docs/terms-of-use",component:d("/docs/terms-of-use","fe3"),exact:!0,sidebar:"docSidebar"},{path:"/docs/the-dokodemo-protocol",component:d("/docs/the-dokodemo-protocol","a49"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tokens/adding-tokens-to-metamask",component:d("/docs/tokens/adding-tokens-to-metamask","3da"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tokens/bridging-an-l1-token-to-funki",component:d("/docs/tokens/bridging-an-l1-token-to-funki","010"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/block-explorers",component:d("/docs/tools/block-explorers","b14"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/bridges/bridges-faq",component:d("/docs/tools/bridges/bridges-faq","106"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/bridges/mainnet",component:d("/docs/tools/bridges/mainnet","ac8"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/bridges/testnet",component:d("/docs/tools/bridges/testnet","288"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/clients/ethers",component:d("/docs/tools/clients/ethers","863"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/clients/thirdweb-sdk",component:d("/docs/tools/clients/thirdweb-sdk","769"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/clients/viem",component:d("/docs/tools/clients/viem","94e"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/clients/web3",component:d("/docs/tools/clients/web3","ffe"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/cross-chain",component:d("/docs/tools/cross-chain","c10"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/dexs/funki-dex",component:d("/docs/tools/dexs/funki-dex","d62"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/dexs/funki-dex-faq",component:d("/docs/tools/dexs/funki-dex-faq","a95"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/network-faucets",component:d("/docs/tools/network-faucets","49c"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/node-providers",component:d("/docs/tools/node-providers","f4d"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/onramps",component:d("/docs/tools/onramps","435"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/toolchains/foundry",component:d("/docs/tools/toolchains/foundry","b18"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/toolchains/hardhat",component:d("/docs/tools/toolchains/hardhat","864"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tools/toolchains/thirdweb-cli",component:d("/docs/tools/toolchains/thirdweb-cli","db0"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/building-onchain-app-thirdweb",component:d("/docs/tutorials/building-onchain-app-thirdweb","c42"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/connect-metamask",component:d("/docs/tutorials/connect-metamask","e07"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/connect-walletconnect-appkit",component:d("/docs/tutorials/connect-walletconnect-appkit","6aa"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/deploy-sm-using-foundry",component:d("/docs/tutorials/deploy-sm-using-foundry","1e4"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/deploy-sm-using-hardhat",component:d("/docs/tutorials/deploy-sm-using-hardhat","001"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/deploy-sm-using-remix",component:d("/docs/tutorials/deploy-sm-using-remix","fd5"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/deploy-sm-using-thirdweb",component:d("/docs/tutorials/deploy-sm-using-thirdweb","051"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/interact-with-standard-bridge",component:d("/docs/tutorials/interact-with-standard-bridge","d8d"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/simple-fungible-tokens",component:d("/docs/tutorials/simple-fungible-tokens","8b4"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/simple-nfts",component:d("/docs/tutorials/simple-nfts","1db"),exact:!0,sidebar:"docSidebar"},{path:"/docs/tutorials/verify-sm-on-funkichain",component:d("/docs/tutorials/verify-sm-on-funkichain","6f0"),exact:!0,sidebar:"docSidebar"},{path:"/docs/using-funki",component:d("/docs/using-funki","ecc"),exact:!0,sidebar:"docSidebar"}]}]}]},{path:"/",component:d("/","e5f"),exact:!0},{path:"*",component:d("*")}]},3940:(e,t,n)=>{"use strict";n.d(t,{zR:()=>S,TM:()=>N,yJ:()=>m,sC:()=>O,AO:()=>h,Fu:()=>g});var r=n(9575);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};function s(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const l=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=s(t),o=s(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var c=n(7730);function u(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function h(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function m(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&l(e.state,t.state)}function y(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=m(e,t,f(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(524),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=p(n);o&&o!==h&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),m=l(n),g=0;g{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},6815:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},6152:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(s){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),s=i.length,l=0;i=Array.prototype.slice.call(i);var c=function(){--s<=0&&a(l)};s||c(),i.forEach((function(t){e.matches(t,o.exclude)?c():o.onIframeReady(t,(function(e){n(t)&&(l++,r(e)),c()}),c)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),s=[],l=[],c=void 0,u=void 0,d=function(){var e=a.getIteratorNode(i);return u=e.prevNode,c=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(c,u,e,s)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return l.push(e)}),r)})),l.push(c);l.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(s,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var s=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,s):s()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(s)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,s=parseInt(e.start,10)-i;return(r=(s=s>a?a:s)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),s<0||r-s<0||s>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,s){var l=e.nodes[s+1];if(void 0===l||l.start>t){if(!r(i.node))return!1;var c=t-i.start,u=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),f=e.value.substr(u+i.start);if(i.node=a.wrapRangeInTextNode(i.node,c,u),e.value=d+f,e.nodes.forEach((function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=u),e.nodes[n].end-=u)})),n-=u,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var s=o.index;if(0!==i)for(var l=1;l{"use strict";n.r(t)},5080:(e,t,n)=>{"use strict";n.r(t)},9586:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},1803:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),h=f.indexOf(p);if(h>-1){++o;var m=f.substring(0,h),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(h+p.length),b=[];m&&b.push.apply(b,i([m])),b.push(g),y&&b.push.apply(b,i([y])),"string"==typeof c?s.splice.apply(s,[l,1].concat(b)):c.content=b}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},1284:()=>{Prism.languages.solidity=Prism.languages.extend("clike",{"class-name":{pattern:/(\b(?:contract|enum|interface|library|new|struct|using)\s+)(?!\d)[\w$]+/,lookbehind:!0},keyword:/\b(?:_|anonymous|as|assembly|assert|break|calldata|case|constant|constructor|continue|contract|default|delete|do|else|emit|enum|event|external|for|from|function|if|import|indexed|inherited|interface|internal|is|let|library|mapping|memory|modifier|new|payable|pragma|private|public|pure|require|returns?|revert|selfdestruct|solidity|storage|struct|suicide|switch|this|throw|using|var|view|while)\b/,operator:/=>|->|:=|=:|\*\*|\+\+|--|\|\||&&|<<=?|>>=?|[-+*/%^&|<>!=]=?|[~?]/}),Prism.languages.insertBefore("solidity","keyword",{builtin:/\b(?:address|bool|byte|u?int(?:8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?|string|bytes(?:[1-9]|[12]\d|3[0-2])?)\b/}),Prism.languages.insertBefore("solidity","number",{version:{pattern:/([<>]=?|\^)\d+\.\d+\.\d+\b/,lookbehind:!0,alias:"number"}}),Prism.languages.sol=Prism.languages.solidity},8523:(e,t,n)=>{var r={"./prism-solidity":1284};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=8523},6999:(e,t,n)=>{"use strict";var r=n(6848);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},9067:(e,t,n)=>{e.exports=n(6999)()},6848:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},7400:(e,t,n)=>{"use strict";var r=n(4041),o=n(7967);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n