From f71a7b1ec9e3c60f4da5e5e5f0ad338bf8599cdf Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Tue, 17 Oct 2023 16:39:42 +0200 Subject: [PATCH 001/108] Update SUMMARY.md (#251) * Update SUMMARY.md * Update SUMMARY.md --- SUMMARY.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/SUMMARY.md b/SUMMARY.md index 06f61f72..419c0f5c 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -23,6 +23,7 @@ * [Security](safe-smart-account/security/README.md) * [Bug Bounty](safe-smart-account/security/bug-bounty-program.md) + * [Past paid bounties](safe-smart-account/security/past-paid-bounties.md) * [Audits](safe-smart-account/security/security-audits.md) * [Signatures](safe-smart-account/signatures/README.md) @@ -41,7 +42,7 @@ * [Protocol Kit](safe-core-sdk/protocol-kit/README.md) -* [OnRamp Kit](safe-core-sdk/onramp-kit/README.md) +* [Onramp Kit](safe-core-sdk/onramp-kit/README.md) * [Stripe](safe-core-sdk/onramp-kit/stripe.md) * [Monerium](safe-core-sdk/onramp-kit/monerium.md) @@ -62,6 +63,8 @@ * [Service Architecture](safe-core-api/service-architecture.md) +* [Safe Transaction Service](safe-core-api/safe-transaction-service.md) + * [RPC Requirements](safe-core-api/rpc-requirements.md) ## Reference @@ -72,7 +75,7 @@ * [Protocol Kit](reference/safe-core-sdk/protocol-kit/README.md) -* [OnRamp Kit](reference/safe-core-sdk/onramp-kit/README.md) +* [Onramp Kit](reference/safe-core-sdk/onramp-kit/README.md) * [OnRampKitBasePack](reference/safe-core-sdk/onramp-kit/OnRampKitBasePack.md) * [StripePack](reference/safe-core-sdk/onramp-kit/StripePack.md) * [MoneriumPack](reference/safe-core-sdk/onramp-kit/MoneriumPack.md) From 866bcaf745d556e0bbe6930127ab1e273c29c8c6 Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Fri, 20 Oct 2023 13:02:07 +0200 Subject: [PATCH 002/108] Add GH action for readability (#254) Co-authored-by: Tanay Pant --- .github/workflows/report-readability.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/report-readability.yml diff --git a/.github/workflows/report-readability.yml b/.github/workflows/report-readability.yml new file mode 100644 index 00000000..32d84a68 --- /dev/null +++ b/.github/workflows/report-readability.yml @@ -0,0 +1,17 @@ +name: Report readability + +on: pull_request + +jobs: + report-readability: + name: Report readability + runs-on: ubuntu-latest + steps: + - name: Checkout repo with history + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: Rebilly/lexi@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + glob: '**/*.md' From c42e78e01e1386be244cf2b18a65b51b50e38466 Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Fri, 20 Oct 2023 15:16:03 +0200 Subject: [PATCH 003/108] Add workflow for style check on PRs (#255) Co-authored-by: Tanay Pant --- {styles => .github/styles}/Microsoft/AMPM.yml | 0 .../styles}/Microsoft/Accessibility.yml | 0 .../styles}/Microsoft/Acronyms.yml | 0 {styles => .github/styles}/Microsoft/Adverbs.yml | 0 {styles => .github/styles}/Microsoft/Auto.yml | 0 {styles => .github/styles}/Microsoft/Avoid.yml | 0 .../styles}/Microsoft/ComplexWords.yml | 0 .../styles}/Microsoft/Contractions.yml | 0 {styles => .github/styles}/Microsoft/Dashes.yml | 0 .../styles}/Microsoft/DateFormat.yml | 0 .../styles}/Microsoft/DateNumbers.yml | 0 .../styles}/Microsoft/DateOrder.yml | 0 .../styles}/Microsoft/Ellipses.yml | 0 .../styles}/Microsoft/FirstPerson.yml | 0 {styles => .github/styles}/Microsoft/Foreign.yml | 0 {styles => .github/styles}/Microsoft/Gender.yml | 0 .../styles}/Microsoft/GenderBias.yml | 0 .../styles}/Microsoft/GeneralURL.yml | 0 .../styles}/Microsoft/HeadingAcronyms.yml | 0 .../styles}/Microsoft/HeadingColons.yml | 0 .../styles}/Microsoft/HeadingPunctuation.yml | 0 .../styles}/Microsoft/Headings.yml | 0 {styles => .github/styles}/Microsoft/Hyphens.yml | 0 .../styles}/Microsoft/Negative.yml | 0 {styles => .github/styles}/Microsoft/Ordinal.yml | 0 .../styles}/Microsoft/OxfordComma.yml | 0 {styles => .github/styles}/Microsoft/Passive.yml | 0 .../styles}/Microsoft/Percentages.yml | 0 {styles => .github/styles}/Microsoft/Quotes.yml | 0 .../styles}/Microsoft/RangeFormat.yml | 0 .../styles}/Microsoft/RangeTime.yml | 0 {styles => .github/styles}/Microsoft/Ranges.yml | 0 .../styles}/Microsoft/Semicolon.yml | 0 .../styles}/Microsoft/SentenceLength.yml | 0 {styles => .github/styles}/Microsoft/Spacing.yml | 0 .../styles}/Microsoft/Suspended.yml | 0 {styles => .github/styles}/Microsoft/Terms.yml | 0 .../styles}/Microsoft/URLFormat.yml | 0 {styles => .github/styles}/Microsoft/Units.yml | 0 {styles => .github/styles}/Microsoft/Vocab.yml | 0 {styles => .github/styles}/Microsoft/We.yml | 0 .../styles}/Microsoft/Wordiness.yml | 0 {styles => .github/styles}/Microsoft/meta.json | 0 .../styles}/Vocab/default/accept.txt | 0 .../styles}/Vocab/default/reject.txt | 0 .../styles}/write-good/Cliches.yml | 0 .../styles}/write-good/E-Prime.yml | 0 .../styles}/write-good/Illusions.yml | 0 .../styles}/write-good/Passive.yml | 0 {styles => .github/styles}/write-good/README.md | 0 {styles => .github/styles}/write-good/So.yml | 0 .../styles}/write-good/ThereIs.yml | 0 .../styles}/write-good/TooWordy.yml | 0 {styles => .github/styles}/write-good/Weasel.yml | 0 {styles => .github/styles}/write-good/meta.json | 0 .github/workflows/style-check.yml | 16 ++++++++++++++++ .vale.ini | 2 +- 57 files changed, 17 insertions(+), 1 deletion(-) rename {styles => .github/styles}/Microsoft/AMPM.yml (100%) rename {styles => .github/styles}/Microsoft/Accessibility.yml (100%) rename {styles => .github/styles}/Microsoft/Acronyms.yml (100%) rename {styles => .github/styles}/Microsoft/Adverbs.yml (100%) rename {styles => .github/styles}/Microsoft/Auto.yml (100%) rename {styles => .github/styles}/Microsoft/Avoid.yml (100%) rename {styles => .github/styles}/Microsoft/ComplexWords.yml (100%) rename {styles => .github/styles}/Microsoft/Contractions.yml (100%) rename {styles => .github/styles}/Microsoft/Dashes.yml (100%) rename {styles => .github/styles}/Microsoft/DateFormat.yml (100%) rename {styles => .github/styles}/Microsoft/DateNumbers.yml (100%) rename {styles => .github/styles}/Microsoft/DateOrder.yml (100%) rename {styles => .github/styles}/Microsoft/Ellipses.yml (100%) rename {styles => .github/styles}/Microsoft/FirstPerson.yml (100%) rename {styles => .github/styles}/Microsoft/Foreign.yml (100%) rename {styles => .github/styles}/Microsoft/Gender.yml (100%) rename {styles => .github/styles}/Microsoft/GenderBias.yml (100%) rename {styles => .github/styles}/Microsoft/GeneralURL.yml (100%) rename {styles => .github/styles}/Microsoft/HeadingAcronyms.yml (100%) rename {styles => .github/styles}/Microsoft/HeadingColons.yml (100%) rename {styles => .github/styles}/Microsoft/HeadingPunctuation.yml (100%) rename {styles => .github/styles}/Microsoft/Headings.yml (100%) rename {styles => .github/styles}/Microsoft/Hyphens.yml (100%) rename {styles => .github/styles}/Microsoft/Negative.yml (100%) rename {styles => .github/styles}/Microsoft/Ordinal.yml (100%) rename {styles => .github/styles}/Microsoft/OxfordComma.yml (100%) rename {styles => .github/styles}/Microsoft/Passive.yml (100%) rename {styles => .github/styles}/Microsoft/Percentages.yml (100%) rename {styles => .github/styles}/Microsoft/Quotes.yml (100%) rename {styles => .github/styles}/Microsoft/RangeFormat.yml (100%) rename {styles => .github/styles}/Microsoft/RangeTime.yml (100%) rename {styles => .github/styles}/Microsoft/Ranges.yml (100%) rename {styles => .github/styles}/Microsoft/Semicolon.yml (100%) rename {styles => .github/styles}/Microsoft/SentenceLength.yml (100%) rename {styles => .github/styles}/Microsoft/Spacing.yml (100%) rename {styles => .github/styles}/Microsoft/Suspended.yml (100%) rename {styles => .github/styles}/Microsoft/Terms.yml (100%) rename {styles => .github/styles}/Microsoft/URLFormat.yml (100%) rename {styles => .github/styles}/Microsoft/Units.yml (100%) rename {styles => .github/styles}/Microsoft/Vocab.yml (100%) rename {styles => .github/styles}/Microsoft/We.yml (100%) rename {styles => .github/styles}/Microsoft/Wordiness.yml (100%) rename {styles => .github/styles}/Microsoft/meta.json (100%) rename {styles => .github/styles}/Vocab/default/accept.txt (100%) rename {styles => .github/styles}/Vocab/default/reject.txt (100%) rename {styles => .github/styles}/write-good/Cliches.yml (100%) rename {styles => .github/styles}/write-good/E-Prime.yml (100%) rename {styles => .github/styles}/write-good/Illusions.yml (100%) rename {styles => .github/styles}/write-good/Passive.yml (100%) rename {styles => .github/styles}/write-good/README.md (100%) rename {styles => .github/styles}/write-good/So.yml (100%) rename {styles => .github/styles}/write-good/ThereIs.yml (100%) rename {styles => .github/styles}/write-good/TooWordy.yml (100%) rename {styles => .github/styles}/write-good/Weasel.yml (100%) rename {styles => .github/styles}/write-good/meta.json (100%) create mode 100644 .github/workflows/style-check.yml diff --git a/styles/Microsoft/AMPM.yml b/.github/styles/Microsoft/AMPM.yml similarity index 100% rename from styles/Microsoft/AMPM.yml rename to .github/styles/Microsoft/AMPM.yml diff --git a/styles/Microsoft/Accessibility.yml b/.github/styles/Microsoft/Accessibility.yml similarity index 100% rename from styles/Microsoft/Accessibility.yml rename to .github/styles/Microsoft/Accessibility.yml diff --git a/styles/Microsoft/Acronyms.yml b/.github/styles/Microsoft/Acronyms.yml similarity index 100% rename from styles/Microsoft/Acronyms.yml rename to .github/styles/Microsoft/Acronyms.yml diff --git a/styles/Microsoft/Adverbs.yml b/.github/styles/Microsoft/Adverbs.yml similarity index 100% rename from styles/Microsoft/Adverbs.yml rename to .github/styles/Microsoft/Adverbs.yml diff --git a/styles/Microsoft/Auto.yml b/.github/styles/Microsoft/Auto.yml similarity index 100% rename from styles/Microsoft/Auto.yml rename to .github/styles/Microsoft/Auto.yml diff --git a/styles/Microsoft/Avoid.yml b/.github/styles/Microsoft/Avoid.yml similarity index 100% rename from styles/Microsoft/Avoid.yml rename to .github/styles/Microsoft/Avoid.yml diff --git a/styles/Microsoft/ComplexWords.yml b/.github/styles/Microsoft/ComplexWords.yml similarity index 100% rename from styles/Microsoft/ComplexWords.yml rename to .github/styles/Microsoft/ComplexWords.yml diff --git a/styles/Microsoft/Contractions.yml b/.github/styles/Microsoft/Contractions.yml similarity index 100% rename from styles/Microsoft/Contractions.yml rename to .github/styles/Microsoft/Contractions.yml diff --git a/styles/Microsoft/Dashes.yml b/.github/styles/Microsoft/Dashes.yml similarity index 100% rename from styles/Microsoft/Dashes.yml rename to .github/styles/Microsoft/Dashes.yml diff --git a/styles/Microsoft/DateFormat.yml b/.github/styles/Microsoft/DateFormat.yml similarity index 100% rename from styles/Microsoft/DateFormat.yml rename to .github/styles/Microsoft/DateFormat.yml diff --git a/styles/Microsoft/DateNumbers.yml b/.github/styles/Microsoft/DateNumbers.yml similarity index 100% rename from styles/Microsoft/DateNumbers.yml rename to .github/styles/Microsoft/DateNumbers.yml diff --git a/styles/Microsoft/DateOrder.yml b/.github/styles/Microsoft/DateOrder.yml similarity index 100% rename from styles/Microsoft/DateOrder.yml rename to .github/styles/Microsoft/DateOrder.yml diff --git a/styles/Microsoft/Ellipses.yml b/.github/styles/Microsoft/Ellipses.yml similarity index 100% rename from styles/Microsoft/Ellipses.yml rename to .github/styles/Microsoft/Ellipses.yml diff --git a/styles/Microsoft/FirstPerson.yml b/.github/styles/Microsoft/FirstPerson.yml similarity index 100% rename from styles/Microsoft/FirstPerson.yml rename to .github/styles/Microsoft/FirstPerson.yml diff --git a/styles/Microsoft/Foreign.yml b/.github/styles/Microsoft/Foreign.yml similarity index 100% rename from styles/Microsoft/Foreign.yml rename to .github/styles/Microsoft/Foreign.yml diff --git a/styles/Microsoft/Gender.yml b/.github/styles/Microsoft/Gender.yml similarity index 100% rename from styles/Microsoft/Gender.yml rename to .github/styles/Microsoft/Gender.yml diff --git a/styles/Microsoft/GenderBias.yml b/.github/styles/Microsoft/GenderBias.yml similarity index 100% rename from styles/Microsoft/GenderBias.yml rename to .github/styles/Microsoft/GenderBias.yml diff --git a/styles/Microsoft/GeneralURL.yml b/.github/styles/Microsoft/GeneralURL.yml similarity index 100% rename from styles/Microsoft/GeneralURL.yml rename to .github/styles/Microsoft/GeneralURL.yml diff --git a/styles/Microsoft/HeadingAcronyms.yml b/.github/styles/Microsoft/HeadingAcronyms.yml similarity index 100% rename from styles/Microsoft/HeadingAcronyms.yml rename to .github/styles/Microsoft/HeadingAcronyms.yml diff --git a/styles/Microsoft/HeadingColons.yml b/.github/styles/Microsoft/HeadingColons.yml similarity index 100% rename from styles/Microsoft/HeadingColons.yml rename to .github/styles/Microsoft/HeadingColons.yml diff --git a/styles/Microsoft/HeadingPunctuation.yml b/.github/styles/Microsoft/HeadingPunctuation.yml similarity index 100% rename from styles/Microsoft/HeadingPunctuation.yml rename to .github/styles/Microsoft/HeadingPunctuation.yml diff --git a/styles/Microsoft/Headings.yml b/.github/styles/Microsoft/Headings.yml similarity index 100% rename from styles/Microsoft/Headings.yml rename to .github/styles/Microsoft/Headings.yml diff --git a/styles/Microsoft/Hyphens.yml b/.github/styles/Microsoft/Hyphens.yml similarity index 100% rename from styles/Microsoft/Hyphens.yml rename to .github/styles/Microsoft/Hyphens.yml diff --git a/styles/Microsoft/Negative.yml b/.github/styles/Microsoft/Negative.yml similarity index 100% rename from styles/Microsoft/Negative.yml rename to .github/styles/Microsoft/Negative.yml diff --git a/styles/Microsoft/Ordinal.yml b/.github/styles/Microsoft/Ordinal.yml similarity index 100% rename from styles/Microsoft/Ordinal.yml rename to .github/styles/Microsoft/Ordinal.yml diff --git a/styles/Microsoft/OxfordComma.yml b/.github/styles/Microsoft/OxfordComma.yml similarity index 100% rename from styles/Microsoft/OxfordComma.yml rename to .github/styles/Microsoft/OxfordComma.yml diff --git a/styles/Microsoft/Passive.yml b/.github/styles/Microsoft/Passive.yml similarity index 100% rename from styles/Microsoft/Passive.yml rename to .github/styles/Microsoft/Passive.yml diff --git a/styles/Microsoft/Percentages.yml b/.github/styles/Microsoft/Percentages.yml similarity index 100% rename from styles/Microsoft/Percentages.yml rename to .github/styles/Microsoft/Percentages.yml diff --git a/styles/Microsoft/Quotes.yml b/.github/styles/Microsoft/Quotes.yml similarity index 100% rename from styles/Microsoft/Quotes.yml rename to .github/styles/Microsoft/Quotes.yml diff --git a/styles/Microsoft/RangeFormat.yml b/.github/styles/Microsoft/RangeFormat.yml similarity index 100% rename from styles/Microsoft/RangeFormat.yml rename to .github/styles/Microsoft/RangeFormat.yml diff --git a/styles/Microsoft/RangeTime.yml b/.github/styles/Microsoft/RangeTime.yml similarity index 100% rename from styles/Microsoft/RangeTime.yml rename to .github/styles/Microsoft/RangeTime.yml diff --git a/styles/Microsoft/Ranges.yml b/.github/styles/Microsoft/Ranges.yml similarity index 100% rename from styles/Microsoft/Ranges.yml rename to .github/styles/Microsoft/Ranges.yml diff --git a/styles/Microsoft/Semicolon.yml b/.github/styles/Microsoft/Semicolon.yml similarity index 100% rename from styles/Microsoft/Semicolon.yml rename to .github/styles/Microsoft/Semicolon.yml diff --git a/styles/Microsoft/SentenceLength.yml b/.github/styles/Microsoft/SentenceLength.yml similarity index 100% rename from styles/Microsoft/SentenceLength.yml rename to .github/styles/Microsoft/SentenceLength.yml diff --git a/styles/Microsoft/Spacing.yml b/.github/styles/Microsoft/Spacing.yml similarity index 100% rename from styles/Microsoft/Spacing.yml rename to .github/styles/Microsoft/Spacing.yml diff --git a/styles/Microsoft/Suspended.yml b/.github/styles/Microsoft/Suspended.yml similarity index 100% rename from styles/Microsoft/Suspended.yml rename to .github/styles/Microsoft/Suspended.yml diff --git a/styles/Microsoft/Terms.yml b/.github/styles/Microsoft/Terms.yml similarity index 100% rename from styles/Microsoft/Terms.yml rename to .github/styles/Microsoft/Terms.yml diff --git a/styles/Microsoft/URLFormat.yml b/.github/styles/Microsoft/URLFormat.yml similarity index 100% rename from styles/Microsoft/URLFormat.yml rename to .github/styles/Microsoft/URLFormat.yml diff --git a/styles/Microsoft/Units.yml b/.github/styles/Microsoft/Units.yml similarity index 100% rename from styles/Microsoft/Units.yml rename to .github/styles/Microsoft/Units.yml diff --git a/styles/Microsoft/Vocab.yml b/.github/styles/Microsoft/Vocab.yml similarity index 100% rename from styles/Microsoft/Vocab.yml rename to .github/styles/Microsoft/Vocab.yml diff --git a/styles/Microsoft/We.yml b/.github/styles/Microsoft/We.yml similarity index 100% rename from styles/Microsoft/We.yml rename to .github/styles/Microsoft/We.yml diff --git a/styles/Microsoft/Wordiness.yml b/.github/styles/Microsoft/Wordiness.yml similarity index 100% rename from styles/Microsoft/Wordiness.yml rename to .github/styles/Microsoft/Wordiness.yml diff --git a/styles/Microsoft/meta.json b/.github/styles/Microsoft/meta.json similarity index 100% rename from styles/Microsoft/meta.json rename to .github/styles/Microsoft/meta.json diff --git a/styles/Vocab/default/accept.txt b/.github/styles/Vocab/default/accept.txt similarity index 100% rename from styles/Vocab/default/accept.txt rename to .github/styles/Vocab/default/accept.txt diff --git a/styles/Vocab/default/reject.txt b/.github/styles/Vocab/default/reject.txt similarity index 100% rename from styles/Vocab/default/reject.txt rename to .github/styles/Vocab/default/reject.txt diff --git a/styles/write-good/Cliches.yml b/.github/styles/write-good/Cliches.yml similarity index 100% rename from styles/write-good/Cliches.yml rename to .github/styles/write-good/Cliches.yml diff --git a/styles/write-good/E-Prime.yml b/.github/styles/write-good/E-Prime.yml similarity index 100% rename from styles/write-good/E-Prime.yml rename to .github/styles/write-good/E-Prime.yml diff --git a/styles/write-good/Illusions.yml b/.github/styles/write-good/Illusions.yml similarity index 100% rename from styles/write-good/Illusions.yml rename to .github/styles/write-good/Illusions.yml diff --git a/styles/write-good/Passive.yml b/.github/styles/write-good/Passive.yml similarity index 100% rename from styles/write-good/Passive.yml rename to .github/styles/write-good/Passive.yml diff --git a/styles/write-good/README.md b/.github/styles/write-good/README.md similarity index 100% rename from styles/write-good/README.md rename to .github/styles/write-good/README.md diff --git a/styles/write-good/So.yml b/.github/styles/write-good/So.yml similarity index 100% rename from styles/write-good/So.yml rename to .github/styles/write-good/So.yml diff --git a/styles/write-good/ThereIs.yml b/.github/styles/write-good/ThereIs.yml similarity index 100% rename from styles/write-good/ThereIs.yml rename to .github/styles/write-good/ThereIs.yml diff --git a/styles/write-good/TooWordy.yml b/.github/styles/write-good/TooWordy.yml similarity index 100% rename from styles/write-good/TooWordy.yml rename to .github/styles/write-good/TooWordy.yml diff --git a/styles/write-good/Weasel.yml b/.github/styles/write-good/Weasel.yml similarity index 100% rename from styles/write-good/Weasel.yml rename to .github/styles/write-good/Weasel.yml diff --git a/styles/write-good/meta.json b/.github/styles/write-good/meta.json similarity index 100% rename from styles/write-good/meta.json rename to .github/styles/write-good/meta.json diff --git a/.github/workflows/style-check.yml b/.github/workflows/style-check.yml new file mode 100644 index 00000000..7c0ab268 --- /dev/null +++ b/.github/workflows/style-check.yml @@ -0,0 +1,16 @@ +name: Style check +on: pull_request + +jobs: + vale-docs: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Vale Linter + uses: errata-ai/vale-action@reviewdog + with: + vale_flags: "--glob=*.md" diff --git a/.vale.ini b/.vale.ini index 2bb3c5cf..e34c24ab 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,4 +1,4 @@ -StylesPath = styles +StylesPath = .github/styles MinAlertLevel = suggestion Vocab = default Packages = Microsoft, write-good From dc399b39a8ff311fc2f7db7d58765edb1a104a2e Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Mon, 23 Oct 2023 10:47:20 +0200 Subject: [PATCH 004/108] Update workflow setting --- .github/workflows/report-readability.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/report-readability.yml b/.github/workflows/report-readability.yml index 32d84a68..648b1700 100644 --- a/.github/workflows/report-readability.yml +++ b/.github/workflows/report-readability.yml @@ -15,3 +15,4 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} glob: '**/*.md' + fail_on_error: true From f665bf11a1c6fed2f53eda30a0330ec6f991e96a Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Mon, 23 Oct 2023 11:32:56 +0200 Subject: [PATCH 005/108] Add link check workflow (#257) * Add link check workflow * Fix errors --------- Co-authored-by: Tanay Pant --- .github/workflows/link-check.yml | 25 ++++++++++++++++++++++++ .github/workflows/report-readability.yml | 1 - .github/workflows/style-check.yml | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/link-check.yml diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml new file mode 100644 index 00000000..f639ff6f --- /dev/null +++ b/.github/workflows/link-check.yml @@ -0,0 +1,25 @@ +name: Link check + +on: + repository_dispatch: + workflow_dispatch: + schedule: + - cron: "0 9 * * 1" + +jobs: + linkChecker: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Link Checker + id: lychee + uses: lycheeverse/lychee-action@v1.8.0 + + - name: Create Issue From File + if: env.lychee_exit_code != 0 + uses: peter-evans/create-issue-from-file@v4 + with: + title: Link Checker Report + content-filepath: ./lychee/out.md + labels: report, automated issue diff --git a/.github/workflows/report-readability.yml b/.github/workflows/report-readability.yml index 648b1700..32d84a68 100644 --- a/.github/workflows/report-readability.yml +++ b/.github/workflows/report-readability.yml @@ -15,4 +15,3 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} glob: '**/*.md' - fail_on_error: true diff --git a/.github/workflows/style-check.yml b/.github/workflows/style-check.yml index 7c0ab268..d3b5842a 100644 --- a/.github/workflows/style-check.yml +++ b/.github/workflows/style-check.yml @@ -14,3 +14,4 @@ jobs: uses: errata-ai/vale-action@reviewdog with: vale_flags: "--glob=*.md" + fail_on_error: true From ac4df31c66d85e2b82441a31f31258c4da3a1f78 Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Mon, 23 Oct 2023 11:36:45 +0200 Subject: [PATCH 006/108] Remove link check GH action --- .github/workflows/link-check.yml | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 .github/workflows/link-check.yml diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml deleted file mode 100644 index f639ff6f..00000000 --- a/.github/workflows/link-check.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Link check - -on: - repository_dispatch: - workflow_dispatch: - schedule: - - cron: "0 9 * * 1" - -jobs: - linkChecker: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Link Checker - id: lychee - uses: lycheeverse/lychee-action@v1.8.0 - - - name: Create Issue From File - if: env.lychee_exit_code != 0 - uses: peter-evans/create-issue-from-file@v4 - with: - title: Link Checker Report - content-filepath: ./lychee/out.md - labels: report, automated issue From 457a4a5071d382e13826c5801dd9325c6a8ff8e6 Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Mon, 23 Oct 2023 15:32:11 +0200 Subject: [PATCH 007/108] Link check workflow (#259) * Link check workflow * Test a fix * Updates * Fixes --------- Co-authored-by: Tanay Pant --- .github/workflows/link-check.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/link-check.yml diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml new file mode 100644 index 00000000..09e3efb9 --- /dev/null +++ b/.github/workflows/link-check.yml @@ -0,0 +1,19 @@ +name: Link check for PRs + +on: + pull_request: + branches: + - main + +jobs: + markdown-link-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: gaurav-nelson/github-action-markdown-link-check@v1 + with: + use-quiet-mode: 'yes' + use-verbose-mode: 'yes' + folder-path: './' + base-branch: 'main' + check-modified-files-only: 'yes' From d743b3467ec1c30bcef1d6153ec73cdee7d1f413 Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Mon, 23 Oct 2023 15:32:30 +0200 Subject: [PATCH 008/108] Add weekly link checker (#260) * Add weekly link checker * Minor updates --------- Co-authored-by: Tanay Pant --- .github/workflows/weekly-link-check.yml | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/weekly-link-check.yml diff --git a/.github/workflows/weekly-link-check.yml b/.github/workflows/weekly-link-check.yml new file mode 100644 index 00000000..56dd6f13 --- /dev/null +++ b/.github/workflows/weekly-link-check.yml @@ -0,0 +1,29 @@ +name: Weekly link check + +on: + schedule: + - cron: "0 9 * * 1" + +jobs: + markdown-link-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: gaurav-nelson/github-action-markdown-link-check@v1 + id: check + with: + use-quiet-mode: 'yes' + use-verbose-mode: 'yes' + folder-path: './' + base-branch: 'main' + - name: Create Issue + if: "${{ steps.check.outcome != 'success' }}" + uses: dacbd/create-issue-action@main + with: + token: ${{ github.token }} + title: Link Checker Report + labels: report, automated issue + body: | + ### Context + [Failed Run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) + Workflow name - `${{ github.workflow }}` From 425dbb83163f6f5c7b5b67475a6ef0b957b61517 Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Tue, 24 Oct 2023 12:06:25 +0200 Subject: [PATCH 009/108] Add manual trigger for testing --- .github/workflows/weekly-link-check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/weekly-link-check.yml b/.github/workflows/weekly-link-check.yml index 56dd6f13..57a00809 100644 --- a/.github/workflows/weekly-link-check.yml +++ b/.github/workflows/weekly-link-check.yml @@ -3,6 +3,7 @@ name: Weekly link check on: schedule: - cron: "0 9 * * 1" + workflow_dispatch: jobs: markdown-link-check: From 6071df8a6d34ee38fcc82ae165fb606953dda460 Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Tue, 24 Oct 2023 12:11:54 +0200 Subject: [PATCH 010/108] Fix conditional for issue creation --- .github/workflows/weekly-link-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/weekly-link-check.yml b/.github/workflows/weekly-link-check.yml index 57a00809..f539cc44 100644 --- a/.github/workflows/weekly-link-check.yml +++ b/.github/workflows/weekly-link-check.yml @@ -18,7 +18,7 @@ jobs: folder-path: './' base-branch: 'main' - name: Create Issue - if: "${{ steps.check.outcome != 'success' }}" + if: ${{ steps.check.outcome != 'success' }} uses: dacbd/create-issue-action@main with: token: ${{ github.token }} From 942de0c9010eabb64dc8a1cf77e9129d440fbe28 Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Tue, 24 Oct 2023 12:21:31 +0200 Subject: [PATCH 011/108] Update conditional for workflow --- .github/workflows/weekly-link-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/weekly-link-check.yml b/.github/workflows/weekly-link-check.yml index f539cc44..2bc36903 100644 --- a/.github/workflows/weekly-link-check.yml +++ b/.github/workflows/weekly-link-check.yml @@ -18,7 +18,7 @@ jobs: folder-path: './' base-branch: 'main' - name: Create Issue - if: ${{ steps.check.outcome != 'success' }} + if: ${{ failure() }} uses: dacbd/create-issue-action@main with: token: ${{ github.token }} From 4e9e445b143c4165adfaef8d3ce44ae6270dd600 Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Tue, 24 Oct 2023 12:26:33 +0200 Subject: [PATCH 012/108] Minor updates to the workflow --- .github/workflows/weekly-link-check.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/weekly-link-check.yml b/.github/workflows/weekly-link-check.yml index 2bc36903..e3fbb8c7 100644 --- a/.github/workflows/weekly-link-check.yml +++ b/.github/workflows/weekly-link-check.yml @@ -11,7 +11,6 @@ jobs: steps: - uses: actions/checkout@v3 - uses: gaurav-nelson/github-action-markdown-link-check@v1 - id: check with: use-quiet-mode: 'yes' use-verbose-mode: 'yes' @@ -25,6 +24,5 @@ jobs: title: Link Checker Report labels: report, automated issue body: | - ### Context - [Failed Run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) - Workflow name - `${{ github.workflow }}` + Broken links found: [Failed Run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) + Workflow: `${{ github.workflow }}` From 0f562aeac2a5d261a15fb3b0a85f78c90b262fcf Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Fri, 27 Oct 2023 12:05:59 +0200 Subject: [PATCH 013/108] Update information architecture (#265) * Update information architecture * Update minimum alert level for Vale * Remove unused files --------- Co-authored-by: Tanay Pant --- .gitbook.yaml | 3 + .github/workflows/style-check.yml | 2 +- SUMMARY.md | 50 +- examples/.gitignore | 4 - examples/README.md | 11 - examples/example.env | 4 - examples/package.json | 18 - examples/protocol-kit/index.ts | 183 -- examples/relay-kit/index.ts | 83 - examples/yarn.lock | 2785 ----------------- .../bug-bounty-program.md | 0 contact-us.md => miscellaneous/contact-us.md | 0 .../past-paid-bounties.md | 0 other/README.md | 27 - other/built-on-safe.md | 13 - other/other-tools.md | 15 - other/things-you-can-do-with-safe.md | 62 - other/what-is-a-smart-account.md | 38 - other/workshops.md | 9 - .../{security => }/security-audits.md | 0 safe-smart-account/security/README.md | 0 safe-smart-account/signatures/README.md | 93 - safe-smart-account/signatures/eip-1271.md | 232 -- 23 files changed, 25 insertions(+), 3607 deletions(-) delete mode 100644 examples/.gitignore delete mode 100644 examples/README.md delete mode 100644 examples/example.env delete mode 100644 examples/package.json delete mode 100644 examples/protocol-kit/index.ts delete mode 100644 examples/relay-kit/index.ts delete mode 100644 examples/yarn.lock rename {safe-smart-account/security => miscellaneous}/bug-bounty-program.md (100%) rename contact-us.md => miscellaneous/contact-us.md (100%) rename {safe-smart-account/security => miscellaneous}/past-paid-bounties.md (100%) delete mode 100644 other/README.md delete mode 100644 other/built-on-safe.md delete mode 100644 other/other-tools.md delete mode 100644 other/things-you-can-do-with-safe.md delete mode 100644 other/what-is-a-smart-account.md delete mode 100644 other/workshops.md rename safe-smart-account/{security => }/security-audits.md (100%) delete mode 100644 safe-smart-account/security/README.md delete mode 100644 safe-smart-account/signatures/README.md delete mode 100644 safe-smart-account/signatures/eip-1271.md diff --git a/.gitbook.yaml b/.gitbook.yaml index cc03e8f2..5bd68da2 100644 --- a/.gitbook.yaml +++ b/.gitbook.yaml @@ -9,3 +9,6 @@ redirects: safe-core-protocol/security/security-audits: safe-smart-account/security/security-audits.md safe-core-protocol/signatures: safe-smart-account/signatures/README.md safe-core-protocol/signatures/eip-1271: safe-smart-account/signatures/eip-1271.md + safe-smart-account/security/security-audits: safe-smart-account/security-audits.md + safe-smart-account/security/bug-bounty-program: miscellaneous/bug-bounty-program.md + safe-smart-account/security/past-paid-bounties: miscellaneous/past-paid-bounties.md diff --git a/.github/workflows/style-check.yml b/.github/workflows/style-check.yml index d3b5842a..6541d5f5 100644 --- a/.github/workflows/style-check.yml +++ b/.github/workflows/style-check.yml @@ -13,5 +13,5 @@ jobs: - name: Vale Linter uses: errata-ai/vale-action@reviewdog with: - vale_flags: "--glob=*.md" + vale_flags: "--glob=*.md --minAlertLevel=error" fail_on_error: true diff --git a/SUMMARY.md b/SUMMARY.md index 419c0f5c..43291ba6 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,14 +1,5 @@ # Table of contents - - ## Getting started * [What is Safe?](README.md) @@ -21,17 +12,7 @@ * [Safe Guards](safe-smart-account/guards.md) -* [Security](safe-smart-account/security/README.md) - * [Bug Bounty](safe-smart-account/security/bug-bounty-program.md) - * [Past paid bounties](safe-smart-account/security/past-paid-bounties.md) - * [Audits](safe-smart-account/security/security-audits.md) - -* [Signatures](safe-smart-account/signatures/README.md) - * [EIP-1271 Off-Chain signatures](safe-smart-account/signatures/eip-1271.md) - -## Safe{Core} Protocol - -* [Overview](safe-core-protocol/README.md) +* [Audits](safe-smart-account/security-audits.md) ## Safe{Core} AA SDK @@ -51,22 +32,31 @@ * [API Kit](safe-core-sdk/api-kit/README.md) -* [Safe Apps SDK](safe-core-sdk/safe-apps/README.md) - * [Overview](safe-core-sdk/safe-apps/overview.md) - * [Get started](safe-core-sdk/safe-apps/get-started.md) - * [Release](safe-core-sdk/safe-apps/release.md) - * [Safe App example](safe-core-sdk/safe-apps/example-safe-app.md) +## Safe{Core} Protocol + +* [Overview](safe-core-protocol/README.md) ## Safe{Core} API * [Available Services](safe-core-api/available-services.md) * [Service Architecture](safe-core-api/service-architecture.md) - -* [Safe Transaction Service](safe-core-api/safe-transaction-service.md) + * [Safe Transaction Service](safe-core-api/safe-transaction-service.md) * [RPC Requirements](safe-core-api/rpc-requirements.md) +## Safe Apps SDK + +* [Safe Apps SDK](safe-core-sdk/safe-apps/README.md) + +* [Overview](safe-core-sdk/safe-apps/overview.md) + +* [Get started](safe-core-sdk/safe-apps/get-started.md) + +* [Release](safe-core-sdk/safe-apps/release.md) +* +* [Safe App example](safe-core-sdk/safe-apps/example-safe-app.md) + ## Reference * [Auth Kit](reference/safe-core-sdk/auth-kit/README.md) @@ -84,6 +74,8 @@ ---> * [API Kit](reference/safe-core-sdk/api-kit/README.md) -*** +## Miscellaneous -* [Contact us](contact-us.md) +* [Bug Bounty](miscellaneous/bug-bounty-program.md) +* [Past paid bounties](miscellaneous/past-paid-bounties.md) +* [Contact us](miscellaneous/contact-us.md) diff --git a/examples/.gitignore b/examples/.gitignore deleted file mode 100644 index 468d7fe8..00000000 --- a/examples/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Dependency directory -node_modules - -.env \ No newline at end of file diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index a3a2ee23..00000000 --- a/examples/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Safe developer docs code examples - -Code examples showing how to use safe tools. - -1. [Relay Kit Quickstart](/examples/relay-kit/index.ts): [Documentation](../learn/safe-core/safe-core-account-abstraction-sdk/relay-kit.md) - -Tip: Use [ts-node](https://github.com/TypeStrong/ts-node) to run a Typescript file in Node.js. - -```bash -npx ts-node examples/relay-kit/index.ts -``` diff --git a/examples/example.env b/examples/example.env deleted file mode 100644 index e50e87b6..00000000 --- a/examples/example.env +++ /dev/null @@ -1,4 +0,0 @@ -export OWNER_1_PRIVATE_KEY='' -export OWNER_2_PRIVATE_KEY='' -export OWNER_3_PRIVATE_KEY='' -export GELATO_RELAY_API_KEY='' \ No newline at end of file diff --git a/examples/package.json b/examples/package.json deleted file mode 100644 index c9b062f9..00000000 --- a/examples/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "safe-examples", - "version": "1.0.0", - "description": "Code examples showing how to use Safe tools.", - "main": "index.ts", - "repository": "git@github.com:5afe/safe-examples.git", - "author": "Safe ", - "license": "MIT", - "private": false, - "dependencies": { - "@safe-global/api-kit": "^1.1.0", - "@safe-global/protocol-kit": "^1.0.0", - "@safe-global/relay-kit": "^1.0.0", - "@safe-global/safe-core-sdk-types": "^2.0.0", - "dotenv": "^16.0.3", - "ethers": "5.7.2" - } -} diff --git a/examples/protocol-kit/index.ts b/examples/protocol-kit/index.ts deleted file mode 100644 index fa3060ac..00000000 --- a/examples/protocol-kit/index.ts +++ /dev/null @@ -1,183 +0,0 @@ -import SafeApiKit from '@safe-global/api-kit' -import Safe, { EthersAdapter, SafeAccountConfig, SafeFactory } from '@safe-global/protocol-kit' -import { SafeTransaction, SafeTransactionDataPartial } from '@safe-global/safe-core-sdk-types' -import { ethers } from 'ethers' - -// Run this file: -// Source examples/.env -// npx ts-node examples/protocol-kit/index.ts - -// https://chainlist.org/?search=goerli&testnets=true -const RPC_URL = 'https://goerli.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161' -const provider = new ethers.providers.JsonRpcProvider(RPC_URL) - -// Initialize signers - -// Create a wallet instance from the sender's private key -const owner1Signer = new ethers.Wallet(process.env.OWNER_1_PRIVATE_KEY!, provider) -const owner2Signer = new ethers.Wallet(process.env.OWNER_2_PRIVATE_KEY!, provider) -const owner3Signer = new ethers.Wallet(process.env.OWNER_3_PRIVATE_KEY!, provider) - -const ethAdapterOwner1 = new EthersAdapter({ - ethers, - signerOrProvider: owner1Signer -}) - -const txServiceUrl = 'https://safe-transaction-goerli.safe.global' -const safeService = new SafeApiKit({ txServiceUrl, ethAdapter: ethAdapterOwner1 }) -let safeFactory: SafeFactory -let safeSdkOwner1: Safe -let safeAddress: string - -// If you have an existing Safe, you can use it instead of deploying a new one -const EXISTING_SAFE_ADDRESS = '0xF188d41FD181f94960C5451D7ff6FdbcDf201a71' - -async function deploySafe() { - console.log('Deploying Safe...') - safeFactory = await SafeFactory.create({ ethAdapter: ethAdapterOwner1 }) - - const safeAccountConfig: SafeAccountConfig = { - owners: [ - await owner1Signer.getAddress(), - await owner2Signer.getAddress(), - await owner3Signer.getAddress() - ], - threshold: 2, - // ... (Optional params) - // https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit#deploysafe - } - - /* This Safe is connected to owner 1 because the factory was initialized - with an adapter that had owner 1 as the signer. */ - safeSdkOwner1 = await safeFactory.deploySafe({ safeAccountConfig }) - - safeAddress = await safeSdkOwner1.getAddress() - - console.log('Your Safe has been deployed:') - console.log(`https://goerli.etherscan.io/address/${safeAddress}`) - console.log(`https://app.safe.global/gor:${safeAddress}`) -} - -async function initalizeSafe(existingAddress = EXISTING_SAFE_ADDRESS) { - - safeAddress = existingAddress - const ethAdapterOwner1 = new EthersAdapter({ - ethers, - signerOrProvider: owner1Signer - }) - - safeSdkOwner1 = await Safe.create({ - ethAdapter: ethAdapterOwner1, - safeAddress - }) -} - -async function depositToSafe(depositSigner = owner1Signer, amount = '0.01') { - - const safeAmount = ethers.utils.parseUnits(amount, 'ether').toHexString() - - const transactionParameters = { - to: safeAddress, - value: safeAmount - } - - const tx = await depositSigner.sendTransaction(transactionParameters) - - console.log(`Deposit Transaction: https://goerli.etherscan.io/tx/${tx.hash}`) -} - -// Any address can be used for destination. In this example, we use vitalik.eth -async function proposeTransaction(withdrawAmount = '0.005', - destination = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045') { - - // Create a transaction object - withdrawAmount = ethers.utils.parseUnits(withdrawAmount, 'ether').toString() - - const safeTransactionData: SafeTransactionDataPartial = { - to: destination, - data: '0x', - value: withdrawAmount - } - // Create a Safe transaction with the provided parameters - const safeTransaction: SafeTransaction = await safeSdkOwner1.createTransaction({ safeTransactionData }) - - // Deterministic hash based on transaction parameters - const safeTxHash = await safeSdkOwner1.getTransactionHash(safeTransaction) - - // Sign transaction to verify that the transaction is coming from owner 1 - const senderSignature = await safeSdkOwner1.signTransactionHash(safeTxHash) - - await safeService.proposeTransaction({ - safeAddress, - safeTransactionData: safeTransaction.data, - safeTxHash, - senderAddress: await owner1Signer.getAddress(), - senderSignature: senderSignature.data, - }) -} - -async function confirmTransaction() { - - const pendingTransactions = (await safeService.getPendingTransactions(safeAddress)).results - - // Assumes that the first pending transaction is the transaction we want to confirm - const transaction = pendingTransactions[0] - const safeTxHash = transaction.safeTxHash - - const ethAdapterOwner2 = new EthersAdapter({ - ethers, - signerOrProvider: owner2Signer - }) - - const safeSdkOwner2 = await Safe.create({ - ethAdapter: ethAdapterOwner2, - safeAddress - }) - - const signature = await safeSdkOwner2.signTransactionHash(safeTxHash) - const response = await safeService.confirmTransaction(safeTxHash, signature.data) - - console.log('Transaction confirmed:', response) - return { safeTxHash, confirmationResponse: response } -} - -async function executeTransaction(safeTxHash: string, safeSdk: Safe = safeSdkOwner1) { - - let safeBalance = await safeSdk.getBalance() - - console.log(`[Before Transaction] Safe Balance: ${ethers.utils.formatUnits(safeBalance, 'ether')} ETH`) - - const safeTransaction = await safeService.getTransaction(safeTxHash) - const executeTxResponse = await safeSdk.executeTransaction(safeTransaction) - const receipt = await executeTxResponse.transactionResponse?.wait() - - console.log('Transaction executed:') - console.log(`https://goerli.etherscan.io/tx/${receipt?.transactionHash}`) - - safeBalance = await safeSdk.getBalance() - - console.log(`[After Transaction] Safe Balance: ${ethers.utils.formatUnits(safeBalance, 'ether')} ETH`) -} - -async function main() { - - if (EXISTING_SAFE_ADDRESS) { - await initalizeSafe() - } else { - await deploySafe() - await depositToSafe() - } - - await proposeTransaction() - const { safeTxHash } = await confirmTransaction() - await executeTransaction(safeTxHash) - - // Run the following to re-execute transactions: - // const pendingTransactions = await getPendingTransactions() - // const transaction = pendingTransactions[0] - // const safeTxHash = transaction.safeTxHash - // console.log({safeTxHash}) - // executeTransaction(safeTxHash, safeSdkOwner1) -} - -main() \ No newline at end of file diff --git a/examples/relay-kit/index.ts b/examples/relay-kit/index.ts deleted file mode 100644 index 296c1530..00000000 --- a/examples/relay-kit/index.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { ethers } from 'ethers' -import { GelatoRelayPack } from '@safe-global/relay-kit' -import Safe, { EthersAdapter, getSafeContract } from '@safe-global/protocol-kit' -import { MetaTransactionData, MetaTransactionOptions, OperationType, RelayTransaction } from '@safe-global/safe-core-sdk-types' - -// Customize the following variables -// https://chainlist.org -const RPC_URL = 'https://endpoints.omniatech.io/v1/bsc/mainnet/public' -const provider = new ethers.providers.JsonRpcProvider(RPC_URL) -const signer = new ethers.Wallet(process.env.OWNER_1_PRIVATE_KEY!, provider) -const safeAddress = '0x6651FD6Abe0843f7B6CB9047b89655cc7Aa78221' // Safe from which the transaction will be sent. Replace with your Safe address -const chainId = 56 - -// Any address can be used for destination. In this example, we use vitalik.eth -const destinationAddress = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' -const withdrawAmount = ethers.utils.parseUnits('0.0005', 'ether').toString() - -// Get Gelato Relay API Key: https://relay.gelato.network/ -const GELATO_RELAY_API_KEY = process.env.GELATO_RELAY_API_KEY! - -// Usually a limit of 21000 is used but for smart contract interactions, you can increase to 100000 because of the more complex interactions. -const gasLimit = '100000' - -// Create a transaction object -const safeTransactionData: MetaTransactionData = { - to: destinationAddress, - data: '0x',// leave blank for ETH transfers - value: withdrawAmount, - operation: OperationType.Call -} -const options: MetaTransactionOptions = { - gasLimit, - isSponsored: true -} - -// Create the Protocol and Relay Kits instances - -async function relayTransaction() { - const ethAdapter = new EthersAdapter({ - ethers, - signerOrProvider: signer - }) - - const safeSDK = await Safe.create({ - ethAdapter, - safeAddress - }) - - const relayKit = new GelatoRelayPack(GELATO_RELAY_API_KEY) - - // Prepare the transaction - const safeTransaction = await safeSDK.createTransaction({ - safeTransactionData - }) - - const signedSafeTx = await safeSDK.signTransaction(safeTransaction) - const safeSingletonContract = await getSafeContract({ ethAdapter, safeVersion: await safeSDK.getContractVersion() }) - - const encodedTx = safeSingletonContract.encode('execTransaction', [ - signedSafeTx.data.to, - signedSafeTx.data.value, - signedSafeTx.data.data, - signedSafeTx.data.operation, - signedSafeTx.data.safeTxGas, - signedSafeTx.data.baseGas, - signedSafeTx.data.gasPrice, - signedSafeTx.data.gasToken, - signedSafeTx.data.refundReceiver, - signedSafeTx.encodedSignatures() - ]) - - const relayTransaction: RelayTransaction = { - target: safeAddress, - encodedTransaction: encodedTx, - chainId: chainId, - options - } - const response = await relayKit.relayTransaction(relayTransaction) - - console.log(`Relay Transaction Task ID: https://relay.gelato.digital/tasks/status/${response.taskId}`) -} - -relayTransaction() diff --git a/examples/yarn.lock b/examples/yarn.lock deleted file mode 100644 index bdde832c..00000000 --- a/examples/yarn.lock +++ /dev/null @@ -1,2785 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ethereumjs/common@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" - integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.1" - -"@ethereumjs/common@^2.5.0": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - -"@ethereumjs/tx@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" - integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog== - dependencies: - "@ethereumjs/common" "^2.5.0" - ethereumjs-util "^7.1.2" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@gelatonetwork/relay-sdk@^3.1.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@gelatonetwork/relay-sdk/-/relay-sdk-3.5.0.tgz#f8592b17492a582421dbeea39ec03180f82d20f3" - integrity sha512-oj4rFH09yzFT4wnYCv7V3bZCIVhpuKbnK5jv0fgzclxTbbA6UEWZErn3QiD13yspiIkKafSgMWT0G8z41CINYg== - dependencies: - axios "0.24.0" - ethers "5.7.2" - -"@safe-global/api-kit@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@safe-global/api-kit/-/api-kit-1.1.0.tgz#b46bcb4491d43576832488183019769d37e3f3e6" - integrity sha512-3HB+Vl3dFunID4kadpAqYQQ9lfIJuCk9pYoJsfSWGeEgOOGFwexg3UtO8hh0JXoIO+bX8pm8x5GEF6pX8HeNTQ== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@safe-global/safe-core-sdk-types" "^2.0.0" - node-fetch "^2.6.6" - -"@safe-global/protocol-kit@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@safe-global/protocol-kit/-/protocol-kit-1.0.0.tgz#92a50d975bc3a9971993590c254a48a184c054bf" - integrity sha512-dRU4ik7PVAWW/j9N1njaxAMA5qeXS7TQGrls2sKrwEfZTjoAJ0Jzn9BWn43yP9CaQJ++g5vZ9FjcHnAkVikblg== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/solidity" "^5.7.0" - "@safe-global/safe-deployments" "^1.22.0" - ethereumjs-util "^7.1.5" - semver "^7.3.8" - web3 "^1.8.1" - web3-core "^1.8.1" - web3-utils "^1.8.1" - -"@safe-global/relay-kit@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@safe-global/relay-kit/-/relay-kit-1.0.0.tgz#e2762badb6d9397acef05e8587f26fdc4553b5d0" - integrity sha512-kOFxOoXDd2ZfLH3r2kUocZquhfY/V0K4AXzzFzVU2W8f89XzfgiG3ibjftMMuW650WUG5mHB8sXEcjSilPXviA== - dependencies: - "@gelatonetwork/relay-sdk" "^3.1.0" - "@safe-global/protocol-kit" "^1.0.0" - "@safe-global/safe-core-sdk-types" "^2.0.0" - ethers "^5.7.2" - -"@safe-global/safe-core-sdk-types@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@safe-global/safe-core-sdk-types/-/safe-core-sdk-types-2.0.0.tgz#643dd87c9738ff8b3eaecb06ce399cae8a48af02" - integrity sha512-9bcGaEuJCRG1ccGxKNjLzJuXMqdJZEFkWi+1vf6UFO8gpmanasvBozMEo6fzUMtDBGgkkStYywhO6Cp0tKyD3Q== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/contracts" "^5.7.0" - "@safe-global/safe-deployments" "^1.22.0" - web3-core "^1.8.1" - web3-utils "^1.8.1" - -"@safe-global/safe-deployments@^1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@safe-global/safe-deployments/-/safe-deployments-1.22.0.tgz#4214ac5a9ebcad7cdbf5f641b0728bc0e497286e" - integrity sha512-SmbeCRMlcO/EONxbV6nP6pM/60q0NIHVezxx5FMv0dIAkDffdbm25reonKlOk3AJYW1b/c6pZA0RbWDwFSJEkQ== - dependencies: - semver "^7.3.7" - -"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.0.1" - -"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== - dependencies: - "@types/node" "*" - -"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "20.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.0.tgz#258805edc37c327cf706e64c6957f241ca4c4c20" - integrity sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A== - -"@types/node@^12.12.6": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== - dependencies: - "@types/node" "*" - -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -"@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== - dependencies: - "@types/node" "*" - -abortcontroller-polyfill@^1.7.3: - version "1.7.5" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" - integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -ajv@^6.12.3: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - -axios@0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== - dependencies: - follow-redirects "^1.14.4" - -base-x@^3.0.2, base-x@^3.0.8: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -bignumber.js@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.11.6, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@^1.16.0: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -buffer-to-arraybuffer@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bufferutil@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== - dependencies: - node-gyp-build "^4.3.0" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-lookup@^6.0.4: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" - integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -cids@^0.7.1: - version "0.7.5" - resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" - integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== - dependencies: - buffer "^5.5.0" - class-is "^1.1.0" - multibase "~0.6.0" - multicodec "^1.0.0" - multihashes "~0.4.15" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-is@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" - integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -cors@^2.8.1: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-fetch@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -dotenv@^16.0.3: - version "16.0.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" - integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eth-ens-namehash@2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" - integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== - dependencies: - idna-uts46-hx "^2.3.1" - js-sha3 "^0.5.7" - -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@^0.1.26: - version "0.1.29" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" - integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - nano-json-stream-parser "^0.1.2" - servify "^0.1.12" - ws "^3.0.0" - xhr-request-promise "^0.1.2" - -ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== - dependencies: - js-sha3 "^0.8.0" - -ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== - dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethers@5.7.2, ethers@^5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - -evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -express@^4.14.0: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -follow-redirects@^1.14.4: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data-encoder@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" - integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" - integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== - dependencies: - "@sindresorhus/is" "^4.6.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - form-data-encoder "1.7.1" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^2.0.0" - -got@^11.8.5: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -http2-wrapper@^2.1.10: - version "2.2.0" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" - integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -idna-uts46-hx@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" - integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== - dependencies: - punycode "2.1.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-typed-array@^1.1.10, is-typed-array@^1.1.3: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -keccak@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" - integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -keyv@^4.0.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== - dependencies: - json-buffer "3.0.1" - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== - dependencies: - mkdirp "*" - -mkdirp@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - -mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mock-fs@^4.1.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" - integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multibase@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" - integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multibase@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" - integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multicodec@^0.5.5: - version "0.5.7" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" - integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== - dependencies: - varint "^5.0.0" - -multicodec@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" - integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== - dependencies: - buffer "^5.6.0" - varint "^5.0.0" - -multihashes@^0.4.15, multihashes@~0.4.15: - version "0.4.21" - resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" - integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== - dependencies: - buffer "^5.5.0" - multibase "^0.7.0" - varint "^5.0.0" - -nano-json-stream-parser@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" - integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.6: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" - integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== - dependencies: - http-https "^1.0.0" - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -parse-headers@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" - integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -request@^2.79.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -semver@^7.3.7, semver@^7.3.8: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -servify@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" - integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== - dependencies: - body-parser "^1.16.0" - cors "^2.8.1" - express "^4.14.0" - request "^2.79.0" - xhr "^2.3.3" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^2.7.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -swarm-js@^0.1.40: - version "0.1.42" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" - integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^11.8.5" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request "^1.0.1" - -tar@^4.0.2: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-set-query@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== - -utf-8-validate@^5.0.2: - version "5.0.10" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" - integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== - -varint@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -web3-bzz@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.9.0.tgz#3334049f386e73e2b3dcfa96432e65391538d8ac" - integrity sha512-9Zli9dikX8GdHwBb5/WPzpSVuy3EWMKY3P4EokCQra31fD7DLizqAAaTUsFwnK7xYkw5ogpHgelw9uKHHzNajg== - dependencies: - "@types/node" "^12.12.6" - got "12.1.0" - swarm-js "^0.1.40" - -web3-core-helpers@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.9.0.tgz#a1ca4ac7b9cec822886643312d2e98b0e4d8f1bc" - integrity sha512-NeJzylAp9Yj9xAt2uTT+kyug3X0DLnfBdnAcGZuY6HhoNPDIfQRA9CkJjLngVRlGTLZGjNp9x9eR+RyZQgUlXg== - dependencies: - web3-eth-iban "1.9.0" - web3-utils "1.9.0" - -web3-core-method@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.9.0.tgz#81da8aa21503b470537c9f075f30adfad194a2d8" - integrity sha512-sswbNsY2xRBBhGeaLt9c/eDc+0yDDhi6keUBAkgIRa9ueSx/VKzUY9HMqiV6bXDcGT2fJyejq74FfEB4lc/+/w== - dependencies: - "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.9.0" - web3-core-promievent "1.9.0" - web3-core-subscriptions "1.9.0" - web3-utils "1.9.0" - -web3-core-promievent@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.9.0.tgz#2598a4d91b4edd3607366529f52bc96dee9f6d83" - integrity sha512-PHG1Mn23IGwMZhnPDN8dETKypqsFbHfiyRqP+XsVMPmTHkVfzDQTCBU/c2r6hUktBDoGKut5xZQpGfhFk71KbQ== - dependencies: - eventemitter3 "4.0.4" - -web3-core-requestmanager@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.9.0.tgz#9d7d0e7f890cf7a24e9c568b9772c64d57fc4fcd" - integrity sha512-hcJ5PCtTIJpj+8qWxoseqlCovDo94JJjTX7dZOLXgwp8ah7E3WRYozhGyZocerx+KebKyg1mCQIhkDpMwjfo9Q== - dependencies: - util "^0.12.5" - web3-core-helpers "1.9.0" - web3-providers-http "1.9.0" - web3-providers-ipc "1.9.0" - web3-providers-ws "1.9.0" - -web3-core-subscriptions@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.9.0.tgz#dc67b478875dab1875844df3307a986dd7d468dd" - integrity sha512-MaIo29yz7hTV8X8bioclPDbHFOVuHmnbMv+D3PDH12ceJFJAXGyW8GL5KU1DYyWIj4TD1HM4WknyVA/YWBiiLA== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.9.0" - -web3-core@1.9.0, web3-core@^1.8.1: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.9.0.tgz#9cfafb2f8c01931429108af75205610406a5a1ab" - integrity sha512-DZ+TPmq/ZLlx4LSVzFgrHCP/QFpKDbGWO4HoquZSdu24cjk5SZ+FEU1SZB2OaK3/bgBh+25mRbmv8y56ysUu1w== - dependencies: - "@types/bn.js" "^5.1.1" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.9.0" - web3-core-method "1.9.0" - web3-core-requestmanager "1.9.0" - web3-utils "1.9.0" - -web3-eth-abi@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.9.0.tgz#18662ef68bd3d25eedd9a1a1484089c39529c652" - integrity sha512-0BLQ3FKMrzJkA930jOX3fMaybAyubk06HChclLpiR0NWmgWXm1tmBrJdkyRy2ZTZpmfuZc9xTFRfl0yZID1voA== - dependencies: - "@ethersproject/abi" "^5.6.3" - web3-utils "1.9.0" - -web3-eth-accounts@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.9.0.tgz#fab7d563c63bdff2aa5ad89a94faf128961d9504" - integrity sha512-VeIZVevmnSll0AC1k5F/y398ZE89d1SRuYk8IewLUhL/tVAsFEsjl2SGgm0+aDcHmgPrkW+qsCJ+C7rWg/N4ZA== - dependencies: - "@ethereumjs/common" "2.5.0" - "@ethereumjs/tx" "3.3.2" - eth-lib "0.2.8" - ethereumjs-util "^7.1.5" - scrypt-js "^3.0.1" - uuid "^9.0.0" - web3-core "1.9.0" - web3-core-helpers "1.9.0" - web3-core-method "1.9.0" - web3-utils "1.9.0" - -web3-eth-contract@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.9.0.tgz#00b7ac8314d562d10d7dd0c7d0f52555c3862995" - integrity sha512-+j26hpSaEtAdUed0TN5rnc+YZOcjPxMjFX4ZBKatvFkImdbVv/tzTvcHlltubSpgb2ZLyZ89lSL6phKYwd2zNQ== - dependencies: - "@types/bn.js" "^5.1.1" - web3-core "1.9.0" - web3-core-helpers "1.9.0" - web3-core-method "1.9.0" - web3-core-promievent "1.9.0" - web3-core-subscriptions "1.9.0" - web3-eth-abi "1.9.0" - web3-utils "1.9.0" - -web3-eth-ens@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.9.0.tgz#2014b16e1116be5ab34404a8db29ad1d8632ced0" - integrity sha512-LOJZeN+AGe9arhuExnrPPFYQr4WSxXEkpvYIlst/joOEUNLDwfndHnJIK6PI5mXaYSROBtTx6erv+HupzGo7vA== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.9.0" - web3-core-helpers "1.9.0" - web3-core-promievent "1.9.0" - web3-eth-abi "1.9.0" - web3-eth-contract "1.9.0" - web3-utils "1.9.0" - -web3-eth-iban@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.9.0.tgz#a8f838e42c20d49ff58aaa9f67ece47a968e40b1" - integrity sha512-jPAm77PuEs1kE/UrrBFJdPD2PN42pwfXA0gFuuw35bZezhskYML9W4QCxcqnUtceyEA4FUn7K2qTMuCk+23fog== - dependencies: - bn.js "^5.2.1" - web3-utils "1.9.0" - -web3-eth-personal@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.9.0.tgz#f5092bcb2688979dd7778d5a56ae6922c341ce52" - integrity sha512-r9Ldo/luBqJlv1vCUEQnUS+C3a3ZdbYxVHyfDkj6RWMyCqqo8JE41HWE+pfa0RmB1xnGL2g8TbYcHcqItck/qg== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.9.0" - web3-core-helpers "1.9.0" - web3-core-method "1.9.0" - web3-net "1.9.0" - web3-utils "1.9.0" - -web3-eth@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.9.0.tgz#1fe82ba429a44b1aa0a3b95de3e79e6c5a9eb00c" - integrity sha512-c5gSWk9bLNr6VPATHmZ1n7LTIefIZQnJMzfnvkoBcIFGKJbGmsuRhv6lEXsKdAO/FlqYnSbaw3fOq1fVFiIOFQ== - dependencies: - web3-core "1.9.0" - web3-core-helpers "1.9.0" - web3-core-method "1.9.0" - web3-core-subscriptions "1.9.0" - web3-eth-abi "1.9.0" - web3-eth-accounts "1.9.0" - web3-eth-contract "1.9.0" - web3-eth-ens "1.9.0" - web3-eth-iban "1.9.0" - web3-eth-personal "1.9.0" - web3-net "1.9.0" - web3-utils "1.9.0" - -web3-net@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.9.0.tgz#ee8799bf766039aa5b157d6db0be5ffdecd39d64" - integrity sha512-L+fDZFgrLM5Y15aonl2q6L+RvfaImAngmC0Jv45hV2FJ5IfRT0/2ob9etxZmvEBWvOpbqSvghfOhJIT3XZ37Pg== - dependencies: - web3-core "1.9.0" - web3-core-method "1.9.0" - web3-utils "1.9.0" - -web3-providers-http@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.9.0.tgz#93cd3eb42fff974c9f7634ede1a9795d6435c3fe" - integrity sha512-5+dMNDAE0rRFz6SJpfnBqlVi2J5bB/Ivr2SanMt2YUrkxW5t8betZbzVwRkTbwtUvkqgj3xeUQzqpOttiv+IqQ== - dependencies: - abortcontroller-polyfill "^1.7.3" - cross-fetch "^3.1.4" - es6-promise "^4.2.8" - web3-core-helpers "1.9.0" - -web3-providers-ipc@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.9.0.tgz#db486cb0dde9062ac6055478861e3d37535924d2" - integrity sha512-cPXU93Du40HCylvjaa5x62DbnGqH+86HpK/+kMcFIzF6sDUBhKpag2tSbYhGbj7GMpfkmDTUiiMLdWnFV6+uBA== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.9.0" - -web3-providers-ws@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.9.0.tgz#568330766e8abbb6eb43e1153a72fb24398fcb7e" - integrity sha512-JRVsnQZ7j2k1a2yzBNHe39xqk1ijOv01dfIBFw52VeEkSRzvrOcsPIM/ttSyBuJqt70ntMxXY0ekCrqfleKH/w== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.9.0" - websocket "^1.0.32" - -web3-shh@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.9.0.tgz#75a37cd9f78d485ee5f018e2e66853e1e1c6ce4f" - integrity sha512-bIBZlralgz4ICCrwkefB2nPPJWfx28NuHIpjB7d9ADKynElubQuqudYhKtSEkKXACuME/BJm0pIFJcJs/gDnMg== - dependencies: - web3-core "1.9.0" - web3-core-method "1.9.0" - web3-core-subscriptions "1.9.0" - web3-net "1.9.0" - -web3-utils@1.9.0, web3-utils@^1.8.1: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.9.0.tgz#7c5775a47586cefb4ad488831be8f6627be9283d" - integrity sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ== - dependencies: - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -web3@^1.8.1: - version "1.9.0" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.9.0.tgz#4fde5d134f8ee11355ed5bfa1bb41f8bc58e23f3" - integrity sha512-E9IvVy/d2ozfQQsCiV+zh/LmlZGv9fQxI0UedDVjm87yOKf4AYbBNEn1iWtHveiGzAk2CEMZMUzAZzaQNSSYog== - dependencies: - web3-bzz "1.9.0" - web3-core "1.9.0" - web3-eth "1.9.0" - web3-eth-personal "1.9.0" - web3-net "1.9.0" - web3-shh "1.9.0" - web3-utils "1.9.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -websocket@^1.0.32: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-typed-array@^1.1.2: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@^3.0.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -xhr-request-promise@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" - integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== - dependencies: - xhr-request "^1.1.0" - -xhr-request@^1.0.1, xhr-request@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" - integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== - dependencies: - buffer-to-arraybuffer "^0.0.5" - object-assign "^4.1.1" - query-string "^5.0.1" - simple-get "^2.7.0" - timed-out "^4.0.1" - url-set-query "^1.0.0" - xhr "^2.0.4" - -xhr@^2.0.4, xhr@^2.3.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^3.0.0, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/safe-smart-account/security/bug-bounty-program.md b/miscellaneous/bug-bounty-program.md similarity index 100% rename from safe-smart-account/security/bug-bounty-program.md rename to miscellaneous/bug-bounty-program.md diff --git a/contact-us.md b/miscellaneous/contact-us.md similarity index 100% rename from contact-us.md rename to miscellaneous/contact-us.md diff --git a/safe-smart-account/security/past-paid-bounties.md b/miscellaneous/past-paid-bounties.md similarity index 100% rename from safe-smart-account/security/past-paid-bounties.md rename to miscellaneous/past-paid-bounties.md diff --git a/other/README.md b/other/README.md deleted file mode 100644 index f6b724a6..00000000 --- a/other/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# ✅ Why build on Safe? - -There are a few key reasons why you might want to consider building your application on top of Safe's smart contract account standard. Overall, building your application on top of Safe can provide a range of benefits, including enhanced security, improved user experience, and greater flexibility and integration. - -Multi-signature control is the tip of the iceberg and Safe accounts unlock a wide range of possibilities for new form of custody, ownership, and identity. - -
- -#### High security - -Safe's **multi-signature** functionality allows you to define a list of owner accounts and a threshold number of accounts required to confirm a transaction. Once the threshold of owner accounts have confirmed a transaction, the Safe transaction can be executed. Owners can either be EOAs or other smart contract accounts. - -#### Advanced execution logic - -It is possible to make use of different **Safe Library contracts** to perform complex transactions. A very common example of this is **batched transactions** where multiple simple Ethereum transactions are combined and executed at once. That means instead of having to sign several transactions sequentially, a user just needs to sign one batched transaction. - -#### Advanced access management - -You can add **Safe Modules** to your Safe. Thereby it is possible to implement more fine-grained access management. For instance, it is possible to define a module that can only be used to **recover access** to a Safe under specific circumstances. A popular version of this is the **Social Recovery Module**. A different example is the **allowance module** that allow owners of a Safe to grant limited execution permission, such as a daily limit to external accounts. - -#### Token callback support - -Many new tokens require wallet contracts to implement callbacks. Token standards like **ERC721** and **ERC1155** allow contracts to immediately react to receiving tokens through these and make it even possible to reject the transfer completely. - -#### Ether-less accounts - -Another core functionality of the Safe is **token payment**. Generally, Ethereum transactions require ETH for paying transaction fees (“gas”). With the Safe, users can pay transaction fees in a number of supported ERC20 tokens. This is realized via a transaction relay service that accepts those tokens and submits the transactions to the blockchain, therefore paying the gas fee in ETH. With the same functionality, Ether-less transactions can be implemented, where a 3rd party pays transaction fees on behalf of a Gnosis Safe via the same relay service. diff --git a/other/built-on-safe.md b/other/built-on-safe.md deleted file mode 100644 index 5ce985da..00000000 --- a/other/built-on-safe.md +++ /dev/null @@ -1,13 +0,0 @@ -# Built on Safe - -Projects building on Safe. - -If you know any projects missing on this list, please let us know [on Discord](https://chat.safe.global) or Twitter [@safe](https://twitter.com/safe). - -## [Safe Ecosystem Map](https://twitter.com/safe/status/1620017821714624518) - -![Fnt1noBacAAh5X6](https://user-images.githubusercontent.com/9806858/234247416-fe59daaa-472e-4217-8b2b-f9abb43add61.jpg) - -## [Hackathon Winners](https://safe-global.notion.site/6b4fe0e6c2bc49cb9c19f24d00ac02c0?v=29b399efc934443e874fba70175f8630) - -![safe-hackathon-winners](https://user-images.githubusercontent.com/9806858/234252894-5f5d1f32-f773-4f2d-9d87-da221447f645.gif) diff --git a/other/other-tools.md b/other/other-tools.md deleted file mode 100644 index 5c787971..00000000 --- a/other/other-tools.md +++ /dev/null @@ -1,15 +0,0 @@ -# Tools, Frameworks, and Extensions - -The Safe Team and the community has created a few helpful tools, services and frameworks. - -[Safe CLI](https://github.com/gnosis/safe-cli) is a command-line utility used to interact with the Safe Contracts. - -[Safe Tasks](https://github.com/gnosis/safe-tasks/) is a Hardhat task collection for the Safe contracts. - -[Scaffold-ETH Safe Starter Kit](https://github.com/scaffold-eth/scaffold-eth/tree/gnosis-starter-kit) is a fork of the Scaffold-ETH framework integrated with the [Safe Core SDK](safe-core/safe-core-account-abstraction-sdk/protocol-kit/core-sdk.md) to allow for the rapid prototyping of new UIs and user experiences. - -[Ape Safe](https://safe.ape.tax) is a tool built by Yearn.Finance's [Banteg](https://github.com/banteg) used to build and execute multiple transactions safely by previous the state change on a local blockchain before executing the transaction. - -[Zodiac](https://github.com/gnosis/zodiac) is a series of tools to extend a Safe for DAO governance and treasury management. - -Safe [DID](https://github.com/ceramicnetwork/CIPs/blob/main/CIPs/cip-101.md) is a method that converts a Safe instance into a DID diff --git a/other/things-you-can-do-with-safe.md b/other/things-you-can-do-with-safe.md deleted file mode 100644 index d67cdc11..00000000 --- a/other/things-you-can-do-with-safe.md +++ /dev/null @@ -1,62 +0,0 @@ -# Things you can do with Safe - -Safe accounts are built to be fully customizable. This means that the only limit to what you can do with a Safe account is your imagination. - -
- -### Live features - -* [Multisig](https://help.safe.global/en/articles/40863-signature-policies): Require multiple signing accounts to approve a transaction before executing. -* [Spending policies](https://help.safe.global/en/articles/40842-set-up-and-use-spending-limits): Limit the amount that a signing account can withdraw from a Safe. -* Automation - * Scheduling transactions: Automatically execute transactions on a schedule. -* Access controls - * Roles and permissions: Set specific rules on what types of actions certain accounts can perform. - * Apps and permissions: Set specific rules on what types of actions certain apps can perform. - * Hybrid custody -* Recovery mechanisms: Allow owners to recover access to their Safe if they lose a primary key. -* Hierarchies: Different permission sets based on roles within an organization. -* Transaction batching: Send multiple transactions at once. -* [Gas abstraction](safe-core-sdk/relay-kit/README.md): Pay for transaction fees using ERC-20 tokens. -* Ethereum staking: [Stake ETH with Confidence: How to Use Safe Smart Accounts for Ethereum Validators](https://help.safe.global/en/articles/71879-stake-eth-with-confidence-how-to-use-safe-smart-accounts-for-ethereum-validators) -* Security - * Allow & deny lists - * Fraud monitoring - * Post-quantum signature schemes - -## Protocols - -- Ethereum and 12 other layer 1 (L1) and test networks -- ERC-20s -- Layer two (L2) accounts based on smart contracts - -## Layer 2s (L2s) - -#### About - -- Requires creating a new Safe on each network -- Make sure to use the correct token contract for the given Layer 2 (L2) - -#### Types - -- Arbitrum -- [Optimism](https://dune.com/safe/optimism) -- [Polygon](https://dune.com/safe/polygon) -- [xDAI](https://dune.com/safe/gnosis-chain) (Gnosis Chain) -- AVAX -- [BSC](https://dune.com/safe/bsc) -- EWC - -#### Multichain strategy - -- Enable the features of programmable accounts without interacting directly with the contracts. - - [Account Abstraction is NOT coming](https://safe.mirror.xyz/9KmZjEbFkmI79s28d9xar6JWYrE50F5AHpa5CR12YGI) -- Use a universal readable name/ID to interact across many protocols. - - E.g. Ethereum Name Service (ENS) maps the name/ID to each chain-specific address. - - [Account Abstraction in a Multichain Landscape - Part 1: Addresses](https://safe.mirror.xyz/4GcGAOFno-suTCjBewiYH4k4yXPDdIukC5woO5Bjc4w) - -## Which Safe tool should I use? - -Here is a diagram to help you decide which tool to use. - -![](<../.gitbook/assets/diagram-safe-tools.png>) diff --git a/other/what-is-a-smart-account.md b/other/what-is-a-smart-account.md deleted file mode 100644 index d10be7c9..00000000 --- a/other/what-is-a-smart-account.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -description: >- - Everything you need to know about Smart Contracts Accounts and how to build - with them. ---- - -# What is a Smart Account? - -A Smart Account (aka Smart Contract Account) is a fully customizable account. If you think of your regular bank account or crypto account, it uses keys to sign transactions. This means that anyone with the key (password, private key) can sign transactions and approve sending money out of your account. - -If someone gained access to your username and password, they would have access to all your money. If you forgot your password, then you have to go through a lengthy password reset process with a regular bank account. If it's a crypto account, your money is gone forever. - -A Smart Account is fully customizable, which means you can create any type of rule you want. The most common type of rule you can create is a multiple-signer account (also known as a multi-sig). For example, instead of having just one private key authorized to sign on behalf of your account, you can require multiple signers. For example, you can add 2 other people you trust to be signers of your account. Then if you want to send any transactions, at least 2 of them have to approve the transaction. - -Another common rule is to set a spending limit. You can set a limit that allows you to withdraw amounts under $100, without needing approval from everyone else. However, for larger amounts, you could require 2 other people to sign and approve the transaction. - -When you change the very idea of an account from something that is simply using a password or private key to approve transactions, to something that is fully customizable from the ground up, the possibilities are endless. This guide will show you some of the possibilities and give you the resources to make those possibilities a reality. - -### Smart Accounts vs Signing Accounts - -The account that uses a key to sign transactions is a signing account. It's also known as an Externally Owned Account (EOA). - -
- -
- -A common misconception is that all Smart Accounts are multi-sig accounts. This isn't true. A multi-sig account is a specific type of Smart Account that requires multiple signing accounts to approve transactions. In fact, the [most common Smart Account configuration is a 1/1](https://twitter.com/tomiwa1a/status/1619059531480444933). This means that only one signer is required for the account. Why would someone create a smart account that only has one signer? Martin Köppelmann has a [great thread explaining this](https://twitter.com/koeppelmann/status/1618998969992097793). In summary: - -1. Swap keys if your private key is compromised - * This won't work if a hacker has your private keys since they can also swap the keys. However, if you leak your private keys, you can change the owner before other people find it, without having to move all your assets. -2. Pay for transactions using any ERC20 tokens or even cash. The relayer pays for gas on your behalf -3. Add customizable rules such as spending limits - -### Further reading - -1. [Safe{Core} Account Abstraction SDK](safe-core-sdk/introduction.md) -2. [Safe Modules](safe-core-protocol/modules.md) -3. [Safe Guards](safe-core-protocol/guards.md) diff --git a/other/workshops.md b/other/workshops.md deleted file mode 100644 index 1d3f259c..00000000 --- a/other/workshops.md +++ /dev/null @@ -1,9 +0,0 @@ -# Workshops - -- [ETHTokyo 2023 - How to Make a Group Wallet to Buy Things with Frens using Safe{Core} Account Abstraction SDK](https://www.youtube.com/watch?v=Vgfgr-oNLMk&t=8360s) ([slides](https://docs.google.com/presentation/d/1menJOy_Hk3dS89VmpDU_ZxJcM90Set3ozNRZgBYJWy8/edit?usp=sharing)) -- [ETHIndia 2022 - Safe Core SDK 🛠 Managing Safe Modules and Guards](https://www.youtube.com/watch?v=ppwE9GXC5MA) ([slides](https://docs.google.com/presentation/d/1hw4S0bna-9cit-oiZkAh11mk_rse6zqTebXJiRRfUc4/edit?usp=sharing)) -- [HackMoney 2022 - Safe modding 101: Create your own Safe Module](https://www.youtube.com/watch?v=QdOfuxxXVBA) -- [ETHDenver 2021 - Technical Introduction to the Safe Apps SDK](https://www.youtube.com/watch?v=QG94GpCE0p0) -- [Hello Decentralization 2021 - Technical Introduction to the Safe Apps SDK](https://www.crowdcast.io/e/hello-decentralization/49) -- [ETHOnline 2020 - Introduction to building with Safe Apps SDK & Contract Proxy Kit](https://www.youtube.com/watch?v=YGw8WfBw5OI) -- [TruffleCon 2020 - Leverage Smart Contract Accounts for Your Dapp](https://www.youtube.com/watch?v=J_3BpQGTLeI) diff --git a/safe-smart-account/security/security-audits.md b/safe-smart-account/security-audits.md similarity index 100% rename from safe-smart-account/security/security-audits.md rename to safe-smart-account/security-audits.md diff --git a/safe-smart-account/security/README.md b/safe-smart-account/security/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/safe-smart-account/signatures/README.md b/safe-smart-account/signatures/README.md deleted file mode 100644 index 6acd75dd..00000000 --- a/safe-smart-account/signatures/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# Signatures - -The Safe supports different types of signatures. All signatures are combined into a single `bytes` and transmitted to the contract when a transaction should be executed. - -### Encoding - -Each signature has a constant length of 65 bytes. If more data is necessary it can be appended to the end of concatenated constant data of all signatures. The position is encoded into the constant length data. - -Constant part per signature: `{(max) 64-bytes signature data}{1-byte signature type}` - -All the signatures are sorted by the signer address and concatenated. - -#### ECDSA signature - -`31 > signature type > 26` - -To be able to have the ECDSA signature without the need of additional data we use the signature type byte to encode `v`. - -**Constant part:** - -`{32-bytes r}{32-bytes s}{1-byte v}` - -`r`, `s` and `v` are the required parts of the ECDSA signature to recover the signer. - -#### `eth_sign` signature - -`signature type > 30` - -To be able to use `eth_sign` we need to take the parameters `r`, `s` and `v` from calling `eth_sign` and set `v = v + 4` - -**Constant part:** - -`{32-bytes r}{32-bytes s}{1-byte v}` - -`r`, `s` and `v`are the required parts of the ECDSA signature to recover the signer. `v` will be substracted by `4` to calculate the signature. - -#### Contract signature (EIP-1271) - -`signature type == 0` - -**Constant part:** - -`{32-bytes signature verifier}{32-bytes data position}{1-byte signature type}` - -**Signature verifier** - Padded address of the contract that implements the EIP 1271 interface to verify the signature - -**Data position** - Position of the start of the signature data (offset relative to the beginning of the signature data) - -**Signature type** - 0 - -**Dynamic part (solidity bytes):** - -`{32-bytes signature length}{bytes signature data}` - -**Signature data** - Signature bytes that are verified by the signature verifier - -The method `signMessage` can be used to mark a message as signed on-chain. - -#### Pre-validated signatures - -`signature type == 1` - -**Constant Part:** - -`{32-bytes hash validator}{32-bytes ignored}{1-byte signature type}` - -**Hash validator** - Padded address of the account that pre-validated the hash that should be validated. The Safe keeps track of all hashes that have been pre validated. This is done with a **mapping address to mapping of bytes32 to boolean** where it is possible to set a hash as validated by a certain address (hash validator). To add an entry to this mapping use `approveHash`. Also if the validator is the sender of transaction that executed the Safe transaction it is **not** required to use `approveHash` to add an entry to the mapping. (This can be seen in the [Team Edition tests](https://github.com/gnosis/safe-contracts/blob/v1.0.0/test/gnosisSafeTeamEdition.js)) - -**Signature type** - 1 - -### Examples - -Assuming that three signatures are required to confirm a transaction where one signer uses an EOA to generate a ECDSA signature, another a contract signature and the last a pre-validated signature: - -We assume that the following addresses generate the following signatures: - -1. `0x3` (EOA address) -> `bde0b9f486b1960454e326375d0b1680243e031fd4fb3f070d9a3ef9871ccfd5` (r) + `7d1a653cffb6321f889169f08e548684e005f2b0c3a6c06fba4c4a68f5e00624` (s) + `1c` (v) -2. `0x1` (EIP-1271 validator contract address) -> `0000000000000000000000000000000000000000000000000000000000000001` (address) + `00000000000000000000000000000000000000000000000000000000000000c3` (dynamic position) + `00` (signature type) - * The contract takes the following `bytes` (dynamic part) for verification `00000000000000000000000000000000000000000000000000000000deadbeef` -3. `0x2` (Validator address) -> `0000000000000000000000000000000000000000000000000000000000000002` (address) +`0000000000000000000000000000000000000000000000000000000000000000` (padding - not used) + `01` (signature type) - -The constant parts need to be sorted so that the recovered signers are sorted **ascending** (natural order) by address (not checksummed). - -The signatures bytes used for `execTransaction` would therefore be the following: - -```text -"0x" + -"000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c300" + // encoded EIP-1271 signature -"0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001" + // encoded pre-validated signature -"bde0b9f486b1960454e326375d0b1680243e031fd4fb3f070d9a3ef9871ccfd57d1a653cffb6321f889169f08e548684e005f2b0c3a6c06fba4c4a68f5e006241c" + // encoded ECDSA signature -"000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000deadbeef" // length of bytes + data of bytes -``` - diff --git a/safe-smart-account/signatures/eip-1271.md b/safe-smart-account/signatures/eip-1271.md deleted file mode 100644 index 50977e27..00000000 --- a/safe-smart-account/signatures/eip-1271.md +++ /dev/null @@ -1,232 +0,0 @@ -# EIP-1271 off-chain signatures - -The Safe contracts and interface support off-chain [EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) signatures. However, because Safe is a smart account, the flow is slightly different from simple EOA signatures. - -This doc explains signing and verifying messages off-chain. All examples use [WalletConnect](https://walletconnect.com/) to connect to the Safe and [ethers](https://ethers.io). - -## Signing messages - -It is possible to sign [EIP-191](https://eips.ethereum.org/EIPS/eip-191) compliant messages as well as [EIP-712](https://eips.ethereum.org/EIPS/eip-712) typed data messages. - -### Restrictions - -- Only Safe contracts of version `>=1.1.0` are supported. -- Signing off-chain messages with smart contract wallets is not yet supported. - -### Enabling off-chain signing - -Multiple dApps rely on on-chain signing. -However, off-chain signing is the new default for Safe Apps that use the [safe-apps-sdk](https://www.npmjs.com/package/@safe-global/safe-apps-sdk) version `>=7.11`. -In order to enable off-chain signing in a Safe App, the `safe-apps-sdk` package needs to be updated. - -### EIP-191 messages - -To sign a message we have to call the `signMessage` function and pass in the message as hex string. - -The signing request will be blocked until the message is fully signed and then return the `signature` as a string. -As Safe{Wallet} is a multi signature wallet, this process can take some time because multiple signers may need to sign the message. - -#### Example: sign message - -```typescript -import { hashMessage, hexlify, toUtf8Bytes } from 'ethers/lib/utils' - -const signMessage = async (message: string) => { - const hexMessage = hexlify(toUtf8Bytes(message)) - const signature = await connector.signMessage([safeAddress, hexMessage]) -} -``` - -After signing a message it will be available in the Safe's Message list (Transactions -> Messages). - -### EIP-712 typed data - -To sign typed data we have to call the `signTypedData` function and pass in the typed data object. - -The signing request will be blocked until the message is fully signed and then return the `signature` as a string. -As Safe{Wallet} is a multi signature wallet, this process can take some time because multiple signers may need to sign the message. - -### Example: sign typed data - -```typescript -const getExampleData = () => { - return { - types: { - EIP712Domain: [ - { name: 'name', type: 'string' }, - { name: 'version', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, - ], - Example: [{ name: 'content', type: 'string' }], - }, - primaryType: 'Example', - domain: { - name: 'EIP-1271 Example DApp', - version: '1.0', - chainId: 1, - verifyingContract: '0x123..456', - }, - message: { - content: 'Hello World!', - }, - } -} - -const signTypedData = async () => { - const typedData = getExampleData() - const signature = await connector.signTypedData([ - safeAddress, - JSON.stringify(typedData), - ]) -} -``` - -After signing, the message will be available in the Safe's Message list (Transactions -> Messages). - -## Fetching the signature asynchronously - -You can fetch the signature asynchronously instead of waiting for the RPC response via the [Safe Transaction Service](https://github.com/safe-global/safe-transaction-service). - -To do so we have to generate a hash of the `message` or `typedData` using ethers `hashMessage(message)` or `_TypedDataEncoder.hash(domain, types, message)` and then compute the `Safe message hash` by calling `getMessageHash(messageHash)` on the Safe contract. - -### Example: get Safe message hash - -```typescript -const getSafeInterface = () => { - const SAFE_ABI = [ - 'function getThreshold() public view returns (uint256)', - 'function getMessageHash(bytes memory message) public view returns (bytes32)', - 'function isValidSignature(bytes calldata _data, bytes calldata _signature) public view returns (bytes4)' - ] - - return new Interface(SAFE_ABI) -} - -const getSafeMessageHash = async ( - connector: WalletConnect, - safeAddress: string, - messageHash: string -) => { - // https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol#L43 - const getMessageHash = getSafeInterface().encodeFunctionData( - 'getMessageHash', - [messageHash] - ) - - return connector.sendCustomRequest({ - method: 'eth_call', - params: [{ to: safeAddress, data: getMessageHash }] - }) -} -``` - -Then we can query the state of the message from the network-specific transaction service endpoint for messages: `https://safe-transaction-.safe.global/api/v1/messages/`. - -An example message on Goerli can be found here: `https://safe-transaction-goerli.safe.global/api/v1/messages/0x7f4032fd13f27c5fce4694a1a6b79f65c68656da4eee4347a414f5bcec915b39/`. - -For other network endpoints, see [Available Services](../../safe-core-api/available-services.md). - -### Example: Loading message from transaction service - -```typescript -const fetchMessage = async ( - safeMessageHash: string -): Promise => { - const safeMessage = await fetch( - `https://safe-transaction-goerli.safe.global/api/v1/messages/${safeMessageHash}`, - { - headers: { 'Content-Type': 'application/json' } - } - ).then((res) => { - if (!res.ok) { - return Promise.reject('Invalid response when fetching SafeMessage') - } - return res.json() as Promise - }) - - return safeMessage -} -``` - -A Safe message has the following format: - -```typescript -{ - "messageHash": string, - "status": string, - "logoUri": string | null, - "name": string | null, - "message": string | EIP712TypedData, - "creationTimestamp": number, - "modifiedTimestamp": number, - "confirmationsSubmitted": number, - "confirmationsRequired": number, - "proposedBy": { "value": string }, - "confirmations": [ - { - "owner": { "value": string }, - "signature": string - } - ], - "preparedSignature": string | null -} -``` - -A fully signed message will have the status `CONFIRMED`, `confirmationsSubmitted >= confirmationsRequired` and a `preparedSignature !== null`. - -The signature of the message will be returned in the `preparedSignature` field. - -## Verifying a signature - -We verify the signature by calling the Safe contract's `isValidSignature(hash, signature)` function on-chain. This function returns the `MAGIC VALUE BYTES 0x20c13b0b` if the `signature` is correct for the `messageHash`. - -_Note: A common pitfall is to pass the `safeMessageHash` to the `isValidSignature` call which is not correct. It needs to be the hash of the original message._ - -### Example: verify signature - -```typescript -const MAGIC_VALUE_BYTES = '0x20c13b0b' - -const isValidSignature = async ( - connector: WalletConnect, - safeAddress: string, - messageHash: string, - signature: string -) => { - // https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol#L28 - const isValidSignatureData = getSafeInterface().encodeFunctionData( - 'isValidSignature', - [messageHash, signature] - ) - - const isValidSignature = (await connector.sendCustomRequest({ - method: 'eth_call', - params: [{ to: safeAddress, data: isValidSignatureData }] - })) as string - - return isValidSignature?.slice(0, 10).toLowerCase() === MAGIC_VALUE_BYTES -} -``` - -### Example dApps - -- [Small test dApp](https://github.com/5afe/eip-1271-dapp) - -## Troubleshooting - -### Off-chain signing is not being used - -If your signing requests fallback to on-chain signing this could be because of multiple reasons: - -- The Safe App is not using `safe-apps-sdk` version `>=7.11.0`. -- The Safe{Wallet} is set to always use on-chain signing. This can be toggled in the Settings of the Safe{Wallet} (Settings -> Safe Apps). -- The connected Safe does not have a _fallback handler_ set. This can happen if Safes were not created through the official interface such as a CLI or third party interface. -- The Safe version is not compatible - off-chain signing is only available for Safes with version `>1.0.0` - -### Confusion of messageHash and safeMessageHash - -`message`, `messageHash` and `safeMessageHash` often get mixed up: - -- `message` or `messageHash` is used to verify or sign messages. -- `safeMessageHash` is used to fetch data from the `safe-transaction-service`. From bbbd890f86ea8ab58555de6a63451855352c7b3f Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Fri, 27 Oct 2023 15:52:32 +0200 Subject: [PATCH 014/108] Update Safe Apps section (#267) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update Safe Docs * Update README.md * Add new vocabulary * Update README.md * Update get-started.md * Update get-started.md * Add new vocab * Update release.md * Update release.md * Add new vocab * New words * Update release.md * Update release.md * Update safe-apps/release.md Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> * Update safe-apps/release.md Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> * Update safe-apps/release.md Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> --------- Co-authored-by: Tanay Pant Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> --- .gitbook.yaml | 3 + .github/styles/Vocab/default/accept.txt | 16 +++ SUMMARY.md | 10 +- .../overview.md => safe-apps/README.md | 23 ++-- safe-apps/get-started.md | 120 ++++++++++++++++++ safe-apps/release.md | 73 +++++++++++ safe-core-sdk/safe-apps/README.md | 38 ------ safe-core-sdk/safe-apps/example-safe-app.md | 21 --- safe-core-sdk/safe-apps/get-started.md | 120 ------------------ safe-core-sdk/safe-apps/release.md | 69 ---------- 10 files changed, 229 insertions(+), 264 deletions(-) rename safe-core-sdk/safe-apps/overview.md => safe-apps/README.md (76%) create mode 100644 safe-apps/get-started.md create mode 100644 safe-apps/release.md delete mode 100644 safe-core-sdk/safe-apps/README.md delete mode 100644 safe-core-sdk/safe-apps/example-safe-app.md delete mode 100644 safe-core-sdk/safe-apps/get-started.md delete mode 100644 safe-core-sdk/safe-apps/release.md diff --git a/.gitbook.yaml b/.gitbook.yaml index 5bd68da2..0d86f31a 100644 --- a/.gitbook.yaml +++ b/.gitbook.yaml @@ -12,3 +12,6 @@ redirects: safe-smart-account/security/security-audits: safe-smart-account/security-audits.md safe-smart-account/security/bug-bounty-program: miscellaneous/bug-bounty-program.md safe-smart-account/security/past-paid-bounties: miscellaneous/past-paid-bounties.md + safe-apps-sdk/safe-apps: safe-apps/README.md + safe-apps-sdk/overview: safe-apps/README.md + safe-apps-sdk/example-safe-app: safe-apps/get-started.md diff --git a/.github/styles/Vocab/default/accept.txt b/.github/styles/Vocab/default/accept.txt index 6cf2006f..b3e4a624 100644 --- a/.github/styles/Vocab/default/accept.txt +++ b/.github/styles/Vocab/default/accept.txt @@ -5,6 +5,9 @@ Safe Module Safe Modules Safe Guards Safe Transaction Service +Safe Apps SDK +Safe App +Safe Apps Blockchain blockchain blockchains @@ -12,11 +15,15 @@ onchain offchain Offchain multisig +dapp +dapps Auth Kit Protocol Kit Relay Kit Onramp Kit API Kit +UI Kit +IPFS Onramp Safe Transaction Service Transaction Service @@ -33,6 +40,13 @@ API ABI ABIs SDK +sdk +npm +CORS +CRA +HTTP +HTTPS +Blocknative ETH EIP ERC @@ -41,6 +55,8 @@ WSGI Sourcify Etherscan Blockscout +delist +wagmi crypto cryptocurrencies Ethereum diff --git a/SUMMARY.md b/SUMMARY.md index 43291ba6..a27dbd9a 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -47,15 +47,11 @@ ## Safe Apps SDK -* [Safe Apps SDK](safe-core-sdk/safe-apps/README.md) +* [Overview](safe-apps/README.md) -* [Overview](safe-core-sdk/safe-apps/overview.md) +* [Getting started](safe-apps/get-started.md) -* [Get started](safe-core-sdk/safe-apps/get-started.md) - -* [Release](safe-core-sdk/safe-apps/release.md) -* -* [Safe App example](safe-core-sdk/safe-apps/example-safe-app.md) +* [Release](safe-apps/release.md) ## Reference diff --git a/safe-core-sdk/safe-apps/overview.md b/safe-apps/README.md similarity index 76% rename from safe-core-sdk/safe-apps/overview.md rename to safe-apps/README.md index 9e04befb..9553c8fb 100644 --- a/safe-core-sdk/safe-apps/overview.md +++ b/safe-apps/README.md @@ -1,18 +1,23 @@ -# Safe Apps SDK Packages +# Safe Apps SDK -You can find several packages on [our developer tools](https://github.com/safe-global/safe-apps-sdk) to make it easier to integrate third-party applications (Safe Apps) with [Safe](https://app.safe.global). Check the following diagram to see which package is more convenient for you: - -
+The Safe Apps SDK helps developers to build their dapps into the Safe{Wallet}. It turns a dapp into an HTML iframe component that can be accessed through Safe. This SDK provides extensive developer tooling to make it easy to create, test, and integrate Safe Apps into Safe. This includes a design system, reusable components, and a Safe App SDK that facilitates communication between the Safe App and Safe. ## Packages +Here are several packages to make it easier to integrate third-party applications (Safe Apps) with [Safe](https://app.safe.global). Check the following diagram to see which package is suitable for you: + +
+ | Package | Version | Description | | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [cra-template-safe-app](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) | | CRA template to quickly bootstrap a Safe App. Use this package to start a new Safe App from scratch using React. | +| [cra-template-safe-app](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) | | CRA (Create React App) template to bootstrap a Safe App. Use this package to start a new Safe App from scratch using React. | | [safe-apps-react-sdk](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-react-sdk) | [![npm](https://img.shields.io/npm/v/@safe-global/safe-apps-react-sdk)](https://www.npmjs.com/package/@safe-global/safe-apps-react-sdk) | A wrapper of [safe-apps-sdk](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-sdk) with helpful React Hooks. | | [safe-apps-sdk](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-sdk) | [![npm](https://img.shields.io/npm/v/@safe-global/safe-apps-sdk)](https://www.npmjs.com/package/@safe-global/safe-apps-sdk) | JavaScript SDK. This is the base package for all integrations. | -| [safe-apps-provider](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-provider) | [![npm](https://img.shields.io/npm/v/@safe-global/safe-apps-provider)](https://www.npmjs.com/package/@safe-global/safe-apps-provider) | A generic provider that can be used with common web3 libraries. (e.g. web3.js or Ethers) | +| [safe-apps-provider](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-provider) | [![npm](https://img.shields.io/npm/v/@safe-global/safe-apps-provider)](https://www.npmjs.com/package/@safe-global/safe-apps-provider) | A generic provider that can be used with common web3 libraries. For example, web3.js or Ethers. | | [safe-apps-web3modal](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-web3modal) | [![npm](https://img.shields.io/npm/v/@safe-global/safe-apps-web3modal)](https://www.npmjs.com/package/@safe-global/safe-apps-web3modal) | A wrapper around [Web3Modal](https://github.com/Web3Modal/web3modal) that would automatically connect to the Safe when the app is loaded in the Safe Apps section. | -| [safe-apps-wagmi](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-wagmi) | | A [wagmi](https://github.com/wagmi-dev/wagmi) connector for Safe Apps | -| [@web3-onboard/gnosis](https://github.com/blocknative/web3-onboard/tree/v2-web3-onboard-develop/packages/gnosis) | | Blocknative included Safe App support in [@web3-onboard](https://github.com/blocknative/web3-onboard) v1.26.0. If you are already using this package you can [check here](https://github.com/blocknative/web3-onboard/blob/v2-web3-onboard-develop/packages/gnosis/README.md) how to configure it. | -| [@web3-react/gnosis-safe](https://github.com/Uniswap/web3-react/tree/main/packages/gnosis-safe) | | [web3-react](https://github.com/Uniswap/web3-react) already includes a connector for Safe Apps by default. You can check at their docs how to use it. | +| [safe-apps-wagmi](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-wagmi) | | A [wagmi](https://github.com/wagmi-dev/wagmi) connector for Safe Apps. | +| [@web3-onboard/gnosis](https://github.com/blocknative/web3-onboard/tree/v2-web3-onboard-develop/packages/gnosis) | | Blocknative included Safe App support in [@web3-onboard](https://github.com/blocknative/web3-onboard) v1.26.0. If you are already using this package, you can [check here](https://github.com/blocknative/web3-onboard/blob/v2-web3-onboard-develop/packages/gnosis/README.md) how to configure it. | +| [@web3-react/gnosis-safe](https://github.com/Uniswap/web3-react/tree/main/packages/gnosis-safe) | | [web3-react](https://github.com/Uniswap/web3-react) already includes a connector for Safe Apps by default. You can check their docs on how to use it. | + + +{% hint style="warning" %} Safe Apps are not owned, controlled, maintained, or audited by Safe. Safe can list or delist apps from Safe{Wallet} at its sole discretion. {% endhint %} diff --git a/safe-apps/get-started.md b/safe-apps/get-started.md new file mode 100644 index 00000000..e5dd6f36 --- /dev/null +++ b/safe-apps/get-started.md @@ -0,0 +1,120 @@ +--- +description: Basic resources to start creating Safe Apps +--- + +# Getting started + +Here are some resources to help you get started with building Safe Apps: + +* [Safe Apps SDK Packages](./get-started.md#safe-apps-sdk-packages) +* [Basic Requirements](./get-started.md#basic-requirements) +* [UI Kit](./get-started.md#ui-kit) + +## Safe Apps SDK packages + +Whether you already have a dapp or are considering creating a new one, you will find it useful to rely on one of our integrations to communicate with Safe{Wallet}. You will find integrations with common packages like `Web3Modal`, Blocknative onboard.js, and `web3-react` in these packages. + +For those creating a new dapp, using the [CRA template](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) to kickstart the basic structure with all the necessary configuration will speed up the process. + +## Basic requirements + +If you already have a dapp, some mandatory requirements exist to adapt your app to be used as a Safe App. Without this basic configuration, the dapp won't work with the Safe as expected. + +If you are using our [CRA template](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) to start your Safe App, these basic requirements are already satisfied. + +### Manifest + +It is mandatory that your app exposes a `manifest.json` file in the root directory with this structure: + +```json +{ + "name": "YourAppName", + "description": "A description of what your app does", + "iconPath": "myAppIcon.svg" +} +``` + +**Note:** `iconPath` is the public relative path where Safe will try to load your app icon. For this example, it should be `https://yourAppUrl/myAppIcon.svg`. + +### CORS + +Safe needs to reach the `manifest.json` from the app. To allow this, it is required to enable *Cross Site Requests* by setting the *CORS* headers to the `manifest.json`. + +The required headers are: + +``` +"Access-Control-Allow-Origin": "\*", +"Access-Control-Allow-Methods": "GET", +"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization" +``` + +### React development + +It is possible to use the local React development server. For this, you need to set the *CORS* headers and use the same protocol (HTTP or HTTPS) as the Safe interface you use for testing. + + +**CORS for development** + +For this, use [react-app-rewired](https://www.npmjs.com/package/react-app-rewired). To enable the library, update the `scripts` section in the `package.json`: + +```json +"scripts": { + "start": "react-app-rewired start", + "build": "react-app-rewired build", + "test": "react-app-rewired test" +}, +``` + +Also, create the `config-overrides.js` file in the project's root to configure the *CORS* headers. The content of the file should be: + +```js +/* config-overrides.js */ + +module.exports = { + // The function to use to create a webpack dev server configuration when running the development + // server with 'npm run start' or 'yarn start'. + // Example: set the dev server to use a specific certificate in https. + devServer: function (configFunction) { + // Return the replacement function for create-react-app to use to generate the Webpack + // Development Server config. "configFunction" is the function that would normally have + // been used to generate the Webpack Development server config - you can use it to create + // a starting configuration to modify instead of creating a config from scratch. + return function (proxy, allowedHost) { + // Create the default config by calling configFunction with the proxy/allowedHost parameters + const config = configFunction(proxy, allowedHost); + + config.headers = { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET', + 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization', + }; + + // Return your customized Webpack Development Server config. + return config + } + }, +} +``` + +**SSL** + +To enable SSL with `react-scripts`, it is necessary to set the `HTTPS` environment variable to `true`. This can be done in the `package.json` file by adjusting the `scripts` section to: + +```json +"scripts": { + "start": "HTTPS=true react-app-rewired start", +}, +``` + +If the SSL certificate provided by `react-scripts` is not valid, it is required to mark it as trusted in your browser. To do this, open the Safe App in a separate tab (not in the Safe interface) and accept the certificate or ignore the warning. + +## UI Kit + +Safe offers a react components package if you are creating your Safe App from scratch. This helps with a near-native look while enabling developers to use their branding in the Safe Apps. + +* [Check all available components in the storybook](https://components.safe.global) +* [Check UI Kit repository](https://github.com/safe-global/safe-react-components) + +## Example app + +This [tutorial](https://github.com/gnosis/safe-apps-sdk/tree/master/guides/drain-safe-app) will build a Safe App that enables migrating all the assets from Safe to any other wallet in a single transaction. You will also learn about smart contract wallets, multi-signature transaction flow, and batched transactions. diff --git a/safe-apps/release.md b/safe-apps/release.md new file mode 100644 index 00000000..605cd764 --- /dev/null +++ b/safe-apps/release.md @@ -0,0 +1,73 @@ +# Releasing your Safe App + +Here are some details about the release process for Safe Apps. + +## Get your Safe Apps into the hands of users + +Once you finish developing and testing your Safe App, your users can test it by opening the link to the hosted Safe App and adding it as a Custom App. [This guide](https://help.safe.global/en/articles/40859-add-a-custom-safe-app) explains how to add custom apps. + +## Get your Safe App listed in Safe{Wallet} + +{% hint style="info" %} Currently, we expect delays in the Safe App review process. {% endhint %} + +If you would like your Safe App to appear in the Safe, it must meet the following criteria: + +### Smart contracts must be audited + +Security is the top priority for Safe. Please provide an external audit result document if the Safe App includes smart contracts. If a third party created the smart contracts, ensure they are audited. + +### Your Safe App must include a manifest + +There must be a `manifest.json` at the root directory containing the following data: + +`"name": "Name of your Safe App"` + +Your Safe App's name needs to have 50 characters maximum. + +`"iconPath": "your_logo.svg"` + +A relative file path to your App's logo. The icon must be a square SVG image of at least 128 by 128 pixels. + +`"description": "This is the Safe app description."` + +Few sentences describing your application, a maximum of 200 characters + +You can find an example manifest file on [GitHub](https://github.com/safe-global/safe-apps-sdk/blob/main/packages/cra-template-safe-app/template/public/manifest.json). You can also find an example Safe App on IPFS [here](https://ipfs.io/ipfs/QmTgnb1J9FDR9gimptzvaEiNa25s92iQy37GyqYfwZw8Aj/). + +Remember that **CORS** needs to be configured correctly on the `manifest.json` so we can fetch the information as [mentioned here](./get-started.md#cors). + +### The app auto connects to the Safe + +When a user opens the app, it should automatically select the Safe as a wallet. Ensure to check the case if the user previously opened the app outside of the Safe with another wallet. + +### The Safe team has reviewed the Safe App + +The requirement doesn't apply for battle-tested applications hosted on the same domain as the main dapp. + +While we won't be able to do a proper audit for your Safe App, we still would like to look at the source code to raise issues or suggest improvements. Whether your Safe App is open or closed source, please send us either a link to the public repository or an invitation to the private repository. + +We also would like to make a rough functional review of the App, so please provide us with a high-level test plan/feature list that allows our QA team to ensure everything works as intended in production. Video walkthroughs are also welcome. + +### Help us decode your Safe App transactions + +We want to display interactions with Safe Apps as human-readable as possible. To do this, we need the ABI of the contracts your Safe App interacts with. The ideal way to do this would be to verify your contracts via [Sourcify](https://github.com/ethereum/sourcify), which we can leverage to decode transactions interacting with those contracts. + +Alternatively, you can provide us with the ABIs as JSON files or the links to the verified contracts on Etherscan so we can implement transaction decoding for your Safe App interactions. + +Create an issue in our [repository](https://github.com/5afe/safe-apps-list) once you've verified that your app meets these requirements. + +## Official launch and beyond + +After we have reviewed and integrated your Safe App, the App will first be available in the [staging environment](https://safe-wallet-web.staging.5afe.dev) of the Safe for you to do a final review. We would then approach you to coordinate the launch and a joint announcement. + +At any point after the launch, if you or your users encounter issues with the Safe App or want to release an update to an existing Safe App, please contact us via [Discord](https://chat.safe.global). + +While developing your Safe App, you can use [our production interface](https://app.safe.global) to test it. Some testnets like Goerli are also available. + +Once your app is live, even if you run it locally, you can import it to the Safe application as a custom app. To do so, you should select the "Apps" tab: + +
+ +Use the `Add custom app` button and add your app using a link: + +
diff --git a/safe-core-sdk/safe-apps/README.md b/safe-core-sdk/safe-apps/README.md deleted file mode 100644 index 4784fa0f..00000000 --- a/safe-core-sdk/safe-apps/README.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -description: What are Safe Apps? ---- - -# Safe Apps SDK - -With over $90B worth of digital assets held in Safe accounts alone, it's essential for the dapp ecosystem to access the untapped market of multi-signature wallets. Safe Apps introduce a completely new way for developers to build their dapps right into a Multisig interface. Turn your Dapp into an HTML iframe component that can be accessed through the Safe. We are providing extensive developer tooling to make it easy to create, test and integrate Safe Apps into the Safe. This includes an unique design system, reusable components and a Safe App SDK that facilitates the Safe App <> Safe communication. - -Please refer to this [EthCC3 talk](https://www.youtube.com/watch?v=1GirpNHZPJM&t=168s) to learn more about Safe Apps. - -There are already Safe Apps available for a number of popular protocols such as [Aave](https://aave.com), [Synthetix](https://synthetix.io), [1inch](https://1inch.exchange) or [Balancer](https://balancer.finance). These have been build by 3rd party developers or the projects themselves. - -If you are missing a Safe App, get in touch with the respective project or get building with the [Safe Apps SDK](./get-started.md). - -#### On-chain stats - -There are Dune Analytics dashboards about Safe Apps available: - -* [Number of transactions](https://explore.duneanalytics.com/dashboard/gnosis-safe---safe-apps-transactions) -* [Transaction volume](https://explore.duneanalytics.com/dashboard/gnosis-safe---safe-apps-volume) - -#### Existing Safe Apps - -This is a list of several known public repositories containing Safe Apps for reference: - -* [Transaction builder](https://github.com/safe-global/safe-react-apps/tree/development/apps/tx-builder) -* [WalletConnect](https://github.com/safe-global/safe-react-apps/tree/development/apps/wallet-connect) -* [CSV Airdrop](https://github.com/bh2smith/safe-airdrop) -* [Open Zeppelin](https://github.com/OpenZeppelin/upgrades-safe-app) -* [Balancer](https://github.com/balancer-labs/frontend-v2) -* [1inch Exchange](https://github.com/CryptoManiacsZone/gnosis.1inch.exchange) -* [Synthetix](https://github.com/protofire/safe-app-synthetix-mintr) -* [Sablier](https://github.com/sablierhq/safe-app) -* [PancakeSwap](https://github.com/pancakeswap/pancake-frontend) - -#### Disclaimer - -It is at our sole discretion to list or delist apps from the Safe. Safe Apps are not owned, controlled, maintained, or audited by Gnosis. diff --git a/safe-core-sdk/safe-apps/example-safe-app.md b/safe-core-sdk/safe-apps/example-safe-app.md deleted file mode 100644 index 5c149e74..00000000 --- a/safe-core-sdk/safe-apps/example-safe-app.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -description: >- - Build a Safe App that allows transferring assets out of the Safe in 1 - transaction ---- - -# Build Safe App with batch transactions - -## What are we building? - -This tutorial will build a Safe App that enables us to migrate all the assets from a Safe to any other wallet in a single transaction. It doesn't include NFTs, but this is a great thing to do on your own. In addition, you will learn about smart contract wallets, multi-signature transaction flow, and batched transactions. - -Find the Github repo with the complete guide [here](https://github.com/gnosis/safe-apps-sdk/tree/master/guides/drain-safe-app). - -### Prerequisites - -We'll assume that you are familiar with TypeScript (JavaScript), React, and Ethereum and have `node.js` and `npm` installed. - -### Help - -If you need help, you can reach Safe developers in the `#safe-developers` channel in [https://chat.safe.global](https://chat.gnosis.io) or [create a discussion](https://github.com/safe-global/safe-apps-sdk/discussions). diff --git a/safe-core-sdk/safe-apps/get-started.md b/safe-core-sdk/safe-apps/get-started.md deleted file mode 100644 index 7fcf70fa..00000000 --- a/safe-core-sdk/safe-apps/get-started.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -description: Basic resources to start creating Safe Apps ---- - -# Get started - -Welcome! We are glad on your interest about creating a Safe App. The team is working hard to provide the tools to make it easier for you to build apps that can interact with Safe. - -Once you are here, the main resources include: - -* [Safe Apps SDK Packages](./get-started.md#safe-apps-sdk-packages) -* [Basic Requirements](./get-started.md#basic-requirements) -* [UI Kit](./get-started.md#ui-kit) - -## Safe Apps SDK packages - -This is one of our main resources for Safe Apps integrations. Whether you already have a dapp or are thinking about creating a new one, you will find it useful to rely on one of our integrations to easily communicate with Safe{Wallet}. In these packages, you will find integrations with very common packages like Web3Modal, Blocknative onboard.js or web3-react, that you may already be using on your project. - -For those creating a new dapp, using our [CRA template](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) to kickstart the basic structure with all the necessary configuration will speed up the process. - -[Check more about SDK Packages](./overview.md). - -## Basic requirements - -If you already have a dapp, there are some mandatory requirements to adapt your app to be used as a Safe App. Without this basic configuration, the dapp won't work with the Safe as expected. - -If you are using our [CRA template](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) to start your Safe App, these basic requirements are already included. - -#### Manifest - -It is mandatory that your app exposes a `manifest.json` file in the root dir with this structure: - -```json -{ - "name": "YourAppName", - "description": "A description of what your app do", - "iconPath": "myAppIcon.svg" -} -``` - -> Note: iconPath it's the public relative path where the Safe will try to load your app icon. For this example, it should be https://yourAppUrl/myAppIcon.svg. - -#### CORS - -At some moments we need to be able to reach the `manifest.json` from our app. To allow this it is required to enable **Cross Site Requests** by setting the **CORS** headers to the `manifest.json`. - -The required headers are: - -``` -"Access-Control-Allow-Origin": "\*", -"Access-Control-Allow-Methods": "GET", -"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization" -``` - -#### React development - -It is possible to use the local React development server. For this you need to set the **CORS** headers and make sure to use the same protocol (http or https) as the Safe interface you are using for testing.\ - - -**CORS for development** - -For this we recommend to use [react-app-rewired](https://www.npmjs.com/package/react-app-rewired). To enable the library update the `scripts` section in the `package.json`: - -```json -"scripts": { - "start": "react-app-rewired start", - "build": "react-app-rewired build", - "test": "react-app-rewired test" -}, -``` - -Additionally, you need to create the `config-overrides.js` file in the root of the project to confirgure the **CORS** headers. The content of the file should be: - -```js -/* config-overrides.js */ - -module.exports = { - // The function to use to create a webpack dev server configuration when running the development - // server with 'npm run start' or 'yarn start'. - // Example: set the dev server to use a specific certificate in https. - devServer: function (configFunction) { - // Return the replacement function for create-react-app to use to generate the Webpack - // Development Server config. "configFunction" is the function that would normally have - // been used to generate the Webpack Development server config - you can use it to create - // a starting configuration to then modify instead of having to create a config from scratch. - return function (proxy, allowedHost) { - // Create the default config by calling configFunction with the proxy/allowedHost parameters - const config = configFunction(proxy, allowedHost); - - config.headers = { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': 'GET', - 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization', - }; - - // Return your customised Webpack Development Server config. - return config - } - }, -} -``` - -**SSL** - -To enable SSL with `react-scripts` it is necessary to set the `HTTPS` environment variable to `true`. This can be done in the `package.json` file by adjusting the `scripts` section to: - -```json -"scripts": { - "start": "HTTPS=true react-app-rewired start", -}, -``` - -In the case that the SSL certificate provided by `react-scripts` is not valid, it is required to mark it as trusted in your browser. To do this, open the Safe App in a separate tab (not in the Safe interface) and accept the certificate or ignore the warning. - -## UI Kit - -If you are creating your Safe App from scratch, we provide a reusable react components package to make it easy to build Safe Apps with a near-native look and feel while still enabling developers to use their branding in the Safe Apps. - -* [Check all available components in the storybook](https://components.safe.global) -* [Check UI Kit repository](https://github.com/safe-global/safe-react-components) diff --git a/safe-core-sdk/safe-apps/release.md b/safe-core-sdk/safe-apps/release.md deleted file mode 100644 index a8b7232e..00000000 --- a/safe-core-sdk/safe-apps/release.md +++ /dev/null @@ -1,69 +0,0 @@ -# Releasing your Safe App - -### Release process - -#### How to get your Safe Apps into the hands of users - -As soon as you finish developing and testing your Safe App, you can already let some actual users test it by simply sending them the link to the hosted Safe App and asking them to add it as a Custom App. [This guide](https://help.safe.global/en/articles/40859-add-a-custom-safe-app) explains how to add custom apps. - -#### Get your Safe App listed in the Safe - -If you would like your Safe App to appear in the Safe, it must meet the following criteria: - -**1) Smart contracts must be audited** - -Security it's a top priority. If your Safe App includes smart contracts of your own you should provide an external audit result document. If smart contracts were created by a 3rd party you should be using smart contracts that are properly audited. - -**2) Your Safe App must include a manifest.json file at the root containing the following data:** - -`"name": "Name of your Safe App"` - -Your Safe App's name, maximum 50 characters. - -`"iconPath": "your_logo.svg"` - -A relative file path to your App's logo. The icon must be a square SVG image of at least 128 by 128 pixels. - -`"description": "This is the Safe app description."` - -Few sentences describing your application, maximum 200 characters - -You can find an example manifest file on [Github](https://github.com/safe-global/safe-apps-sdk/blob/main/packages/cra-template-safe-app/template/public/manifest.json). In addition, you can find an example Safe App on IPFS [here](https://ipfs.io/ipfs/QmTgnb1J9FDR9gimptzvaEiNa25s92iQy37GyqYfwZw8Aj/). - -Remember that **CORS** should be configured correctly on the `manifest.json` so we can fetch the information as [mentioned here](./get-started.md#cors). - -**3) The app auto-connects to the Safe** - -When an user opens the app, it should automatically select the Safe as a wallet. Ensure to check the case if the user previously opened the app outside of the Safe with another wallet. - -**4) The Safe team has reviewed the Safe App** - -The requirement doesn't apply for battle-tested applications hosted on the same domain like the main dApp. - -While we won't be able to do a proper audit for your Safe App, we still would like to look at the source code to raise issues or suggest improvements. So whether your Safe App is open or closed source, please send us either a **link to the public repo or an invitation to the private code repository**. - -We also would like to make a rough functional review of the App, so please provide us with a **high-level test plan/feature list** that allows our QA team to make sure everything works as intended in production. Video walkthroughs are also welcome. - -**5) Help us decode your Safe App transactions** - -We want to display interactions with Safe Apps as human-readable as possible. To do this, we need the contract ABI of the contracts that your Safe App interacts with. The ideal way to do this would be to verify your contracts via [Sourcify](https://github.com/ethereum/sourcify), which we can leverage to decode transactions interacting with those contracts. - -Alternatively, you can provide us with the ABIs as JSON files or the links to the verified contracts on Etherscan, so we can implement transaction decoding for your Safe App interactions. - -**Create an issue in our repository once you've verified that your app meets these requirements:** [https://github.com/5afe/safe-apps-list](https://github.com/5afe/safe-apps-list) - -#### The official launch and beyond - -After we have reviewed and integrated your Safe App, the App will first be available in the [staging environment](https://safe-wallet-web.staging.5afe.dev) of the Safe for you to do a final review. We would then approach you to coordinate the launch and a joint announcement. - -At any point after the launch, if you or your users encounter issues with the Safe App, or you want to release an update to an existing Safe App, please get in touch with us via [Discord](https://chat.safe.global). - -While developing your Safe App you can directly use [our production interface](https://app.safe.global) for testing it. Some testnets like Goerli are also available there. - -Once your app is live, even if you are running it locally, you can import it to the Safe application as a custom app. To do so, you should select the "Apps" tab: - -
- -Use the `Add custom app` button and add your app using a link: - -
From 78e743d976aa578bee9693c16063ad7694f792ed Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Fri, 27 Oct 2023 19:51:03 +0200 Subject: [PATCH 015/108] Update IA for reference (#268) * Update IA * Fixes * Move files around * Update SUMMARY.md --------- Co-authored-by: Tanay Pant --- SUMMARY.md | 37 ++++++++----------- {reference => safe-core-sdk}/TEMPLATE.md | 0 .../api-kit/reference}/README.md | 0 safe-core-sdk/auth-kit/guides/README.md | 0 .../auth-kit/{ => guides}/web3auth.md | 0 .../auth-kit/reference}/AuthKitBasePack.md | 0 .../auth-kit/reference}/README.md | 0 .../auth-kit/reference}/Web3AuthModalPack.md | 0 safe-core-sdk/onramp-kit/guides/README.md | 0 .../onramp-kit/{ => guides}/monerium.md | 0 .../onramp-kit/{ => guides}/stripe.md | 0 .../onramp-kit/reference}/MoneriumPack.md | 0 .../reference}/OnRampKitBasePack.md | 0 .../onramp-kit/reference}/README.md | 0 .../onramp-kit/reference}/StripePack.md | 0 .../protocol-kit/reference}/README.md | 0 safe-core-sdk/relay-kit/guides/README.md | 0 .../relay-kit/{ => guides}/gelato.md | 0 .../relay-kit/reference}/README.md | 0 19 files changed, 16 insertions(+), 21 deletions(-) rename {reference => safe-core-sdk}/TEMPLATE.md (100%) rename {reference/safe-core-sdk/api-kit => safe-core-sdk/api-kit/reference}/README.md (100%) create mode 100644 safe-core-sdk/auth-kit/guides/README.md rename safe-core-sdk/auth-kit/{ => guides}/web3auth.md (100%) rename {reference/safe-core-sdk/auth-kit => safe-core-sdk/auth-kit/reference}/AuthKitBasePack.md (100%) rename {reference/safe-core-sdk/auth-kit => safe-core-sdk/auth-kit/reference}/README.md (100%) rename {reference/safe-core-sdk/auth-kit => safe-core-sdk/auth-kit/reference}/Web3AuthModalPack.md (100%) create mode 100644 safe-core-sdk/onramp-kit/guides/README.md rename safe-core-sdk/onramp-kit/{ => guides}/monerium.md (100%) rename safe-core-sdk/onramp-kit/{ => guides}/stripe.md (100%) rename {reference/safe-core-sdk/onramp-kit => safe-core-sdk/onramp-kit/reference}/MoneriumPack.md (100%) rename {reference/safe-core-sdk/onramp-kit => safe-core-sdk/onramp-kit/reference}/OnRampKitBasePack.md (100%) rename {reference/safe-core-sdk/onramp-kit => safe-core-sdk/onramp-kit/reference}/README.md (100%) rename {reference/safe-core-sdk/onramp-kit => safe-core-sdk/onramp-kit/reference}/StripePack.md (100%) rename {reference/safe-core-sdk/protocol-kit => safe-core-sdk/protocol-kit/reference}/README.md (100%) create mode 100644 safe-core-sdk/relay-kit/guides/README.md rename safe-core-sdk/relay-kit/{ => guides}/gelato.md (100%) rename {reference/safe-core-sdk/relay-kit => safe-core-sdk/relay-kit/reference}/README.md (100%) diff --git a/SUMMARY.md b/SUMMARY.md index a27dbd9a..5b10b610 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -19,18 +19,30 @@ * [Overview](safe-core-sdk/README.md) * [Auth Kit](safe-core-sdk/auth-kit/README.md) - * [Web3Auth](safe-core-sdk/auth-kit/web3auth.md) + * [Guides](safe-core-sdk/auth-kit/guides/README.md) + * [Web3Auth](safe-core-sdk/auth-kit/guides/web3auth.md) + * [Reference](safe-core-sdk/auth-kit/reference/README.md) + * [AuthKitBasePack](safe-core-sdk/auth-kit/reference/AuthKitBasePack.md) + * [Web3AuthModalPack](safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md) * [Protocol Kit](safe-core-sdk/protocol-kit/README.md) + * [Reference](safe-core-sdk/protocol-kit/reference/README.md) * [Onramp Kit](safe-core-sdk/onramp-kit/README.md) - * [Stripe](safe-core-sdk/onramp-kit/stripe.md) - * [Monerium](safe-core-sdk/onramp-kit/monerium.md) + * [Guides](safe-core-sdk/onramp-kit/guides/README.md) + * [Stripe](safe-core-sdk/onramp-kit/guides/stripe.md) + * [Monerium](safe-core-sdk/onramp-kit/guides/monerium.md) + * [Reference](safe-core-sdk/onramp-kit/reference/README.md) + * [OnRampKitBasePack](safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md) + * [StripePack](safe-core-sdk/onramp-kit/reference/StripePack.md) + * [MoneriumPack](safe-core-sdk/onramp-kit/reference/MoneriumPack.md) * [Relay Kit](safe-core-sdk/relay-kit/README.md) - * [Gelato Relay](safe-core-sdk/relay-kit/gelato.md) + * [Guides](safe-core-sdk/relay-kit/guides/README.md) + * [Gelato Relay](safe-core-sdk/relay-kit/guides/gelato.md) * [API Kit](safe-core-sdk/api-kit/README.md) + * [Reference](safe-core-sdk/api-kit/reference/README.md) ## Safe{Core} Protocol @@ -53,23 +65,6 @@ * [Release](safe-apps/release.md) -## Reference - -* [Auth Kit](reference/safe-core-sdk/auth-kit/README.md) - * [AuthKitBasePack](reference/safe-core-sdk/auth-kit/AuthKitBasePack.md) - * [Web3AuthModalPack](reference/safe-core-sdk/auth-kit/Web3AuthModalPack.md) - -* [Protocol Kit](reference/safe-core-sdk/protocol-kit/README.md) - -* [Onramp Kit](reference/safe-core-sdk/onramp-kit/README.md) - * [OnRampKitBasePack](reference/safe-core-sdk/onramp-kit/OnRampKitBasePack.md) - * [StripePack](reference/safe-core-sdk/onramp-kit/StripePack.md) - * [MoneriumPack](reference/safe-core-sdk/onramp-kit/MoneriumPack.md) - -* [API Kit](reference/safe-core-sdk/api-kit/README.md) - ## Miscellaneous * [Bug Bounty](miscellaneous/bug-bounty-program.md) diff --git a/reference/TEMPLATE.md b/safe-core-sdk/TEMPLATE.md similarity index 100% rename from reference/TEMPLATE.md rename to safe-core-sdk/TEMPLATE.md diff --git a/reference/safe-core-sdk/api-kit/README.md b/safe-core-sdk/api-kit/reference/README.md similarity index 100% rename from reference/safe-core-sdk/api-kit/README.md rename to safe-core-sdk/api-kit/reference/README.md diff --git a/safe-core-sdk/auth-kit/guides/README.md b/safe-core-sdk/auth-kit/guides/README.md new file mode 100644 index 00000000..e69de29b diff --git a/safe-core-sdk/auth-kit/web3auth.md b/safe-core-sdk/auth-kit/guides/web3auth.md similarity index 100% rename from safe-core-sdk/auth-kit/web3auth.md rename to safe-core-sdk/auth-kit/guides/web3auth.md diff --git a/reference/safe-core-sdk/auth-kit/AuthKitBasePack.md b/safe-core-sdk/auth-kit/reference/AuthKitBasePack.md similarity index 100% rename from reference/safe-core-sdk/auth-kit/AuthKitBasePack.md rename to safe-core-sdk/auth-kit/reference/AuthKitBasePack.md diff --git a/reference/safe-core-sdk/auth-kit/README.md b/safe-core-sdk/auth-kit/reference/README.md similarity index 100% rename from reference/safe-core-sdk/auth-kit/README.md rename to safe-core-sdk/auth-kit/reference/README.md diff --git a/reference/safe-core-sdk/auth-kit/Web3AuthModalPack.md b/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md similarity index 100% rename from reference/safe-core-sdk/auth-kit/Web3AuthModalPack.md rename to safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md diff --git a/safe-core-sdk/onramp-kit/guides/README.md b/safe-core-sdk/onramp-kit/guides/README.md new file mode 100644 index 00000000..e69de29b diff --git a/safe-core-sdk/onramp-kit/monerium.md b/safe-core-sdk/onramp-kit/guides/monerium.md similarity index 100% rename from safe-core-sdk/onramp-kit/monerium.md rename to safe-core-sdk/onramp-kit/guides/monerium.md diff --git a/safe-core-sdk/onramp-kit/stripe.md b/safe-core-sdk/onramp-kit/guides/stripe.md similarity index 100% rename from safe-core-sdk/onramp-kit/stripe.md rename to safe-core-sdk/onramp-kit/guides/stripe.md diff --git a/reference/safe-core-sdk/onramp-kit/MoneriumPack.md b/safe-core-sdk/onramp-kit/reference/MoneriumPack.md similarity index 100% rename from reference/safe-core-sdk/onramp-kit/MoneriumPack.md rename to safe-core-sdk/onramp-kit/reference/MoneriumPack.md diff --git a/reference/safe-core-sdk/onramp-kit/OnRampKitBasePack.md b/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md similarity index 100% rename from reference/safe-core-sdk/onramp-kit/OnRampKitBasePack.md rename to safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md diff --git a/reference/safe-core-sdk/onramp-kit/README.md b/safe-core-sdk/onramp-kit/reference/README.md similarity index 100% rename from reference/safe-core-sdk/onramp-kit/README.md rename to safe-core-sdk/onramp-kit/reference/README.md diff --git a/reference/safe-core-sdk/onramp-kit/StripePack.md b/safe-core-sdk/onramp-kit/reference/StripePack.md similarity index 100% rename from reference/safe-core-sdk/onramp-kit/StripePack.md rename to safe-core-sdk/onramp-kit/reference/StripePack.md diff --git a/reference/safe-core-sdk/protocol-kit/README.md b/safe-core-sdk/protocol-kit/reference/README.md similarity index 100% rename from reference/safe-core-sdk/protocol-kit/README.md rename to safe-core-sdk/protocol-kit/reference/README.md diff --git a/safe-core-sdk/relay-kit/guides/README.md b/safe-core-sdk/relay-kit/guides/README.md new file mode 100644 index 00000000..e69de29b diff --git a/safe-core-sdk/relay-kit/gelato.md b/safe-core-sdk/relay-kit/guides/gelato.md similarity index 100% rename from safe-core-sdk/relay-kit/gelato.md rename to safe-core-sdk/relay-kit/guides/gelato.md diff --git a/reference/safe-core-sdk/relay-kit/README.md b/safe-core-sdk/relay-kit/reference/README.md similarity index 100% rename from reference/safe-core-sdk/relay-kit/README.md rename to safe-core-sdk/relay-kit/reference/README.md From e3dc95b956422395964c7b0aa672b9c712a447e7 Mon Sep 17 00:00:00 2001 From: xiaolou86 <20718693+xiaolou86@users.noreply.github.com> Date: Mon, 13 Nov 2023 22:57:47 +0800 Subject: [PATCH 016/108] docs: fix typos (#271) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: fix typos * Update safe-apps/release.md revert typo walkthroughts Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> * Update safe-core-api/rpc-requirements.md fix typos Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> * Update safe-core-api/rpc-requirements.md Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> * Update safe-core-api/rpc-requirements.md Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> * Update safe-core-api/rpc-requirements.md fix typos Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> * Update safe-apps/release.md fix typo Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> --------- Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> --- safe-core-api/rpc-requirements.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/safe-core-api/rpc-requirements.md b/safe-core-api/rpc-requirements.md index 8268b7f0..53204cdd 100644 --- a/safe-core-api/rpc-requirements.md +++ b/safe-core-api/rpc-requirements.md @@ -34,10 +34,10 @@ For the L2 version of the Safe, no special RPC methods are used. The most demand That's not written in stone. Tx service has some environment variables that can be configured to set a limit on the number of blocks that are processed together (`ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX`), but the default behaviour is trying to detect the best configuration for every network similar to how [TCP congestion control](https://en.wikipedia.org/wiki/TCP_congestion_control) works.Indexer tries to process a low number of blocks (currently 50). Depending on that: -* If request takes **less than 1 second**, node can process more. Number of blocks to fetch is duplicated for the next request. -* If request takes **less than 3 seconds**, number of blocks to process are incremented by an small amount (currently 20). -* If request takes **more than 20 seconds**, number of blocks to process are decremented by an small amount (currently 20). -* If request takes **more than 30 seconds**, number of blocks to process are halved. +* If the request takes **less than 1 second**, the node can process more. The number of blocks to fetch is duplicated for the next request. +* If the request takes **less than 3 seconds**, the number of blocks to process is incremented by a small amount (currently 20). +* If the request takes **more than 20 seconds**, the number of blocks to process is decremented by a small amount (currently 20). +* If the request takes **more than 30 seconds**, the number of blocks to process is halved. * If there is **an exception** when requesting the information (I/O error) number of blocks to process is reset to the minimum number of blocks (currently 1). * All this happens in every request to the node used for indexing (safe transactions, erc20/721 events...). From b2a2ad06a9d2bfba16b8de08f1877ce72056541c Mon Sep 17 00:00:00 2001 From: Aaron Cook Date: Tue, 14 Nov 2023 08:51:25 +0100 Subject: [PATCH 017/108] fix: update `@web3auth/*` versions (#270) * fix: update `@web3auth/*` versions * fix: revert formatting --- safe-core-sdk/auth-kit/guides/web3auth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/safe-core-sdk/auth-kit/guides/web3auth.md b/safe-core-sdk/auth-kit/guides/web3auth.md index 9d6d9119..e68cb14d 100644 --- a/safe-core-sdk/auth-kit/guides/web3auth.md +++ b/safe-core-sdk/auth-kit/guides/web3auth.md @@ -10,7 +10,7 @@ This guide demonstrate how to create an externally-owned account using your emai ### Install dependencies ```bash -npm i @safe-global/auth-kit @web3auth/base@4.3.0 @web3auth/modal@4.3.1 @web3auth/openlogin-adapter@4.3.0 +npm i @safe-global/auth-kit @web3auth/base@4.6.0 @web3auth/modal@4.6.2 @web3auth/openlogin-adapter@4.6.0 ``` ## Create a Web3AuthModalPack instance From 6fbe44a4163a01118bc21b6fd1fb1e2cd8519a41 Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Thu, 16 Nov 2023 16:18:50 +0100 Subject: [PATCH 018/108] Update README.md (#276) --- safe-smart-account/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/safe-smart-account/README.md b/safe-smart-account/README.md index c1002762..b2f3c448 100644 --- a/safe-smart-account/README.md +++ b/safe-smart-account/README.md @@ -27,4 +27,4 @@ Here are some core components of a Safe Smart Account that you will learn about: ## Signatures -Safe contracts support alternative [signature schemes](signatures/README.md) such as [EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) and [EIP-712](https://eips.ethereum.org/EIPS/eip-712) and relaying by making the confirmation/verification logic independent of `msg.sender`. +Safe contracts support alternative signature schemes such as [EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) and [EIP-712](https://eips.ethereum.org/EIPS/eip-712) and relaying by making the confirmation/verification logic independent of `msg.sender`. Read more about the [signature schemes](https://github.com/safe-global/safe-contracts/blob/main/docs/signatures.md) supported by Safe. From 5e561b1da3e480adcf123d34ab083487ea9d464a Mon Sep 17 00:00:00 2001 From: louis-md Date: Thu, 23 Nov 2023 12:30:44 +0100 Subject: [PATCH 019/108] Add script to generate Supported Networks pages from safe-deployments repo as a github action (#278) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add script to genereate Supported Networks pages from safe-deployments repo as a github action * Update summary * Update summary * Fix typo in supported networks script & re-generate .md files * Implement requested changes * Implement requested changes * Remove unused console.log; fix supported networks index page & block explorers * Fix some vale errors ("networks's" & "Testnet") * Re-generate supported networks * Implement requested changes (wording & correct section) * Update SUMMARY.md * Update SUMMARY.md * Update SUMMARY.md * Update SUMMARY.md * Update SUMMARY.md * Move supported networks .md folder into safe-smart-accounts * Implement requested changes (create PR on workflow, minor fixes) * Update vale dictionnary * Update vale dictionnary * Remove duplicates in vale dictionnary * Remove unnecessary steps in github workflow for supported networks * Remove duplicates in vale dictionnary * Alphabetize & deduplicate vale dictionnary * Exclude deprecated block explorer from supported networks page generation --------- Co-authored-by: Germán Martínez <6764315+germartinez@users.noreply.github.com> --- .github/scripts/generateSupportedNetworks.js | 139 + .github/styles/Vocab/default/accept.txt | 216 +- .../workflows/generate-supported-networks.yml | 34 + .gitignore | 1 + SUMMARY.md | 7 + package.json | 6 + safe-smart-account/supported-networks.md | 3 + .../supported-networks/v1.0.0.md | 47 + .../supported-networks/v1.1.1.md | 103 + .../supported-networks/v1.2.0.md | 63 + .../supported-networks/v1.3.0.md | 2358 +++++++++++++++++ .../supported-networks/v1.4.1.md | 172 ++ yarn.lock | 173 ++ 13 files changed, 3262 insertions(+), 60 deletions(-) create mode 100644 .github/scripts/generateSupportedNetworks.js create mode 100644 .github/workflows/generate-supported-networks.yml create mode 100644 package.json create mode 100644 safe-smart-account/supported-networks.md create mode 100644 safe-smart-account/supported-networks/v1.0.0.md create mode 100644 safe-smart-account/supported-networks/v1.1.1.md create mode 100644 safe-smart-account/supported-networks/v1.2.0.md create mode 100644 safe-smart-account/supported-networks/v1.3.0.md create mode 100644 safe-smart-account/supported-networks/v1.4.1.md create mode 100644 yarn.lock diff --git a/.github/scripts/generateSupportedNetworks.js b/.github/scripts/generateSupportedNetworks.js new file mode 100644 index 00000000..4ac268e3 --- /dev/null +++ b/.github/scripts/generateSupportedNetworks.js @@ -0,0 +1,139 @@ +const shell = require('shelljs') +const fs = require('fs') +const path = require('path') + +const walkPath = dir => { + let results = [] + const list = fs.readdirSync(dir) + list.forEach(function (file) { + const filePath = path.join(dir, file) + const stat = fs.statSync(filePath) + if (stat?.isDirectory()) { + results = results.concat(walkPath(filePath)) + } else { + results.push(filePath) + } + }) + + return results +} + +const deduplicate = () => [ + (acc, curr) => { + if (acc.includes(curr)) { + return acc + } + + return [...acc, curr] + }, + [] +] + +const supportedNetworksPath = './safe-smart-account/supported-networks' + +const generateSupportedNetworks = async () => { + const deploymentRepoUrl = 'https://github.com/safe-global/safe-deployments/' + shell.exec(`git clone ${deploymentRepoUrl} ./deployments`) + shell.rm('-rf', supportedNetworksPath) + + const fetch = await import('node-fetch') + const paths = walkPath('deployments/src/assets').map(p => + p.replace('deployments/src/assets/', '') + ) + + const allNetworks = await fetch + .default('https://chainid.network/chains.json') + .then(res => res.json()) + + const contracts = paths.map(p => { + const file = fs.readFileSync(`deployments/src/assets/${p}`, 'utf8') + const json = JSON.parse(file) + + return Object.entries(json.networkAddresses).map(([chainId, address]) => ({ + name: p.split('/')[1].split('.')[0], + version: p.split('/')[0], + address, + chainId, + chainName: allNetworks.find(n => n.chainId === parseInt(chainId))?.name, + blockExplorerUrl: allNetworks.find(n => n.chainId === parseInt(chainId)) + ?.explorers?.[0]?.url + })) + }) + + const versions = contracts + .flat() + .map(c => c.version) + .reduce(...deduplicate()) + .reverse() + + shell.mkdir(supportedNetworksPath) + + versions.forEach(version => { + const _contracts = contracts.flat().filter(c => c.version === version) + + const networks = Object.entries( + _contracts.reduce((acc, curr) => { + const { chainId, chainName } = curr + if (acc[chainId]) { + return acc + } + + return { + ...acc, + [chainId]: chainName + } + }, {}) + ) + + const content = `# ${version} + +This page lists the addresses of all the Safe contracts \`${version}\` grouped by chain. + +## Networks +${networks + .map(([chainId, network]) => { + return ` +### ${network} + +This network's chain ID is ${chainId}. + +${_contracts + .filter(c => c.chainId === chainId) + .map( + c => + `- \`${c.name}.sol\`: ${ + c.blockExplorerUrl == null || deprecatedBlockExplorers.includes(c.blockExplorerUrl) + ? c.address + : `[${c.address}](${c.blockExplorerUrl}/address/${c.address})` + }` + ) + .join('\n')} +` + }) + .join('\n')} + + ` + fs.writeFileSync(`${supportedNetworksPath}/${version}.md`, content) + }) + + shell.rm('-rf', './deployments') +} + +generateSupportedNetworks() + +const deprecatedBlockExplorers = [ + 'https://ropsten.etherscan.io', + 'https://rinkeby.etherscan.io', + 'https://kovan-optimistic.etherscan.io', + 'https://stardust-explorer.metis.io', + 'https://blockexplorer.rinkeby.boba.network', + 'https://blockexplorer.bobabeam.boba.network', + 'https://rabbit.analogscan.com', + 'https://explorer.eurus.network', + 'https://testnetexplorer.eurus.network', + 'https://explorer.tst.publicmint.io', + 'https://evm-testnet.venidiumexplorer.com', + 'https://evm.venidiumexplorer.com', + 'https://evm.explorer.canto.io', + 'https://explorer.autobahn.network' +] diff --git a/.github/styles/Vocab/default/accept.txt b/.github/styles/Vocab/default/accept.txt index b3e4a624..22936a32 100644 --- a/.github/styles/Vocab/default/accept.txt +++ b/.github/styles/Vocab/default/accept.txt @@ -1,73 +1,169 @@ -Safe{Core} Protocol -Safe{Core} Account Abstraction SDK -Safe Smart Account -Safe Module -Safe Modules -Safe Guards -Safe Transaction Service -Safe Apps SDK -Safe App -Safe Apps -Blockchain -blockchain -blockchains -onchain -offchain -Offchain -multisig -dapp -dapps -Auth Kit -Protocol Kit -Relay Kit -Onramp Kit -API Kit -UI Kit -IPFS -Onramp -Safe Transaction Service -Transaction Service -Safe Config Service -Config Service -Safe Client Gateway -Client Gateway -Config -config -backend -Safe{DAO} +A1 AA -API ABI ABIs -SDK -sdk -npm +API +API Kit +Acala +Alfajores +Andromeda +Apothem +Arbitrum +Arianee +Astar +Aurora +Auth Kit +Autobahn +Avax +BNB +Blockchain +Blocknative +Blockscout +Boba +Bobabeam +C-Chain +C1 CORS CRA -HTTP -HTTPS -Blocknative -ETH +Canto +Cascadia +Celo +Chiado +Client Gateway +CloudWalk +Config +Crab +Cronos +Crossbell +DAO +Darwinia EIP ERC -Gunicorn -WSGI -Sourcify -Etherscan -Blockscout -delist -wagmi -crypto -cryptocurrencies +ETH +EVM +EdgeEVM +Edgeware +EtherLite Ethereum -blockchain +Etherscan +Eurus +Evmos +Fantom +Fuji +Fuse +GC +Gelato +Gnosis +Godwoken +Goerli +Gunicorn +HTTP +HTTPS +Haqq +Holesky +IPFS +IoTeX +KCC +Kanazawa +Karura +Kava +Klaytn +Kovan +LUKSO +Lightlink +Linea +MainNet +Mainnet +Mandala +Mantle +Meld +Metadium Metamask +Metis +Milkomeda Monerium -Gelato +Moonbase +Moonbeam +Moonriver +Mordor +Nova +OP +Offchain +Onramp +Onramp Kit +PGN +Polis +Polygon +Protocol Kit +PublicMint +REI RPC -Mainnet -Goerli -DAO +Relay Kit +Rethereum +Rinkeby +Rollux +Rootstock +Ropsten +SDK +Safe App +Safe Apps +Safe Apps SDK +Safe Client Gateway +Safe Config Service +Safe Guards +Safe Module +Safe Modules +Safe Smart Account +Safe Transaction Service +Safe{Core} Account Abstraction SDK +Safe{Core} Protocol +Safe{DAO} +Sepolia +Shiden +ShimmerEVM +Shyft +Solaris +Sourcify +Sparknet +Stardust +Supernet +Syscoin +TC9 +Tanenbaum +Telos +Tenet +Testnet +ThunderCore +Transaction Service +U2U +UI Kit +Ultron +Velas +Venidium +WEMIX3.0 +WSGI +XDC +ZetaChain +Zora +backend +blockchain +blockchains composable -endhint +config +crypto +cryptocurrencies +dapp +dapps +delist endembed +endhint +multisig +npm +offchain +onchain +sdk +undefined +v1 +wagmi +zkEVM +zkSync \ No newline at end of file diff --git a/.github/workflows/generate-supported-networks.yml b/.github/workflows/generate-supported-networks.yml new file mode 100644 index 00000000..accabbe9 --- /dev/null +++ b/.github/workflows/generate-supported-networks.yml @@ -0,0 +1,34 @@ +name: Weekly update for supported networks + +on: + schedule: + - cron: "0 9 * * 1" + workflow_dispatch: + +jobs: + generate-supported-networks: + runs-on: ubuntu-latest + steps: + - name: Use Node.js 20.x + uses: actions/setup-node@v2 + with: + node-version: '20.x' + cache: 'yarn' + cache-dependency-path: ./yarn.lock + - name: Install dependencies + run: yarn install --frozen-lockfile + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "::set-output name=dir::$(yarn config get cacheFolder)" + - uses: actions/cache@v3 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + - name: Generate supported networks + run: node ./.github/scripts/generateSupportedNetworks.js + - uses: actions/checkout@v4 + - name: Create Pull Request + uses: peter-evans/create-pull-request@v5 diff --git a/.gitignore b/.gitignore index e43b0f98..91dfed8d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +node_modules \ No newline at end of file diff --git a/SUMMARY.md b/SUMMARY.md index 5b10b610..0c5eda81 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -14,6 +14,13 @@ * [Audits](safe-smart-account/security-audits.md) +* [Supported Networks](safe-smart-account/supported-networks.md) + * [v.1.4.1](safe-smart-account/supported-networks/v1.4.1.md) + * [v.1.3.0](safe-smart-account/supported-networks/v1.3.0.md) + * [v.1.2.0](safe-smart-account/supported-networks/v1.2.0.md) + * [v.1.1.1](safe-smart-account/supported-networks/v1.1.1.md) + * [v.1.0.0](safe-smart-account/supported-networks/v1.0.0.md) + ## Safe{Core} AA SDK * [Overview](safe-core-sdk/README.md) diff --git a/package.json b/package.json new file mode 100644 index 00000000..038d73cb --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "node-fetch": "^3.3.2", + "shelljs": "^0.8.5" + } +} diff --git a/safe-smart-account/supported-networks.md b/safe-smart-account/supported-networks.md new file mode 100644 index 00000000..9e6cf421 --- /dev/null +++ b/safe-smart-account/supported-networks.md @@ -0,0 +1,3 @@ +This section lists the addresses of all the Safe contracts deployed grouped by version and chain. The same list can be found on the [GitHub repository](https://github.com/safe-global/safe-deployments), from which these pages are automatically generated. + +The most recent version of the Safe contracts is `v1.4.1`, which adds compatibility with the ERC-4337. However, it's not supported yet in the [Safe{Wallet}](app.safe.global) interface and the Safe Transaction Service. For that reason, depending on your use case, it might be recommended to continue using `v1.3.0` until there is better support. \ No newline at end of file diff --git a/safe-smart-account/supported-networks/v1.0.0.md b/safe-smart-account/supported-networks/v1.0.0.md new file mode 100644 index 00000000..9d995749 --- /dev/null +++ b/safe-smart-account/supported-networks/v1.0.0.md @@ -0,0 +1,47 @@ +# v1.0.0 + +This page lists the addresses of all the Safe contracts `v1.0.0` grouped by chain. + +## Networks + +### Ethereum Mainnet + +This network's chain ID is 1. + +- `gnosis_safe.sol`: [0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A](https://etherscan.io/address/0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A) +- `proxy_factory.sol`: [0x12302fE9c02ff50939BaAaaf415fc226C078613C](https://etherscan.io/address/0x12302fE9c02ff50939BaAaaf415fc226C078613C) + + +### Rinkeby + +This network's chain ID is 4. + +- `gnosis_safe.sol`: 0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A +- `proxy_factory.sol`: 0x12302fE9c02ff50939BaAaaf415fc226C078613C + + +### Goerli + +This network's chain ID is 5. + +- `gnosis_safe.sol`: [0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A](https://goerli.etherscan.io/address/0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A) +- `proxy_factory.sol`: [0x12302fE9c02ff50939BaAaaf415fc226C078613C](https://goerli.etherscan.io/address/0x12302fE9c02ff50939BaAaaf415fc226C078613C) + + +### LUKSO Mainnet + +This network's chain ID is 42. + +- `gnosis_safe.sol`: [0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A](https://explorer.execution.mainnet.lukso.network/address/0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A) +- `proxy_factory.sol`: [0x12302fE9c02ff50939BaAaaf415fc226C078613C](https://explorer.execution.mainnet.lukso.network/address/0x12302fE9c02ff50939BaAaaf415fc226C078613C) + + +### Gnosis + +This network's chain ID is 100. + +- `gnosis_safe.sol`: [0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A](https://gnosisscan.io/address/0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A) +- `proxy_factory.sol`: [0x12302fE9c02ff50939BaAaaf415fc226C078613C](https://gnosisscan.io/address/0x12302fE9c02ff50939BaAaaf415fc226C078613C) + + + \ No newline at end of file diff --git a/safe-smart-account/supported-networks/v1.1.1.md b/safe-smart-account/supported-networks/v1.1.1.md new file mode 100644 index 00000000..8b20c991 --- /dev/null +++ b/safe-smart-account/supported-networks/v1.1.1.md @@ -0,0 +1,103 @@ +# v1.1.1 + +This page lists the addresses of all the Safe contracts `v1.1.1` grouped by chain. + +## Networks + +### Ethereum Mainnet + +This network's chain ID is 1. + +- `create_and_add_modules.sol`: [0xF61A721642B0c0C8b334bA3763BA1326F53798C0](https://etherscan.io/address/0xF61A721642B0c0C8b334bA3763BA1326F53798C0) +- `create_call.sol`: [0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a](https://etherscan.io/address/0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a) +- `default_callback_handler.sol`: [0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44](https://etherscan.io/address/0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44) +- `gnosis_safe.sol`: [0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F](https://etherscan.io/address/0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F) +- `multi_send.sol`: [0x8D29bE29923b68abfDD21e541b9374737B49cdAD](https://etherscan.io/address/0x8D29bE29923b68abfDD21e541b9374737B49cdAD) +- `proxy_factory.sol`: [0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B](https://etherscan.io/address/0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B) + + +### Rinkeby + +This network's chain ID is 4. + +- `create_and_add_modules.sol`: 0xF61A721642B0c0C8b334bA3763BA1326F53798C0 +- `create_call.sol`: 0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a +- `default_callback_handler.sol`: 0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44 +- `gnosis_safe.sol`: 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F +- `multi_send.sol`: 0x8D29bE29923b68abfDD21e541b9374737B49cdAD +- `proxy_factory.sol`: 0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B + + +### Goerli + +This network's chain ID is 5. + +- `create_and_add_modules.sol`: [0xF61A721642B0c0C8b334bA3763BA1326F53798C0](https://goerli.etherscan.io/address/0xF61A721642B0c0C8b334bA3763BA1326F53798C0) +- `create_call.sol`: [0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a](https://goerli.etherscan.io/address/0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a) +- `default_callback_handler.sol`: [0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44](https://goerli.etherscan.io/address/0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44) +- `gnosis_safe.sol`: [0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F](https://goerli.etherscan.io/address/0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F) +- `multi_send.sol`: [0x8D29bE29923b68abfDD21e541b9374737B49cdAD](https://goerli.etherscan.io/address/0x8D29bE29923b68abfDD21e541b9374737B49cdAD) +- `proxy_factory.sol`: [0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B](https://goerli.etherscan.io/address/0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B) + + +### LUKSO Mainnet + +This network's chain ID is 42. + +- `create_and_add_modules.sol`: [0xF61A721642B0c0C8b334bA3763BA1326F53798C0](https://explorer.execution.mainnet.lukso.network/address/0xF61A721642B0c0C8b334bA3763BA1326F53798C0) +- `create_call.sol`: [0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a](https://explorer.execution.mainnet.lukso.network/address/0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a) +- `default_callback_handler.sol`: [0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44](https://explorer.execution.mainnet.lukso.network/address/0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44) +- `gnosis_safe.sol`: [0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F](https://explorer.execution.mainnet.lukso.network/address/0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F) +- `multi_send.sol`: [0x8D29bE29923b68abfDD21e541b9374737B49cdAD](https://explorer.execution.mainnet.lukso.network/address/0x8D29bE29923b68abfDD21e541b9374737B49cdAD) +- `proxy_factory.sol`: [0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B](https://explorer.execution.mainnet.lukso.network/address/0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B) + + +### TomoChain + +This network's chain ID is 88. + +- `create_and_add_modules.sol`: 0xF61A721642B0c0C8b334bA3763BA1326F53798C0 +- `create_call.sol`: 0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a +- `default_callback_handler.sol`: 0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44 +- `gnosis_safe.sol`: 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F +- `multi_send.sol`: 0x8D29bE29923b68abfDD21e541b9374737B49cdAD +- `proxy_factory.sol`: 0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B + + +### Gnosis + +This network's chain ID is 100. + +- `create_and_add_modules.sol`: [0xF61A721642B0c0C8b334bA3763BA1326F53798C0](https://gnosisscan.io/address/0xF61A721642B0c0C8b334bA3763BA1326F53798C0) +- `create_call.sol`: [0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a](https://gnosisscan.io/address/0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a) +- `default_callback_handler.sol`: [0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44](https://gnosisscan.io/address/0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44) +- `gnosis_safe.sol`: [0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F](https://gnosisscan.io/address/0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F) +- `multi_send.sol`: [0x8D29bE29923b68abfDD21e541b9374737B49cdAD](https://gnosisscan.io/address/0x8D29bE29923b68abfDD21e541b9374737B49cdAD) +- `proxy_factory.sol`: [0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B](https://gnosisscan.io/address/0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B) + + +### Energy Web Chain + +This network's chain ID is 246. + +- `create_and_add_modules.sol`: [0xF61A721642B0c0C8b334bA3763BA1326F53798C0](https://explorer.energyweb.org/address/0xF61A721642B0c0C8b334bA3763BA1326F53798C0) +- `create_call.sol`: [0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a](https://explorer.energyweb.org/address/0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a) +- `default_callback_handler.sol`: [0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44](https://explorer.energyweb.org/address/0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44) +- `gnosis_safe.sol`: [0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F](https://explorer.energyweb.org/address/0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F) +- `multi_send.sol`: [0x8D29bE29923b68abfDD21e541b9374737B49cdAD](https://explorer.energyweb.org/address/0x8D29bE29923b68abfDD21e541b9374737B49cdAD) +- `proxy_factory.sol`: [0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B](https://explorer.energyweb.org/address/0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B) + + +### Energy Web Volta Testnet + +This network's chain ID is 73799. + +- `create_and_add_modules.sol`: 0xF61A721642B0c0C8b334bA3763BA1326F53798C0 +- `create_call.sol`: 0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a +- `default_callback_handler.sol`: 0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44 +- `gnosis_safe.sol`: 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F +- `multi_send.sol`: 0x8D29bE29923b68abfDD21e541b9374737B49cdAD +- `proxy_factory.sol`: 0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B + + + \ No newline at end of file diff --git a/safe-smart-account/supported-networks/v1.2.0.md b/safe-smart-account/supported-networks/v1.2.0.md new file mode 100644 index 00000000..f9e49b6e --- /dev/null +++ b/safe-smart-account/supported-networks/v1.2.0.md @@ -0,0 +1,63 @@ +# v1.2.0 + +This page lists the addresses of all the Safe contracts `v1.2.0` grouped by chain. + +## Networks + +### Ethereum Mainnet + +This network's chain ID is 1. + +- `gnosis_safe.sol`: [0x6851D6fDFAfD08c0295C392436245E5bc78B0185](https://etherscan.io/address/0x6851D6fDFAfD08c0295C392436245E5bc78B0185) + + +### Rinkeby + +This network's chain ID is 4. + +- `gnosis_safe.sol`: 0x6851D6fDFAfD08c0295C392436245E5bc78B0185 + + +### Goerli + +This network's chain ID is 5. + +- `gnosis_safe.sol`: [0x6851D6fDFAfD08c0295C392436245E5bc78B0185](https://goerli.etherscan.io/address/0x6851D6fDFAfD08c0295C392436245E5bc78B0185) + + +### LUKSO Mainnet + +This network's chain ID is 42. + +- `gnosis_safe.sol`: [0x6851D6fDFAfD08c0295C392436245E5bc78B0185](https://explorer.execution.mainnet.lukso.network/address/0x6851D6fDFAfD08c0295C392436245E5bc78B0185) + + +### TomoChain + +This network's chain ID is 88. + +- `gnosis_safe.sol`: 0x6851D6fDFAfD08c0295C392436245E5bc78B0185 + + +### Gnosis + +This network's chain ID is 100. + +- `gnosis_safe.sol`: [0x6851D6fDFAfD08c0295C392436245E5bc78B0185](https://gnosisscan.io/address/0x6851D6fDFAfD08c0295C392436245E5bc78B0185) + + +### Energy Web Chain + +This network's chain ID is 246. + +- `gnosis_safe.sol`: [0x6851D6fDFAfD08c0295C392436245E5bc78B0185](https://explorer.energyweb.org/address/0x6851D6fDFAfD08c0295C392436245E5bc78B0185) + + +### Energy Web Volta Testnet + +This network's chain ID is 73799. + +- `gnosis_safe.sol`: 0x6851D6fDFAfD08c0295C392436245E5bc78B0185 + + + \ No newline at end of file diff --git a/safe-smart-account/supported-networks/v1.3.0.md b/safe-smart-account/supported-networks/v1.3.0.md new file mode 100644 index 00000000..9546edb2 --- /dev/null +++ b/safe-smart-account/supported-networks/v1.3.0.md @@ -0,0 +1,2358 @@ +# v1.3.0 + +This page lists the addresses of all the Safe contracts `v1.3.0` grouped by chain. + +## Networks + +### Ethereum Mainnet + +This network's chain ID is 1. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://etherscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://etherscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://etherscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://etherscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://etherscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://etherscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://etherscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://etherscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://etherscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Ropsten + +This network's chain ID is 3. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Rinkeby + +This network's chain ID is 4. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Goerli + +This network's chain ID is 5. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://goerli.etherscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://goerli.etherscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://goerli.etherscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://goerli.etherscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://goerli.etherscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://goerli.etherscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://goerli.etherscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://goerli.etherscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://goerli.etherscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### OP Mainnet + +This network's chain ID is 10. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://optimistic.etherscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://optimistic.etherscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://optimistic.etherscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://optimistic.etherscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://optimistic.etherscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://optimistic.etherscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://optimistic.etherscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://optimistic.etherscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://optimistic.etherscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Metadium Mainnet + +This network's chain ID is 11. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Metadium Testnet + +This network's chain ID is 12. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### ThunderCore Testnet + +This network's chain ID is 18. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer-testnet.thundercore.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer-testnet.thundercore.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer-testnet.thundercore.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer-testnet.thundercore.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer-testnet.thundercore.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer-testnet.thundercore.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer-testnet.thundercore.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer-testnet.thundercore.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer-testnet.thundercore.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Cronos Mainnet + +This network's chain ID is 25. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://cronoscan.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://cronoscan.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://cronoscan.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://cronoscan.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://cronoscan.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://cronoscan.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://cronoscan.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://cronoscan.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://cronoscan.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Boba Network Rinkeby Testnet + +This network's chain ID is 28. + +- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804 +- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d +- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938 +- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA +- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa +- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B +- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC +- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717 +- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044 + + +### Rootstock Mainnet + +This network's chain ID is 30. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.rsk.co/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.rsk.co/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.rsk.co/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.rsk.co/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.rsk.co/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.rsk.co/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.rsk.co/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.rsk.co/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.rsk.co/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Rootstock Testnet + +This network's chain ID is 31. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.testnet.rsk.co/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.testnet.rsk.co/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.testnet.rsk.co/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.testnet.rsk.co/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.testnet.rsk.co/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.testnet.rsk.co/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.testnet.rsk.co/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.testnet.rsk.co/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.testnet.rsk.co/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### U2U Solaris Mainnet + +This network's chain ID is 39. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://u2uscan.xyz/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://u2uscan.xyz/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://u2uscan.xyz/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://u2uscan.xyz/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://u2uscan.xyz/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://u2uscan.xyz/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://u2uscan.xyz/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://u2uscan.xyz/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://u2uscan.xyz/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Telos EVM Mainnet + +This network's chain ID is 40. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://teloscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://teloscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://teloscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://teloscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://teloscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://teloscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://teloscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://teloscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://teloscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Telos EVM Testnet + +This network's chain ID is 41. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.teloscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.teloscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.teloscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.teloscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.teloscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.teloscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.teloscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.teloscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.teloscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### LUKSO Mainnet + +This network's chain ID is 42. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.execution.mainnet.lukso.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.execution.mainnet.lukso.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.execution.mainnet.lukso.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.execution.mainnet.lukso.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.execution.mainnet.lukso.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.execution.mainnet.lukso.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.execution.mainnet.lukso.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.execution.mainnet.lukso.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.execution.mainnet.lukso.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Crab Network + +This network's chain ID is 44. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://crab.subscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://crab.subscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://crab.subscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://crab.subscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://crab.subscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://crab.subscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://crab.subscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://crab.subscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://crab.subscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Darwinia Network + +This network's chain ID is 46. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://darwinia.subscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://darwinia.subscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://darwinia.subscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://darwinia.subscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://darwinia.subscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://darwinia.subscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://darwinia.subscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://darwinia.subscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://darwinia.subscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### XDC Network + +This network's chain ID is 50. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://xdcscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://xdcscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://xdcscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://xdcscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://xdcscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://xdcscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://xdcscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://xdcscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://xdcscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### XDC Apothem Network + +This network's chain ID is 51. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://apothem.xinfinscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://apothem.xinfinscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://apothem.xinfinscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://apothem.xinfinscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://apothem.xinfinscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://apothem.xinfinscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://apothem.xinfinscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://apothem.xinfinscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://apothem.xinfinscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### BNB Smart Chain Mainnet + +This network's chain ID is 56. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://bscscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://bscscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://bscscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://bscscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://bscscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://bscscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://bscscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://bscscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://bscscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Syscoin Mainnet + +This network's chain ID is 57. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.syscoin.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.syscoin.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.syscoin.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.syscoin.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.syscoin.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.syscoin.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.syscoin.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.syscoin.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.syscoin.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Ethereum Classic Mainnet + +This network's chain ID is 61. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockscout.com/etc/mainnet/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockscout.com/etc/mainnet/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockscout.com/etc/mainnet/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockscout.com/etc/mainnet/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockscout.com/etc/mainnet/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockscout.com/etc/mainnet/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockscout.com/etc/mainnet/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockscout.com/etc/mainnet/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockscout.com/etc/mainnet/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Ethereum Classic Testnet Mordor + +This network's chain ID is 63. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockscout.com/etc/mordor/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockscout.com/etc/mordor/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockscout.com/etc/mordor/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockscout.com/etc/mordor/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockscout.com/etc/mordor/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockscout.com/etc/mordor/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockscout.com/etc/mordor/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockscout.com/etc/mordor/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockscout.com/etc/mordor/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Optimism Kovan + +This network's chain ID is 69. + +- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804 +- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d +- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938 +- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA +- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa +- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B +- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC +- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717 +- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044 + + +### Japan Open Chain Mainnet + +This network's chain ID is 81. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.japanopenchain.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.japanopenchain.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.japanopenchain.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.japanopenchain.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.japanopenchain.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.japanopenchain.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.japanopenchain.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.japanopenchain.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.japanopenchain.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Meter Mainnet + +This network's chain ID is 82. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://scan.meter.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://scan.meter.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://scan.meter.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://scan.meter.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://scan.meter.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://scan.meter.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://scan.meter.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://scan.meter.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://scan.meter.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Meter Testnet + +This network's chain ID is 83. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://scan-warringstakes.meter.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://scan-warringstakes.meter.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://scan-warringstakes.meter.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://scan-warringstakes.meter.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://scan-warringstakes.meter.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://scan-warringstakes.meter.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://scan-warringstakes.meter.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://scan-warringstakes.meter.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://scan-warringstakes.meter.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### BNB Smart Chain Testnet + +This network's chain ID is 97. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.bscscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.bscscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.bscscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.bscscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.bscscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.bscscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.bscscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.bscscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.bscscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Gnosis + +This network's chain ID is 100. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://gnosisscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://gnosisscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://gnosisscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://gnosisscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://gnosisscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://gnosisscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://gnosisscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://gnosisscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://gnosisscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Velas EVM Mainnet + +This network's chain ID is 106. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://evmexplorer.velas.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://evmexplorer.velas.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://evmexplorer.velas.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://evmexplorer.velas.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://evmexplorer.velas.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://evmexplorer.velas.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://evmexplorer.velas.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://evmexplorer.velas.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://evmexplorer.velas.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### ThunderCore Mainnet + +This network's chain ID is 108. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://viewblock.io/thundercore/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://viewblock.io/thundercore/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://viewblock.io/thundercore/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://viewblock.io/thundercore/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://viewblock.io/thundercore/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://viewblock.io/thundercore/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://viewblock.io/thundercore/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://viewblock.io/thundercore/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://viewblock.io/thundercore/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### EtherLite Chain + +This network's chain ID is 111. + +- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804 +- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d +- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938 +- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA +- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa +- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B +- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC +- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717 +- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044 + + +### Fuse Mainnet + +This network's chain ID is 122. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.fuse.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.fuse.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.fuse.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.fuse.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.fuse.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.fuse.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.fuse.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.fuse.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.fuse.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Fuse Sparknet + +This network's chain ID is 123. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Polygon Mainnet + +This network's chain ID is 137. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://polygonscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://polygonscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://polygonscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://polygonscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://polygonscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://polygonscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://polygonscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://polygonscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://polygonscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### ShimmerEVM Mainnet + +This network's chain ID is 148. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.evm.shimmer.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.evm.shimmer.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.evm.shimmer.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.evm.shimmer.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.evm.shimmer.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.evm.shimmer.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.evm.shimmer.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.evm.shimmer.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.evm.shimmer.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Tenet Testnet + +This network's chain ID is 155. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://testnet.tenetscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://testnet.tenetscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://testnet.tenetscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://testnet.tenetscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://testnet.tenetscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://testnet.tenetscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://testnet.tenetscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://testnet.tenetscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://testnet.tenetscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Energy Web Chain + +This network's chain ID is 246. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.energyweb.org/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.energyweb.org/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.energyweb.org/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.energyweb.org/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.energyweb.org/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.energyweb.org/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.energyweb.org/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.energyweb.org/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.energyweb.org/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Fantom Opera + +This network's chain ID is 250. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://ftmscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://ftmscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://ftmscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://ftmscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://ftmscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://ftmscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://ftmscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://ftmscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://ftmscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### zkSync Era Testnet + +This network's chain ID is 280. + +- `compatibility_fallback_handler.sol`: [0x2f870a80647BbC554F3a0EBD093f11B4d2a7492A](https://goerli.explorer.zksync.io/address/0x2f870a80647BbC554F3a0EBD093f11B4d2a7492A) +- `create_call.sol`: [0xcB8e5E438c5c2b45FbE17B02Ca9aF91509a8ad56](https://goerli.explorer.zksync.io/address/0xcB8e5E438c5c2b45FbE17B02Ca9aF91509a8ad56) +- `gnosis_safe.sol`: [0xB00ce5CCcdEf57e539ddcEd01DF43a13855d9910](https://goerli.explorer.zksync.io/address/0xB00ce5CCcdEf57e539ddcEd01DF43a13855d9910) +- `gnosis_safe_l2.sol`: [0x1727c2c531cf966f902E5927b98490fDFb3b2b70](https://goerli.explorer.zksync.io/address/0x1727c2c531cf966f902E5927b98490fDFb3b2b70) +- `multi_send.sol`: [0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912](https://goerli.explorer.zksync.io/address/0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912) +- `multi_send_call_only.sol`: [0xf220D3b4DFb23C4ade8C88E526C1353AbAcbC38F](https://goerli.explorer.zksync.io/address/0xf220D3b4DFb23C4ade8C88E526C1353AbAcbC38F) +- `proxy_factory.sol`: [0xDAec33641865E4651fB43181C6DB6f7232Ee91c2](https://goerli.explorer.zksync.io/address/0xDAec33641865E4651fB43181C6DB6f7232Ee91c2) +- `sign_message_lib.sol`: [0x357147caf9C0cCa67DfA0CF5369318d8193c8407](https://goerli.explorer.zksync.io/address/0x357147caf9C0cCa67DfA0CF5369318d8193c8407) +- `simulate_tx_accessor.sol`: [0x4191E2e12E8BC5002424CE0c51f9947b02675a44](https://goerli.explorer.zksync.io/address/0x4191E2e12E8BC5002424CE0c51f9947b02675a44) + + +### Boba Network + +This network's chain ID is 288. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://bobascan.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://bobascan.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://bobascan.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://bobascan.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://bobascan.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://bobascan.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://bobascan.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://bobascan.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://bobascan.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Orderly Mainnet + +This network's chain ID is 291. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.orderly.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.orderly.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.orderly.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.orderly.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.orderly.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.orderly.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.orderly.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.orderly.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### (deprecated) Optimism on GC + +This network's chain ID is 300. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### KCC Mainnet + +This network's chain ID is 321. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.kcc.io/en/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.kcc.io/en/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.kcc.io/en/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.kcc.io/en/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.kcc.io/en/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.kcc.io/en/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.kcc.io/en/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.kcc.io/en/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.kcc.io/en/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### KCC Testnet + +This network's chain ID is 322. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scan-testnet.kcc.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scan-testnet.kcc.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scan-testnet.kcc.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scan-testnet.kcc.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scan-testnet.kcc.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scan-testnet.kcc.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scan-testnet.kcc.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scan-testnet.kcc.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scan-testnet.kcc.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### zkSync Era Mainnet + +This network's chain ID is 324. + +- `compatibility_fallback_handler.sol`: [0x2f870a80647BbC554F3a0EBD093f11B4d2a7492A](https://explorer.zksync.io/address/0x2f870a80647BbC554F3a0EBD093f11B4d2a7492A) +- `create_call.sol`: [0xcB8e5E438c5c2b45FbE17B02Ca9aF91509a8ad56](https://explorer.zksync.io/address/0xcB8e5E438c5c2b45FbE17B02Ca9aF91509a8ad56) +- `gnosis_safe.sol`: [0xB00ce5CCcdEf57e539ddcEd01DF43a13855d9910](https://explorer.zksync.io/address/0xB00ce5CCcdEf57e539ddcEd01DF43a13855d9910) +- `gnosis_safe_l2.sol`: [0x1727c2c531cf966f902E5927b98490fDFb3b2b70](https://explorer.zksync.io/address/0x1727c2c531cf966f902E5927b98490fDFb3b2b70) +- `multi_send.sol`: [0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912](https://explorer.zksync.io/address/0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912) +- `multi_send_call_only.sol`: [0xf220D3b4DFb23C4ade8C88E526C1353AbAcbC38F](https://explorer.zksync.io/address/0xf220D3b4DFb23C4ade8C88E526C1353AbAcbC38F) +- `proxy_factory.sol`: [0xDAec33641865E4651fB43181C6DB6f7232Ee91c2](https://explorer.zksync.io/address/0xDAec33641865E4651fB43181C6DB6f7232Ee91c2) +- `sign_message_lib.sol`: [0x357147caf9C0cCa67DfA0CF5369318d8193c8407](https://explorer.zksync.io/address/0x357147caf9C0cCa67DfA0CF5369318d8193c8407) +- `simulate_tx_accessor.sol`: [0x4191E2e12E8BC5002424CE0c51f9947b02675a44](https://explorer.zksync.io/address/0x4191E2e12E8BC5002424CE0c51f9947b02675a44) + + +### Shiden + +This network's chain ID is 336. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://shiden.subscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://shiden.subscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://shiden.subscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://shiden.subscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://shiden.subscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://shiden.subscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://shiden.subscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://shiden.subscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://shiden.subscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Cronos Testnet + +This network's chain ID is 338. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.cronos.org/testnet/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.cronos.org/testnet/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.cronos.org/testnet/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.cronos.org/testnet/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.cronos.org/testnet/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.cronos.org/testnet/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.cronos.org/testnet/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.cronos.org/testnet/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.cronos.org/testnet/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Optimism Goerli Testnet + +This network's chain ID is 420. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://optimism-goerli.blockscout.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://optimism-goerli.blockscout.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://optimism-goerli.blockscout.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://optimism-goerli.blockscout.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://optimism-goerli.blockscout.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://optimism-goerli.blockscout.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://optimism-goerli.blockscout.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://optimism-goerli.blockscout.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://optimism-goerli.blockscout.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### PGN (Public Goods Network) + +This network's chain ID is 424. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.publicgoods.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.publicgoods.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.publicgoods.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.publicgoods.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.publicgoods.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.publicgoods.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.publicgoods.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.publicgoods.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) + + +### Rollux Mainnet + +This network's chain ID is 570. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.rollux.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.rollux.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.rollux.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.rollux.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.rollux.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.rollux.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.rollux.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.rollux.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.rollux.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Metis Stardust Testnet + +This network's chain ID is 588. + +- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804 +- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d +- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938 +- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA +- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa +- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B +- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC +- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717 +- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044 + + +### Astar + +This network's chain ID is 592. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://astar.subscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://astar.subscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://astar.subscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://astar.subscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://astar.subscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://astar.subscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://astar.subscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://astar.subscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://astar.subscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Acala Mandala Testnet TC9 + +This network's chain ID is 595. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockscout.mandala.aca-staging.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockscout.mandala.aca-staging.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockscout.mandala.aca-staging.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockscout.mandala.aca-staging.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockscout.mandala.aca-staging.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockscout.mandala.aca-staging.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockscout.mandala.aca-staging.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockscout.mandala.aca-staging.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockscout.mandala.aca-staging.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Metis Goerli Testnet + +This network's chain ID is 599. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://goerli.explorer.metisdevops.link/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://goerli.explorer.metisdevops.link/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://goerli.explorer.metisdevops.link/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://goerli.explorer.metisdevops.link/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://goerli.explorer.metisdevops.link/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://goerli.explorer.metisdevops.link/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://goerli.explorer.metisdevops.link/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://goerli.explorer.metisdevops.link/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://goerli.explorer.metisdevops.link/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Karura Network + +This network's chain ID is 686. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockscout.karura.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockscout.karura.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockscout.karura.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockscout.karura.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockscout.karura.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockscout.karura.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockscout.karura.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockscout.karura.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockscout.karura.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Acala Network + +This network's chain ID is 787. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockscout.acala.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockscout.acala.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockscout.acala.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockscout.acala.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockscout.acala.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockscout.acala.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockscout.acala.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockscout.acala.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockscout.acala.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Klaytn Testnet Baobab + +This network's chain ID is 1001. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://scope.klaytn.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://scope.klaytn.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://scope.klaytn.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://scope.klaytn.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://scope.klaytn.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://scope.klaytn.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://scope.klaytn.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://scope.klaytn.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://scope.klaytn.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Eurus Mainnet + +This network's chain ID is 1008. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Metis Andromeda Mainnet + +This network's chain ID is 1088. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://andromeda-explorer.metis.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://andromeda-explorer.metis.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://andromeda-explorer.metis.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://andromeda-explorer.metis.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://andromeda-explorer.metis.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://andromeda-explorer.metis.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://andromeda-explorer.metis.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://andromeda-explorer.metis.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://andromeda-explorer.metis.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Polygon zkEVM + +This network's chain ID is 1101. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://zkevm.polygonscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://zkevm.polygonscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://zkevm.polygonscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://zkevm.polygonscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://zkevm.polygonscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://zkevm.polygonscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://zkevm.polygonscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://zkevm.polygonscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://zkevm.polygonscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### WEMIX3.0 Mainnet + +This network's chain ID is 1111. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.wemix.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.wemix.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.wemix.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.wemix.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.wemix.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.wemix.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.wemix.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.wemix.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.wemix.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### WEMIX3.0 Testnet + +This network's chain ID is 1112. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://microscope.test.wemix.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://microscope.test.wemix.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://microscope.test.wemix.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://microscope.test.wemix.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://microscope.test.wemix.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://microscope.test.wemix.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://microscope.test.wemix.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://microscope.test.wemix.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://microscope.test.wemix.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Core Blockchain Testnet + +This network's chain ID is 1115. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scan.test.btcs.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scan.test.btcs.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scan.test.btcs.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scan.test.btcs.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scan.test.btcs.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scan.test.btcs.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scan.test.btcs.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scan.test.btcs.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scan.test.btcs.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Core Blockchain Mainnet + +This network's chain ID is 1116. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scan.coredao.org/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scan.coredao.org/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scan.coredao.org/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scan.coredao.org/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scan.coredao.org/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scan.coredao.org/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scan.coredao.org/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scan.coredao.org/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scan.coredao.org/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Ultron Testnet + +This network's chain ID is 1230. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.ultron-dev.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.ultron-dev.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.ultron-dev.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.ultron-dev.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.ultron-dev.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.ultron-dev.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.ultron-dev.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.ultron-dev.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.ultron-dev.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Ultron Mainnet + +This network's chain ID is 1231. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://ulxscan.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://ulxscan.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://ulxscan.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://ulxscan.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://ulxscan.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://ulxscan.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://ulxscan.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://ulxscan.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://ulxscan.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Moonbeam + +This network's chain ID is 1284. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://moonbeam.moonscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://moonbeam.moonscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://moonbeam.moonscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://moonbeam.moonscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://moonbeam.moonscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://moonbeam.moonscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://moonbeam.moonscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://moonbeam.moonscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://moonbeam.moonscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Moonriver + +This network's chain ID is 1285. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://moonriver.moonscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://moonriver.moonscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://moonriver.moonscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://moonriver.moonscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://moonriver.moonscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://moonriver.moonscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://moonriver.moonscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://moonriver.moonscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://moonriver.moonscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Moonbase Alpha + +This network's chain ID is 1287. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://moonbase.moonscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://moonbase.moonscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://moonbase.moonscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://moonbase.moonscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://moonbase.moonscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://moonbase.moonscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://moonbase.moonscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://moonbase.moonscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://moonbase.moonscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Bobabeam + +This network's chain ID is 1294. + +- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804 +- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d +- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938 +- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA +- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa +- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B +- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC +- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717 +- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044 + + +### Polygon zkEVM Testnet + +This network's chain ID is 1442. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.public.zkevm-test.net/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.public.zkevm-test.net/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.public.zkevm-test.net/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.public.zkevm-test.net/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.public.zkevm-test.net/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.public.zkevm-test.net/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.public.zkevm-test.net/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.public.zkevm-test.net/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.public.zkevm-test.net/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Tenet + +This network's chain ID is 1559. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://tenetscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://tenetscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://tenetscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://tenetscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://tenetscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://tenetscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://tenetscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://tenetscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://tenetscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Rabbit Analog Testnet Chain + +This network's chain ID is 1807. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Lightlink Phoenix Mainnet + +This network's chain ID is 1890. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://phoenix.lightlink.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://phoenix.lightlink.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://phoenix.lightlink.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://phoenix.lightlink.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://phoenix.lightlink.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://phoenix.lightlink.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://phoenix.lightlink.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://phoenix.lightlink.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://phoenix.lightlink.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Lightlink Pegasus Testnet + +This network's chain ID is 1891. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://pegasus.lightlink.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://pegasus.lightlink.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://pegasus.lightlink.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://pegasus.lightlink.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://pegasus.lightlink.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://pegasus.lightlink.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://pegasus.lightlink.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://pegasus.lightlink.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://pegasus.lightlink.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Eurus Testnet + +This network's chain ID is 1984. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Milkomeda C1 Mainnet + +This network's chain ID is 2001. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Milkomeda A1 Mainnet + +This network's chain ID is 2002. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### CloudWalk Testnet + +This network's chain ID is 2008. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.testnet.cloudwalk.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.testnet.cloudwalk.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.testnet.cloudwalk.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.testnet.cloudwalk.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.testnet.cloudwalk.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.testnet.cloudwalk.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.testnet.cloudwalk.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.testnet.cloudwalk.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.testnet.cloudwalk.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### PublicMint Testnet + +This network's chain ID is 2019. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### PublicMint Mainnet + +This network's chain ID is 2020. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.publicmint.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.publicmint.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.publicmint.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.publicmint.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.publicmint.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.publicmint.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.publicmint.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.publicmint.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.publicmint.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Edgeware EdgeEVM Mainnet + +This network's chain ID is 2021. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://edgscan.live/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://edgscan.live/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://edgscan.live/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://edgscan.live/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://edgscan.live/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://edgscan.live/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://edgscan.live/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://edgscan.live/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://edgscan.live/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Kava Testnet + +This network's chain ID is 2221. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](http://testnet.kavascan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](http://testnet.kavascan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](http://testnet.kavascan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](http://testnet.kavascan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](http://testnet.kavascan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](http://testnet.kavascan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](http://testnet.kavascan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](http://testnet.kavascan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](http://testnet.kavascan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Kava + +This network's chain ID is 2222. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://kavascan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://kavascan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://kavascan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://kavascan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://kavascan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://kavascan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://kavascan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://kavascan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://kavascan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Crossbell + +This network's chain ID is 3737. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scan.crossbell.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scan.crossbell.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scan.crossbell.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scan.crossbell.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scan.crossbell.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scan.crossbell.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scan.crossbell.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scan.crossbell.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scan.crossbell.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Fantom Testnet + +This network's chain ID is 4002. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.ftmscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.ftmscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.ftmscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.ftmscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.ftmscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.ftmscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.ftmscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.ftmscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.ftmscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Orderly Sepolia Testnet + +This network's chain ID is 4460. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### IoTeX Network Mainnet + +This network's chain ID is 4689. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://iotexscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://iotexscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://iotexscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://iotexscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://iotexscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://iotexscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://iotexscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://iotexscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://iotexscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Venidium Testnet + +This network's chain ID is 4918. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Venidium Mainnet + +This network's chain ID is 4919. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Mantle + +This network's chain ID is 5000. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.mantle.xyz/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.mantle.xyz/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.mantle.xyz/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.mantle.xyz/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.mantle.xyz/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.mantle.xyz/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.mantle.xyz/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.mantle.xyz/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.mantle.xyz/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Mantle Testnet + +This network's chain ID is 5001. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.testnet.mantle.xyz/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.testnet.mantle.xyz/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.testnet.mantle.xyz/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.testnet.mantle.xyz/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.testnet.mantle.xyz/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.testnet.mantle.xyz/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.testnet.mantle.xyz/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.testnet.mantle.xyz/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.testnet.mantle.xyz/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Syscoin Tanenbaum Testnet + +This network's chain ID is 5700. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://tanenbaum.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://tanenbaum.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://tanenbaum.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://tanenbaum.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://tanenbaum.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://tanenbaum.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://tanenbaum.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://tanenbaum.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://tanenbaum.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Cascadia Testnet + +This network's chain ID is 6102. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.cascadia.foundation/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.cascadia.foundation/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.cascadia.foundation/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.cascadia.foundation/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.cascadia.foundation/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.cascadia.foundation/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.cascadia.foundation/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.cascadia.foundation/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.cascadia.foundation/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### ZetaChain Athens 3 Testnet + +This network's chain ID is 7001. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://athens3.explorer.zetachain.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://athens3.explorer.zetachain.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://athens3.explorer.zetachain.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://athens3.explorer.zetachain.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://athens3.explorer.zetachain.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://athens3.explorer.zetachain.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://athens3.explorer.zetachain.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://athens3.explorer.zetachain.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://athens3.explorer.zetachain.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Shyft Mainnet + +This network's chain ID is 7341. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://bx.shyft.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://bx.shyft.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://bx.shyft.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://bx.shyft.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://bx.shyft.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://bx.shyft.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://bx.shyft.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://bx.shyft.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://bx.shyft.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Canto + +This network's chain ID is 7700. + +- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804 +- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d +- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938 +- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA +- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa +- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B +- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC +- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717 +- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044 + + +### Klaytn Mainnet Cypress + +This network's chain ID is 8217. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://scope.klaytn.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://scope.klaytn.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://scope.klaytn.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://scope.klaytn.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://scope.klaytn.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://scope.klaytn.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://scope.klaytn.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://scope.klaytn.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://scope.klaytn.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Base + +This network's chain ID is 8453. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://basescan.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://basescan.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://basescan.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://basescan.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://basescan.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://basescan.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://basescan.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://basescan.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://basescan.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Evmos Testnet + +This network's chain ID is 9000. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.escan.live/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.escan.live/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.escan.live/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.escan.live/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.escan.live/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.escan.live/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.escan.live/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.escan.live/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.escan.live/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Evmos + +This network's chain ID is 9001. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://escan.live/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://escan.live/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://escan.live/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://escan.live/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://escan.live/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://escan.live/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://escan.live/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://escan.live/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://escan.live/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Boba BNB Testnet + +This network's chain ID is 9728. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockexplorer.testnet.bnb.boba.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockexplorer.testnet.bnb.boba.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockexplorer.testnet.bnb.boba.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockexplorer.testnet.bnb.boba.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockexplorer.testnet.bnb.boba.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockexplorer.testnet.bnb.boba.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockexplorer.testnet.bnb.boba.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockexplorer.testnet.bnb.boba.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockexplorer.testnet.bnb.boba.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Smart Bitcoin Cash + +This network's chain ID is 10000. + +- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804 +- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d +- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938 +- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA +- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa +- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B +- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC +- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717 +- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044 + + +### Smart Bitcoin Cash Testnet + +This network's chain ID is 10001. + +- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804 +- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d +- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938 +- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA +- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa +- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B +- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC +- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717 +- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044 + + +### Japan Open Chain Testnet + +This network's chain ID is 10081. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.testnet.japanopenchain.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.testnet.japanopenchain.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.testnet.japanopenchain.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.testnet.japanopenchain.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.testnet.japanopenchain.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.testnet.japanopenchain.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.testnet.japanopenchain.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.testnet.japanopenchain.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.testnet.japanopenchain.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Gnosis Chiado Testnet + +This network's chain ID is 10200. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://blockscout.chiadochain.net/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://blockscout.chiadochain.net/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://blockscout.chiadochain.net/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://blockscout.chiadochain.net/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://blockscout.chiadochain.net/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://blockscout.chiadochain.net/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://blockscout.chiadochain.net/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://blockscout.chiadochain.net/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://blockscout.chiadochain.net/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Haqq Network + +This network's chain ID is 11235. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.haqq.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.haqq.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.haqq.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.haqq.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.haqq.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.haqq.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.haqq.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.haqq.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.haqq.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Shyft Testnet + +This network's chain ID is 11437. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://bx.testnet.shyft.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://bx.testnet.shyft.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://bx.testnet.shyft.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://bx.testnet.shyft.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://bx.testnet.shyft.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://bx.testnet.shyft.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://bx.testnet.shyft.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://bx.testnet.shyft.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://bx.testnet.shyft.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Polygon Supernet Arianee + +This network's chain ID is 11891. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://polygonsupernet.explorer.arianee.net/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://polygonsupernet.explorer.arianee.net/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://polygonsupernet.explorer.arianee.net/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://polygonsupernet.explorer.arianee.net/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://polygonsupernet.explorer.arianee.net/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://polygonsupernet.explorer.arianee.net/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://polygonsupernet.explorer.arianee.net/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://polygonsupernet.explorer.arianee.net/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://polygonsupernet.explorer.arianee.net/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### undefined + +This network's chain ID is 12357. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Holesky + +This network's chain ID is 17000. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://holesky.beaconcha.in/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://holesky.beaconcha.in/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://holesky.beaconcha.in/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://holesky.beaconcha.in/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://holesky.beaconcha.in/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://holesky.beaconcha.in/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://holesky.beaconcha.in/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://holesky.beaconcha.in/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://holesky.beaconcha.in/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Oasis Sapphire + +This network's chain ID is 23294. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.sapphire.oasis.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.sapphire.oasis.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.sapphire.oasis.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.sapphire.oasis.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.sapphire.oasis.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.sapphire.oasis.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.sapphire.oasis.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.sapphire.oasis.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.sapphire.oasis.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Oasis Sapphire Testnet + +This network's chain ID is 23295. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://testnet.explorer.sapphire.oasis.dev/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://testnet.explorer.sapphire.oasis.dev/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://testnet.explorer.sapphire.oasis.dev/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://testnet.explorer.sapphire.oasis.dev/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://testnet.explorer.sapphire.oasis.dev/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://testnet.explorer.sapphire.oasis.dev/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://testnet.explorer.sapphire.oasis.dev/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://testnet.explorer.sapphire.oasis.dev/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://testnet.explorer.sapphire.oasis.dev/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Arbitrum One + +This network's chain ID is 42161. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://arbiscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://arbiscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://arbiscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://arbiscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://arbiscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://arbiscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://arbiscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://arbiscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://arbiscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Arbitrum Nova + +This network's chain ID is 42170. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://nova-explorer.arbitrum.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://nova-explorer.arbitrum.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://nova-explorer.arbitrum.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://nova-explorer.arbitrum.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://nova-explorer.arbitrum.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://nova-explorer.arbitrum.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://nova-explorer.arbitrum.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://nova-explorer.arbitrum.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://nova-explorer.arbitrum.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Celo Mainnet + +This network's chain ID is 42220. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://celoscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://celoscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://celoscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://celoscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://celoscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://celoscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://celoscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://celoscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://celoscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Avalanche Fuji Testnet + +This network's chain ID is 43113. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.snowtrace.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.snowtrace.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.snowtrace.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.snowtrace.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.snowtrace.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.snowtrace.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.snowtrace.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.snowtrace.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.snowtrace.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Avalanche C-Chain + +This network's chain ID is 43114. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://snowtrace.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://snowtrace.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://snowtrace.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://snowtrace.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://snowtrace.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://snowtrace.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://snowtrace.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://snowtrace.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://snowtrace.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Boba Avax + +This network's chain ID is 43288. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockexplorer.avax.boba.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockexplorer.avax.boba.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockexplorer.avax.boba.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockexplorer.avax.boba.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockexplorer.avax.boba.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockexplorer.avax.boba.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockexplorer.avax.boba.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockexplorer.avax.boba.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockexplorer.avax.boba.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Celo Alfajores Testnet + +This network's chain ID is 44787. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://alfajores.celoscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://alfajores.celoscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://alfajores.celoscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://alfajores.celoscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://alfajores.celoscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://alfajores.celoscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://alfajores.celoscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://alfajores.celoscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://alfajores.celoscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Autobahn Network + +This network's chain ID is 45000. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### REI Network + +This network's chain ID is 47805. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scan.rei.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scan.rei.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scan.rei.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scan.rei.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scan.rei.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scan.rei.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scan.rei.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scan.rei.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scan.rei.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Haqq Chain Testnet + +This network's chain ID is 54211. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.testedge2.haqq.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.testedge2.haqq.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.testedge2.haqq.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.testedge2.haqq.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.testedge2.haqq.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.testedge2.haqq.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.testedge2.haqq.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.testedge2.haqq.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.testedge2.haqq.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Boba BNB Mainnet + +This network's chain ID is 56288. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockexplorer.bnb.boba.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockexplorer.bnb.boba.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockexplorer.bnb.boba.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockexplorer.bnb.boba.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockexplorer.bnb.boba.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockexplorer.bnb.boba.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockexplorer.bnb.boba.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockexplorer.bnb.boba.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockexplorer.bnb.boba.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Rollux Testnet + +This network's chain ID is 57000. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://rollux.tanenbaum.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://rollux.tanenbaum.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://rollux.tanenbaum.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://rollux.tanenbaum.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://rollux.tanenbaum.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://rollux.tanenbaum.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://rollux.tanenbaum.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://rollux.tanenbaum.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://rollux.tanenbaum.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Sepolia PGN (Public Goods Network) + +This network's chain ID is 58008. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.sepolia.publicgoods.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.sepolia.publicgoods.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.sepolia.publicgoods.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.sepolia.publicgoods.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.sepolia.publicgoods.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.sepolia.publicgoods.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.sepolia.publicgoods.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.sepolia.publicgoods.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) + + +### Linea Testnet + +This network's chain ID is 59140. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://goerli.lineascan.build/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://goerli.lineascan.build/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://goerli.lineascan.build/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://goerli.lineascan.build/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://goerli.lineascan.build/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://goerli.lineascan.build/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://goerli.lineascan.build/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://goerli.lineascan.build/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://goerli.lineascan.build/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Linea + +This network's chain ID is 59144. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://lineascan.build/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://lineascan.build/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://lineascan.build/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://lineascan.build/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://lineascan.build/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://lineascan.build/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://lineascan.build/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://lineascan.build/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://lineascan.build/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Godwoken Testnet v1 + +This network's chain ID is 71401. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://v1.testnet.gwscan.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://v1.testnet.gwscan.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://v1.testnet.gwscan.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://v1.testnet.gwscan.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://v1.testnet.gwscan.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://v1.testnet.gwscan.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://v1.testnet.gwscan.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://v1.testnet.gwscan.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://v1.testnet.gwscan.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Godwoken Mainnet + +This network's chain ID is 71402. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://v1.gwscan.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://v1.gwscan.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://v1.gwscan.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://v1.gwscan.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://v1.gwscan.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://v1.gwscan.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://v1.gwscan.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://v1.gwscan.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://v1.gwscan.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Energy Web Volta Testnet + +This network's chain ID is 73799. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Mumbai + +This network's chain ID is 80001. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://mumbai.polygonscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://mumbai.polygonscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://mumbai.polygonscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://mumbai.polygonscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://mumbai.polygonscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://mumbai.polygonscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://mumbai.polygonscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://mumbai.polygonscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://mumbai.polygonscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Base Goerli Testnet + +This network's chain ID is 84531. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://goerli.basescan.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://goerli.basescan.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://goerli.basescan.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://goerli.basescan.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://goerli.basescan.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://goerli.basescan.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://goerli.basescan.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://goerli.basescan.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://goerli.basescan.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Milkomeda C1 Testnet + +This network's chain ID is 200101. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Milkomeda A1 Testnet + +This network's chain ID is 200202. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Polis Mainnet + +This network's chain ID is 333999. + +- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4 +- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4 +- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 +- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E +- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 +- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D +- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 +- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da + + +### Arbitrum Rinkeby + +This network's chain ID is 421611. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.arbiscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.arbiscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.arbiscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.arbiscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.arbiscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.arbiscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.arbiscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.arbiscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.arbiscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Arbitrum Goerli + +This network's chain ID is 421613. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://goerli.arbiscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://goerli.arbiscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://goerli.arbiscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://goerli.arbiscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://goerli.arbiscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://goerli.arbiscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://goerli.arbiscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://goerli.arbiscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://goerli.arbiscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Arbitrum Sepolia + +This network's chain ID is 421614. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://sepolia-explorer.arbitrum.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://sepolia-explorer.arbitrum.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://sepolia-explorer.arbitrum.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://sepolia-explorer.arbitrum.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://sepolia-explorer.arbitrum.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://sepolia-explorer.arbitrum.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://sepolia-explorer.arbitrum.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://sepolia-explorer.arbitrum.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://sepolia-explorer.arbitrum.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Scroll Sepolia Testnet + +This network's chain ID is 534351. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://sepolia.scrollscan.dev/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://sepolia.scrollscan.dev/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://sepolia.scrollscan.dev/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://sepolia.scrollscan.dev/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://sepolia.scrollscan.dev/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://sepolia.scrollscan.dev/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://sepolia.scrollscan.dev/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://sepolia.scrollscan.dev/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://sepolia.scrollscan.dev/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Scroll + +This network's chain ID is 534352. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scrollscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scrollscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scrollscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scrollscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scrollscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scrollscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scrollscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scrollscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scrollscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Scroll Alpha Testnet + +This network's chain ID is 534353. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://alpha-blockscout.scroll.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://alpha-blockscout.scroll.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://alpha-blockscout.scroll.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://alpha-blockscout.scroll.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://alpha-blockscout.scroll.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://alpha-blockscout.scroll.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://alpha-blockscout.scroll.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://alpha-blockscout.scroll.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://alpha-blockscout.scroll.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Rethereum Mainnet + +This network's chain ID is 622277. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.rethereum.org/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.rethereum.org/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.rethereum.org/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.rethereum.org/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.rethereum.org/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.rethereum.org/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.rethereum.org/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.rethereum.org/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.rethereum.org/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Zora + +This network's chain ID is 7777777. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.zora.energy/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.zora.energy/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.zora.energy/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.zora.energy/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.zora.energy/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.zora.energy/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.zora.energy/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.zora.energy/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.zora.energy/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Sepolia + +This network's chain ID is 11155111. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://sepolia.etherscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://sepolia.etherscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://sepolia.etherscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://sepolia.etherscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://sepolia.etherscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://sepolia.etherscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://sepolia.etherscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://sepolia.etherscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://sepolia.etherscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Kanazawa + +This network's chain ID is 222000222. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://subnets-test.avax.network/meld/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://subnets-test.avax.network/meld/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://subnets-test.avax.network/meld/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://subnets-test.avax.network/meld/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://subnets-test.avax.network/meld/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://subnets-test.avax.network/meld/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://subnets-test.avax.network/meld/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://subnets-test.avax.network/meld/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://subnets-test.avax.network/meld/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Neon EVM DevNet + +This network's chain ID is 245022926. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://devnet.explorer.neon-labs.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://devnet.explorer.neon-labs.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://devnet.explorer.neon-labs.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://devnet.explorer.neon-labs.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://devnet.explorer.neon-labs.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://devnet.explorer.neon-labs.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://devnet.explorer.neon-labs.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://devnet.explorer.neon-labs.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://devnet.explorer.neon-labs.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Neon EVM MainNet + +This network's chain ID is 245022934. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://neonscan.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://neonscan.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://neonscan.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://neonscan.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://neonscan.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://neonscan.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://neonscan.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://neonscan.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://neonscan.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Meld + +This network's chain ID is 333000333. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://subnets.avax.network/meld/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://subnets.avax.network/meld/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://subnets.avax.network/meld/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://subnets.avax.network/meld/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://subnets.avax.network/meld/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://subnets.avax.network/meld/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://subnets.avax.network/meld/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://subnets.avax.network/meld/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://subnets.avax.network/meld/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Aurora Mainnet + +This network's chain ID is 1313161554. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://aurorascan.dev/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://aurorascan.dev/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://aurorascan.dev/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://aurorascan.dev/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://aurorascan.dev/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://aurorascan.dev/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://aurorascan.dev/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://aurorascan.dev/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://aurorascan.dev/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Aurora Testnet + +This network's chain ID is 1313161555. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.aurorascan.dev/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.aurorascan.dev/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.aurorascan.dev/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.aurorascan.dev/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.aurorascan.dev/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.aurorascan.dev/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.aurorascan.dev/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.aurorascan.dev/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.aurorascan.dev/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Harmony Mainnet Shard 0 + +This network's chain ID is 1666600000. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.harmony.one/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.harmony.one/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.harmony.one/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.harmony.one/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.harmony.one/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.harmony.one/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.harmony.one/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.harmony.one/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.harmony.one/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Harmony Testnet Shard 0 + +This network's chain ID is 1666700000. + +- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.testnet.harmony.one/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) +- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.testnet.harmony.one/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) +- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.testnet.harmony.one/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) +- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.testnet.harmony.one/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) +- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.testnet.harmony.one/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) +- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.testnet.harmony.one/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) +- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.testnet.harmony.one/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) +- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.testnet.harmony.one/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) +- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.testnet.harmony.one/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) + + +### Palm Testnet + +This network's chain ID is 11297108099. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.palm-uat.xyz/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.palm-uat.xyz/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.palm-uat.xyz/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.palm-uat.xyz/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.palm-uat.xyz/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.palm-uat.xyz/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.palm-uat.xyz/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.palm-uat.xyz/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.palm-uat.xyz/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + +### Palm + +This network's chain ID is 11297108109. + +- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.palm.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4) +- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.palm.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4) +- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.palm.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552) +- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.palm.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E) +- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.palm.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761) +- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.palm.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D) +- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.palm.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2) +- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.palm.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2) +- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.palm.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da) + + + \ No newline at end of file diff --git a/safe-smart-account/supported-networks/v1.4.1.md b/safe-smart-account/supported-networks/v1.4.1.md new file mode 100644 index 00000000..4aafa3fa --- /dev/null +++ b/safe-smart-account/supported-networks/v1.4.1.md @@ -0,0 +1,172 @@ +# v1.4.1 + +This page lists the addresses of all the Safe contracts `v1.4.1` grouped by chain. + +## Networks + +### Ethereum Mainnet + +This network's chain ID is 1. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://etherscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://etherscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://etherscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://etherscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://etherscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://etherscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://etherscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://etherscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://etherscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + +### Goerli + +This network's chain ID is 5. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://goerli.etherscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://goerli.etherscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://goerli.etherscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://goerli.etherscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://goerli.etherscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://goerli.etherscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://goerli.etherscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://goerli.etherscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://goerli.etherscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + +### BNB Smart Chain Mainnet + +This network's chain ID is 56. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://bscscan.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://bscscan.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://bscscan.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://bscscan.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://bscscan.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://bscscan.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://bscscan.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://bscscan.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://bscscan.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + +### Gnosis + +This network's chain ID is 100. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://gnosisscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://gnosisscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://gnosisscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://gnosisscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://gnosisscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://gnosisscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://gnosisscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://gnosisscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://gnosisscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + +### Polygon Mainnet + +This network's chain ID is 137. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://polygonscan.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://polygonscan.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://polygonscan.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://polygonscan.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://polygonscan.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://polygonscan.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://polygonscan.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://polygonscan.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://polygonscan.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + +### Polygon zkEVM Testnet + +This network's chain ID is 1442. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://explorer.public.zkevm-test.net/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://explorer.public.zkevm-test.net/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://explorer.public.zkevm-test.net/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://explorer.public.zkevm-test.net/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://explorer.public.zkevm-test.net/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://explorer.public.zkevm-test.net/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://explorer.public.zkevm-test.net/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://explorer.public.zkevm-test.net/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://explorer.public.zkevm-test.net/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + +### Torus Testnet + +This network's chain ID is 8194. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://testnet.torusscan.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://testnet.torusscan.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://testnet.torusscan.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://testnet.torusscan.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://testnet.torusscan.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://testnet.torusscan.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://testnet.torusscan.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://testnet.torusscan.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://testnet.torusscan.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + +### Holesky + +This network's chain ID is 17000. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://holesky.beaconcha.in/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://holesky.beaconcha.in/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://holesky.beaconcha.in/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://holesky.beaconcha.in/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://holesky.beaconcha.in/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://holesky.beaconcha.in/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://holesky.beaconcha.in/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://holesky.beaconcha.in/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://holesky.beaconcha.in/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + +### Mumbai + +This network's chain ID is 80001. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://mumbai.polygonscan.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://mumbai.polygonscan.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://mumbai.polygonscan.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://mumbai.polygonscan.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://mumbai.polygonscan.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://mumbai.polygonscan.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://mumbai.polygonscan.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://mumbai.polygonscan.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://mumbai.polygonscan.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + +### Base Goerli Testnet + +This network's chain ID is 84531. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://goerli.basescan.org/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://goerli.basescan.org/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://goerli.basescan.org/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://goerli.basescan.org/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://goerli.basescan.org/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://goerli.basescan.org/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://goerli.basescan.org/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://goerli.basescan.org/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://goerli.basescan.org/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + +### Sepolia + +This network's chain ID is 11155111. + +- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://sepolia.etherscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99) +- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://sepolia.etherscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52) +- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://sepolia.etherscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526) +- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://sepolia.etherscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2) +- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://sepolia.etherscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a) +- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://sepolia.etherscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762) +- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://sepolia.etherscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67) +- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://sepolia.etherscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9) +- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://sepolia.etherscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199) + + + \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..1d1d9abc --- /dev/null +++ b/yarn.lock @@ -0,0 +1,173 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +glob@^7.0.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +resolve@^1.1.6: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +web-streams-polyfill@^3.0.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== From ba3e2271d7fea98de3384e6ad0ce33e1bd4bd5aa Mon Sep 17 00:00:00 2001 From: louis-md Date: Thu, 23 Nov 2023 15:44:13 +0100 Subject: [PATCH 020/108] Link checks (#275) * Fix some link checker errors * Fix some link checker errors * Fix some link checker errors --- miscellaneous/bug-bounty-program.md | 6 +++--- safe-core-sdk/api-kit/README.md | 2 +- safe-core-sdk/auth-kit/README.md | 2 +- safe-core-sdk/auth-kit/guides/README.md | 1 + safe-core-sdk/auth-kit/guides/web3auth.md | 2 +- safe-core-sdk/onramp-kit/README.md | 4 ++-- safe-core-sdk/onramp-kit/guides/README.md | 1 + safe-core-sdk/relay-kit/README.md | 2 +- safe-core-sdk/relay-kit/guides/gelato.md | 4 ++-- safe-smart-account/security-audits.md | 2 +- 10 files changed, 14 insertions(+), 12 deletions(-) diff --git a/miscellaneous/bug-bounty-program.md b/miscellaneous/bug-bounty-program.md index f1f4a66f..eb2de306 100644 --- a/miscellaneous/bug-bounty-program.md +++ b/miscellaneous/bug-bounty-program.md @@ -4,7 +4,7 @@ Participate in the Safe Bug Bounty program to find bugs and get rewards. Earn up ## Audits -Smart contract security experts have carefully audited Safe's contracts. Please refer to the [security audits page](./security-audits.md) for details. +Smart contract security experts have carefully audited Safe's contracts. Please refer to the [security audits page](../safe-smart-account/security-audits.md) for details. ## Rules @@ -37,7 +37,7 @@ The scope of the bug bounty also includes the [Allowance Module](https://github. * MultiSend.sol, MultiSendCallOnly.sol, CreateCall.sol * TokenCallbackHandler.sol (formerly DefaultCallbackHandler.sol), CompatibilityFallbackHandler.sol, HandlerContext.sol -You can find addresses for deployed instances of these contracts in the [Safe deployments](https://github.com/safe-global/safe-deployments) repository. +You can find addresses for deployed instances of these contracts [here](../safe-smart-account/supported-networks/v1.4.1.md) or in the [Safe deployments](https://github.com/safe-global/safe-deployments) repository. **Gnosis Safe core contracts (up to version 1.3.0)** @@ -48,7 +48,7 @@ You can find addresses for deployed instances of these contracts in the [Safe de * CreateAndAddModules.sol, MultiSend.sol, MultiSendCallOnly.sol, CreateCall.sol * DefaultCallbackHandler.sol, CompatibilityFallbackHandler.sol, HandlerContext.sol -You can find addresses for deployed instances of these contracts in the [Safe deployments](https://github.com/safe-global/safe-deployments) repository. +You can find addresses for deployed instances of these contracts [here](../safe-smart-account/supported-networks/v1.3.0.md) in the [Safe deployments](https://github.com/safe-global/safe-deployments) repository. **Safe Modules contracts** diff --git a/safe-core-sdk/api-kit/README.md b/safe-core-sdk/api-kit/README.md index 4e463d53..7efe49e8 100644 --- a/safe-core-sdk/api-kit/README.md +++ b/safe-core-sdk/api-kit/README.md @@ -6,7 +6,7 @@ The [API Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/ap In this guide we will see how to propose transactions to the service and collect the signatures from the owners so they become executable. -For more detailed information, see the guide [Integrating the Protocol Kit and API Kit](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md) and the [API Kit Reference](../../reference/safe-core-sdk//api-kit/). +For more detailed information, see the guide [Integrating the Protocol Kit and API Kit](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md) and the [API Kit Reference](./reference/README.md). ### Prerequisites diff --git a/safe-core-sdk/auth-kit/README.md b/safe-core-sdk/auth-kit/README.md index d07249dc..59912ce7 100644 --- a/safe-core-sdk/auth-kit/README.md +++ b/safe-core-sdk/auth-kit/README.md @@ -3,7 +3,7 @@ The Auth Kit creates an Ethereum address and authenticates a blockchain account using an email address, social media account, or crypto wallet like Metamask. You can get the Ethereum address and the associated safe addresses as an output for the sign-in process. The following guides show how to use the Auth Kit and integrate it into your project by using one of the packs: -- [Web3Auth Pack](./web3auth.md) +- [Web3Auth Pack](./guides/web3auth.md) ## Resources - [Auth Kit on GitHub](https://github.com/safe-global/safe-core-sdk/tree/main/packages/auth-kit) diff --git a/safe-core-sdk/auth-kit/guides/README.md b/safe-core-sdk/auth-kit/guides/README.md index e69de29b..d9dd466e 100644 --- a/safe-core-sdk/auth-kit/guides/README.md +++ b/safe-core-sdk/auth-kit/guides/README.md @@ -0,0 +1 @@ +# Guides \ No newline at end of file diff --git a/safe-core-sdk/auth-kit/guides/web3auth.md b/safe-core-sdk/auth-kit/guides/web3auth.md index e68cb14d..d949c17f 100644 --- a/safe-core-sdk/auth-kit/guides/web3auth.md +++ b/safe-core-sdk/auth-kit/guides/web3auth.md @@ -137,7 +137,7 @@ const web3AuthModalPack = new Web3AuthModalPack({ ## Signing transactions using the Web3AuthModalPack and Protocol Kit -The `Web3AuthModalPack` can be combined with the [Protocol Kit](../protocol-kit/) to connect to a Safe using the `provider` and `signer` of the currently authenticated account. +The `Web3AuthModalPack` can be combined with the [Protocol Kit](../../protocol-kit/README.md) to connect to a Safe using the `provider` and `signer` of the currently authenticated account. Once connected, you can use any of the methods available in the [Protocol Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit#sdk-api). diff --git a/safe-core-sdk/onramp-kit/README.md b/safe-core-sdk/onramp-kit/README.md index 0b028a85..97b7e686 100644 --- a/safe-core-sdk/onramp-kit/README.md +++ b/safe-core-sdk/onramp-kit/README.md @@ -3,8 +3,8 @@ The Onramp Kit helps users buy cryptocurrencies with fiat money to fund a Safe account via a credit card or other payment methods. The following guides show how to use the Onramp Kit and integrate it into your project by using one of the packs: -- [Monerium Pack](./monerium.md) -- [Stripe Pack](./stripe.md) +- [Monerium Pack](./guides/monerium.md) +- [Stripe Pack](./guides/stripe.md) ## Resources - [Onramp Kit on GitHub](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) diff --git a/safe-core-sdk/onramp-kit/guides/README.md b/safe-core-sdk/onramp-kit/guides/README.md index e69de29b..d9dd466e 100644 --- a/safe-core-sdk/onramp-kit/guides/README.md +++ b/safe-core-sdk/onramp-kit/guides/README.md @@ -0,0 +1 @@ +# Guides \ No newline at end of file diff --git a/safe-core-sdk/relay-kit/README.md b/safe-core-sdk/relay-kit/README.md index 4ce81bfb..91de50ec 100644 --- a/safe-core-sdk/relay-kit/README.md +++ b/safe-core-sdk/relay-kit/README.md @@ -3,7 +3,7 @@ The Relay Kit lets users pay transaction fees (gas fees) using the native blockchain token or ERC-20 tokens. Gas fees can be payed with this kit using any ERC-20 token in your Safe, even if there is no native token balance. The following guides show how to use the Relay Kit and integrate it into your project by using one of the packs: -- [Gelato Pack](./gelato.md) +- [Gelato Pack](./guides/gelato.md) ## Resources - [Relay Kit on GitHub](https://github.com/safe-global/safe-core-sdk/tree/main/packages/relay-kit) diff --git a/safe-core-sdk/relay-kit/guides/gelato.md b/safe-core-sdk/relay-kit/guides/gelato.md index c1723c2c..49afcc9d 100644 --- a/safe-core-sdk/relay-kit/guides/gelato.md +++ b/safe-core-sdk/relay-kit/guides/gelato.md @@ -26,7 +26,7 @@ Currently, the Relay Kit is only compatible with the [Gelato relay](https://docs For the 1Balance quickstart tutorial, you will use the Gelato relayer to pay for the gas fees on BNB Chain using the Polygon USDC you've deposited into your Gelato 1Balance account. -For this tutorial you will need a Safe with a threshold of 1 deployed on BNB Chain. You can create one using [Safe{Wallet}](https://app.safe.global/) or the [Protocol Kit](../protocol-kit/). +For this tutorial you will need a Safe with a threshold of 1 deployed on BNB Chain. You can create one using [Safe{Wallet}](https://app.safe.global/) or the [Protocol Kit](../../protocol-kit/README.md). ### Summary @@ -125,7 +125,7 @@ console.log(`Relay Transaction Task ID: https://relay.gelato.digital/tasks/statu For the SyncFee quickstart tutorial, you will use the Gelato relayer to pay for the gas fees on the BNB Chain using the BNB you hold in your Safe. No need to have funds on your signer. -For this tutorial, you will need a Safe with a threshold of one deployed on the BNB Chain. You can create one using [Safe{Wallet}](https://app.safe.global/) or the [Protocol Kit](../protocol-kit/). +For this tutorial, you will need a Safe with a threshold of one deployed on the BNB Chain. You can create one using [Safe{Wallet}](https://app.safe.global/) or the [Protocol Kit](../../protocol-kit/README.md). ### Import the packages diff --git a/safe-smart-account/security-audits.md b/safe-smart-account/security-audits.md index cd503c1f..076c801a 100644 --- a/safe-smart-account/security-audits.md +++ b/safe-smart-account/security-audits.md @@ -10,4 +10,4 @@ We take great care of ensuring the security of our smart contracts. Please find * [Safe v0.0.1](https://github.com/safe-global/safe-contracts/blob/v1.1.1/docs/alexey_audit.md) * [Allowance Module v0.1.0](https://github.com/safe-global/safe-modules/blob/47e2b486b0b31d97bab7648a3f76de9038c6e67b/allowances/AllowanceModuleAuditOct2020.md) -Did you find a bug? Please [get in touch](mailto:bounty@safe.global) with us via our [bug bounty program](./bug-bounty-program.md). +Did you find a bug? Please [get in touch](mailto:bounty@safe.global) with us via our [bug bounty program](../miscellaneous/bug-bounty-program.md). From 0e7c0e7f21bec3e662c7f844d3b1f2b0c80581d8 Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Fri, 24 Nov 2023 09:34:46 +0100 Subject: [PATCH 021/108] Add Pimlico to Safe Modules (#279) * Update modules.md * Update accept.txt --- .github/styles/Vocab/default/accept.txt | 3 ++- safe-smart-account/modules.md | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/styles/Vocab/default/accept.txt b/.github/styles/Vocab/default/accept.txt index 22936a32..3074b0a2 100644 --- a/.github/styles/Vocab/default/accept.txt +++ b/.github/styles/Vocab/default/accept.txt @@ -91,6 +91,7 @@ OP Offchain Onramp Onramp Kit +Pimlico PGN Polis Polygon @@ -166,4 +167,4 @@ undefined v1 wagmi zkEVM -zkSync \ No newline at end of file +zkSync diff --git a/safe-smart-account/modules.md b/safe-smart-account/modules.md index af487f5c..20df657d 100644 --- a/safe-smart-account/modules.md +++ b/safe-smart-account/modules.md @@ -18,6 +18,7 @@ Watch on YouTube 1. [Safe Modules](https://github.com/safe-global/safe-modules) 2. [Zodiac-compliant modules](https://zodiac.wiki/index.php/Introduction:_Zodiac_Standard#Modules) +3. [Pimlico](https://docs.pimlico.io/permissionless/how-to/accounts/use-safe-account) {% hint style="danger" %} Safe Modules can be a security risk since they can execute arbitrary transactions. Only add trusted and audited modules to a Safe. A malicious module can take over a Safe. From 4d2f19dec2c890f5131653bd9250d7f555316ddc Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Fri, 24 Nov 2023 10:44:47 +0100 Subject: [PATCH 022/108] Update weekly-link-check.yml (#281) --- .github/workflows/weekly-link-check.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/weekly-link-check.yml b/.github/workflows/weekly-link-check.yml index e3fbb8c7..990d6be1 100644 --- a/.github/workflows/weekly-link-check.yml +++ b/.github/workflows/weekly-link-check.yml @@ -11,6 +11,7 @@ jobs: steps: - uses: actions/checkout@v3 - uses: gaurav-nelson/github-action-markdown-link-check@v1 + id: check with: use-quiet-mode: 'yes' use-verbose-mode: 'yes' @@ -26,3 +27,4 @@ jobs: body: | Broken links found: [Failed Run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) Workflow: `${{ github.workflow }}` + ${{ steps.check.outputs }} From e5becc9d0c1d220e2dcf27df3151ffa5c3c6d89f Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Fri, 24 Nov 2023 11:07:39 +0100 Subject: [PATCH 023/108] Revert "Update weekly-link-check.yml (#281)" (#283) This reverts commit 4d2f19dec2c890f5131653bd9250d7f555316ddc. --- .github/workflows/weekly-link-check.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/weekly-link-check.yml b/.github/workflows/weekly-link-check.yml index 990d6be1..e3fbb8c7 100644 --- a/.github/workflows/weekly-link-check.yml +++ b/.github/workflows/weekly-link-check.yml @@ -11,7 +11,6 @@ jobs: steps: - uses: actions/checkout@v3 - uses: gaurav-nelson/github-action-markdown-link-check@v1 - id: check with: use-quiet-mode: 'yes' use-verbose-mode: 'yes' @@ -27,4 +26,3 @@ jobs: body: | Broken links found: [Failed Run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) Workflow: `${{ github.workflow }}` - ${{ steps.check.outputs }} From c32fcf971ad598fa59d8541c1f95b22b61083644 Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Fri, 24 Nov 2023 11:20:51 +0100 Subject: [PATCH 024/108] Link fixes (#284) * Update README.md * Update MoneriumPack.md --- README.md | 6 +----- safe-core-sdk/onramp-kit/reference/MoneriumPack.md | 4 ++-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 277382cd..27b5726d 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,6 @@ This section in the documentation has relevant information and tutorials on the ## Safe{Core} API -The [Safe{Core} API](safe-core-api/available-services.md) makes reference to all the Safe infrastructure needed to power interfaces with all Safe account related information. This includes the Safe Transaction Service, Safe Events Service, etc. +The [Safe{Core} API](safe-core-api/available-services.md) refers to all the Safe infrastructure needed to power interfaces with all Safe account related information. This includes the Safe Transaction Service, Safe Events Service, etc. This section in the documentation has information related to the services architecture. - -## Reference - -The [Reference](reference/safe-core-sdk/auth-kit/README.md) section in this documentation has technical details describing the different tools available at Safe in detail. diff --git a/safe-core-sdk/onramp-kit/reference/MoneriumPack.md b/safe-core-sdk/onramp-kit/reference/MoneriumPack.md index bd01aa58..ffc9107c 100644 --- a/safe-core-sdk/onramp-kit/reference/MoneriumPack.md +++ b/safe-core-sdk/onramp-kit/reference/MoneriumPack.md @@ -51,7 +51,7 @@ You should always call the `init()` method afterwards before interacting with th ### `init(moneriumInitOptions)` -The `init` method initializes the Monerium SDK and the Safe services by creating a new instance of the [`SafeMoneriumClient`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/src/packs/monerium/SafeMoneriumClient.ts) class. This class extends the [`MoneriumClient`](https://github.com/monerium/sdk/blob/main/src/client.ts) class from the Monerium SDK and adds extra features to use it with the Safe services. +The `init` method initializes the Monerium SDK and the Safe services by creating a new instance of the [`SafeMoneriumClient`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/src/packs/monerium/SafeMoneriumClient.ts) class. This class extends the [`MoneriumClient`](https://github.com/monerium/js-sdk/blob/main/libs/sdk/src/client.ts) class from the Monerium SDK and adds extra features to use it with the Safe services. **Params** @@ -173,4 +173,4 @@ moneriumPack.unsubscribe(MoneriumEvent.processed, handler) // Close await moneriumPack.close() -``` \ No newline at end of file +``` From ee0962dac9336f11659e4a9df24c69c67f586871 Mon Sep 17 00:00:00 2001 From: louis-md Date: Fri, 24 Nov 2023 12:20:49 +0100 Subject: [PATCH 025/108] Link checks (#285) * Fix some link checker errors * Fix some link checker errors * Fix some link checker errors * Fix broken links * Re-generate .md files --- .github/scripts/generateSupportedNetworks.js | 3 ++- safe-core-api/service-architecture.md | 4 ++-- safe-core-sdk/onramp-kit/guides/monerium.md | 2 +- .../supported-networks/v1.3.0.md | 18 +++++++++--------- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/.github/scripts/generateSupportedNetworks.js b/.github/scripts/generateSupportedNetworks.js index 4ac268e3..3a84b9ce 100644 --- a/.github/scripts/generateSupportedNetworks.js +++ b/.github/scripts/generateSupportedNetworks.js @@ -135,5 +135,6 @@ const deprecatedBlockExplorers = [ 'https://evm-testnet.venidiumexplorer.com', 'https://evm.venidiumexplorer.com', 'https://evm.explorer.canto.io', - 'https://explorer.autobahn.network' + 'https://explorer.autobahn.network', + 'https://explorer.cascadia.foundation', ] diff --git a/safe-core-api/service-architecture.md b/safe-core-api/service-architecture.md index 2b3b70ff..908d885f 100644 --- a/safe-core-api/service-architecture.md +++ b/safe-core-api/service-architecture.md @@ -13,7 +13,7 @@ The Safe infrastructure consists of four services: Safe's production setup is a mixture of several instances of the Safe Transaction Service orchestrated by the Config Service, later consumed by the Client Gateway. -![Overview of the backend services and their components.](<../.gitbook/assets/diagram-services.png>) +![Overview of the backend services and their components.](../.gitbook/assets/diagram-services.png) ## Safe Transaction Service @@ -27,7 +27,7 @@ The Config Service keeps track of all the supported networks and all the availab The Client Gateway leverages the config service to find the transaction service instance required for a specific request. The client gateway forwards the request to the specified Transaction Service instance for the supported networks (determined by the Config Service). The Client Gateway transforms, aggregates, and caches information from the Config and Transaction Services, optimizing data for Safe's web and mobile clients. -![Service interaction diagram.](<../.gitbook/assets/diagram-services-requests.png>) +![Service interaction diagram.](../.gitbook/assets/diagram-services-requests.png) Even though Safe Config and Transaction Service instances are reachable by clients that are not the Client Gateway, this may change in the future. The Client Gateway is the outermost component of the Safe infrastructure and should be the single point of communication with any frontend client. diff --git a/safe-core-sdk/onramp-kit/guides/monerium.md b/safe-core-sdk/onramp-kit/guides/monerium.md index 2fc5e9e4..2a2a7511 100644 --- a/safe-core-sdk/onramp-kit/guides/monerium.md +++ b/safe-core-sdk/onramp-kit/guides/monerium.md @@ -46,7 +46,7 @@ const moneriumPack = new MoneriumPack({ await moneriumPack.init({ safeSdk }) ``` -The `safeSdk` is an instance of the [`Safe`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/protocol-kit/src/Safe.ts) class. For more information on how to instantiate the `protocol-kit` refer to the [Protocol Kit Quickstart section](../protocol-kit/README.md). +The `safeSdk` is an instance of the [`Safe`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/protocol-kit/src/Safe.ts) class. For more information on how to instantiate the `protocol-kit` refer to the [Protocol Kit Quickstart section](../../protocol-kit/README.md). The `MoneriumPack` will use the Safe account address configured in the `safeSdk` to link to your Monerium account. diff --git a/safe-smart-account/supported-networks/v1.3.0.md b/safe-smart-account/supported-networks/v1.3.0.md index 9546edb2..2e0700be 100644 --- a/safe-smart-account/supported-networks/v1.3.0.md +++ b/safe-smart-account/supported-networks/v1.3.0.md @@ -1431,15 +1431,15 @@ This network's chain ID is 5700. This network's chain ID is 6102. -- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.cascadia.foundation/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804) -- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.cascadia.foundation/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d) -- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.cascadia.foundation/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938) -- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.cascadia.foundation/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA) -- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.cascadia.foundation/address/0x998739BFdAAdde7C933B942a68053933098f9EDa) -- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.cascadia.foundation/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B) -- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.cascadia.foundation/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC) -- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.cascadia.foundation/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717) -- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.cascadia.foundation/address/0x727a77a074D1E6c4530e814F89E618a3298FC044) +- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804 +- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d +- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938 +- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA +- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa +- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B +- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC +- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717 +- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044 ### ZetaChain Athens 3 Testnet From c9df891423f810e1c25d97227adacf7e9bb4f509 Mon Sep 17 00:00:00 2001 From: Dani Somoza Date: Mon, 27 Nov 2023 14:39:55 +0100 Subject: [PATCH 026/108] protocol-kit v2.0 (#266) * update ethers docs * add singleton change to api-kit and protocol-kit update api-kit initialization update createTransaction use * update GelatoRelayKit breaking changes * fix wording recommendations * highlight ethers.js v6 * add migration guides highlighting the major changes --------- Co-authored-by: Daniel <25051234+dasanra@users.noreply.github.com> --- SUMMARY.md | 5 + safe-core-sdk/api-kit/README.md | 38 +-- safe-core-sdk/api-kit/reference/README.md | 52 ++--- .../api-kit/reference/migrating/v2.md | 38 +++ .../auth-kit/reference/Web3AuthModalPack.md | 4 +- .../onramp-kit/reference/MoneriumPack.md | 2 +- safe-core-sdk/onramp-kit/reference/README.md | 8 +- safe-core-sdk/protocol-kit/README.md | 40 ++-- .../protocol-kit/reference/README.md | 216 ++++++++---------- .../protocol-kit/reference/migrating/v2.md | 48 ++++ safe-core-sdk/relay-kit/guides/gelato.md | 27 ++- .../relay-kit/reference/migrating/v2.md | 15 ++ 12 files changed, 295 insertions(+), 198 deletions(-) create mode 100644 safe-core-sdk/api-kit/reference/migrating/v2.md create mode 100644 safe-core-sdk/protocol-kit/reference/migrating/v2.md create mode 100644 safe-core-sdk/relay-kit/reference/migrating/v2.md diff --git a/SUMMARY.md b/SUMMARY.md index 0c5eda81..36a13b87 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -34,6 +34,7 @@ * [Protocol Kit](safe-core-sdk/protocol-kit/README.md) * [Reference](safe-core-sdk/protocol-kit/reference/README.md) + * [Migrating to v2](safe-core-sdk/protocol-kit/reference/migrating/v2.md) * [Onramp Kit](safe-core-sdk/onramp-kit/README.md) * [Guides](safe-core-sdk/onramp-kit/guides/README.md) @@ -47,9 +48,13 @@ * [Relay Kit](safe-core-sdk/relay-kit/README.md) * [Guides](safe-core-sdk/relay-kit/guides/README.md) * [Gelato Relay](safe-core-sdk/relay-kit/guides/gelato.md) + * [Reference](safe-core-sdk/relay-kit/reference/README.md) + * [Migrating to v2](safe-core-sdk/relay-kit/reference/migrating/v2.md) * [API Kit](safe-core-sdk/api-kit/README.md) * [Reference](safe-core-sdk/api-kit/reference/README.md) + * [Migrating to v2](safe-core-sdk/api-kit/reference/migrating/v2.md) + ## Safe{Core} Protocol diff --git a/safe-core-sdk/api-kit/README.md b/safe-core-sdk/api-kit/README.md index 7efe49e8..6b7a5104 100644 --- a/safe-core-sdk/api-kit/README.md +++ b/safe-core-sdk/api-kit/README.md @@ -24,7 +24,7 @@ yarn add @safe-global/api-kit ## Instantiate an EthAdapter -First of all, we need to create an `EthAdapter`, which contains all the required utilities for the SDKs to interact with the blockchain. It acts as a wrapper for [web3.js](https://web3js.readthedocs.io/) or [ethers.js](https://docs.ethers.io/v5/) Ethereum libraries. +First of all, we need to create an `EthAdapter`, which contains all the required utilities for the SDKs to interact with the blockchain. It acts as a wrapper for [web3.js](https://web3js.readthedocs.io/) or [ethers.js](https://docs.ethers.org/v6/) Ethereum libraries. Depending on the library used by the Dapp, there are two options: @@ -36,7 +36,7 @@ Once the instance of `EthersAdapter` or `Web3Adapter` is created, it can be used ```typescript import { EthersAdapter } from '@safe-global/protocol-kit' -const provider = new ethers.providers.JsonRpcProvider(config.RPC_URL) +const provider = new ethers.JsonRpcProvider(config.RPC_URL) const signer = new ethers.Wallet(config.SIGNER_ADDRESS_PRIVATE_KEY, provider) const ethAdapter = new EthersAdapter({ @@ -47,47 +47,53 @@ const ethAdapter = new EthersAdapter({ ## Initialize the API Kit -We need to create an instance of the API Kit. +We need to create an instance of the API Kit. In chains where Safe provides a Transaction Service, it's enough to specify the `chainId`. You can set your own service using the optional `txServiceUrl` parameter. ```typescript import SafeApiKit from '@safe-global/api-kit' const safeApiKit = new SafeApiKit({ - txServiceUrl: 'https://safe-transaction-mainnet.safe.global', - ethAdapter + chainId: 1n +}) + + +// or using a custom service +const safeApiKit = new SafeApiKit({ + chainId: 1n, // set the correct chainId + txServiceUrl: 'https://url-to-your-custom-service' }) ``` ## Propose a transaction to the service -Before a transaction can be executed, any of the Safe signers needs to initiate the process by creating a proposal of a transaction. We send this transaction to the service to make it accessible by the other owners so they can give their approbal and sign the transaction as well. +Before a transaction can be executed, any of the Safe signers needs to initiate the process by creating a proposal of a transaction. We send this transaction to the service to make it accessible by the other owners so they can give their approval and sign the transaction as well. ```typescript import Safe from '@safe-global/protocol-kit' // Create Safe instance -const safe = await Safe.create({ +const protocolKit = await Safe.create({ ethAdapter, safeAddress: config.SAFE_ADDRESS }) // Create transaction -const safeTransactionData: SafeTransactionDataPartial = { +const safeTransactionData: MetaTransactionData = { to: '0x', value: '1', // 1 wei data: '0x', operation: OperationType.Call } -const safeTransaction = await safe.createTransaction({ safeTransactionData }) +const safeTransaction = await protocolKit.createTransaction({ transactions: [safeTransactionData] }) const senderAddress = await signer.getAddress() -const safeTxHash = await safe.getTransactionHash(safeTransaction) -const signature = await safe.signTransactionHash(safeTxHash) +const safeTxHash = await protocolKit.getTransactionHash(safeTransaction) +const signature = await protocolKit.signTransactionHash(safeTxHash) // Propose transaction to the service await safeApiKit.proposeTransaction({ - safeAddress: await safe.getAddress(), + safeAddress: await protocolKit.getAddress(), safeTransactionData: safeTransaction.data, safeTxHash, senderAddress, @@ -110,14 +116,14 @@ const transaction = await service.getTransaction("") ## Confirm the transaction -In this step we need to sing the transaction with the Protocol Kit and submit the signature the the Safe Transaction Service using the `confirmTransaction` method. +In this step we need to sign the transaction with the Protocol Kit and submit the signature to the Safe Transaction Service using the `confirmTransaction` method. ```typescript const safeTxHash = transaction.transactionHash -const signature = await safe.signTransactionHash(safeTxHash) +const signature = await protocolKit.signTransactionHash(safeTxHash) // Confirm the Safe transaction -const signatureResponse = await service.confirmTransaction(safeTxHash, signature.data) +const signatureResponse = await safeApiKit.confirmTransaction(safeTxHash, signature.data) ``` -The Safe transaction is now ready to be executed. This can be done using the Safe{Wallet} web interface, the Protocol Kit or any other tool that is available. +The Safe transaction is now ready to be executed. This can be done using the Safe{Wallet} web interface, the Protocol Kit or any other tool that's available. diff --git a/safe-core-sdk/api-kit/reference/README.md b/safe-core-sdk/api-kit/reference/README.md index 98cdb596..41b3cefe 100644 --- a/safe-core-sdk/api-kit/reference/README.md +++ b/safe-core-sdk/api-kit/reference/README.md @@ -17,15 +17,15 @@ yarn add @safe-global/api-kit Returns the information and configuration of the service. ```typescript -const serviceInfo: SafeServiceInfoResponse = await safeService.getServiceInfo() +const serviceInfo: SafeServiceInfoResponse = await safeApiKit.getServiceInfo() ``` -### `getServiceMasterCopiesInfo` +### `getServiceSingletonsInfo` -Returns the list of Safe master copies. +Returns the list of Safe singletons. ```typescript -const masterCopies: MasterCopyResponse = await safeService.getServiceMasterCopiesInfo() +const singletons: SafeSingletonResponse = await safeApiKit.getServiceSingletonsInfo() ``` ### `decodeData` @@ -33,7 +33,7 @@ const masterCopies: MasterCopyResponse = await safeService.getServiceMasterCopie Decodes the specified Safe transaction data. ```typescript -const decodedData = await safeService.decodeData(data) +const decodedData = await safeApiKit.decodeData(data) ``` ### `getSafesByOwner` @@ -41,7 +41,7 @@ const decodedData = await safeService.decodeData(data) Returns the list of Safes where the address provided is an owner. ```typescript -const safes: OwnerResponse = await safeService.getSafesByOwner(ownerAddress) +const safes: OwnerResponse = await safeApiKit.getSafesByOwner(ownerAddress) ``` ### `getSafesByModule` @@ -57,7 +57,7 @@ const safes: ModulesResponse = await getSafesByModule(moduleAddress) Returns all the information of a Safe transaction. ```typescript -const tx: SafeMultisigTransactionResponse = await safeService.getTransaction(safeTxHash) +const tx: SafeMultisigTransactionResponse = await safeApiKit.getTransaction(safeTxHash) ``` ### `getTransactionConfirmations` @@ -66,7 +66,7 @@ Returns the list of confirmations for a given a Safe transaction. ```typescript const confirmations: SafeMultisigConfirmationListResponse = - await safeService.getTransactionConfirmations(safeTxHash) + await safeApiKit.getTransactionConfirmations(safeTxHash) ``` ### `confirmTransaction` @@ -74,7 +74,7 @@ const confirmations: SafeMultisigConfirmationListResponse = Adds a confirmation for a Safe transaction. ```typescript -const signature: SignatureResponse = await safeService.confirmTransaction(safeTxHash, signature) +const signature: SignatureResponse = await safeApiKit.confirmTransaction(safeTxHash, signature) ``` ### `getSafeInfo` @@ -82,7 +82,7 @@ const signature: SignatureResponse = await safeService.confirmTransaction(safeTx Returns the information and configuration of the provided Safe address. ```typescript -const safeInfo: SafeInfoResponse = await safeService.getSafeInfo(safeAddress) +const safeInfo: SafeInfoResponse = await safeApiKit.getSafeInfo(safeAddress) ``` ### `getSafeDelegates` @@ -98,7 +98,7 @@ const delegateConfig: GetSafeDelegateProps = { limit, // Optional offset // Optional } -const delegates: SafeDelegateListResponse = await safeService.getSafeDelegates(delegateConfig) +const delegates: SafeDelegateListResponse = await safeApiKit.getSafeDelegates(delegateConfig) ``` ### `addSafeDelegate` @@ -113,7 +113,7 @@ const delegateConfig: AddSafeDelegateProps = { label, signer } -await safeService.addSafeDelegate(delegateConfig) +await safeApiKit.addSafeDelegate(delegateConfig) ``` ### `removeSafeDelegate` @@ -126,7 +126,7 @@ const delegateConfig: DeleteSafeDelegateProps = { delegatorAddress, signer } -await safeService.removeSafeDelegate(delegateConfig) +await safeApiKit.removeSafeDelegate(delegateConfig) ``` ### `getSafeCreationInfo` @@ -134,7 +134,7 @@ await safeService.removeSafeDelegate(delegateConfig) Returns the creation information of a Safe. ```typescript -const safeCreationInfo: SafeCreationInfoResponse = await safeService.getSafeCreationInfo( +const safeCreationInfo: SafeCreationInfoResponse = await safeApiKit.getSafeCreationInfo( safeAddress ) ``` @@ -145,7 +145,7 @@ Estimates the safeTxGas for a given Safe multi-signature transaction. ```typescript const estimateTx: SafeMultisigTransactionEstimateResponse = - await safeService.estimateSafeTransaction(safeAddress, safeTransaction) + await safeApiKit.estimateSafeTransaction(safeAddress, safeTransaction) ``` ### `proposeTransaction` @@ -161,7 +161,7 @@ const transactionConfig: ProposeTransactionProps = { senderSignature, origin } -await safeService.proposeTransaction(transactionConfig) +await safeApiKit.proposeTransaction(transactionConfig) ``` ### `getIncomingTransactions` @@ -169,7 +169,7 @@ await safeService.proposeTransaction(transactionConfig) Returns the history of incoming transactions of a Safe account. ```typescript -const incomingTxs: TransferListResponse = await safeService.getIncomingTransactions(safeAddress) +const incomingTxs: TransferListResponse = await safeApiKit.getIncomingTransactions(safeAddress) ``` ### `getModuleTransactions` @@ -177,7 +177,7 @@ const incomingTxs: TransferListResponse = await safeService.getIncomingTransacti Returns the history of module transactions of a Safe account. ```typescript -const moduleTxs: SafeModuleTransactionListResponse = await safeService.getModuleTransactions( +const moduleTxs: SafeModuleTransactionListResponse = await safeApiKit.getModuleTransactions( safeAddress ) ``` @@ -187,7 +187,7 @@ const moduleTxs: SafeModuleTransactionListResponse = await safeService.getModule Returns the history of multi-signature transactions of a Safe account. ```typescript -const multisigTxs: SafeMultisigTransactionListResponse = await safeService.getMultisigTransactions( +const multisigTxs: SafeMultisigTransactionListResponse = await safeApiKit.getMultisigTransactions( safeAddress ) ``` @@ -197,13 +197,13 @@ const multisigTxs: SafeMultisigTransactionListResponse = await safeService.getMu Returns the list of multi-signature transactions that are waiting for the confirmation of the Safe owners. ```typescript -const pendingTxs: SafeMultisigTransactionListResponse = await safeService.getPendingTransactions( +const pendingTxs: SafeMultisigTransactionListResponse = await safeApiKit.getPendingTransactions( safeAddress ) ``` ```typescript -const pendingTxs: SafeMultisigTransactionListResponse = await safeService.getPendingTransactions( +const pendingTxs: SafeMultisigTransactionListResponse = await safeApiKit.getPendingTransactions( safeAddress, currentNonce ) @@ -214,7 +214,7 @@ const pendingTxs: SafeMultisigTransactionListResponse = await safeService.getPen Returns a list of transactions for a Safe. The list has different structures depending on the transaction type. ```typescript -const allTxs: SafeMultisigTransactionListResponse = await safeService.getAllTransactions( +const allTxs: SafeMultisigTransactionListResponse = await safeApiKit.getAllTransactions( safeAddress ) ``` @@ -225,7 +225,7 @@ const allTxsOptions: AllTransactionsOptions = { queued, trusted } -const allTxs: SafeMultisigTransactionListResponse = await safeService.getAllTransactions( +const allTxs: SafeMultisigTransactionListResponse = await safeApiKit.getAllTransactions( safeAddress, allTxsOptions ) @@ -236,7 +236,7 @@ const allTxs: SafeMultisigTransactionListResponse = await safeService.getAllTran Returns the right nonce to propose a new transaction right after the last pending transaction. ```typescript -const nextNonce = await safeService.getNextNonce(safeAddress) +const nextNonce = await safeApiKit.getNextNonce(safeAddress) ``` ### `getTokenList` @@ -244,7 +244,7 @@ const nextNonce = await safeService.getNextNonce(safeAddress) Returns the list of all the ERC20 tokens handled by the Safe. ```typescript -const tokens: TokenInfoListResponse = await safeService.getTokenList() +const tokens: TokenInfoListResponse = await safeApiKit.getTokenList() ``` ### `getToken` @@ -252,5 +252,5 @@ const tokens: TokenInfoListResponse = await safeService.getTokenList() Returns the information of a given ERC20 token. ```typescript -const token: TokenInfoResponse = await safeService.getToken(tokenAddress) +const token: TokenInfoResponse = await safeApiKit.getToken(tokenAddress) ``` diff --git a/safe-core-sdk/api-kit/reference/migrating/v2.md b/safe-core-sdk/api-kit/reference/migrating/v2.md new file mode 100644 index 00000000..66458fb8 --- /dev/null +++ b/safe-core-sdk/api-kit/reference/migrating/v2.md @@ -0,0 +1,38 @@ +# API Kit: Migrating from v1 + +This guide references the major changes between v1 and v2 to help those migrating an existing app. + +## API Kit constructor + +It won't be necessary to specify a `txServiceUrl` in environments where Safe has a Transaction Service running. Providing the chain ID will be enough. If you want to use your custom service or the kit in a chain not supported by a Safe Transaction Service, you can add the `txServiceUrl` parameter. + +```js +// old: +constructor({ txServiceUrl, ethAdapter }: SafeApiKitConfig) + +// new: +constructor({ chainId, txServiceUrl? }: SafeApiKitConfig) +``` + +## Use the route you prefer + +API Kit v1 forced any custom service to be hosted under the `/api` route of the URL specified in `txServiceUrl`. This isn't the case anymore; you can specify any preferred route or subdomain. + +Note that if you use a custom service running under `/api`, you will now need to migrate as follows: + +```js +// old: +const txServiceUrl = 'https://your-transaction-service-domain/' +constructor({ txServiceUrl, ethAdapter }: SafeApiKitConfig) + +// new: +const txServiceUrl = 'https://your-transaction-service-domain/api' +constructor({ chainId, txServiceUrl? }: SafeApiKitConfig) +``` + +## MasterCopy to Singleton + +To avoid confusion between terms used as synonyms, we aligned all our code to use the word `singleton`. + +- Rename type `MasterCopyResponse` to `SafeSingletonResponse` +- Rename method `getServiceMasterCopiesInfo()` to `getServiceSingletonsInfo()` \ No newline at end of file diff --git a/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md b/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md index 72825461..469c5c64 100644 --- a/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md +++ b/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md @@ -9,13 +9,13 @@ The `Web3AuthModalPack` enables the use of [Web3Auth modal SDK](https://web3auth To use the `Web3AuthModalPack`, you need to install some extra dependencies in addition to the `@safe-global/auth-kit` package. ```bash -yarn add @safe-global/auth-kit @web3auth/base @web3auth/modal +yarn add @safe-global/auth-kit @web3auth/base@4.6.0 @web3auth/modal@4.6.2 ``` Choose the adapters to use with Web3Auth, and add them. For example, to use the [OpenLogin](https://web3auth.io/docs/sdk/pnp/web/adapters/openlogin) adapter, you must install the following dependency: ```bash -yarn add @web3auth/openlogin-adapter +yarn add @web3auth/openlogin-adapter@4.6.0 ``` Refer to the [supported adapters](https://web3auth.io/docs/sdk/pnp/web/adapters/#currently-available-wallet-adapters) in the official documentation. diff --git a/safe-core-sdk/onramp-kit/reference/MoneriumPack.md b/safe-core-sdk/onramp-kit/reference/MoneriumPack.md index ffc9107c..fac51c60 100644 --- a/safe-core-sdk/onramp-kit/reference/MoneriumPack.md +++ b/safe-core-sdk/onramp-kit/reference/MoneriumPack.md @@ -4,7 +4,7 @@ Monerium Pack enables using Safe with [Monerium](https://monerium.com), a regula ## Install dependencies -To use the `MoneriumPack`, you need to install the monerium SDK in addition to the `@safe-global/onramp-kit` package. +To use the `MoneriumPack`, you need to install the Monerium SDK in addition to the `@safe-global/onramp-kit` package. ```bash yarn add @safe-global/onramp-kit @monerium/sdk diff --git a/safe-core-sdk/onramp-kit/reference/README.md b/safe-core-sdk/onramp-kit/reference/README.md index acf05bd1..26e59ecb 100644 --- a/safe-core-sdk/onramp-kit/reference/README.md +++ b/safe-core-sdk/onramp-kit/reference/README.md @@ -1,17 +1,17 @@ -# OnRamp Kit +# Onramp Kit -The [OnRamp Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) allow users to access on-ramp services and use them with their Safes. +The [Onramp Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) allow users to access on-ramp services and use them with their Safes. These services can be used to buy crypto assets with credit cards or make SEPA transfers between their Safe and bank accounts (Monerium). ## Install dependencies -To add the OnRamp Kit to your project, run: +To add the Onramp Kit to your project, run: ```bash yarn add @safe-global/onramp-kit ``` -The OnRamp Kit can integrate several providers in the form of "packs". A pack is a piece of code that works with the chosen provider to give Safe users access to new services. +The Onramp Kit can integrate several providers in the form of **"packs"**. A pack is a piece of code that works with the chosen provider to give Safe users access to new services. To use each pack, the right package needs to be installed: diff --git a/safe-core-sdk/protocol-kit/README.md b/safe-core-sdk/protocol-kit/README.md index 019be1a6..d0da795e 100644 --- a/safe-core-sdk/protocol-kit/README.md +++ b/safe-core-sdk/protocol-kit/README.md @@ -11,20 +11,20 @@ For a more detailed guide, including how to integrate with `web3.js`` and more S ### Prerequisites 1. [Node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) -2. 3 externally-owned accounts with testnet ETH in at least one account +2. Three externally-owned accounts with Testnet ETH in at least one account ### Install dependencies -First, we'll need to install some dependences from `safe-core-sdk` and the `ethers` library. +First, we'll need to install some dependencies from `safe-core-sdk` and the `ethers` library. To interact with Ethereum and other EVM blockchains in Node, we can either use: web3.js or ethers.js. In this tutorial, we'll use the ethers.js library. To use `web3js`, see [Instantiate an EthAdapter section in Guide: Integrating the Safe Core SDK](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md#instantiate-an-ethadapter). -The Protocol Kit is compatible with ethers v4 and v5, not the latest v6 version so make sure you specify this when installing the SDK. +The Protocol Kit is compatible only with **ethers.js v6**. Make sure you specify this version when installing the SDK. You can store your environment variables such as private keys in a `.env` file. To read easily from `.env` files, use the `dotenv` library. ```bash -yarn add ethers@5.7.2 @safe-global/protocol-kit \ +yarn add ethers @safe-global/protocol-kit \ @safe-global/api-kit \ @safe-global/safe-core-sdk-types \ dotenv @@ -62,7 +62,7 @@ The signers trigger transactions to the Ethereum blockchain or off-chain transac You can get a public RPC URL from [Chainlist](https://chainlist.org), however, public RPC URLs can be unreliable so you can also try a dedicated provider like Infura or Alchemy. -For this tutorial, we will be creating a Safe on the Goerli testnet. +For this tutorial, we will be creating a Safe on the Goerli Testnet. ```tsx import { ethers } from 'ethers' @@ -73,7 +73,7 @@ dotenv.config() // https://chainlist.org/?search=goerli&testnets=true const RPC_URL='https://eth-goerli.public.blastapi.io' -const provider = new ethers.providers.JsonRpcProvider(RPC_URL) +const provider = new ethers.JsonRpcProvider(RPC_URL) // Initialize signers const owner1Signer = new ethers.Wallet(process.env.OWNER_1_PRIVATE_KEY!, provider) @@ -88,15 +88,23 @@ const ethAdapterOwner1 = new EthersAdapter({ ### Initialize the API Kit -The [API Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/api-kit) consumes the [Safe Transaction Service API](https://github.com/safe-global/safe-transaction-service). To start using this library, create a new instance of the `SafeApiKit` class, imported from `@safe-global/api-kit`, and pass the Safe Transaction Service URL for your desired network to the constructor of the `SafeApiKit`. +The [API Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/api-kit) consumes the [Safe Transaction Service API](https://github.com/safe-global/safe-transaction-service). To use this library, create a new instance of the `SafeApiKit` class, imported from `@safe-global/api-kit`. In chains where Safe provides a Transaction Service, it's enough to specify the `chainId.` You can specify your own service using the optional `txServiceUrl` parameter. You will be using Goerli for this tutorial, however, you can also get [service URLs for different networks](../../safe-core-api/available-services.md). ```tsx import SafeApiKit from '@safe-global/api-kit' -const txServiceUrl = 'https://safe-transaction-goerli.safe.global' -const safeService = new SafeApiKit({ txServiceUrl, ethAdapter: ethAdapterOwner1 }) +const safeApiKit = new SafeApiKit({ + chainId: 1n +}) + + +// or using a custom service +const safeApiKit = new SafeApiKit({ + chainId: 1n, // set the correct chainId + txServiceUrl: 'https://url-to-your-custom-service' +}) ``` ### Initialize the Protocol Kit @@ -146,7 +154,7 @@ You will send some ETH to this Safe. ```tsx const safeAddress = safeSdk.getAddress() -const safeAmount = ethers.utils.parseUnits('0.01', 'ether').toHexString() +const safeAmount = ethers.parseUnits('0.01', 'ether').toHexString() const transactionParameters = { to: safeAddress, @@ -187,19 +195,19 @@ The high-level overview of a multi-sig transaction is PCE: Propose. Confirm. Exe For more details on what to include in a transaction see [Create a Transaction in the Safe Core SDK Guide](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md#4-create-a-transaction). ```tsx -import { SafeTransactionDataPartial } from '@safe-global/safe-core-sdk-types' +import { MetaTransactionData } from '@safe-global/safe-core-sdk-types' // Any address can be used. In this example you will use vitalik.eth const destination = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' -const amount = ethers.utils.parseUnits('0.005', 'ether').toString() +const amount = ethers.parseUnits('0.005', 'ether').toString() -const safeTransactionData: SafeTransactionDataPartial = { +const safeTransactionData: MetaTransactionData = { to: destination, data: '0x', value: amount } // Create a Safe transaction with the provided parameters -const safeTransaction = await safeSdkOwner1.createTransaction({ safeTransactionData }) +const safeTransaction = await safeSdkOwner1.createTransaction({ transactions: [safeTransactionData] }) ``` ### Propose the transaction @@ -232,7 +240,7 @@ Recall that you created the `safeService` in [Initialize the API Kit](./#initial const pendingTransactions = await safeService.getPendingTransactions(safeAddress).results ``` -### Confirm the transaction: second confirmation +### Confirm the transaction: Second confirmation When owner 2 is connected to the application, the Protocol Kit should be initialized again with the existing Safe address the address of the owner 2 instead of the owner 1. @@ -275,7 +283,7 @@ You know that the transaction was executed if the balance in your Safe changes. ```tsx const afterBalance = await safeSdk.getBalance() -console.log(`The final balance of the Safe: ${ethers.utils.formatUnits(afterBalance, 'ether')} ETH`) +console.log(`The final balance of the Safe: ${ethers.formatUnits(afterBalance, 'ether')} ETH`) ``` ```bash diff --git a/safe-core-sdk/protocol-kit/reference/README.md b/safe-core-sdk/protocol-kit/reference/README.md index ed4d131d..173323ac 100644 --- a/safe-core-sdk/protocol-kit/reference/README.md +++ b/safe-core-sdk/protocol-kit/reference/README.md @@ -22,14 +22,14 @@ import { SafeFactory } from '@safe-global/protocol-kit' const safeFactory = await SafeFactory.create({ ethAdapter }) ``` -- The `isL1SafeMasterCopy` flag +- The `isL1SafeSingleton` flag There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. - By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeMasterCopy` flag to force the use of the `Safe.sol` contract. + By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeSingleton` flag to force the use of the `Safe.sol` contract. ```typescript - const safeFactory = await SafeFactory.create({ ethAdapter, isL1SafeMasterCopy: true }) + const safeFactory = await SafeFactory.create({ ethAdapter, isL1SafeSingleton: true }) ``` - The `contractNetworks` property @@ -42,7 +42,7 @@ const safeFactory = await SafeFactory.create({ ethAdapter }) const chainId = await ethAdapter.getChainId() const contractNetworks: ContractNetworksConfig = { [chainId]: { - safeMasterCopyAddress: '', + safeSingletonAddress: '', safeProxyFactoryAddress: '', multiSendAddress: '', multiSendCallOnlyAddress: '', @@ -50,7 +50,7 @@ const safeFactory = await SafeFactory.create({ ethAdapter }) signMessageLibAddress: '', createCallAddress: '', simulateTxAccessorAddress: '', - safeMasterCopyAbi: '', // Optional. Only needed with web3.js + safeSingletonAbi: '', // Optional. Only needed with web3.js safeProxyFactoryAbi: '', // Optional. Only needed with web3.js multiSendAbi: '', // Optional. Only needed with web3.js multiSendCallOnlyAbi: '', // Optional. Only needed with web3.js @@ -75,7 +75,7 @@ const safeFactory = await SafeFactory.create({ ethAdapter }) ### `deploySafe` -Deploys a new Safe and returns an instance of the Protocol Kit connected to the deployed Safe. The address of the Master Copy, Safe contract version and the contract (`Safe.sol` or `SafeL2.sol`) of the deployed Safe will depend on the initialization of the `safeFactory` instance. +Deploys a new Safe and returns an instance of the Protocol Kit connected to the deployed Safe. The address of the singleton, Safe contract version and the contract (`Safe.sol` or `SafeL2.sol`) of the deployed Safe will depend on the initialization of the `safeFactory` instance. ```typescript const safeAccountConfig: SafeAccountConfig = { @@ -176,14 +176,14 @@ const predictedSafe: PredictedSafeProps = { const safeSdk = await Safe.create({ ethAdapter, predictedSafe }) ``` -- The `isL1SafeMasterCopy` flag +- The `isL1SafeSingleton` flag There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. - By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeMasterCopy` flag to force the use of the `Safe.sol` contract. + By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeSingleton` flag to force the use of the `Safe.sol` contract. ```typescript - const safeSdk = await Safe.create({ ethAdapter, safeAddress, isL1SafeMasterCopy: true }) + const safeSdk = await Safe.create({ ethAdapter, safeAddress, isL1SafeSingleton: true }) ``` - The `contractNetworks` property @@ -196,7 +196,7 @@ const safeSdk = await Safe.create({ ethAdapter, predictedSafe }) const chainId = await ethAdapter.getChainId() const contractNetworks: ContractNetworksConfig = { [chainId]: { - safeMasterCopyAddress: '', + safeSingletonAddress: '', safeProxyFactoryAddress: '', multiSendAddress: '', multiSendCallOnlyAddress: '', @@ -204,7 +204,7 @@ const safeSdk = await Safe.create({ ethAdapter, predictedSafe }) signMessageLibAddress: '', createCallAddress: '', simulateTxAccessorAddress: '', - safeMasterCopyAbi: '', // Optional. Only needed with web3.js + safeSingletonAbi: '', // Optional. Only needed with web3.js safeProxyFactoryAbi: '', // Optional. Only needed with web3.js multiSendAbi: '', // Optional. Only needed with web3.js multiSendCallOnlyAbi: '', // Optional. Only needed with web3.js @@ -241,14 +241,14 @@ const predictedSafe: PredictedSafeProps = { const safeSdk = await safeSdk.connect({ ethAdapter, predictedSafe }) ``` -- The `isL1SafeMasterCopy` flag +- The `isL1SafeSingleton` flag There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. - By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeMasterCopy` flag to force the use of the `Safe.sol` contract. + By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeSingleton` flag to force the use of the `Safe.sol` contract. ```typescript - const safeSdk = await Safe.connect({ ethAdapter, safeAddress, isL1SafeMasterCopy: true }) + const safeSdk = await Safe.connect({ ethAdapter, safeAddress, isL1SafeSingleton: true }) ``` - The `contractNetworks` property @@ -261,7 +261,7 @@ const safeSdk = await safeSdk.connect({ ethAdapter, predictedSafe }) const chainId = await ethAdapter.getChainId() const contractNetworks: ContractNetworksConfig = { [chainId]: { - safeMasterCopyAddress: '', + safeSingletonAddress: '', safeProxyFactoryAddress: '', multiSendAddress: '', multiSendCallOnlyAddress: '', @@ -269,7 +269,7 @@ const safeSdk = await safeSdk.connect({ ethAdapter, predictedSafe }) signMessageLibAddress: '', createCallAddress: '', simulateTxAccessorAddress: '', - safeMasterCopyAbi: '', // Optional. Only needed with web3.js + safeSingletonAbi: '', // Optional. Only needed with web3.js safeProxyFactoryAbi: '', // Optional. Only needed with web3.js multiSendAbi: '', // Optional. Only needed with web3.js multiSendCallOnlyAbi: '', // Optional. Only needed with web3.js @@ -292,7 +292,7 @@ const safeAddress = await safeSdk.getAddress() ### `getContractVersion` -Returns the Safe Master Copy contract version. +Returns the Safe singleton contract version. ```typescript const contractVersion = await safeSdk.getContractVersion() @@ -324,7 +324,7 @@ const threshold = await safeSdk.getThreshold() ### `getChainId` -Returns the chainId of the connected network. +Returns the chain ID of the connected network. ```typescript const chainId = await safeSdk.getChainId() @@ -374,90 +374,68 @@ const isOwner = await safeSdk.isOwner(address) Returns a Safe transaction ready to be signed by the owners and executed. The Protocol Kit supports the creation of single Safe transactions but also MultiSend transactions. -- **Single transactions** +This method takes an array of `MetaTransactionData` objects that represent the individual transactions we want to include in our MultiSend transaction. - This method can take an object of type `SafeTransactionDataPartial` that represents the transaction we want to execute (once the signatures are collected). It accepts some optional properties as follows. +When the array contains only one transaction, it's not wrapped in the MultiSend. - ```typescript - import { SafeTransactionDataPartial } from '@safe-global/safe-core-sdk-types' - - const safeTransactionData: SafeTransactionDataPartial = { +```typescript +const transactions: MetaTransactionData[] = [ + { + to, + data, + value, + operation // Optional + }, + { to, data, value, - operation, // Optional - safeTxGas, // Optional - baseGas, // Optional - gasPrice, // Optional - gasToken, // Optional - refundReceiver, // Optional - nonce // Optional + operation // Optional } - const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) - ``` - -- **MultiSend transactions** - - This method can take an array of `MetaTransactionData` objects that represent the multiple transactions we want to include in our MultiSend transaction. If we want to specify some of the optional properties in our MultiSend transaction, we can pass a second argument to the `createTransaction` method with the `SafeTransactionOptionalProps` object. - - ```typescript - const safeTransactionData: MetaTransactionData[] = [ - { - to, - data, - value, - operation // Optional - }, - { - to, - data, - value, - operation // Optional - } - // ... - ] - const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) - ``` + // ... +] +const safeTransaction = await safeSdk.createTransaction({ transactions }) +``` - This method can also receive the `options` parameter to set the optional properties in the MultiSend transaction: +This method can also receive the `options` parameter to set the optional properties in the MultiSend transaction: - ```typescript - const safeTransactionData: MetaTransactionData[] = [ - { - to, - data, - value, - operation // Optional - }, - { - to, - data, - value, - operation // Optional - } - // ... - ] - const options: SafeTransactionOptionalProps = { - safeTxGas, // Optional - baseGas, // Optional - gasPrice, // Optional - gasToken, // Optional - refundReceiver, // Optional - nonce // Optional +```typescript +const transactions: MetaTransactionData[] = [ + { + to, + data, + value, + operation // Optional + }, + { + to, + data, + value, + operation // Optional } - const safeTransaction = await safeSdk.createTransaction({ safeTransactionData, options }) - ``` + // ... +] +const options: SafeTransactionOptionalProps = { + safeTxGas, // Optional + baseGas, // Optional + gasPrice, // Optional + gasToken, // Optional + refundReceiver, // Optional + nonce // Optional +} +const safeTransaction = await safeSdk.createTransaction({ transactions, options }) +``` - In addition, the optional `callsOnly` parameter, which is `false` by default, allows to force the use of the `MultiSendCallOnly` instead of the `MultiSend` contract when sending a batch transaction: +In addition, the optional `callsOnly` parameter, which is `false` by default, allows to force the use of the `MultiSendCallOnly` instead of the `MultiSend` contract when sending a batch transaction: - ```typescript - const callsOnly = true - const safeTransaction = await safeSdk.createTransaction({ - safeTransactionData, - options, - callsOnly - }) - ``` +```typescript +const callsOnly = true +const safeTransaction = await safeSdk.createTransaction({ + transactions, + options, + callsOnly +}) +``` If the optional properties are not manually set, the Safe transaction returned will have the default value for each one: @@ -474,10 +452,10 @@ If the optional properties are not manually set, the Safe transaction returned w Returns a Safe transaction ready to be signed by the owners that invalidates the pending Safe transaction/s with a specific nonce. ```typescript -const safeTransactionData: SafeTransactionDataPartial = { +const transactions: MetaTransactionData[] = [{ // ... -} -const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) +}] +const safeTransaction = await safeSdk.createTransaction({ transactions }) const rejectionTransaction = await safeSdk.createRejectionTransaction(safeTransaction.data.nonce) ``` @@ -486,7 +464,7 @@ const rejectionTransaction = await safeSdk.createRejectionTransaction(safeTransa Copies a Safe transaction. ```typescript -const safeTransaction1 = await safeSdk.createTransaction({ safeTransactionData }) +const safeTransaction1 = await safeSdk.createTransaction({ transactions }) const safeTransaction2 = await copyTransaction(safeTransaction1) ``` @@ -495,10 +473,10 @@ const safeTransaction2 = await copyTransaction(safeTransaction1) Returns the transaction hash of a Safe transaction. ```typescript -const safeTransactionData: SafeTransactionDataPartial = { +const transactions: MetaTransactionData[] = [{ // ... -} -const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) +}] +const safeTransaction = await safeSdk.createTransaction({ transactions }) const txHash = await safeSdk.getTransactionHash(safeTransaction) ``` @@ -507,10 +485,10 @@ const txHash = await safeSdk.getTransactionHash(safeTransaction) Signs a hash using the current owner account. ```typescript -const safeTransactionData: SafeTransactionDataPartial = { +const transactions: MetaTransactionData[] = [{ // ... -} -const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) +}] +const safeTransaction = await safeSdk.createTransaction({ transactions }) const txHash = await safeSdk.getTransactionHash(safeTransaction) const signature = await safeSdk.signTransactionHash(txHash) ``` @@ -520,10 +498,10 @@ const signature = await safeSdk.signTransactionHash(txHash) Signs a transaction according to the EIP-712 using the current signer account. ```typescript -const safeTransactionData: SafeTransactionDataPartial = { +const transactions: MetaTransactionData[] = [{ // ... -} -const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) +}] +const safeTransaction = await safeSdk.createTransaction({ transactions }) const signature = await safeSdk.signTypedData(safeTransaction) ``` @@ -532,10 +510,10 @@ const signature = await safeSdk.signTypedData(safeTransaction) Returns a new `SafeTransaction` object that includes the signature of the current owner. `eth_sign` will be used by default to generate the signature. ```typescript -const safeTransactionData: SafeTransactionDataPartial = { +const transactions: MetaTransactionData[] = [{ // ... -} -const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) +}] +const safeTransaction = await safeSdk.createTransaction({ transactions }) const signedSafeTransaction = await safeSdk.signTransaction(safeTransaction) ``` @@ -554,10 +532,10 @@ const signedSafeTransaction = await safeSdk.signTransaction(safeTransaction, 'et Approves a hash on-chain using the current owner account. ```typescript -const safeTransactionData: SafeTransactionDataPartial = { +const transactions: MetaTransactionData[] = [{ // ... -} -const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) +}] +const safeTransaction = await safeSdk.createTransaction({ transactions }) const txHash = await safeSdk.getTransactionHash(safeTransaction) const txResponse = await safeSdk.approveTransactionHash(txHash) await txResponse.transactionResponse?.wait() @@ -596,10 +574,10 @@ const txResponse = await safeSdk.approveTransactionHash(txHash, options) Returns a list of owners who have approved a specific Safe transaction. ```typescript -const safeTransactionData: SafeTransactionDataPartial = { +const transactions: MetaTransactionData[] = [{ // ... -} -const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) +}] +const safeTransaction = await safeSdk.createTransaction({ transactions }) const txHash = await safeSdk.getTransactionHash(safeTransaction) const ownerAddresses = await safeSdk.getOwnersWhoApprovedTx(txHash) ``` @@ -805,10 +783,10 @@ const safeTransaction = await safeSdk.createChangeThresholdTx(newThreshold, opti Checks if a Safe transaction can be executed successfully with no errors. ```typescript -const safeTransactionData: SafeTransactionDataPartial = { +const transactions: MetaTransactionData[] = [{ // ... -} -const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) +}] +const safeTransaction = await safeSdk.createTransaction({ transactions }) const isValidTx = await safeSdk.isValidTransaction(safeTransaction) ``` @@ -845,10 +823,10 @@ const isValidTx = await safeSdk.isValidTransaction(safeTransaction, options) Executes a Safe transaction. ```typescript -const safeTransactionData: SafeTransactionDataPartial = { +const transactions: MetaTransactionData[] = [{ // ... -} -const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) +}] +const safeTransaction = await safeSdk.createTransaction({ transactions }) const txResponse = await safeSdk.executeTransaction(safeTransaction) await txResponse.transactionResponse?.wait() ``` diff --git a/safe-core-sdk/protocol-kit/reference/migrating/v2.md b/safe-core-sdk/protocol-kit/reference/migrating/v2.md new file mode 100644 index 00000000..5348835e --- /dev/null +++ b/safe-core-sdk/protocol-kit/reference/migrating/v2.md @@ -0,0 +1,48 @@ +# Protocol Kit: Migrating from v1 + +This guide references the major changes between v1 and v2 to help those migrating an existing app. + +## MasterCopy to Singleton + +To avoid confusion between terms used as synonyms, we aligned all our code to use the word `singleton`. + +- Rename `isL1SafeMasterCopy` to `isL1SafeSingleton` +```js +// old: +SafeFactory.create({ ethAdapter, isL1SafeMasterCopy: true }) + +// new: +SafeFactory.create({ ethAdapter, isL1SafeSingleton: true }) +``` + +## Ethers v6 + +From `protocolKit v2`, `EthersAdapter` will only be compatible with ethers.js v6. If you still need to use v5, we recommend you keep `protocolKit v1`, but we encourage you to migrate to the latest version when you can. + +## Protocol Kit createTransaction() accepts only transaction array + +In `protocolKit v1`, the `createTransaction()` method accepted either an object or an array as a parameter. To avoid confusion, we changed it to accept only an array. Here is a migration example: + +```js +// old: +const safeTransactionData = { + to: '', + data: '', + value: '', + nonce: '', + safeTxGas: '' +} +const safeTransaction = protocolKit.createTransaction({ safeTransactionData }) + +// new: +const safeTransactionData = { + to: '', + data: '', + value: '' +} +const options = { + nonce: '', + safeTxGas: '' +} +const safeTransaction = protocolKit.createTransaction({ [safeTransactionData], options }) +``` \ No newline at end of file diff --git a/safe-core-sdk/relay-kit/guides/gelato.md b/safe-core-sdk/relay-kit/guides/gelato.md index 49afcc9d..978d7151 100644 --- a/safe-core-sdk/relay-kit/guides/gelato.md +++ b/safe-core-sdk/relay-kit/guides/gelato.md @@ -60,13 +60,13 @@ Modify the variables to customize to match your desired transaction settings. ```typescript // https://chainlist.org const RPC_URL='https://endpoints.omniatech.io/v1/bsc/mainnet/public' -const provider = new ethers.providers.JsonRpcProvider(RPC_URL) +const provider = new ethers.JsonRpcProvider(RPC_URL) const signer = new ethers.Wallet(process.env.OWNER_1_PRIVATE_KEY!, provider) const safeAddress = '0x...' // Safe from which the transaction will be sent // Any address can be used for destination. In this example, we use vitalik.eth const destinationAddress = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' -const withdrawAmount = ethers.utils.parseUnits('0.005', 'ether').toString() +const withdrawAmount = ethers.parseUnits('0.005', 'ether').toString() ``` ### Create the transaction object @@ -91,30 +91,29 @@ const ethAdapter = new EthersAdapter({ signerOrProvider: signer }) -const safeSDK = await Safe.create({ +const protocolKit = await Safe.create({ ethAdapter, safeAddress }) -const relayKit = new GelatoRelayPack(process.env.GELATO_RELAY_API_KEY!) +const relayKit = new GelatoRelayPack({ apiKey: process.env.GELATO_RELAY_API_KEY!, protocolKit }) ``` ### Prepare the transaction ```typescript const safeTransaction = await relayKit.createRelayedTransaction({ - safe: safeSDK, transactions, options }) -const signedSafeTransaction = await safeSDK.signTransaction(safeTransaction) +const signedSafeTransaction = await protocolKit.signTransaction(safeTransaction) ``` ### Send the transaction to the relay ```typescript -const response = await relayKit.executeRelayTransaction(signedSafeTransaction, safeSDK, options) +const response = await relayKit.executeRelayTransaction(signedSafeTransaction, options) console.log(`Relay Transaction Task ID: https://relay.gelato.digital/tasks/status/${response.taskId}`) ``` @@ -143,13 +142,13 @@ Modify the variables to customize to match your desired transaction settings. ```typescript // https://chainlist.org const RPC_URL='https://endpoints.omniatech.io/v1/bsc/mainnet/public' -const provider = new ethers.providers.JsonRpcProvider(RPC_URL) +const provider = new ethers.JsonRpcProvider(RPC_URL) const signer = new ethers.Wallet(process.env.OWNER_1_PRIVATE_KEY!, provider) const safeAddress = '0x...' // Safe from which the transaction will be sent // Any address can be used for destination. In this example, we use vitalik.eth const destinationAddress = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' -const withdrawAmount = ethers.utils.parseUnits('0.005', 'ether').toString() +const withdrawAmount = ethers.parseUnits('0.005', 'ether').toString() ``` ### Create the transaction object @@ -171,26 +170,26 @@ const ethAdapter = new EthersAdapter({ signerOrProvider: signer }) -const safeSDK = await Safe.create({ +const protocolKit = await Safe.create({ ethAdapter, safeAddress }) -const relayKit = new GelatoRelayPack() +const relayKit = new GelatoRelayPack({ protocolKit }) ``` ### Prepare the transaction ```typescript -const safeTransaction = await relayKit.createRelayedTransaction({ safe: safeSDK, transactions }) +const safeTransaction = await relayKit.createRelayedTransaction({ transactions }) -const signedSafeTransaction = await safeSDK.signTransaction(safeTransaction) +const signedSafeTransaction = await protocolKit.signTransaction(safeTransaction) ``` ### Send the transaction to the relay ```typescript -const response = await relayKit.executeRelayTransaction(signedSafeTransaction, safeSDK) +const response = await relayKit.executeRelayTransaction(signedSafeTransaction) console.log(`Relay Transaction Task ID: https://relay.gelato.digital/tasks/status/${response.taskId}`) ``` diff --git a/safe-core-sdk/relay-kit/reference/migrating/v2.md b/safe-core-sdk/relay-kit/reference/migrating/v2.md new file mode 100644 index 00000000..31407513 --- /dev/null +++ b/safe-core-sdk/relay-kit/reference/migrating/v2.md @@ -0,0 +1,15 @@ +# Relay Kit: Migrating from v1 + +This guide references the major changes between v1 and v2 to help those migrating an existing app. + +## GelatoRelayPack + +- The `GelatoRelayPack` constructor now includes a mandatory `protocolKit` parameter. It's required for any new pack extending the `RelayKitBasePack`. + +```js +constructor({ apiKey, protocolKit }: GelatoOptions) +``` + +- We removed the `protocolKit` parameter from the `createTransactionWithHandlePayment()`, `createTransactionWithTransfer()`, and `executeRelayTransaction()` methods in the `GelatoRelayPack` as now it's included in the constructor. + +- Removed the `export interface RelayPack` type as we now use an abstract class. \ No newline at end of file From ca7f318704871ef513f67f10bb56de347e57ab23 Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:46:03 +0100 Subject: [PATCH 027/108] Switch from gitbook to nextra --- .gitbook.yaml | 17 - .gitignore | 2 + next-env.d.ts | 5 + next.config.js | 6 + package.json | 28 + pnpm-lock.yaml | 2344 ++++++++++++++++++++++++++++++++++++++++++++++ theme.config.tsx | 37 + tsconfig.json | 20 + yarn.lock | 173 ---- 9 files changed, 2442 insertions(+), 190 deletions(-) delete mode 100644 .gitbook.yaml create mode 100644 next-env.d.ts create mode 100644 next.config.js create mode 100644 pnpm-lock.yaml create mode 100644 theme.config.tsx create mode 100644 tsconfig.json delete mode 100644 yarn.lock diff --git a/.gitbook.yaml b/.gitbook.yaml deleted file mode 100644 index 0d86f31a..00000000 --- a/.gitbook.yaml +++ /dev/null @@ -1,17 +0,0 @@ -root: ./ - -redirects: - safe-core-protocol: safe-smart-account - safe-core-protocol/plugins: safe-smart-account/modules.md - safe-core-protocol/hooks: safe-smart-account/guards.md - safe-core-protocol/security: safe-smart-account/security/README.md - safe-core-protocol/security/bug-bounty-program: safe-smart-account/security/bug-bounty-program.md - safe-core-protocol/security/security-audits: safe-smart-account/security/security-audits.md - safe-core-protocol/signatures: safe-smart-account/signatures/README.md - safe-core-protocol/signatures/eip-1271: safe-smart-account/signatures/eip-1271.md - safe-smart-account/security/security-audits: safe-smart-account/security-audits.md - safe-smart-account/security/bug-bounty-program: miscellaneous/bug-bounty-program.md - safe-smart-account/security/past-paid-bounties: miscellaneous/past-paid-bounties.md - safe-apps-sdk/safe-apps: safe-apps/README.md - safe-apps-sdk/overview: safe-apps/README.md - safe-apps-sdk/example-safe-app: safe-apps/get-started.md diff --git a/.gitignore b/.gitignore index 91dfed8d..3b961c6d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .DS_Store +.next + node_modules \ No newline at end of file diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 00000000..4f11a03d --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next.config.js b/next.config.js new file mode 100644 index 00000000..ef283632 --- /dev/null +++ b/next.config.js @@ -0,0 +1,6 @@ +const withNextra = require('nextra')({ + theme: 'nextra-theme-docs', + themeConfig: './theme.config.tsx', +}) + +module.exports = withNextra() diff --git a/package.json b/package.json index 038d73cb..116d7229 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,34 @@ { + "version": "0.0.1", + "description": "Safe docs", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "generate-supported-networks": "node .github/scripts/generateSupportedNetworks.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/safe-global/safe-docs.git" + }, + "author": "Safe Core Contributors ", + "license": "MIT", + "bugs": { + "url": "https://github.com/safe-global/safe-docs/issues" + }, + "homepage": "https://github.com/safe-global/safe-docs#readme", "dependencies": { + "next": "^13.0.6", + "nextra": "latest", + "nextra-theme-docs": "latest", "node-fetch": "^3.3.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "shelljs": "^0.8.5" + }, + "devDependencies": { + "@types/node": "18.11.10", + "@types/react": "18.2.37", + "typescript": "^4.9.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..5459d9e0 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2344 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + next: + specifier: ^13.0.6 + version: 13.0.6(react-dom@18.2.0)(react@18.2.0) + nextra: + specifier: latest + version: 2.2.14(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) + nextra-theme-docs: + specifier: latest + version: 2.2.14(next@13.0.6)(nextra@2.2.14)(react-dom@18.2.0)(react@18.2.0) + node-fetch: + specifier: ^3.3.2 + version: 3.3.2 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + shelljs: + specifier: ^0.8.5 + version: 0.8.5 + +devDependencies: + '@types/node': + specifier: 18.11.10 + version: 18.11.10 + '@types/react': + specifier: 18.2.37 + version: 18.2.37 + typescript: + specifier: ^4.9.3 + version: 4.9.3 + +packages: + + /@babel/runtime@7.20.6: + resolution: {integrity: sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: false + + /@headlessui/react@1.7.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1m66h/5eayTEZVT2PI13/2PG3EVC7a9XalmUtVSC8X76pcyKYMuyX1XAL2RUtCr8WhoMa/KrDEyoeU5v+kSQOw==} + engines: {node: '>=10'} + peerDependencies: + react: ^16 || ^17 || ^18 + react-dom: ^16 || ^17 || ^18 + dependencies: + client-only: 0.0.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@mdx-js/mdx@2.2.1: + resolution: {integrity: sha512-hZ3ex7exYLJn6FfReq8yTvA6TE53uW9UHJQM9IlSauOuS55J9y8RtA7W+dzp6Yrzr00/U1sd7q+Wf61q6SfiTQ==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/mdx': 2.0.3 + estree-util-build-jsx: 2.2.0 + estree-util-is-identifier-name: 2.0.1 + estree-util-to-js: 1.1.0 + estree-walker: 3.0.1 + hast-util-to-estree: 2.1.0 + markdown-extensions: 1.1.1 + periscopic: 3.0.4 + remark-mdx: 2.1.5 + remark-parse: 10.0.1 + remark-rehype: 10.1.0 + unified: 10.1.2 + unist-util-position-from-estree: 1.1.1 + unist-util-stringify-position: 3.0.2 + unist-util-visit: 4.1.1 + vfile: 5.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /@mdx-js/react@2.2.1(react@18.2.0): + resolution: {integrity: sha512-YdXcMcEnqZhzql98RNrqYo9cEhTTesBiCclEtoiQUbJwx87q9453GTapYU6kJ8ZZ2ek1Vp25SiAXEFy5O/eAPw==} + peerDependencies: + react: '>=16' + dependencies: + '@types/mdx': 2.0.3 + '@types/react': 18.2.37 + react: 18.2.0 + dev: false + + /@napi-rs/simple-git-android-arm-eabi@0.1.8: + resolution: {integrity: sha512-JJCejHBB1G6O8nxjQLT4quWCcvLpC3oRdJJ9G3MFYSCoYS8i1bWCWeU+K7Br+xT+D6s1t9q8kNJAwJv9Ygpi0g==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git-android-arm64@0.1.8: + resolution: {integrity: sha512-mraHzwWBw3tdRetNOS5KnFSjvdAbNBnjFLA8I4PwTCPJj3Q4txrigcPp2d59cJ0TC51xpnPXnZjYdNwwSI9g6g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git-darwin-arm64@0.1.8: + resolution: {integrity: sha512-ufy/36eI/j4UskEuvqSH7uXtp3oXeLDmjQCfKJz3u5Vx98KmOMKrqAm2H81AB2WOtCo5mqS6PbBeUXR8BJX8lQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git-darwin-x64@0.1.8: + resolution: {integrity: sha512-Vb21U+v3tPJNl+8JtIHHT8HGe6WZ8o1Tq3f6p+Jx9Cz71zEbcIiB9FCEMY1knS/jwQEOuhhlI9Qk7d4HY+rprA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git-linux-arm-gnueabihf@0.1.8: + resolution: {integrity: sha512-6BPTJ7CzpSm2t54mRLVaUr3S7ORJfVJoCk2rQ8v8oDg0XAMKvmQQxOsAgqKBo9gYNHJnqrOx3AEuEgvB586BuQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git-linux-arm64-gnu@0.1.8: + resolution: {integrity: sha512-qfESqUCAA/XoQpRXHptSQ8gIFnETCQt1zY9VOkplx6tgYk9PCeaX4B1Xuzrh3eZamSCMJFn+1YB9Ut8NwyGgAA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git-linux-arm64-musl@0.1.8: + resolution: {integrity: sha512-G80BQPpaRmQpn8dJGHp4I2/YVhWDUNJwcCrJAtAdbKFDCMyCHJBln2ERL/+IEUlIAT05zK/c1Z5WEprvXEdXow==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git-linux-x64-gnu@0.1.8: + resolution: {integrity: sha512-NI6o1sZYEf6vPtNWJAm9w8BxJt+LlSFW0liSjYe3lc3e4dhMfV240f0ALeqlwdIldRPaDFwZSJX5/QbS7nMzhw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git-linux-x64-musl@0.1.8: + resolution: {integrity: sha512-wljGAEOW41er45VTiU8kXJmO480pQKzsgRCvPlJJSCaEVBbmo6XXbFIXnZy1a2J3Zyy2IOsRB4PVkUZaNuPkZQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git-win32-arm64-msvc@0.1.8: + resolution: {integrity: sha512-QuV4QILyKPfbWHoQKrhXqjiCClx0SxbCTVogkR89BwivekqJMd9UlMxZdoCmwLWutRx4z9KmzQqokvYI5QeepA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git-win32-x64-msvc@0.1.8: + resolution: {integrity: sha512-UzNS4JtjhZhZ5hRLq7BIUq+4JOwt1ThIKv11CsF1ag2l99f0123XvfEpjczKTaa94nHtjXYc2Mv9TjccBqYOew==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/simple-git@0.1.8: + resolution: {integrity: sha512-BvOMdkkofTz6lEE35itJ/laUokPhr/5ToMGlOH25YnhLD2yN1KpRAT4blW9tT8281/1aZjW3xyi73bs//IrDKA==} + engines: {node: '>= 10'} + optionalDependencies: + '@napi-rs/simple-git-android-arm-eabi': 0.1.8 + '@napi-rs/simple-git-android-arm64': 0.1.8 + '@napi-rs/simple-git-darwin-arm64': 0.1.8 + '@napi-rs/simple-git-darwin-x64': 0.1.8 + '@napi-rs/simple-git-linux-arm-gnueabihf': 0.1.8 + '@napi-rs/simple-git-linux-arm64-gnu': 0.1.8 + '@napi-rs/simple-git-linux-arm64-musl': 0.1.8 + '@napi-rs/simple-git-linux-x64-gnu': 0.1.8 + '@napi-rs/simple-git-linux-x64-musl': 0.1.8 + '@napi-rs/simple-git-win32-arm64-msvc': 0.1.8 + '@napi-rs/simple-git-win32-x64-msvc': 0.1.8 + dev: false + + /@next/env@13.0.6: + resolution: {integrity: sha512-yceT6DCHKqPRS1cAm8DHvDvK74DLIkDQdm5iV+GnIts8h0QbdHvkUIkdOvQoOODgpr6018skbmSQp12z5OWIQQ==} + dev: false + + /@next/swc-android-arm-eabi@13.0.6: + resolution: {integrity: sha512-FGFSj3v2Bluw8fD/X+1eXIEB0PhoJE0zfutsAauRhmNpjjZshLDgoXMWm1jTRL/04K/o9gwwO2+A8+sPVCH1uw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@next/swc-android-arm64@13.0.6: + resolution: {integrity: sha512-7MgbtU7kimxuovVsd7jSJWMkIHBDBUsNLmmlkrBRHTvgzx5nDBXogP0hzZm7EImdOPwVMPpUHRQMBP9mbsiJYQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-arm64@13.0.6: + resolution: {integrity: sha512-AUVEpVTxbP/fxdFsjVI9d5a0CFn6NVV7A/RXOb0Y+pXKIIZ1V5rFjPwpYfIfyOo2lrqgehMNQcyMRoTrhq04xg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@13.0.6: + resolution: {integrity: sha512-SasCDJlshglsPnbzhWaIF6VEGkQy2NECcAOxPwaPr0cwbbt4aUlZ7QmskNzgolr5eAjFS/xTr7CEeKJtZpAAtQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-freebsd-x64@13.0.6: + resolution: {integrity: sha512-6Lbxd9gAdXneTkwHyYW/qtX1Tdw7ND9UbiGsGz/SP43ZInNWnW6q0au4hEVPZ9bOWWRKzcVoeTBdoMpQk9Hx9w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm-gnueabihf@13.0.6: + resolution: {integrity: sha512-wNdi5A519e1P+ozEuYOhWPzzE6m1y7mkO6NFwn6watUwO0X9nZs7fT9THmnekvmFQpaZ6U+xf2MQ9poQoCh6jQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@13.0.6: + resolution: {integrity: sha512-e8KTRnleQY1KLk5PwGV5hrmvKksCc74QRpHl5ffWnEEAtL2FE0ave5aIkXqErsPdXkiKuA/owp3LjQrP+/AH7Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@13.0.6: + resolution: {integrity: sha512-/7RF03C3mhjYpHN+pqOolgME3guiHU5T3TsejuyteqyEyzdEyLHod+jcYH6ft7UZ71a6TdOewvmbLOtzHW2O8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@13.0.6: + resolution: {integrity: sha512-kxyEXnYHpOEkFnmrlwB1QlzJtjC6sAJytKcceIyFUHbCaD3W/Qb5tnclcnHKTaFccizZRePXvV25Ok/eUSpKTw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@13.0.6: + resolution: {integrity: sha512-N0c6gubS3WW1oYYgo02xzZnNatfVQP/CiJq2ax+DJ55ePV62IACbRCU99TZNXXg+Kos6vNW4k+/qgvkvpGDeyA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@13.0.6: + resolution: {integrity: sha512-QjeMB2EBqBFPb/ac0CYr7GytbhUkrG4EwFWbcE0vsRp4H8grt25kYpFQckL4Jak3SUrp7vKfDwZ/SwO7QdO8vw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@13.0.6: + resolution: {integrity: sha512-EQzXtdqRTcmhT/tCq81rIwE36Y3fNHPInaCuJzM/kftdXfa0F+64y7FAoMO13npX8EG1+SamXgp/emSusKrCXg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@13.0.6: + resolution: {integrity: sha512-pSkqZ//UP/f2sS9T7IvHLfEWDPTX0vRyXJnAUNisKvO3eF3e1xdhDX7dix/X3Z3lnN4UjSwOzclAI87JFbOwmQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@popperjs/core@2.11.6: + resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==} + dev: false + + /@swc/helpers@0.4.14: + resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} + dependencies: + tslib: 2.4.1 + dev: false + + /@types/acorn@4.0.6: + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + dependencies: + '@types/estree': 1.0.0 + dev: false + + /@types/debug@4.1.7: + resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + dependencies: + '@types/ms': 0.7.31 + dev: false + + /@types/estree-jsx@1.0.0: + resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} + dependencies: + '@types/estree': 1.0.0 + dev: false + + /@types/estree@1.0.0: + resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + dev: false + + /@types/hast@2.3.4: + resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /@types/js-yaml@4.0.5: + resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} + dev: false + + /@types/katex@0.11.1: + resolution: {integrity: sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==} + dev: false + + /@types/mdast@3.0.10: + resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /@types/mdx@2.0.3: + resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==} + dev: false + + /@types/ms@0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: false + + /@types/node@18.11.10: + resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==} + dev: true + + /@types/prop-types@15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + + /@types/react@18.2.37: + resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + + /@types/scheduler@0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + + /@types/unist@2.0.6: + resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} + dev: false + + /acorn-jsx@5.3.2(acorn@8.8.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.1 + dev: false + + /acorn@8.8.1: + resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: false + + /arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + dev: false + + /arg@1.0.0: + resolution: {integrity: sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw==} + dev: false + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: false + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: false + + /astring@1.8.3: + resolution: {integrity: sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==} + hasBin: true + dev: false + + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: false + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: false + + /caniuse-lite@1.0.30001435: + resolution: {integrity: sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==} + dev: false + + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: false + + /chalk@2.3.0: + resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 4.5.0 + dev: false + + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: false + + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: false + + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: false + + /character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + dev: false + + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + + /clipboardy@1.2.2: + resolution: {integrity: sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==} + engines: {node: '>=4'} + dependencies: + arch: 2.2.0 + execa: 0.8.0 + dev: false + + /clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: false + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: false + + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: false + + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: false + + /compute-scroll-into-view@2.0.4: + resolution: {integrity: sha512-y/ZA3BGnxoM/QHHQ2Uy49CLtnWPbt4tTPpEEZiEmmiWBFKjej7nEyH8Ryz54jH0MLXflUYA3Er2zUxPSJu5R+g==} + dev: false + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: false + + /cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + dev: false + + /csstype@3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: false + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: false + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + + /diff@5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + dev: false + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: false + + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: false + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /estree-util-attach-comments@2.1.0: + resolution: {integrity: sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==} + dependencies: + '@types/estree': 1.0.0 + dev: false + + /estree-util-build-jsx@2.2.0: + resolution: {integrity: sha512-apsfRxF9uLrqosApvHVtYZjISPvTJ+lBiIydpC+9wE6cF6ssbhnjyQLqaIjgzGxvC2Hbmec1M7g91PoBayYoQQ==} + dependencies: + '@types/estree-jsx': 1.0.0 + estree-util-is-identifier-name: 2.0.1 + estree-walker: 3.0.1 + dev: false + + /estree-util-is-identifier-name@2.0.1: + resolution: {integrity: sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==} + dev: false + + /estree-util-to-js@1.1.0: + resolution: {integrity: sha512-490lbfCcpLk+ofK6HCgqDfYs4KAfq6QVvDw3+Bm1YoKRgiOjKiKYGAVQE1uwh7zVxBgWhqp4FDtp5SqunpUk1A==} + dependencies: + '@types/estree-jsx': 1.0.0 + astring: 1.8.3 + source-map: 0.7.4 + dev: false + + /estree-util-value-to-estree@1.3.0: + resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==} + engines: {node: '>=12.0.0'} + dependencies: + is-plain-obj: 3.0.0 + dev: false + + /estree-util-visit@1.2.0: + resolution: {integrity: sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/unist': 2.0.6 + dev: false + + /estree-walker@3.0.1: + resolution: {integrity: sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==} + dev: false + + /execa@0.8.0: + resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} + engines: {node: '>=4'} + dependencies: + cross-spawn: 5.1.0 + get-stream: 3.0.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + dev: false + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: false + + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: false + + /flexsearch@0.7.31: + resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==} + dev: false + + /focus-visible@5.2.0: + resolution: {integrity: sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==} + dev: false + + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: false + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: false + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: false + + /get-stream@3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} + dev: false + + /git-up@7.0.0: + resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + dependencies: + is-ssh: 1.4.0 + parse-url: 8.1.0 + dev: false + + /git-url-parse@13.1.0: + resolution: {integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==} + dependencies: + git-up: 7.0.0 + dev: false + + /github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + dev: false + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: false + + /gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + dev: false + + /has-flag@2.0.0: + resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} + engines: {node: '>=0.10.0'} + dev: false + + /hash-obj@4.0.0: + resolution: {integrity: sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==} + engines: {node: '>=12'} + dependencies: + is-obj: 3.0.0 + sort-keys: 5.0.0 + type-fest: 1.4.0 + dev: false + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: false + + /hast-util-from-parse5@7.1.1: + resolution: {integrity: sha512-R6PoNcUs89ZxLJmMWsVbwSWuz95/9OriyQZ3e2ybwqGsRXzhA6gv49rgGmQvLbZuSNDv9fCg7vV7gXUsvtUFaA==} + dependencies: + '@types/hast': 2.3.4 + '@types/unist': 2.0.6 + hastscript: 7.2.0 + property-information: 6.2.0 + vfile: 5.3.6 + vfile-location: 4.0.1 + web-namespaces: 2.0.1 + dev: false + + /hast-util-is-element@2.1.3: + resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==} + dependencies: + '@types/hast': 2.3.4 + '@types/unist': 2.0.6 + dev: false + + /hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + dependencies: + '@types/hast': 2.3.4 + dev: false + + /hast-util-to-estree@2.1.0: + resolution: {integrity: sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==} + dependencies: + '@types/estree': 1.0.0 + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.4 + '@types/unist': 2.0.6 + comma-separated-tokens: 2.0.3 + estree-util-attach-comments: 2.1.0 + estree-util-is-identifier-name: 2.0.1 + hast-util-whitespace: 2.0.0 + mdast-util-mdx-expression: 1.3.1 + mdast-util-mdxjs-esm: 1.3.0 + property-information: 6.2.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.3.0 + unist-util-position: 4.0.3 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /hast-util-to-text@3.1.2: + resolution: {integrity: sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==} + dependencies: + '@types/hast': 2.3.4 + '@types/unist': 2.0.6 + hast-util-is-element: 2.1.3 + unist-util-find-after: 4.0.1 + dev: false + + /hast-util-whitespace@2.0.0: + resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==} + dev: false + + /hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + dependencies: + '@types/hast': 2.3.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.2.0 + space-separated-tokens: 2.0.2 + dev: false + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: false + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: false + + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: false + + /intersection-observer@0.12.2: + resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} + dev: false + + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + dev: false + + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + dev: false + + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: false + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: false + + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + dev: false + + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: false + + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + dev: false + + /is-obj@3.0.0: + resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} + engines: {node: '>=12'} + dev: false + + /is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: false + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: false + + /is-reference@3.0.0: + resolution: {integrity: sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==} + dependencies: + '@types/estree': 1.0.0 + dev: false + + /is-ssh@1.4.0: + resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} + dependencies: + protocols: 2.0.1 + dev: false + + /is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: false + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: false + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: false + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: false + + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: false + + /katex@0.13.24: + resolution: {integrity: sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==} + hasBin: true + dependencies: + commander: 8.3.0 + dev: false + + /katex@0.15.6: + resolution: {integrity: sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==} + hasBin: true + dependencies: + commander: 8.3.0 + dev: false + + /katex@0.16.4: + resolution: {integrity: sha512-WudRKUj8yyBeVDI4aYMNxhx5Vhh2PjpzQw1GRu/LVGqL4m1AxwD1GcUp0IMbdJaf5zsjtj8ghP0DOQRYhroNkw==} + hasBin: true + dependencies: + commander: 8.3.0 + dev: false + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: false + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: false + + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: false + + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: false + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: false + + /markdown-extensions@1.1.1: + resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} + engines: {node: '>=0.10.0'} + dev: false + + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: false + + /match-sorter@6.3.1: + resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==} + dependencies: + '@babel/runtime': 7.20.6 + remove-accents: 0.4.2 + dev: false + + /mdast-util-definitions@5.1.1: + resolution: {integrity: sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + unist-util-visit: 4.1.1 + dev: false + + /mdast-util-find-and-replace@2.2.1: + resolution: {integrity: sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==} + dependencies: + escape-string-regexp: 5.0.0 + unist-util-is: 5.1.1 + unist-util-visit-parents: 5.1.1 + dev: false + + /mdast-util-from-markdown@1.2.0: + resolution: {integrity: sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.1.0 + micromark: 3.1.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-decode-string: 1.0.2 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + unist-util-stringify-position: 3.0.2 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-autolink-literal@1.0.2: + resolution: {integrity: sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==} + dependencies: + '@types/mdast': 3.0.10 + ccount: 2.0.1 + mdast-util-find-and-replace: 2.2.1 + micromark-util-character: 1.1.0 + dev: false + + /mdast-util-gfm-footnote@1.0.1: + resolution: {integrity: sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-to-markdown: 1.3.0 + micromark-util-normalize-identifier: 1.0.0 + dev: false + + /mdast-util-gfm-strikethrough@1.0.2: + resolution: {integrity: sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-to-markdown: 1.3.0 + dev: false + + /mdast-util-gfm-table@1.0.6: + resolution: {integrity: sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==} + dependencies: + '@types/mdast': 3.0.10 + markdown-table: 3.0.3 + mdast-util-from-markdown: 1.2.0 + mdast-util-to-markdown: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-task-list-item@1.0.1: + resolution: {integrity: sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-to-markdown: 1.3.0 + dev: false + + /mdast-util-gfm@2.0.1: + resolution: {integrity: sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==} + dependencies: + mdast-util-from-markdown: 1.2.0 + mdast-util-gfm-autolink-literal: 1.0.2 + mdast-util-gfm-footnote: 1.0.1 + mdast-util-gfm-strikethrough: 1.0.2 + mdast-util-gfm-table: 1.0.6 + mdast-util-gfm-task-list-item: 1.0.1 + mdast-util-to-markdown: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-math@2.0.2: + resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==} + dependencies: + '@types/mdast': 3.0.10 + longest-streak: 3.1.0 + mdast-util-to-markdown: 1.3.0 + dev: false + + /mdast-util-mdx-expression@1.3.1: + resolution: {integrity: sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + mdast-util-from-markdown: 1.2.0 + mdast-util-to-markdown: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-jsx@2.1.0: + resolution: {integrity: sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + ccount: 2.0.1 + mdast-util-to-markdown: 1.3.0 + parse-entities: 4.0.0 + stringify-entities: 4.0.3 + unist-util-remove-position: 4.0.1 + unist-util-stringify-position: 3.0.2 + vfile-message: 3.1.3 + dev: false + + /mdast-util-mdx@2.0.0: + resolution: {integrity: sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==} + dependencies: + mdast-util-mdx-expression: 1.3.1 + mdast-util-mdx-jsx: 2.1.0 + mdast-util-mdxjs-esm: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdxjs-esm@1.3.0: + resolution: {integrity: sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + mdast-util-from-markdown: 1.2.0 + mdast-util-to-markdown: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-to-hast@12.2.4: + resolution: {integrity: sha512-a21xoxSef1l8VhHxS1Dnyioz6grrJkoaCUgGzMD/7dWHvboYX3VW53esRUfB5tgTyz4Yos1n25SPcj35dJqmAg==} + dependencies: + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + mdast-util-definitions: 5.1.1 + micromark-util-sanitize-uri: 1.1.0 + trim-lines: 3.0.1 + unist-builder: 3.0.0 + unist-util-generated: 2.0.0 + unist-util-position: 4.0.3 + unist-util-visit: 4.1.1 + dev: false + + /mdast-util-to-markdown@1.3.0: + resolution: {integrity: sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + longest-streak: 3.1.0 + mdast-util-to-string: 3.1.0 + micromark-util-decode-string: 1.0.2 + unist-util-visit: 4.1.1 + zwitch: 2.0.4 + dev: false + + /mdast-util-to-string@3.1.0: + resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} + dev: false + + /micromark-core-commonmark@1.0.6: + resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.0.0 + micromark-factory-label: 1.0.2 + micromark-factory-space: 1.0.0 + micromark-factory-title: 1.0.2 + micromark-factory-whitespace: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-chunked: 1.0.0 + micromark-util-classify-character: 1.0.0 + micromark-util-html-tag-name: 1.1.0 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-resolve-all: 1.0.0 + micromark-util-subtokenize: 1.0.2 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-sanitize-uri: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-footnote@1.0.4: + resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==} + dependencies: + micromark-core-commonmark: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-sanitize-uri: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-strikethrough@1.0.4: + resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==} + dependencies: + micromark-util-chunked: 1.0.0 + micromark-util-classify-character: 1.0.0 + micromark-util-resolve-all: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-table@1.0.5: + resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-tagfilter@1.0.1: + resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==} + dependencies: + micromark-util-types: 1.0.2 + dev: false + + /micromark-extension-gfm-task-list-item@1.0.3: + resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm@2.0.1: + resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==} + dependencies: + micromark-extension-gfm-autolink-literal: 1.0.3 + micromark-extension-gfm-footnote: 1.0.4 + micromark-extension-gfm-strikethrough: 1.0.4 + micromark-extension-gfm-table: 1.0.5 + micromark-extension-gfm-tagfilter: 1.0.1 + micromark-extension-gfm-task-list-item: 1.0.3 + micromark-util-combine-extensions: 1.0.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-extension-math@2.0.2: + resolution: {integrity: sha512-cFv2B/E4pFPBBFuGgLHkkNiFAIQv08iDgPH2HCuR2z3AUgMLecES5Cq7AVtwOtZeRrbA80QgMUk8VVW0Z+D2FA==} + dependencies: + '@types/katex': 0.11.1 + katex: 0.13.24 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-extension-mdx-expression@1.0.3: + resolution: {integrity: sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==} + dependencies: + micromark-factory-mdx-expression: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-events-to-acorn: 1.2.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-extension-mdx-jsx@1.0.3: + resolution: {integrity: sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==} + dependencies: + '@types/acorn': 4.0.6 + estree-util-is-identifier-name: 2.0.1 + micromark-factory-mdx-expression: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + vfile-message: 3.1.3 + dev: false + + /micromark-extension-mdx-md@1.0.0: + resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==} + dependencies: + micromark-util-types: 1.0.2 + dev: false + + /micromark-extension-mdxjs-esm@1.0.3: + resolution: {integrity: sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==} + dependencies: + micromark-core-commonmark: 1.0.6 + micromark-util-character: 1.1.0 + micromark-util-events-to-acorn: 1.2.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + unist-util-position-from-estree: 1.1.1 + uvu: 0.5.6 + vfile-message: 3.1.3 + dev: false + + /micromark-extension-mdxjs@1.0.0: + resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} + dependencies: + acorn: 8.8.1 + acorn-jsx: 5.3.2(acorn@8.8.1) + micromark-extension-mdx-expression: 1.0.3 + micromark-extension-mdx-jsx: 1.0.3 + micromark-extension-mdx-md: 1.0.0 + micromark-extension-mdxjs-esm: 1.0.3 + micromark-util-combine-extensions: 1.0.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-factory-destination@1.0.0: + resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-factory-label@1.0.2: + resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-factory-mdx-expression@1.0.6: + resolution: {integrity: sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-events-to-acorn: 1.2.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + unist-util-position-from-estree: 1.1.1 + uvu: 0.5.6 + vfile-message: 3.1.3 + dev: false + + /micromark-factory-space@1.0.0: + resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-factory-title@1.0.2: + resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-factory-whitespace@1.0.0: + resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-character@1.1.0: + resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==} + dependencies: + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-chunked@1.0.0: + resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-classify-character@1.0.0: + resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-combine-extensions@1.0.0: + resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==} + dependencies: + micromark-util-chunked: 1.0.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-decode-numeric-character-reference@1.0.0: + resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-decode-string@1.0.2: + resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-encode@1.0.1: + resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} + dev: false + + /micromark-util-events-to-acorn@1.2.0: + resolution: {integrity: sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.0 + estree-util-visit: 1.2.0 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + vfile-location: 4.0.1 + vfile-message: 3.1.3 + dev: false + + /micromark-util-html-tag-name@1.1.0: + resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==} + dev: false + + /micromark-util-normalize-identifier@1.0.0: + resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-resolve-all@1.0.0: + resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==} + dependencies: + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-sanitize-uri@1.1.0: + resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-encode: 1.0.1 + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-subtokenize@1.0.2: + resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==} + dependencies: + micromark-util-chunked: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-util-symbol@1.0.1: + resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==} + dev: false + + /micromark-util-types@1.0.2: + resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} + dev: false + + /micromark@3.1.0: + resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==} + dependencies: + '@types/debug': 4.1.7 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-chunked: 1.0.0 + micromark-util-combine-extensions: 1.0.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-encode: 1.0.1 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-resolve-all: 1.0.0 + micromark-util-sanitize-uri: 1.1.0 + micromark-util-subtokenize: 1.0.2 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: false + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: false + + /nanoid@3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false + + /nanoid@4.0.1: + resolution: {integrity: sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==} + engines: {node: ^14 || ^16 || >=18} + hasBin: true + dev: false + + /next-mdx-remote@4.3.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fbxkY03pM2Wx5bDNTVKpYD5Hx3QVZGH+6xDtVIxlxXz4HTifP1yI2DrkDvxXbTz0SYGIbluRMIW81IOOa8pigA==} + engines: {node: '>=14', npm: '>=7'} + peerDependencies: + react: '>=16.x <=18.x' + react-dom: '>=16.x <=18.x' + dependencies: + '@mdx-js/mdx': 2.2.1 + '@mdx-js/react': 2.2.1(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + vfile: 5.3.6 + vfile-matter: 3.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /next-seo@5.14.1(next@13.0.6)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-NiJeQbxYP3z+EMp52q8k3Q+OfX2+Yv2WehERDj98r2wjXxL+woKpRBdsSVYolTD0Hm8IWs42SzaISE93RoQdOw==} + peerDependencies: + next: ^8.1.1-canary.54 || >=9.0.0 + react: '>=16.0.0' + react-dom: '>=16.0.0' + dependencies: + next: 13.0.6(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /next-themes@0.2.1(next@13.0.6)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} + peerDependencies: + next: '*' + react: '*' + react-dom: '*' + dependencies: + next: 13.0.6(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /next@13.0.6(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-COvigvms2LRt1rrzfBQcMQ2GZd86Mvk1z+LOLY5pniFtL4VrTmhZ9salrbKfSiXbhsD01TrDdD68ec3ABDyscA==} + engines: {node: '>=14.6.0'} + hasBin: true + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^6.0.0 || ^7.0.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.0.6 + '@swc/helpers': 0.4.14 + caniuse-lite: 1.0.30001435 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.0(react@18.2.0) + optionalDependencies: + '@next/swc-android-arm-eabi': 13.0.6 + '@next/swc-android-arm64': 13.0.6 + '@next/swc-darwin-arm64': 13.0.6 + '@next/swc-darwin-x64': 13.0.6 + '@next/swc-freebsd-x64': 13.0.6 + '@next/swc-linux-arm-gnueabihf': 13.0.6 + '@next/swc-linux-arm64-gnu': 13.0.6 + '@next/swc-linux-arm64-musl': 13.0.6 + '@next/swc-linux-x64-gnu': 13.0.6 + '@next/swc-linux-x64-musl': 13.0.6 + '@next/swc-win32-arm64-msvc': 13.0.6 + '@next/swc-win32-ia32-msvc': 13.0.6 + '@next/swc-win32-x64-msvc': 13.0.6 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /nextra-theme-docs@2.2.14(next@13.0.6)(nextra@2.2.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-QQcHOcAXSfrpbSX3FqXgcQ2favKLnBAczqKWbSDVEtgHiUG6s7pVpxclpKm5F1c/fP47v19USRq3BL/SZ4JEIQ==} + peerDependencies: + next: '>=9.5.3' + nextra: 2.2.14 + react: '>=16.13.1' + react-dom: '>=16.13.1' + dependencies: + '@headlessui/react': 1.7.10(react-dom@18.2.0)(react@18.2.0) + '@popperjs/core': 2.11.6 + clsx: 1.2.1 + flexsearch: 0.7.31 + focus-visible: 5.2.0 + git-url-parse: 13.1.0 + intersection-observer: 0.12.2 + match-sorter: 6.3.1 + next: 13.0.6(react-dom@18.2.0)(react@18.2.0) + next-seo: 5.14.1(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) + next-themes: 0.2.1(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) + nextra: 2.2.14(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + scroll-into-view-if-needed: 3.0.4 + zod: 3.20.2 + dev: false + + /nextra@2.2.14(next@13.0.6)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-kToTiTiE4qrQsQ9snFRqCGLLSjKSFgFV/BJm3yp/SRmkmCr1WaWrlmUTAuXlxM7PREbNaZouNSOJ0hGS92rM8A==} + peerDependencies: + next: '>=9.5.3' + react: '>=16.13.1' + react-dom: '>=16.13.1' + dependencies: + '@mdx-js/mdx': 2.2.1 + '@mdx-js/react': 2.2.1(react@18.2.0) + '@napi-rs/simple-git': 0.1.8 + github-slugger: 2.0.0 + graceful-fs: 4.2.10 + gray-matter: 4.0.3 + katex: 0.16.4 + lodash.get: 4.4.2 + next: 13.0.6(react-dom@18.2.0)(react@18.2.0) + next-mdx-remote: 4.3.0(react-dom@18.2.0)(react@18.2.0) + p-limit: 3.1.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + rehype-katex: 6.0.2 + rehype-pretty-code: 0.9.2(shiki@0.12.1) + remark-gfm: 3.0.1 + remark-math: 5.1.1 + remark-reading-time: 2.0.1 + shiki: 0.12.1 + slash: 3.0.0 + title: 3.5.3 + unist-util-remove: 3.1.1 + unist-util-visit: 4.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: false + + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: false + + /npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + dependencies: + path-key: 2.0.1 + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: false + + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: false + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: false + + /parse-entities@4.0.0: + resolution: {integrity: sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==} + dependencies: + '@types/unist': 2.0.6 + character-entities: 2.0.2 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.0.2 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + dev: false + + /parse-numeric-range@1.3.0: + resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + dev: false + + /parse-path@7.0.0: + resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} + dependencies: + protocols: 2.0.1 + dev: false + + /parse-url@8.1.0: + resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + dependencies: + parse-path: 7.0.0 + dev: false + + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: false + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: false + + /path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + dev: false + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: false + + /periscopic@3.0.4: + resolution: {integrity: sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==} + dependencies: + estree-walker: 3.0.1 + is-reference: 3.0.0 + dev: false + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: false + + /postcss@8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + + /property-information@6.2.0: + resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} + dev: false + + /protocols@2.0.1: + resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} + dev: false + + /pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: false + + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /reading-time@1.5.0: + resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} + dev: false + + /rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.8 + dev: false + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + + /rehype-katex@6.0.2: + resolution: {integrity: sha512-C4gDAlS1+l0hJqctyiU64f9CvT00S03qV1T6HiMzbSuLBgWUtcqydWHY9OpKrm0SpkK16FNd62CDKyWLwV2ppg==} + dependencies: + '@types/hast': 2.3.4 + '@types/katex': 0.11.1 + hast-util-to-text: 3.1.2 + katex: 0.15.6 + rehype-parse: 8.0.4 + unified: 10.1.2 + unist-util-remove-position: 4.0.1 + unist-util-visit: 4.1.1 + dev: false + + /rehype-parse@8.0.4: + resolution: {integrity: sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==} + dependencies: + '@types/hast': 2.3.4 + hast-util-from-parse5: 7.1.1 + parse5: 6.0.1 + unified: 10.1.2 + dev: false + + /rehype-pretty-code@0.9.2(shiki@0.12.1): + resolution: {integrity: sha512-l369pvBK6ihBEuy2+VDpHU+zbbY8I+Z4LiyIOunHAt3xyw6selaOFKc/DnX94jI5OJb3+NgjbOxXx2yaAypjZw==} + engines: {node: ^12.16.0 || >=13.2.0} + peerDependencies: + shiki: '*' + dependencies: + hash-obj: 4.0.0 + nanoid: 4.0.1 + parse-numeric-range: 1.3.0 + shiki: 0.12.1 + dev: false + + /remark-gfm@3.0.1: + resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-gfm: 2.0.1 + micromark-extension-gfm: 2.0.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-math@5.1.1: + resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-math: 2.0.2 + micromark-extension-math: 2.0.2 + unified: 10.1.2 + dev: false + + /remark-mdx@2.1.5: + resolution: {integrity: sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==} + dependencies: + mdast-util-mdx: 2.0.0 + micromark-extension-mdxjs: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-parse@10.0.1: + resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-from-markdown: 1.2.0 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-reading-time@2.0.1: + resolution: {integrity: sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw==} + dependencies: + estree-util-is-identifier-name: 2.0.1 + estree-util-value-to-estree: 1.3.0 + reading-time: 1.5.0 + unist-util-visit: 3.1.0 + dev: false + + /remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + dependencies: + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + mdast-util-to-hast: 12.2.4 + unified: 10.1.2 + dev: false + + /remove-accents@0.4.2: + resolution: {integrity: sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U=} + dev: false + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /scroll-into-view-if-needed@3.0.4: + resolution: {integrity: sha512-s+/F50jwTOUt+u5oEIAzum9MN2lUQNvWBe/zfEsVQcbaERjGkKLq1s+2wCHkahMLC8nMLbzMVKivx9JhunXaZg==} + dependencies: + compute-scroll-into-view: 2.0.4 + dev: false + + /section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + dev: false + + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: false + + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: false + + /shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: false + + /shiki@0.12.1: + resolution: {integrity: sha512-aieaV1m349rZINEBkjxh2QbBvFFQOlgqYTNtCal82hHj4dDZ76oMlQIX+C7ryerBTDiga3e5NfH6smjdJ02BbQ==} + dependencies: + jsonc-parser: 3.2.0 + vscode-oniguruma: 1.7.0 + vscode-textmate: 8.0.0 + dev: false + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: false + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: false + + /sort-keys@5.0.0: + resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==} + engines: {node: '>=12'} + dependencies: + is-plain-obj: 4.1.0 + dev: false + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: false + + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: false + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false + + /stringify-entities@4.0.3: + resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + dev: false + + /strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: false + + /strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + dev: false + + /style-to-object@0.3.0: + resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} + dependencies: + inline-style-parser: 0.1.1 + dev: false + + /styled-jsx@5.1.0(react@18.2.0): + resolution: {integrity: sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + client-only: 0.0.1 + react: 18.2.0 + dev: false + + /supports-color@4.5.0: + resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} + engines: {node: '>=4'} + dependencies: + has-flag: 2.0.0 + dev: false + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: false + + /title@3.5.3: + resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==} + hasBin: true + dependencies: + arg: 1.0.0 + chalk: 2.3.0 + clipboardy: 1.2.2 + titleize: 1.0.0 + dev: false + + /titleize@1.0.0: + resolution: {integrity: sha1-fTUHIgYYMLpmF2MeDP0+oIOY2Vo=} + engines: {node: '>=0.10.0'} + dev: false + + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: false + + /trough@2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: false + + /tslib@2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + dev: false + + /type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: false + + /typescript@4.9.3: + resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + dependencies: + '@types/unist': 2.0.6 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 5.3.6 + dev: false + + /unist-builder@3.0.0: + resolution: {integrity: sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-find-after@4.0.1: + resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + dev: false + + /unist-util-generated@2.0.0: + resolution: {integrity: sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==} + dev: false + + /unist-util-is@5.1.1: + resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==} + dev: false + + /unist-util-position-from-estree@1.1.1: + resolution: {integrity: sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-position@4.0.3: + resolution: {integrity: sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-remove-position@4.0.1: + resolution: {integrity: sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==} + dependencies: + '@types/unist': 2.0.6 + unist-util-visit: 4.1.1 + dev: false + + /unist-util-remove@3.1.1: + resolution: {integrity: sha512-kfCqZK5YVY5yEa89tvpl7KnBBHu2c6CzMkqHUrlOqaRgGOMp0sMvwWOVrbAtj03KhovQB7i96Gda72v/EFE0vw==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + unist-util-visit-parents: 5.1.1 + dev: false + + /unist-util-stringify-position@3.0.2: + resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-visit-parents@4.1.1: + resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + dev: false + + /unist-util-visit-parents@5.1.1: + resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + dev: false + + /unist-util-visit@3.1.0: + resolution: {integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + unist-util-visit-parents: 4.1.1 + dev: false + + /unist-util-visit@4.1.1: + resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + unist-util-visit-parents: 5.1.1 + dev: false + + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: false + + /vfile-location@4.0.1: + resolution: {integrity: sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==} + dependencies: + '@types/unist': 2.0.6 + vfile: 5.3.6 + dev: false + + /vfile-matter@3.0.1: + resolution: {integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==} + dependencies: + '@types/js-yaml': 4.0.5 + is-buffer: 2.0.5 + js-yaml: 4.1.0 + dev: false + + /vfile-message@3.1.3: + resolution: {integrity: sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==} + dependencies: + '@types/unist': 2.0.6 + unist-util-stringify-position: 3.0.2 + dev: false + + /vfile@5.3.6: + resolution: {integrity: sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==} + dependencies: + '@types/unist': 2.0.6 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.2 + vfile-message: 3.1.3 + dev: false + + /vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + dev: false + + /vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + dev: false + + /web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + dev: false + + /web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: false + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false + + /yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: false + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: false + + /zod@3.20.2: + resolution: {integrity: sha512-1MzNQdAvO+54H+EaK5YpyEy0T+Ejo/7YLHS93G3RnYWh5gaotGHwGeN/ZO687qEDU2y4CdStQYXVHIgrUl5UVQ==} + dev: false + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: false diff --git a/theme.config.tsx b/theme.config.tsx new file mode 100644 index 00000000..63d5e153 --- /dev/null +++ b/theme.config.tsx @@ -0,0 +1,37 @@ +import React from 'react' +import { DocsThemeConfig } from 'nextra-theme-docs' +import Img from 'next/image' + +import SafeLogo from './assets/svg/safe-logo.svg' + +const config: DocsThemeConfig = { + logo: logo, + project: { + link: 'https://github.com/safe-global' + }, + chat: { + link: 'https://twitter.com/safe', + icon: ( + + + + ) + }, + docsRepositoryBase: 'https://github.com/safe-global/safe-docs/tree/main', + footer: { + text: ( + + MIT {new Date().getFullYear()} ©{' '} + + Safe + + . + + ) + } +} + +export default config diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..1563f3e8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "incremental": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve" + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 1d1d9abc..00000000 --- a/yarn.lock +++ /dev/null @@ -1,173 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -glob@^7.0.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -resolve@^1.1.6: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -web-streams-polyfill@^3.0.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== From 8ceb7ab74bb8761c395fcdca8a03cc17a8efe798 Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:51:31 +0100 Subject: [PATCH 028/108] Migrate getting started section --- README.md | 32 ++---- SUMMARY.md | 84 --------------- pages/getting-started/_meta.json | 4 + pages/getting-started/quick-start.mdx | 139 +++++++++++++++++++++++++ pages/getting-started/what-is-safe.mdx | 31 ++++++ 5 files changed, 181 insertions(+), 109 deletions(-) delete mode 100644 SUMMARY.md create mode 100644 pages/getting-started/_meta.json create mode 100644 pages/getting-started/quick-start.mdx create mode 100644 pages/getting-started/what-is-safe.mdx diff --git a/README.md b/README.md index 27b5726d..f6aa2776 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,13 @@ ---- -description: Everything you need to know to start building on Safe. ---- +# Safe Docs -# Safe +This is [Safe](safe.global) documentation website, built with [Nextra](https://nextra.site). -[Safe](https://safe.global) brings digital ownership of accounts to everyone by building universal and open contract standards for the custody of digital assets, data, and identity. +## Quick Start -Safe is at the forefront of modular smart account infrastructure, paving the way for developers to create various applications and wallets. +First, run `pnpm i` to install the dependencies. -Safe{Core} consists of three components: +Then, run `pnpm dev` to start the development server and visit localhost:3000. -
+## License -## Safe{Core} Protocol - -The [Safe{Core} Protocol](safe-core-protocol/README.md) is an open, modular framework to make smart accounts secure, portable, and composable. - -This section in the documentation has information and relevant links about the Safe{Core} Protocol and the different elements involved. - -## Safe{Core} AA SDK - -The [Safe{Core} Account Abstraction SDK](safe-core-sdk/README.md) is a set of developer kits that help integrate Safe with different external service providers. The SDK offers developers the ability to abstract the complexity that comes with operating a smart contract account. - -This section in the documentation has relevant information and tutorials on the SDK kits and how to integrate them. - -## Safe{Core} API - -The [Safe{Core} API](safe-core-api/available-services.md) refers to all the Safe infrastructure needed to power interfaces with all Safe account related information. This includes the Safe Transaction Service, Safe Events Service, etc. - -This section in the documentation has information related to the services architecture. +This project is licensed under the MIT License. diff --git a/SUMMARY.md b/SUMMARY.md deleted file mode 100644 index 36a13b87..00000000 --- a/SUMMARY.md +++ /dev/null @@ -1,84 +0,0 @@ -# Table of contents - -## Getting started - -* [What is Safe?](README.md) - -## Safe Smart Account - -* [Overview](safe-smart-account/README.md) - -* [Safe Modules](safe-smart-account/modules.md) - -* [Safe Guards](safe-smart-account/guards.md) - -* [Audits](safe-smart-account/security-audits.md) - -* [Supported Networks](safe-smart-account/supported-networks.md) - * [v.1.4.1](safe-smart-account/supported-networks/v1.4.1.md) - * [v.1.3.0](safe-smart-account/supported-networks/v1.3.0.md) - * [v.1.2.0](safe-smart-account/supported-networks/v1.2.0.md) - * [v.1.1.1](safe-smart-account/supported-networks/v1.1.1.md) - * [v.1.0.0](safe-smart-account/supported-networks/v1.0.0.md) - -## Safe{Core} AA SDK - -* [Overview](safe-core-sdk/README.md) - -* [Auth Kit](safe-core-sdk/auth-kit/README.md) - * [Guides](safe-core-sdk/auth-kit/guides/README.md) - * [Web3Auth](safe-core-sdk/auth-kit/guides/web3auth.md) - * [Reference](safe-core-sdk/auth-kit/reference/README.md) - * [AuthKitBasePack](safe-core-sdk/auth-kit/reference/AuthKitBasePack.md) - * [Web3AuthModalPack](safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md) - -* [Protocol Kit](safe-core-sdk/protocol-kit/README.md) - * [Reference](safe-core-sdk/protocol-kit/reference/README.md) - * [Migrating to v2](safe-core-sdk/protocol-kit/reference/migrating/v2.md) - -* [Onramp Kit](safe-core-sdk/onramp-kit/README.md) - * [Guides](safe-core-sdk/onramp-kit/guides/README.md) - * [Stripe](safe-core-sdk/onramp-kit/guides/stripe.md) - * [Monerium](safe-core-sdk/onramp-kit/guides/monerium.md) - * [Reference](safe-core-sdk/onramp-kit/reference/README.md) - * [OnRampKitBasePack](safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md) - * [StripePack](safe-core-sdk/onramp-kit/reference/StripePack.md) - * [MoneriumPack](safe-core-sdk/onramp-kit/reference/MoneriumPack.md) - -* [Relay Kit](safe-core-sdk/relay-kit/README.md) - * [Guides](safe-core-sdk/relay-kit/guides/README.md) - * [Gelato Relay](safe-core-sdk/relay-kit/guides/gelato.md) - * [Reference](safe-core-sdk/relay-kit/reference/README.md) - * [Migrating to v2](safe-core-sdk/relay-kit/reference/migrating/v2.md) - -* [API Kit](safe-core-sdk/api-kit/README.md) - * [Reference](safe-core-sdk/api-kit/reference/README.md) - * [Migrating to v2](safe-core-sdk/api-kit/reference/migrating/v2.md) - - -## Safe{Core} Protocol - -* [Overview](safe-core-protocol/README.md) - -## Safe{Core} API - -* [Available Services](safe-core-api/available-services.md) - -* [Service Architecture](safe-core-api/service-architecture.md) - * [Safe Transaction Service](safe-core-api/safe-transaction-service.md) - -* [RPC Requirements](safe-core-api/rpc-requirements.md) - -## Safe Apps SDK - -* [Overview](safe-apps/README.md) - -* [Getting started](safe-apps/get-started.md) - -* [Release](safe-apps/release.md) - -## Miscellaneous - -* [Bug Bounty](miscellaneous/bug-bounty-program.md) -* [Past paid bounties](miscellaneous/past-paid-bounties.md) -* [Contact us](miscellaneous/contact-us.md) diff --git a/pages/getting-started/_meta.json b/pages/getting-started/_meta.json new file mode 100644 index 00000000..44bf43b7 --- /dev/null +++ b/pages/getting-started/_meta.json @@ -0,0 +1,4 @@ +{ + "what-is-safe": "What is Safe?", + "quick-start": "Quick Start" +} \ No newline at end of file diff --git a/pages/getting-started/quick-start.mdx b/pages/getting-started/quick-start.mdx new file mode 100644 index 00000000..2ff1d17f --- /dev/null +++ b/pages/getting-started/quick-start.mdx @@ -0,0 +1,139 @@ +# Build a decentralized application with Safe\{Core\} SDK from scratch. + +The goal of this tutorial is to build a decentralized application (dApp) from the ground up using the Safe\{Core\} SDK. The dApp will be a simple wallet that allows users to send and receive Ether and ERC20 tokens, and do so without having to pay any gas fees. + +## Create-react-app + +Start by creating a new React app using the create-react-app CLI tool: + +```bash +npx create-react-app safe-react-app +cd safe-react-app +``` + +This will create a new directory called safe-react-app, initialize a new git repository, and install all of the dependencies needed to run the app. + +You will also need to add polyfills for this tutorial. Polyfills are libraries that provide support for features that are not supported by the browser. + +```bash +npm install --save-dev react-app-rewired stream buffer process +``` + +// Add config-overrides.js to project root and replace react-scripts by react-app-rewired in package.json. Why? See: https://web3auth.io/docs/troubleshooting/webpack-issues#react-create-react-app + +## Install Safe\{Core\} SDK + +Next, install the Safe\{Core\} SDK: + +```bash +npm i @safe-global/safe-core-sdk-types @safe-global/protocol-kit @safe-global/api-kit @safe-global/auth-kit @safe-global/onramp-kit @safe-global/relay-kit @web3auth/base @web3auth/openlogin-adapter @safe-global/account-abstraction-kit-poc +``` + +## Import Safe's Account Abstraction React Hooks + +The Safe\{Core\} SDK provides a number of React hooks that allow you to interact with the Safe\{Core\} smart contracts. These hooks are used to connect to the blockchain, create a Safe instance, and execute transactions. + +To import these hooks, simply copy the file [accountAbstractionContext.jsx](https://github.com/louis-md/safe-sdk-starter-kit) in your project, in the `src`folder. + +## Connect your App to the blockchain + +The first thing you need to do is connect to the blockchain. This is done by wrapping the default export of your App component with the AccountAbstractionProvider component from the Safe\{Core\} SDK. This component will connect to the blockchain and provide a number of methods for interacting with the Safe\{Core\} smart contracts. + +```javascript +import logo from './logo.svg' +import './App.css' +import { + AccountAbstractionProvider, + useAccountAbstraction +} from './accountAbstractionContext' + +function App () { + const { + loginWeb3Auth, + isAuthenticated, + ownerAddress, + relayTransaction, + logoutWeb3Auth, + safes, + deploySafe, + } = useAccountAbstraction() + + return ( +
+
+ logo +

Click the button to connect wallet

+ {isAuthenticated ? ( + <> +

Wallet Connected: {ownerAddress}

+ + {safes.length > 0 ? ( + <> +

Safe found: {safes[0]}

+ + + ) : ( + <> + + + )} + + ) : ( + + )} +
+
+ ) +} + +const AppWithSafeSDK = () => ( + + + +) + +export default AppWithSafeSDK +``` + +## Create a Web3Auth account and project Id + +Please follow the instructions in the [Web3Auth documentation](https://web3auth.io) to create a Web3Auth account. Then, create a project to get a client ID and client secret. You can then add these values in a .env file, under the names `REACT_APP_WEB3AUTH_CLIENT_ID` and `REACT_APP_WEB3AUTH_CLIENT_SECRET`. + + +The EthersAdapter is a wrapper around the Ethers.js library that provides a consistent interface for interacting with the Safe\{Core\} smart contracts. It also handles signing transactions and sending them to the blockchain. + +## Deploy a Safe + +The Safe\{Core\} SDK is a library that allows you to interact with the Safe\{Core\} smart contracts (the protocol). The first thing you need to do is create a Safe instance. For a purely javascript approach, please refer to our guide [Integrating Safe\{Core\} SDK](/tutorials/integrating-the-safe-core-sdk). + +For this tutorial, we will use the Safe\{Core\} SDK React hooks to deploy a Safe. Simply run the app: + +```bash +npm start +``` + +Visit `localhost:3000` in a web browser. You should see a button to connect your wallet. Please click on it. + +### Connect wallet + +You can use either an email address or connect with a social media account to login. You can also use your own wallet, like Metamask or Brave wallet. Once you have logged in, you should see a button to deploy a Safe. + +### Get test Ether + +You will need some test Ether to deploy the Safe\{Core\} smart contracts. You can get some test Ether from the [Rinkeby faucet](https://faucet.rinkeby.io/). Or send us some kudos on [Twitter](https://twitter.com/safe_global) or [Github](https://github.com/safe-global) and to get some test Ether directly from us! + +## Test your app + +You can now use your app and explore its code! An easy way to test your implementation is to try to relay a transaction without paying for its gas. + +### Submit gasless transactions + +Once you have a Safe deployed, you can use it to execute gasless transactions. The Safe\{Core\} SDK provides a number of methods for executing transactions purely in javascript. You can explore them in the next pages of [Safe\{Core\} SDK documentation](https://safe-global.gitbook.io/safe-core-sdk/)! + +For now, we'll use this test ether to deploy a Safe right from the app. You should see a button to deploy a Safe. Click on it to trigger a new transaction, and confirm it in your wallet. + +## Next steps + +You can now use the Safe\{Core\} SDK to build your own decentralized application. You can find more information about the Safe\{Core\} SDK in our [community resources](https://ethereum.stackexchange.com/questions/tagged/safe-core-sdk). diff --git a/pages/getting-started/what-is-safe.mdx b/pages/getting-started/what-is-safe.mdx new file mode 100644 index 00000000..5fbaa164 --- /dev/null +++ b/pages/getting-started/what-is-safe.mdx @@ -0,0 +1,31 @@ +--- +description: Everything you need to know to start building on Safe. +--- + +# Safe + +[Safe](https://safe.global) brings digital ownership of accounts to everyone by building universal and open contract standards for the custody of digital assets, data, and identity. + +Safe is at the forefront of modular smart account infrastructure, paving the way for developers to create various applications and wallets. + +Safe\{Core\} consists of three components: + +
+ +## Safe\{Core\} Protocol + +The [Safe\{Core\} Protocol](../safe-core-protocol) is an open, modular framework to make smart accounts secure, portable, and composable. + +This section in the documentation has information and relevant links about the Safe\{Core\} Protocol and the different elements involved. + +## Safe\{Core\} AA SDK + +The [Safe\{Core\} Account Abstraction SDK](../safe-core-sdk) is a set of developer kits that help integrate Safe with different external service providers. The SDK offers developers the ability to abstract the complexity that comes with operating a smart contract account. + +This section in the documentation has relevant information and tutorials on the SDK kits and how to integrate them. + +## Safe\{Core\} API + +The [Safe\{Core\} API](../safe-core-api/available-services.md) refers to all the Safe infrastructure needed to power interfaces with all Safe account related information. This includes the Safe Transaction Service, Safe Events Service, etc. + +This section in the documentation has information related to the services architecture. From bf5814187b4ad4c54279dc47d2e7d099dc3fdced Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:52:02 +0100 Subject: [PATCH 029/108] Migrate assets --- .../assets => assets}/add-custom-app.png | Bin {.gitbook/assets => assets}/core-brands.png | Bin .../assets => assets}/diagram-safe-apps.png | Bin .../diagram-safe-core-protocol.png | Bin .../diagram-safe-core-sdk.png | Bin .../diagram-safe-ecosystem.png | Bin .../assets => assets}/diagram-safe-guards.png | Bin .../diagram-safe-modules.png | Bin .../assets => assets}/diagram-safe-tools.png | Bin .../diagram-services-requests.png | Bin .../assets => assets}/diagram-services.png | Bin .../diagram-third-party-custody.png | Bin .../eoas-vs-smart-accounts.png | Bin {.gitbook/assets => assets}/safe-iceberg.png | Bin {.gitbook/assets => assets}/side-bar-menu.png | Bin assets/svg/safe-logo.svg | 18 ++++++++++++++++++ .../table-compare-storage-solutions.png | Bin .../transaction_service_architecture.png | Bin 18 files changed, 18 insertions(+) rename {.gitbook/assets => assets}/add-custom-app.png (100%) rename {.gitbook/assets => assets}/core-brands.png (100%) rename {.gitbook/assets => assets}/diagram-safe-apps.png (100%) rename {.gitbook/assets => assets}/diagram-safe-core-protocol.png (100%) rename {.gitbook/assets => assets}/diagram-safe-core-sdk.png (100%) rename {.gitbook/assets => assets}/diagram-safe-ecosystem.png (100%) rename {.gitbook/assets => assets}/diagram-safe-guards.png (100%) rename {.gitbook/assets => assets}/diagram-safe-modules.png (100%) rename {.gitbook/assets => assets}/diagram-safe-tools.png (100%) rename {.gitbook/assets => assets}/diagram-services-requests.png (100%) rename {.gitbook/assets => assets}/diagram-services.png (100%) rename {.gitbook/assets => assets}/diagram-third-party-custody.png (100%) rename {.gitbook/assets => assets}/eoas-vs-smart-accounts.png (100%) rename {.gitbook/assets => assets}/safe-iceberg.png (100%) rename {.gitbook/assets => assets}/side-bar-menu.png (100%) create mode 100644 assets/svg/safe-logo.svg rename {.gitbook/assets => assets}/table-compare-storage-solutions.png (100%) rename {.gitbook/assets => assets}/transaction_service_architecture.png (100%) diff --git a/.gitbook/assets/add-custom-app.png b/assets/add-custom-app.png similarity index 100% rename from .gitbook/assets/add-custom-app.png rename to assets/add-custom-app.png diff --git a/.gitbook/assets/core-brands.png b/assets/core-brands.png similarity index 100% rename from .gitbook/assets/core-brands.png rename to assets/core-brands.png diff --git a/.gitbook/assets/diagram-safe-apps.png b/assets/diagram-safe-apps.png similarity index 100% rename from .gitbook/assets/diagram-safe-apps.png rename to assets/diagram-safe-apps.png diff --git a/.gitbook/assets/diagram-safe-core-protocol.png b/assets/diagram-safe-core-protocol.png similarity index 100% rename from .gitbook/assets/diagram-safe-core-protocol.png rename to assets/diagram-safe-core-protocol.png diff --git a/.gitbook/assets/diagram-safe-core-sdk.png b/assets/diagram-safe-core-sdk.png similarity index 100% rename from .gitbook/assets/diagram-safe-core-sdk.png rename to assets/diagram-safe-core-sdk.png diff --git a/.gitbook/assets/diagram-safe-ecosystem.png b/assets/diagram-safe-ecosystem.png similarity index 100% rename from .gitbook/assets/diagram-safe-ecosystem.png rename to assets/diagram-safe-ecosystem.png diff --git a/.gitbook/assets/diagram-safe-guards.png b/assets/diagram-safe-guards.png similarity index 100% rename from .gitbook/assets/diagram-safe-guards.png rename to assets/diagram-safe-guards.png diff --git a/.gitbook/assets/diagram-safe-modules.png b/assets/diagram-safe-modules.png similarity index 100% rename from .gitbook/assets/diagram-safe-modules.png rename to assets/diagram-safe-modules.png diff --git a/.gitbook/assets/diagram-safe-tools.png b/assets/diagram-safe-tools.png similarity index 100% rename from .gitbook/assets/diagram-safe-tools.png rename to assets/diagram-safe-tools.png diff --git a/.gitbook/assets/diagram-services-requests.png b/assets/diagram-services-requests.png similarity index 100% rename from .gitbook/assets/diagram-services-requests.png rename to assets/diagram-services-requests.png diff --git a/.gitbook/assets/diagram-services.png b/assets/diagram-services.png similarity index 100% rename from .gitbook/assets/diagram-services.png rename to assets/diagram-services.png diff --git a/.gitbook/assets/diagram-third-party-custody.png b/assets/diagram-third-party-custody.png similarity index 100% rename from .gitbook/assets/diagram-third-party-custody.png rename to assets/diagram-third-party-custody.png diff --git a/.gitbook/assets/eoas-vs-smart-accounts.png b/assets/eoas-vs-smart-accounts.png similarity index 100% rename from .gitbook/assets/eoas-vs-smart-accounts.png rename to assets/eoas-vs-smart-accounts.png diff --git a/.gitbook/assets/safe-iceberg.png b/assets/safe-iceberg.png similarity index 100% rename from .gitbook/assets/safe-iceberg.png rename to assets/safe-iceberg.png diff --git a/.gitbook/assets/side-bar-menu.png b/assets/side-bar-menu.png similarity index 100% rename from .gitbook/assets/side-bar-menu.png rename to assets/side-bar-menu.png diff --git a/assets/svg/safe-logo.svg b/assets/svg/safe-logo.svg new file mode 100644 index 00000000..f60bac59 --- /dev/null +++ b/assets/svg/safe-logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/.gitbook/assets/table-compare-storage-solutions.png b/assets/table-compare-storage-solutions.png similarity index 100% rename from .gitbook/assets/table-compare-storage-solutions.png rename to assets/table-compare-storage-solutions.png diff --git a/.gitbook/assets/transaction_service_architecture.png b/assets/transaction_service_architecture.png similarity index 100% rename from .gitbook/assets/transaction_service_architecture.png rename to assets/transaction_service_architecture.png From bdd4522545b7297d28b38fe5bac8a64ce0eb5fc7 Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:52:37 +0100 Subject: [PATCH 030/108] Migrate misc section --- {miscellaneous => pages/miscellaneous}/bug-bounty-program.md | 0 {miscellaneous => pages/miscellaneous}/contact-us.md | 0 {miscellaneous => pages/miscellaneous}/past-paid-bounties.md | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {miscellaneous => pages/miscellaneous}/bug-bounty-program.md (100%) rename {miscellaneous => pages/miscellaneous}/contact-us.md (100%) rename {miscellaneous => pages/miscellaneous}/past-paid-bounties.md (100%) diff --git a/miscellaneous/bug-bounty-program.md b/pages/miscellaneous/bug-bounty-program.md similarity index 100% rename from miscellaneous/bug-bounty-program.md rename to pages/miscellaneous/bug-bounty-program.md diff --git a/miscellaneous/contact-us.md b/pages/miscellaneous/contact-us.md similarity index 100% rename from miscellaneous/contact-us.md rename to pages/miscellaneous/contact-us.md diff --git a/miscellaneous/past-paid-bounties.md b/pages/miscellaneous/past-paid-bounties.md similarity index 100% rename from miscellaneous/past-paid-bounties.md rename to pages/miscellaneous/past-paid-bounties.md From 45297c53554b5589a7e981b297c0ff5241d1122e Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:53:08 +0100 Subject: [PATCH 031/108] Migrate safe-apps section --- safe-apps/README.md => pages/safe-apps.md | 2 +- {safe-apps => pages/safe-apps}/get-started.md | 0 {safe-apps => pages/safe-apps}/release.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) rename safe-apps/README.md => pages/safe-apps.md (98%) rename {safe-apps => pages/safe-apps}/get-started.md (100%) rename {safe-apps => pages/safe-apps}/release.md (95%) diff --git a/safe-apps/README.md b/pages/safe-apps.md similarity index 98% rename from safe-apps/README.md rename to pages/safe-apps.md index 9553c8fb..ff885588 100644 --- a/safe-apps/README.md +++ b/pages/safe-apps.md @@ -6,7 +6,7 @@ The Safe Apps SDK helps developers to build their dapps into the Safe{Wallet}. I Here are several packages to make it easier to integrate third-party applications (Safe Apps) with [Safe](https://app.safe.global). Check the following diagram to see which package is suitable for you: -
+
| Package | Version | Description | | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/safe-apps/get-started.md b/pages/safe-apps/get-started.md similarity index 100% rename from safe-apps/get-started.md rename to pages/safe-apps/get-started.md diff --git a/safe-apps/release.md b/pages/safe-apps/release.md similarity index 95% rename from safe-apps/release.md rename to pages/safe-apps/release.md index 605cd764..14dee89a 100644 --- a/safe-apps/release.md +++ b/pages/safe-apps/release.md @@ -66,8 +66,8 @@ While developing your Safe App, you can use [our production interface](https://a Once your app is live, even if you run it locally, you can import it to the Safe application as a custom app. To do so, you should select the "Apps" tab: -
+
Use the `Add custom app` button and add your app using a link: -
+
From 27004148b72d216630320c73b3f2c00b065ef826 Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:53:39 +0100 Subject: [PATCH 032/108] Migrate safe-core-api section --- {safe-core-api => pages/safe-core-api}/available-services.md | 0 {safe-core-api => pages/safe-core-api}/rpc-requirements.md | 0 .../safe-core-api}/safe-transaction-service.md | 2 +- .../safe-core-api}/service-architecture.md | 4 ++-- 4 files changed, 3 insertions(+), 3 deletions(-) rename {safe-core-api => pages/safe-core-api}/available-services.md (100%) rename {safe-core-api => pages/safe-core-api}/rpc-requirements.md (100%) rename {safe-core-api => pages/safe-core-api}/safe-transaction-service.md (99%) rename {safe-core-api => pages/safe-core-api}/service-architecture.md (94%) diff --git a/safe-core-api/available-services.md b/pages/safe-core-api/available-services.md similarity index 100% rename from safe-core-api/available-services.md rename to pages/safe-core-api/available-services.md diff --git a/safe-core-api/rpc-requirements.md b/pages/safe-core-api/rpc-requirements.md similarity index 100% rename from safe-core-api/rpc-requirements.md rename to pages/safe-core-api/rpc-requirements.md diff --git a/safe-core-api/safe-transaction-service.md b/pages/safe-core-api/safe-transaction-service.md similarity index 99% rename from safe-core-api/safe-transaction-service.md rename to pages/safe-core-api/safe-transaction-service.md index f3c1f330..97d8108c 100644 --- a/safe-core-api/safe-transaction-service.md +++ b/pages/safe-core-api/safe-transaction-service.md @@ -20,7 +20,7 @@ Safe Transaction Service is a [Django](https://www.djangoproject.com/) app writt - [Redis](https://redis.com/): An open source, in-memory data structure store used for caching by the Safe Transaction Service. - [safe-eth-py](https://github.com/safe-global/safe-eth-py): A library to interact with Safe and blockchains. -
+
## Blockchain indexing diff --git a/safe-core-api/service-architecture.md b/pages/safe-core-api/service-architecture.md similarity index 94% rename from safe-core-api/service-architecture.md rename to pages/safe-core-api/service-architecture.md index 908d885f..7933f4ff 100644 --- a/safe-core-api/service-architecture.md +++ b/pages/safe-core-api/service-architecture.md @@ -13,7 +13,7 @@ The Safe infrastructure consists of four services: Safe's production setup is a mixture of several instances of the Safe Transaction Service orchestrated by the Config Service, later consumed by the Client Gateway. -![Overview of the backend services and their components.](../.gitbook/assets/diagram-services.png) +![Overview of the backend services and their components.](../../assets/diagram-services.png) ## Safe Transaction Service @@ -27,7 +27,7 @@ The Config Service keeps track of all the supported networks and all the availab The Client Gateway leverages the config service to find the transaction service instance required for a specific request. The client gateway forwards the request to the specified Transaction Service instance for the supported networks (determined by the Config Service). The Client Gateway transforms, aggregates, and caches information from the Config and Transaction Services, optimizing data for Safe's web and mobile clients. -![Service interaction diagram.](../.gitbook/assets/diagram-services-requests.png) +![Service interaction diagram.](../../assets/diagram-services-requests.png) Even though Safe Config and Transaction Service instances are reachable by clients that are not the Client Gateway, this may change in the future. The Client Gateway is the outermost component of the Safe infrastructure and should be the single point of communication with any frontend client. From 8a91a22ac91370d0a90660cb604099c7bfdee370 Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:54:08 +0100 Subject: [PATCH 033/108] Migrate safe-core-sdk section --- pages/safe-core-sdk/_meta.json | 8 + .../safe-core-sdk/api-kit.md | 0 .../safe-core-sdk/api-kit/reference.md | 2 +- .../api-kit/reference/migrating-to-v2.md | 0 .../safe-core-sdk/auth-kit.md | 0 pages/safe-core-sdk/auth-kit/_meta.json | 4 + .../auth-kit/guides/web3auth.md | 0 .../safe-core-sdk/auth-kit/reference.md | 2 +- .../auth-kit/reference/AuthKitBasePack.md | 0 .../auth-kit/reference/Web3AuthModalPack.md | 0 .../integrating-the-safe-core-sdk.mdx | 342 ++++++++++++++++++ .../safe-core-sdk/onramp-kit.md | 0 pages/safe-core-sdk/onramp-kit/_meta.json | 4 + .../onramp-kit/guides/monerium.md | 0 .../onramp-kit/guides/stripe.md | 0 .../safe-core-sdk/onramp-kit/reference.md | 2 +- .../onramp-kit/reference/MoneriumPack.md | 0 .../onramp-kit/reference/OnRampKitBasePack.md | 0 .../onramp-kit/reference/StripePack.md | 0 .../safe-core-sdk/overview.md | 2 +- .../safe-core-sdk/protocol-kit.md | 0 .../safe-core-sdk/protocol-kit/reference.md | 2 +- .../protocol-kit/reference/migrating-to-v2.md | 2 +- .../safe-core-sdk/relay-kit.md | 0 pages/safe-core-sdk/relay-kit/_meta.json | 4 + .../safe-core-sdk}/relay-kit/guides/gelato.md | 0 .../relay-kit/reference/migrate-to-v2.md | 2 +- safe-core-sdk/TEMPLATE.md | 56 --- safe-core-sdk/auth-kit/guides/README.md | 1 - safe-core-sdk/onramp-kit/guides/README.md | 1 - safe-core-sdk/relay-kit/guides/README.md | 0 safe-core-sdk/relay-kit/reference/README.md | 1 - 32 files changed, 369 insertions(+), 66 deletions(-) create mode 100644 pages/safe-core-sdk/_meta.json rename safe-core-sdk/api-kit/README.md => pages/safe-core-sdk/api-kit.md (100%) rename safe-core-sdk/api-kit/reference/README.md => pages/safe-core-sdk/api-kit/reference.md (99%) rename safe-core-sdk/api-kit/reference/migrating/v2.md => pages/safe-core-sdk/api-kit/reference/migrating-to-v2.md (100%) rename safe-core-sdk/auth-kit/README.md => pages/safe-core-sdk/auth-kit.md (100%) create mode 100644 pages/safe-core-sdk/auth-kit/_meta.json rename {safe-core-sdk => pages/safe-core-sdk}/auth-kit/guides/web3auth.md (100%) rename safe-core-sdk/auth-kit/reference/README.md => pages/safe-core-sdk/auth-kit/reference.md (99%) rename {safe-core-sdk => pages/safe-core-sdk}/auth-kit/reference/AuthKitBasePack.md (100%) rename {safe-core-sdk => pages/safe-core-sdk}/auth-kit/reference/Web3AuthModalPack.md (100%) create mode 100644 pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx rename safe-core-sdk/onramp-kit/README.md => pages/safe-core-sdk/onramp-kit.md (100%) create mode 100644 pages/safe-core-sdk/onramp-kit/_meta.json rename {safe-core-sdk => pages/safe-core-sdk}/onramp-kit/guides/monerium.md (100%) rename {safe-core-sdk => pages/safe-core-sdk}/onramp-kit/guides/stripe.md (100%) rename safe-core-sdk/onramp-kit/reference/README.md => pages/safe-core-sdk/onramp-kit/reference.md (99%) rename {safe-core-sdk => pages/safe-core-sdk}/onramp-kit/reference/MoneriumPack.md (100%) rename {safe-core-sdk => pages/safe-core-sdk}/onramp-kit/reference/OnRampKitBasePack.md (100%) rename {safe-core-sdk => pages/safe-core-sdk}/onramp-kit/reference/StripePack.md (100%) rename safe-core-sdk/README.md => pages/safe-core-sdk/overview.md (93%) rename safe-core-sdk/protocol-kit/README.md => pages/safe-core-sdk/protocol-kit.md (100%) rename safe-core-sdk/protocol-kit/reference/README.md => pages/safe-core-sdk/protocol-kit/reference.md (99%) rename safe-core-sdk/protocol-kit/reference/migrating/v2.md => pages/safe-core-sdk/protocol-kit/reference/migrating-to-v2.md (97%) rename safe-core-sdk/relay-kit/README.md => pages/safe-core-sdk/relay-kit.md (100%) create mode 100644 pages/safe-core-sdk/relay-kit/_meta.json rename {safe-core-sdk => pages/safe-core-sdk}/relay-kit/guides/gelato.md (100%) rename safe-core-sdk/relay-kit/reference/migrating/v2.md => pages/safe-core-sdk/relay-kit/reference/migrate-to-v2.md (95%) delete mode 100644 safe-core-sdk/TEMPLATE.md delete mode 100644 safe-core-sdk/auth-kit/guides/README.md delete mode 100644 safe-core-sdk/onramp-kit/guides/README.md delete mode 100644 safe-core-sdk/relay-kit/guides/README.md delete mode 100644 safe-core-sdk/relay-kit/reference/README.md diff --git a/pages/safe-core-sdk/_meta.json b/pages/safe-core-sdk/_meta.json new file mode 100644 index 00000000..a5f502d7 --- /dev/null +++ b/pages/safe-core-sdk/_meta.json @@ -0,0 +1,8 @@ +{ + "overview": "Overview", + "auth-kit": "Auth Kit", + "protocol-kit": "Protocol Kit", + "onramp-kit": "Onramp Kit", + "relay-kit": "Relay Kit", + "api-kit": "API Kit" +} \ No newline at end of file diff --git a/safe-core-sdk/api-kit/README.md b/pages/safe-core-sdk/api-kit.md similarity index 100% rename from safe-core-sdk/api-kit/README.md rename to pages/safe-core-sdk/api-kit.md diff --git a/safe-core-sdk/api-kit/reference/README.md b/pages/safe-core-sdk/api-kit/reference.md similarity index 99% rename from safe-core-sdk/api-kit/reference/README.md rename to pages/safe-core-sdk/api-kit/reference.md index 41b3cefe..94ca8eb1 100644 --- a/safe-core-sdk/api-kit/reference/README.md +++ b/pages/safe-core-sdk/api-kit/reference.md @@ -1,4 +1,4 @@ -# API Kit +# Reference The [API Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/api-kit) facilitates the interaction with the [Safe Transaction Service API](https://github.com/safe-global/safe-transaction-service). diff --git a/safe-core-sdk/api-kit/reference/migrating/v2.md b/pages/safe-core-sdk/api-kit/reference/migrating-to-v2.md similarity index 100% rename from safe-core-sdk/api-kit/reference/migrating/v2.md rename to pages/safe-core-sdk/api-kit/reference/migrating-to-v2.md diff --git a/safe-core-sdk/auth-kit/README.md b/pages/safe-core-sdk/auth-kit.md similarity index 100% rename from safe-core-sdk/auth-kit/README.md rename to pages/safe-core-sdk/auth-kit.md diff --git a/pages/safe-core-sdk/auth-kit/_meta.json b/pages/safe-core-sdk/auth-kit/_meta.json new file mode 100644 index 00000000..2fd436b3 --- /dev/null +++ b/pages/safe-core-sdk/auth-kit/_meta.json @@ -0,0 +1,4 @@ +{ + "guides": "Guides", + "reference": "Reference" +} \ No newline at end of file diff --git a/safe-core-sdk/auth-kit/guides/web3auth.md b/pages/safe-core-sdk/auth-kit/guides/web3auth.md similarity index 100% rename from safe-core-sdk/auth-kit/guides/web3auth.md rename to pages/safe-core-sdk/auth-kit/guides/web3auth.md diff --git a/safe-core-sdk/auth-kit/reference/README.md b/pages/safe-core-sdk/auth-kit/reference.md similarity index 99% rename from safe-core-sdk/auth-kit/reference/README.md rename to pages/safe-core-sdk/auth-kit/reference.md index 2e891b0f..f9bbd30c 100644 --- a/safe-core-sdk/auth-kit/reference/README.md +++ b/pages/safe-core-sdk/auth-kit/reference.md @@ -1,4 +1,4 @@ -# Auth Kit +# Reference The [Auth Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/auth-kit) creates or retrieves an Ethereum address and authenticates a blockchain account using an email address, a social media platform or a crypto wallet address. diff --git a/safe-core-sdk/auth-kit/reference/AuthKitBasePack.md b/pages/safe-core-sdk/auth-kit/reference/AuthKitBasePack.md similarity index 100% rename from safe-core-sdk/auth-kit/reference/AuthKitBasePack.md rename to pages/safe-core-sdk/auth-kit/reference/AuthKitBasePack.md diff --git a/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md b/pages/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md similarity index 100% rename from safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md rename to pages/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md diff --git a/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx b/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx new file mode 100644 index 00000000..286c58bf --- /dev/null +++ b/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx @@ -0,0 +1,342 @@ +This page is taken from https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md + +# Guide: Integrating the Safe Core SDK + +## Table of contents: + +1. [Install the dependencies](#install-dependencies) +2. [Initialize the SDK’s](#initialize-sdks) +3. [Deploy a new Safe](#deploy-safe) +4. [Create a transaction](#create-transaction) +5. [Propose the transaction to the service](#propose-transaction) +6. [Get the transaction from the service](#get-transaction) +7. [Confirm/reject the transaction](#confirm-transaction) +8. [Execute the transaction](#execute-transaction) +9. [Interface checks](#interface-checks) + +## 1. Install the dependencies + +To integrate the [Safe Core SDK](https://github.com/safe-global/safe-core-sdk) into your Dapp or script you will need to install these dependencies: + +``` +@safe-global/safe-core-sdk-types +@safe-global/protocol-kit +@safe-global/api-kit +``` + +## 2. Initialize the SDK’s + +### Instantiate an EthAdapter + +First of all, we need to create an `EthAdapter`, which contains all the required utilities for the SDKs to interact with the blockchain. It acts as a wrapper for [web3.js](https://web3js.readthedocs.io/) or [ethers.js](https://docs.ethers.io/v5/) Ethereum libraries. + +Depending on the library used by the Dapp, there are two options: + +- [Create an `EthersAdapter` instance](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit/src/adapters/ethers) +- [Create a `Web3Adapter` instance](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit/src/adapters/web3) + +Once the instance of `EthersAdapter` or `Web3Adapter` is created, it can be used in the SDK initialization. + +### Initialize the Safe API Kit + +As stated in the introduction, the [Safe API Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/api-kit) consumes the [Safe Transaction Service API](https://github.com/safe-global/safe-transaction-service). To start using this library, create a new instance of the `SafeApiKit` class, imported from `@safe-global/api-kit` and pass the URL to the constructor of the Safe Transaction Service you want to use depending on the network. + +```js +import SafeApiKit from '@safe-global/api-kit' + +const txServiceUrl = 'https://safe-transaction-mainnet.safe.global' +const safeService = new SafeApiKit({ txServiceUrl, ethAdapter }) +``` + +### Initialize the Protocol Kit + +```js +import Safe, { SafeFactory } from '@safe-global/protocol-kit' + +const safeFactory = await SafeFactory.create({ ethAdapter }) + +const safeSdk = await Safe.create({ ethAdapter, safeAddress }) +``` + +There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. + +// Why? + +By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the property `isL1SafeMasterCopy` to force the use of the `Safe.sol` contract. + +```js +const safeFactory = await SafeFactory.create({ ethAdapter, isL1SafeMasterCopy: true }) + +const safeSdk = await Safe.create({ ethAdapter, safeAddress, isL1SafeMasterCopy: true }) +``` + +If the Safe contracts are not deployed to your current network, the property `contractNetworks` will be required to point to the addresses of the Safe contracts previously deployed by you. + +```js +import { ContractNetworksConfig } from '@safe-global/protocol-kit' + +const chainId = await ethAdapter.getChainId() +const contractNetworks: ContractNetworksConfig = { + [chainId]: { + safeMasterCopyAddress: '', + safeProxyFactoryAddress: '', + multiSendAddress: '', + multiSendCallOnlyAddress: '', + fallbackHandlerAddress: '', + signMessageLibAddress: '', + createCallAddress: '', + simulateTxAccessorAddress: '', + safeMasterCopyAbi: '', // Optional. Only needed with web3.js + safeProxyFactoryAbi: '', // Optional. Only needed with web3.js + multiSendAbi: '', // Optional. Only needed with web3.js + multiSendCallOnlyAbi: '', // Optional. Only needed with web3.js + fallbackHandlerAbi: '', // Optional. Only needed with web3.js + signMessageLibAbi: '', // Optional. Only needed with web3.js + createCallAbi: '', // Optional. Only needed with web3.js + simulateTxAccessorAbi: '' // Optional. Only needed with web3.js + } +} + +const safeFactory = await SafeFactory.create({ ethAdapter, contractNetworks }) + +const safeSdk = await Safe.create({ ethAdapter, safeAddress, contractNetworks }) +``` + +The `SafeFactory` constructor also accepts the property `safeVersion` to specify the Safe contract version that will be deployed. This string can take the values `1.0.0`, `1.1.1`, `1.2.0`, `1.3.0` or `1.4.1`. If not specified, the `DEFAULT_SAFE_VERSION` value will be used. + +```js +const safeVersion = 'X.Y.Z' +const safeFactory = await SafeFactory.create({ ethAdapter, safeVersion }) +``` + +## 3. Deploy a new Safe + +The Protocol Kit library allows the deployment of new Safes using the `safeFactory` instance we just created. + +Here, for example, we can create a new Safe account with 3 owners and 2 required signatures. + +```js +import { SafeAccountConfig } from '@safe-global/protocol-kit' + +const safeAccountConfig: SafeAccountConfig = { + owners: ['0x...', '0x...', '0x...'] + threshold: 2, + // ... (optional params) +} +const safeSdk = await safeFactory.deploySafe({ safeAccountConfig }) +``` + +Calling the method `deploySafe` will deploy the desired Safe and return a Protocol Kit initialized instance ready to be used. Check the [API Reference](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit#deploysafe) for more details on additional configuration parameters and callbacks. + +## 4. Create a transaction + +The Protocol Kit supports the execution of single Safe transactions but also MultiSend transactions. We can create a transaction object by calling the method `createTransaction` in our `Safe` instance. + +- **Create a single transaction** + + This method can take an object of type `SafeTransactionDataPartial` that represents the transaction we want to execute (once the signatures are collected). It accepts some optional properties as follows. + + ```js + import { SafeTransactionDataPartial } from '@safe-global/safe-core-sdk-types' + + const safeTransactionData: SafeTransactionDataPartial = { + to, + data, + value, + operation, // Optional + safeTxGas, // Optional + baseGas, // Optional + gasPrice, // Optional + gasToken, // Optional + refundReceiver, // Optional + nonce // Optional + } + + const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) + ``` + +- **Create a MultiSend transaction** + + This method can take an array of `MetaTransactionData` objects that represent the multiple transactions we want to include in our MultiSend transaction. If we want to specify some of the optional properties in our MultiSend transaction, we can pass a second argument to the method `createTransaction` with the `SafeTransactionOptionalProps` object. + + ```js + import { SafeTransactionOptionalProps } from '@safe-global/protocol-kit' + import { MetaTransactionData } from '@safe-global/safe-core-sdk-types' + + const safeTransactionData: MetaTransactionData[] = [ + { + to, + data, + value, + operation + }, + { + to, + data, + value, + operation + } + // ... + ] + + const options: SafeTransactionOptionalProps = { + safeTxGas, // Optional + baseGas, // Optional + gasPrice, // Optional + gasToken, // Optional + refundReceiver, // Optional + nonce // Optional + } + + const safeTransaction = await safeSdk.createTransaction({ safeTransactionData, options }) + ``` + +We can specify the `nonce` of our Safe transaction as long as it is not lower than the current Safe nonce. If multiple transactions are created but not executed they will share the same `nonce` if no `nonce` is specified, validating the first executed transaction and invalidating all the rest. We can prevent this by calling the method `getNextNonce` from the Safe API Kit instance. This method takes all queued/pending transactions into account when calculating the next nonce, creating a unique one for all different transactions. + +```js +const nonce = await safeService.getNextNonce(safeAddress) +``` + +## 5. Propose the transaction to the service + +Once we have the Safe transaction object we can share it with the other owners of the Safe so they can sign it. To send the transaction to the Safe Transaction Service we need to call the method `proposeTransaction` from the Safe API Kit instance and pass an object with the properties: + +- `safeAddress`: The Safe address. +- `safeTransactionData`: The `data` object inside the Safe transaction object returned from the method `createTransaction`. +- `safeTxHash`: The Safe transaction hash, calculated by calling the method `getTransactionHash` from the Protocol Kit. +- `senderAddress`: The Safe owner or delegate proposing the transaction. +- `senderSignature`: The signature generated by signing the `safeTxHash` with the `senderAddress`. +- `origin`: Optional string that allows to provide more information about the app proposing the transaction. + +```js +const safeTxHash = await safeSdk.getTransactionHash(safeTransaction) +const senderSignature = await safeSdk.signTransactionHash(safeTxHash) +await safeService.proposeTransaction({ + safeAddress, + safeTransactionData: safeTransaction.data, + safeTxHash, + senderAddress, + senderSignature: senderSignature.data, + origin +}) +``` + +## 6. Get the transaction from the service + +The transaction is then available on the Safe Transaction Service and the owners can retrieve it by finding it in the pending transaction list, or by getting its Safe transaction hash. + +Get a list of pending transactions: + +```js +const pendingTxs = await safeService.getPendingTransactions(safeAddress) +``` + +Get a specific transaction given its Safe transaction hash: + +```js +const tx = await safeService.getTransaction(safeTxHash) +``` + +The retrieved transaction will have this type: + +``` +type SafeMultisigTransactionResponse = { + safe: string + to: string + value: string + data?: string + operation: number + gasToken: string + safeTxGas: number + baseGas: number + gasPrice: string + refundReceiver?: string + nonce: number + executionDate: string + submissionDate: string + modified: string + blockNumber?: number + transactionHash: string + safeTxHash: string + executor?: string + isExecuted: boolean + isSuccessful?: boolean + ethGasPrice?: string + gasUsed?: number + fee?: string + origin: string + dataDecoded?: string + confirmationsRequired: number + confirmations?: [ + { + owner: string + submissionDate: string + transactionHash?: string + confirmationType?: string + signature: string + signatureType?: string + }, + // ... + ] + signatures?: string +} +``` + +## 7. Confirm/reject the transaction + +The owners of the Safe can now sign the transaction obtained from the Safe Transaction Service by calling the method `signTransactionHash` from the Protocol Kit to generate the signature and by calling the method `confirmTransaction` from the Safe API Kit to add the signature to the service. + +```js +// transaction: SafeMultisigTransactionResponse + +const hash = transaction.safeTxHash +let signature = await safeSdk.signTransactionHash(hash) +await safeService.confirmTransaction(hash, signature.data) +``` + +## 8. Execute the transaction + +Once there are enough confirmations in the service the transaction is ready to be executed. The account that will execute the transaction needs to retrieve it from the service with all the required signatures and call the method `executeTransaction` from the Protocol Kit. + +The method `executeTransaction` accepts an instance of the class `SafeTransaction` so the transaction needs to be transformed from the type `SafeMultisigTransactionResponse`. + +```js +const safeTransaction = await safeService.getTransaction(...) +const executeTxResponse = await safeSdk.executeTransaction(safeTransaction) +const receipt = executeTxResponse.transactionResponse && (await executeTxResponse.transactionResponse.wait()) +``` + +Optionally, the `isValidTransaction` method, that returns a boolean value, could be called right before the `executeTransaction` method to check if the transaction will be executed successfully or not. + +```js +const isValidTx = await safeSdk.isValidTransaction(safeTransaction) +``` + +## 9. Interface checks + +During the process of collecting the signatures/executing transactions, some useful checks can be made in the interface to display or hide a button to confirm or execute the transaction depending on the current number of confirmations, the address of accounts that confirmed the transaction and the Safe threshold: + +Check if a Safe transaction is already signed by an owner: + +```js +const isTransactionSignedByAddress = ( + signerAddress: string, + transaction: SafeMultisigTransactionResponse +) => { + const confirmation = transaction.confirmations.find( + (confirmation) => confirmation.owner === signerAddress + ) + return !!confirmation +} +``` + +Check if a Safe transaction is ready to be executed: + +```js +const isTransactionExecutable = ( + safeThreshold: number, + transaction: SafeMultisigTransactionResponse +) => { + return transaction.confirmations.length >= safeThreshold +} +``` diff --git a/safe-core-sdk/onramp-kit/README.md b/pages/safe-core-sdk/onramp-kit.md similarity index 100% rename from safe-core-sdk/onramp-kit/README.md rename to pages/safe-core-sdk/onramp-kit.md diff --git a/pages/safe-core-sdk/onramp-kit/_meta.json b/pages/safe-core-sdk/onramp-kit/_meta.json new file mode 100644 index 00000000..34c718ae --- /dev/null +++ b/pages/safe-core-sdk/onramp-kit/_meta.json @@ -0,0 +1,4 @@ +{ + "guides": "Guides", + "reference": "Reference" +} diff --git a/safe-core-sdk/onramp-kit/guides/monerium.md b/pages/safe-core-sdk/onramp-kit/guides/monerium.md similarity index 100% rename from safe-core-sdk/onramp-kit/guides/monerium.md rename to pages/safe-core-sdk/onramp-kit/guides/monerium.md diff --git a/safe-core-sdk/onramp-kit/guides/stripe.md b/pages/safe-core-sdk/onramp-kit/guides/stripe.md similarity index 100% rename from safe-core-sdk/onramp-kit/guides/stripe.md rename to pages/safe-core-sdk/onramp-kit/guides/stripe.md diff --git a/safe-core-sdk/onramp-kit/reference/README.md b/pages/safe-core-sdk/onramp-kit/reference.md similarity index 99% rename from safe-core-sdk/onramp-kit/reference/README.md rename to pages/safe-core-sdk/onramp-kit/reference.md index 26e59ecb..bf4b128e 100644 --- a/safe-core-sdk/onramp-kit/reference/README.md +++ b/pages/safe-core-sdk/onramp-kit/reference.md @@ -1,4 +1,4 @@ -# Onramp Kit +# Reference The [Onramp Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) allow users to access on-ramp services and use them with their Safes. diff --git a/safe-core-sdk/onramp-kit/reference/MoneriumPack.md b/pages/safe-core-sdk/onramp-kit/reference/MoneriumPack.md similarity index 100% rename from safe-core-sdk/onramp-kit/reference/MoneriumPack.md rename to pages/safe-core-sdk/onramp-kit/reference/MoneriumPack.md diff --git a/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md b/pages/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md similarity index 100% rename from safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md rename to pages/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md diff --git a/safe-core-sdk/onramp-kit/reference/StripePack.md b/pages/safe-core-sdk/onramp-kit/reference/StripePack.md similarity index 100% rename from safe-core-sdk/onramp-kit/reference/StripePack.md rename to pages/safe-core-sdk/onramp-kit/reference/StripePack.md diff --git a/safe-core-sdk/README.md b/pages/safe-core-sdk/overview.md similarity index 93% rename from safe-core-sdk/README.md rename to pages/safe-core-sdk/overview.md index cd8f76d3..0725619d 100644 --- a/safe-core-sdk/README.md +++ b/pages/safe-core-sdk/overview.md @@ -6,7 +6,7 @@ The Safe{Core} Account Abstraction (AA) SDK aims to bring Account Abstraction to The SDK groups its functionality into five different kits. -
+
### Auth Kit diff --git a/safe-core-sdk/protocol-kit/README.md b/pages/safe-core-sdk/protocol-kit.md similarity index 100% rename from safe-core-sdk/protocol-kit/README.md rename to pages/safe-core-sdk/protocol-kit.md diff --git a/safe-core-sdk/protocol-kit/reference/README.md b/pages/safe-core-sdk/protocol-kit/reference.md similarity index 99% rename from safe-core-sdk/protocol-kit/reference/README.md rename to pages/safe-core-sdk/protocol-kit/reference.md index 173323ac..32e956d6 100644 --- a/safe-core-sdk/protocol-kit/reference/README.md +++ b/pages/safe-core-sdk/protocol-kit/reference.md @@ -1,4 +1,4 @@ -# Protocol Kit +# Reference The [Protocol Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit) facilitates the interaction with the [Safe contracts](https://github.com/safe-global/safe-contracts). diff --git a/safe-core-sdk/protocol-kit/reference/migrating/v2.md b/pages/safe-core-sdk/protocol-kit/reference/migrating-to-v2.md similarity index 97% rename from safe-core-sdk/protocol-kit/reference/migrating/v2.md rename to pages/safe-core-sdk/protocol-kit/reference/migrating-to-v2.md index 5348835e..427d06ac 100644 --- a/safe-core-sdk/protocol-kit/reference/migrating/v2.md +++ b/pages/safe-core-sdk/protocol-kit/reference/migrating-to-v2.md @@ -1,4 +1,4 @@ -# Protocol Kit: Migrating from v1 +# Migrating to v2 This guide references the major changes between v1 and v2 to help those migrating an existing app. diff --git a/safe-core-sdk/relay-kit/README.md b/pages/safe-core-sdk/relay-kit.md similarity index 100% rename from safe-core-sdk/relay-kit/README.md rename to pages/safe-core-sdk/relay-kit.md diff --git a/pages/safe-core-sdk/relay-kit/_meta.json b/pages/safe-core-sdk/relay-kit/_meta.json new file mode 100644 index 00000000..2fd436b3 --- /dev/null +++ b/pages/safe-core-sdk/relay-kit/_meta.json @@ -0,0 +1,4 @@ +{ + "guides": "Guides", + "reference": "Reference" +} \ No newline at end of file diff --git a/safe-core-sdk/relay-kit/guides/gelato.md b/pages/safe-core-sdk/relay-kit/guides/gelato.md similarity index 100% rename from safe-core-sdk/relay-kit/guides/gelato.md rename to pages/safe-core-sdk/relay-kit/guides/gelato.md diff --git a/safe-core-sdk/relay-kit/reference/migrating/v2.md b/pages/safe-core-sdk/relay-kit/reference/migrate-to-v2.md similarity index 95% rename from safe-core-sdk/relay-kit/reference/migrating/v2.md rename to pages/safe-core-sdk/relay-kit/reference/migrate-to-v2.md index 31407513..5b4a4077 100644 --- a/safe-core-sdk/relay-kit/reference/migrating/v2.md +++ b/pages/safe-core-sdk/relay-kit/reference/migrate-to-v2.md @@ -1,4 +1,4 @@ -# Relay Kit: Migrating from v1 +# Migrate to v2 This guide references the major changes between v1 and v2 to help those migrating an existing app. diff --git a/safe-core-sdk/TEMPLATE.md b/safe-core-sdk/TEMPLATE.md deleted file mode 100644 index 7ce87f4b..00000000 --- a/safe-core-sdk/TEMPLATE.md +++ /dev/null @@ -1,56 +0,0 @@ -### When creating new documentation in the "Reference" section, use this template. - -```markdown -# Title (e.g package name or class name) - -{Add description} - -## Install dependencies - -{Installation instructions} - -## Reference - -{Description of what the package or class does} - -{Code Example} - -### method|constructor(param1, param2) - -{Description} - -{Code Example} - -**Parameters** - -- `param1`: {Description} -- `param2`: {Description} - ... - -**Returns** - -- `returnedObjectType`: {Description} - -**Caveats** - -- Caveat1: {Description} -- Caveat2: {Description} - ... - -### method2(param1, param2) - -... - -### method3(param1, param2) - -... - -## Usage - -{Add usage examples} - -## Troubleshooting - -1. {Description} -2. {Description} -``` diff --git a/safe-core-sdk/auth-kit/guides/README.md b/safe-core-sdk/auth-kit/guides/README.md deleted file mode 100644 index d9dd466e..00000000 --- a/safe-core-sdk/auth-kit/guides/README.md +++ /dev/null @@ -1 +0,0 @@ -# Guides \ No newline at end of file diff --git a/safe-core-sdk/onramp-kit/guides/README.md b/safe-core-sdk/onramp-kit/guides/README.md deleted file mode 100644 index d9dd466e..00000000 --- a/safe-core-sdk/onramp-kit/guides/README.md +++ /dev/null @@ -1 +0,0 @@ -# Guides \ No newline at end of file diff --git a/safe-core-sdk/relay-kit/guides/README.md b/safe-core-sdk/relay-kit/guides/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/safe-core-sdk/relay-kit/reference/README.md b/safe-core-sdk/relay-kit/reference/README.md deleted file mode 100644 index c99cb5a9..00000000 --- a/safe-core-sdk/relay-kit/reference/README.md +++ /dev/null @@ -1 +0,0 @@ -# Relay Kit From 8b77008cea60d1ad4c8321765038820a58e7fdaf Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:54:53 +0100 Subject: [PATCH 034/108] Migrate safe-smart-account section --- .../README.md => pages/safe-smart-account.md | 0 pages/safe-smart-account/demo.md | 35 +++++++++++++++++++ .../safe-smart-account}/guards.md | 2 +- .../safe-smart-account}/modules.md | 2 +- .../safe-smart-account}/security-audits.md | 0 .../safe-smart-account}/supported-networks.md | 2 ++ .../supported-networks/v1.0.0.md | 0 .../supported-networks/v1.1.1.md | 0 .../supported-networks/v1.2.0.md | 0 .../supported-networks/v1.3.0.md | 0 .../supported-networks/v1.4.1.md | 0 11 files changed, 39 insertions(+), 2 deletions(-) rename safe-smart-account/README.md => pages/safe-smart-account.md (100%) create mode 100644 pages/safe-smart-account/demo.md rename {safe-smart-account => pages/safe-smart-account}/guards.md (92%) rename {safe-smart-account => pages/safe-smart-account}/modules.md (94%) rename {safe-smart-account => pages/safe-smart-account}/security-audits.md (100%) rename {safe-smart-account => pages/safe-smart-account}/supported-networks.md (96%) rename {safe-smart-account => pages/safe-smart-account}/supported-networks/v1.0.0.md (100%) rename {safe-smart-account => pages/safe-smart-account}/supported-networks/v1.1.1.md (100%) rename {safe-smart-account => pages/safe-smart-account}/supported-networks/v1.2.0.md (100%) rename {safe-smart-account => pages/safe-smart-account}/supported-networks/v1.3.0.md (100%) rename {safe-smart-account => pages/safe-smart-account}/supported-networks/v1.4.1.md (100%) diff --git a/safe-smart-account/README.md b/pages/safe-smart-account.md similarity index 100% rename from safe-smart-account/README.md rename to pages/safe-smart-account.md diff --git a/pages/safe-smart-account/demo.md b/pages/safe-smart-account/demo.md new file mode 100644 index 00000000..d0eeb786 --- /dev/null +++ b/pages/safe-smart-account/demo.md @@ -0,0 +1,35 @@ +This page is taken from https://github.com/5afe/account-abstraction-demo-ui + +# Account Abstraction demo app + +[The Safe{Core} SDK](https://github.com/safe-global/safe-core-sdk) allows builders to add account abstraction functionality into their apps. This demo is an example on how to use our different packages (Auth Kit, OnRamp Kit & Relay Kit). + +See the [Safe{Core} Account Abstraction SDK Docs](https://docs.safe.global/learn/safe-core-account-abstraction-sdk) for more details. + +## Installation + +To run this project locally: + +Install deps: + +```bash +yarn install +``` + +Create a `.env` file (see `example.env`) + +``` +# see https://web3auth.io/docs/developer-dashboard/get-client-id +REACT_APP_WEB3AUTH_CLIENT_ID= + +REACT_APP_STRIPE_BACKEND_BASE_URL=https://aa-stripe.safe.global + +REACT_APP_STRIPE_PUBLIC_KEY=pk_test_51MZbmZKSn9ArdBimSyl5i8DqfcnlhyhJHD8bF2wKrGkpvNWyPvBAYtE211oHda0X3Ea1n4e9J9nh2JkpC7Sxm5a200Ug9ijfoO + +``` + +Run the demo App: + +```bash +yarn start +``` diff --git a/safe-smart-account/guards.md b/pages/safe-smart-account/guards.md similarity index 92% rename from safe-smart-account/guards.md rename to pages/safe-smart-account/guards.md index c8164951..0c8118c7 100644 --- a/safe-smart-account/guards.md +++ b/pages/safe-smart-account/guards.md @@ -10,7 +10,7 @@ Safe Guards can make checks before and after a Safe transaction. The check befor To read about different examples of Safe Guards, see the implementations from [Zodiac](https://github.com/gnosis/zodiac-guard-scope) and [Yearn](https://mirror.xyz/yearn-finance-engineering.eth/9uInM_sCrogPBs5qkFSNF6qe-32-0XLN5bty5wKLVqU). -
+
{% hint style="danger" %} **Important:** Since a Safe Guard has full power to block Safe transaction execution, a broken Guard can cause a denial of service for a Safe. Make sure to audit the Guard code and pay attention to recovery mechanisms. diff --git a/safe-smart-account/modules.md b/pages/safe-smart-account/modules.md similarity index 94% rename from safe-smart-account/modules.md rename to pages/safe-smart-account/modules.md index 20df657d..e618c418 100644 --- a/safe-smart-account/modules.md +++ b/pages/safe-smart-account/modules.md @@ -4,7 +4,7 @@ Safe Modules add custom features to Safe contracts. They are smart contracts tha Safe Modules can include daily spending allowances, amounts that can be spent without the approval of other owners, recurring transactions modules, and standing orders performed on a recurring date. For example, paying your rent or social recovery modules may allow you to recover a Safe if you lose access to owner accounts. -
+
## How to create a Safe Module diff --git a/safe-smart-account/security-audits.md b/pages/safe-smart-account/security-audits.md similarity index 100% rename from safe-smart-account/security-audits.md rename to pages/safe-smart-account/security-audits.md diff --git a/safe-smart-account/supported-networks.md b/pages/safe-smart-account/supported-networks.md similarity index 96% rename from safe-smart-account/supported-networks.md rename to pages/safe-smart-account/supported-networks.md index 9e6cf421..78b43049 100644 --- a/safe-smart-account/supported-networks.md +++ b/pages/safe-smart-account/supported-networks.md @@ -1,3 +1,5 @@ +# Supported Networks + This section lists the addresses of all the Safe contracts deployed grouped by version and chain. The same list can be found on the [GitHub repository](https://github.com/safe-global/safe-deployments), from which these pages are automatically generated. The most recent version of the Safe contracts is `v1.4.1`, which adds compatibility with the ERC-4337. However, it's not supported yet in the [Safe{Wallet}](app.safe.global) interface and the Safe Transaction Service. For that reason, depending on your use case, it might be recommended to continue using `v1.3.0` until there is better support. \ No newline at end of file diff --git a/safe-smart-account/supported-networks/v1.0.0.md b/pages/safe-smart-account/supported-networks/v1.0.0.md similarity index 100% rename from safe-smart-account/supported-networks/v1.0.0.md rename to pages/safe-smart-account/supported-networks/v1.0.0.md diff --git a/safe-smart-account/supported-networks/v1.1.1.md b/pages/safe-smart-account/supported-networks/v1.1.1.md similarity index 100% rename from safe-smart-account/supported-networks/v1.1.1.md rename to pages/safe-smart-account/supported-networks/v1.1.1.md diff --git a/safe-smart-account/supported-networks/v1.2.0.md b/pages/safe-smart-account/supported-networks/v1.2.0.md similarity index 100% rename from safe-smart-account/supported-networks/v1.2.0.md rename to pages/safe-smart-account/supported-networks/v1.2.0.md diff --git a/safe-smart-account/supported-networks/v1.3.0.md b/pages/safe-smart-account/supported-networks/v1.3.0.md similarity index 100% rename from safe-smart-account/supported-networks/v1.3.0.md rename to pages/safe-smart-account/supported-networks/v1.3.0.md diff --git a/safe-smart-account/supported-networks/v1.4.1.md b/pages/safe-smart-account/supported-networks/v1.4.1.md similarity index 100% rename from safe-smart-account/supported-networks/v1.4.1.md rename to pages/safe-smart-account/supported-networks/v1.4.1.md From 51d317298a9b93a0fb102f1513c33faf1827b12c Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:55:33 +0100 Subject: [PATCH 035/108] Migrate safe-core-protocol section --- safe-core-protocol/README.md => pages/safe-core-protocol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename safe-core-protocol/README.md => pages/safe-core-protocol.md (95%) diff --git a/safe-core-protocol/README.md b/pages/safe-core-protocol.md similarity index 95% rename from safe-core-protocol/README.md rename to pages/safe-core-protocol.md index 4b7cddd7..3497413b 100644 --- a/safe-core-protocol/README.md +++ b/pages/safe-core-protocol.md @@ -8,7 +8,7 @@ Safe{Core} Protocol aims to create a comprehensive system to enhance user intera The architecture of the Safe{Core} Protocol comprises several integral components, each carrying its unique responsibilities. The protocol separates these elements by defining explicit interfaces, thus allowing independent expansion and iteration of each part. This modularity ensures the sustainable growth and evolution of the smart account ecosystem. -
+
### Manager From 6efc1b569bad7e3a852e517d26f58af63f7a0f6b Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:56:02 +0100 Subject: [PATCH 036/108] Add index page --- components/Home.module.css | 10 ++++++++++ components/Home.tsx | 10 ++++++++++ pages/index.tsx | 3 +++ 3 files changed, 23 insertions(+) create mode 100644 components/Home.module.css create mode 100644 components/Home.tsx create mode 100644 pages/index.tsx diff --git a/components/Home.module.css b/components/Home.module.css new file mode 100644 index 00000000..8942639d --- /dev/null +++ b/components/Home.module.css @@ -0,0 +1,10 @@ +.link { + background-color: #4CAF50; + border: none; + color: white; + padding: 10px 20px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 16px; +} diff --git a/components/Home.tsx b/components/Home.tsx new file mode 100644 index 00000000..661c6aa7 --- /dev/null +++ b/components/Home.tsx @@ -0,0 +1,10 @@ +import styles from './Home.module.css' + +const Home = () => ( +
+

Safe Docs Landing page

+ Get started +
+) + +export default Home diff --git a/pages/index.tsx b/pages/index.tsx new file mode 100644 index 00000000..48ec888b --- /dev/null +++ b/pages/index.tsx @@ -0,0 +1,3 @@ +import Home from '../components/Home' + +export default Home From cb3abba13fdb82f22daae625d2d3c87ea4dc526b Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 09:56:24 +0100 Subject: [PATCH 037/108] Update generate supported network script --- .github/scripts/generateSupportedNetworks.js | 39 ++++++++++++------- .../workflows/generate-supported-networks.yml | 16 +------- pages/_meta.json | 15 +++++++ .../supported-networks/_meta.json | 7 ++++ 4 files changed, 50 insertions(+), 27 deletions(-) create mode 100644 pages/_meta.json create mode 100644 pages/safe-smart-account/supported-networks/_meta.json diff --git a/.github/scripts/generateSupportedNetworks.js b/.github/scripts/generateSupportedNetworks.js index 3a84b9ce..a43c99ff 100644 --- a/.github/scripts/generateSupportedNetworks.js +++ b/.github/scripts/generateSupportedNetworks.js @@ -1,7 +1,11 @@ +// This script generates the supported networks page from the safe-deployments repo. +// It clones the repo, reads the JSON files, and generates the markdown files as well as a _meta.json file for nextra. + const shell = require('shelljs') const fs = require('fs') const path = require('path') +// Explore a given directory recursively and return all the file paths const walkPath = dir => { let results = [] const list = fs.readdirSync(dir) @@ -18,18 +22,16 @@ const walkPath = dir => { return results } -const deduplicate = () => [ - (acc, curr) => { - if (acc.includes(curr)) { - return acc - } +// Reduce function to deduplicate an array +const deduplicate = (acc, curr) => { + if (acc.includes(curr)) { + return acc + } - return [...acc, curr] - }, - [] -] + return [...acc, curr] +} -const supportedNetworksPath = './safe-smart-account/supported-networks' +const supportedNetworksPath = './pages/safe-smart-account/supported-networks' const generateSupportedNetworks = async () => { const deploymentRepoUrl = 'https://github.com/safe-global/safe-deployments/' @@ -63,7 +65,7 @@ const generateSupportedNetworks = async () => { const versions = contracts .flat() .map(c => c.version) - .reduce(...deduplicate()) + .reduce(deduplicate, []) .reverse() shell.mkdir(supportedNetworksPath) @@ -102,7 +104,8 @@ ${_contracts .map( c => `- \`${c.name}.sol\`: ${ - c.blockExplorerUrl == null || deprecatedBlockExplorers.includes(c.blockExplorerUrl) + c.blockExplorerUrl == null || + deprecatedBlockExplorers.includes(c.blockExplorerUrl) ? c.address : `[${c.address}](${c.blockExplorerUrl}/address/${c.address})` }` @@ -116,6 +119,16 @@ ${_contracts fs.writeFileSync(`${supportedNetworksPath}/${version}.md`, content) }) + // Generate _meta.json file to order versions in descending order + fs.writeFileSync( + `${supportedNetworksPath}/_meta.json`, + JSON.stringify( + versions.reduce((acc, curr) => ({ ...acc, [curr]: curr }), {}), + null, + 2 + ) + ) + shell.rm('-rf', './deployments') } @@ -136,5 +149,5 @@ const deprecatedBlockExplorers = [ 'https://evm.venidiumexplorer.com', 'https://evm.explorer.canto.io', 'https://explorer.autobahn.network', - 'https://explorer.cascadia.foundation', + 'https://explorer.cascadia.foundation' ] diff --git a/.github/workflows/generate-supported-networks.yml b/.github/workflows/generate-supported-networks.yml index accabbe9..97d37cd9 100644 --- a/.github/workflows/generate-supported-networks.yml +++ b/.github/workflows/generate-supported-networks.yml @@ -13,22 +13,10 @@ jobs: uses: actions/setup-node@v2 with: node-version: '20.x' - cache: 'yarn' - cache-dependency-path: ./yarn.lock - name: Install dependencies - run: yarn install --frozen-lockfile - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - uses: actions/cache@v3 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- + run: pnpm install - name: Generate supported networks - run: node ./.github/scripts/generateSupportedNetworks.js + run: pnpm generate-supported-networks - uses: actions/checkout@v4 - name: Create Pull Request uses: peter-evans/create-pull-request@v5 diff --git a/pages/_meta.json b/pages/_meta.json new file mode 100644 index 00000000..5ce6f501 --- /dev/null +++ b/pages/_meta.json @@ -0,0 +1,15 @@ +{ + "getting-started": "Getting Started", + "safe-smart-account": "Safe Smart Account", + "safe-core-sdk": "Safe{Core} AA SDK", + "safe-core-protocol": "Safe{Core} Protocol", + "safe-core-api": "Safe{Core} API", + "safe-apps": "Safe Apps SDK", + "miscellaneous": "Miscellaneous", + "support": { + "title": "Support ↗", + "type": "page", + "href": "https://ethereum.stackexchange.com/questions/tagged/safe-core", + "newWindow": true + } +} diff --git a/pages/safe-smart-account/supported-networks/_meta.json b/pages/safe-smart-account/supported-networks/_meta.json new file mode 100644 index 00000000..3726dac9 --- /dev/null +++ b/pages/safe-smart-account/supported-networks/_meta.json @@ -0,0 +1,7 @@ +{ + "v1.4.1": "v1.4.1", + "v1.3.0": "v1.3.0", + "v1.2.0": "v1.2.0", + "v1.1.1": "v1.1.1", + "v1.0.0": "v1.0.0" +} \ No newline at end of file From e1f5878ce6b47dfe9349d346f7350c5b548cda0e Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 10:44:40 +0100 Subject: [PATCH 038/108] Fix broken links & vale errors --- .github/styles/Vocab/default/accept.txt | 26 +++++++++++++++++++ README.md | 2 +- pages/getting-started/quick-start.mdx | 4 +-- pages/miscellaneous/bug-bounty-program.md | 14 +++++----- pages/miscellaneous/past-paid-bounties.md | 16 ++++++------ pages/safe-apps.md | 2 +- pages/safe-apps/get-started.md | 10 +++---- pages/safe-apps/release.md | 2 +- pages/safe-core-api/rpc-requirements.md | 16 ++++++------ pages/safe-core-api/service-architecture.md | 6 ++--- pages/safe-core-protocol.md | 2 +- pages/safe-core-sdk/api-kit.md | 4 +-- .../safe-core-sdk/auth-kit/guides/web3auth.md | 2 +- pages/safe-core-sdk/auth-kit/reference.md | 2 +- .../auth-kit/reference/Web3AuthModalPack.md | 6 ++--- .../integrating-the-safe-core-sdk.mdx | 6 ++--- .../onramp-kit/guides/monerium.md | 6 ++--- .../safe-core-sdk/onramp-kit/guides/stripe.md | 16 ++++++------ pages/safe-core-sdk/onramp-kit/reference.md | 2 +- .../onramp-kit/reference/MoneriumPack.md | 2 +- .../onramp-kit/reference/OnRampKitBasePack.md | 4 +-- .../onramp-kit/reference/StripePack.md | 14 +++++----- pages/safe-core-sdk/protocol-kit.md | 2 +- pages/safe-core-sdk/protocol-kit/reference.md | 20 +++++++------- .../safe-core-sdk/relay-kit/guides/gelato.md | 2 +- pages/safe-smart-account/demo.md | 6 ++--- pages/safe-smart-account/modules.md | 2 +- 27 files changed, 111 insertions(+), 85 deletions(-) diff --git a/.github/styles/Vocab/default/accept.txt b/.github/styles/Vocab/default/accept.txt index 3074b0a2..ae428f2b 100644 --- a/.github/styles/Vocab/default/accept.txt +++ b/.github/styles/Vocab/default/accept.txt @@ -2,6 +2,7 @@ A1 AA ABI ABIs +address_full_match API API Kit Acala @@ -11,10 +12,12 @@ Apothem Arbitrum Arianee Astar +aurora Aurora Auth Kit Autobahn Avax +binance BNB Blockchain Blocknative @@ -32,15 +35,19 @@ Chiado Client Gateway CloudWalk Config +cra Crab Cronos Crossbell +Crypto DAO Darwinia EIP +erigon ERC ETH EVM +EOA EdgeEVM Edgeware EtherLite @@ -49,15 +56,19 @@ Etherscan Eurus Evmos Fantom +Foesenek Fuji Fuse GC Gelato +GitHub +gnosis Gnosis Godwoken Goerli Gunicorn HTTP +https HTTPS Haqq Holesky @@ -86,6 +97,8 @@ Moonbase Moonbeam Moonriver Mordor +monorepo +Nextra Nova OP Offchain @@ -94,11 +107,15 @@ Onramp Kit Pimlico PGN Polis +polygon Polygon Protocol Kit PublicMint +readme REI +Renan RPC +React Relay Kit Rethereum Rinkeby @@ -125,6 +142,7 @@ ShimmerEVM Shyft Solaris Sourcify +Souza Sparknet Stardust Supernet @@ -133,14 +151,20 @@ TC9 Tanenbaum Telos Tenet +testnet Testnet ThunderCore +trace_filter +trace_block +trace_transaction Transaction Service U2U UI Kit Ultron Velas Venidium +Vite +Vue WEMIX3.0 WSGI XDC @@ -166,5 +190,7 @@ sdk undefined v1 wagmi +zkevm zkEVM +zksync zkSync diff --git a/README.md b/README.md index f6aa2776..0f1637ec 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Safe Docs -This is [Safe](safe.global) documentation website, built with [Nextra](https://nextra.site). +This is [Safe](https://safe.global) documentation website, built with [Nextra](https://nextra.site). ## Quick Start diff --git a/pages/getting-started/quick-start.mdx b/pages/getting-started/quick-start.mdx index 2ff1d17f..0975a0e3 100644 --- a/pages/getting-started/quick-start.mdx +++ b/pages/getting-started/quick-start.mdx @@ -1,6 +1,6 @@ # Build a decentralized application with Safe\{Core\} SDK from scratch. -The goal of this tutorial is to build a decentralized application (dApp) from the ground up using the Safe\{Core\} SDK. The dApp will be a simple wallet that allows users to send and receive Ether and ERC20 tokens, and do so without having to pay any gas fees. +The goal of this tutorial is to build a decentralized application (dapp) from the ground up using the Safe\{Core\} SDK. The dApp will be a simple wallet that allows users to send and receive Ether and ERC20 tokens, and do so without having to pay any gas fees. ## Create-react-app @@ -13,7 +13,7 @@ cd safe-react-app This will create a new directory called safe-react-app, initialize a new git repository, and install all of the dependencies needed to run the app. -You will also need to add polyfills for this tutorial. Polyfills are libraries that provide support for features that are not supported by the browser. +You will also need to add polyfills for this tutorial. Polyfills are libraries that provide support for features that aren't supported by the browser. ```bash npm install --save-dev react-app-rewired stream buffer process diff --git a/pages/miscellaneous/bug-bounty-program.md b/pages/miscellaneous/bug-bounty-program.md index eb2de306..c1bcfce1 100644 --- a/pages/miscellaneous/bug-bounty-program.md +++ b/pages/miscellaneous/bug-bounty-program.md @@ -10,9 +10,9 @@ Smart contract security experts have carefully audited Safe's contracts. Please Many of the [Ethereum Foundation's bug bounty program rules](https://bounty.ethereum.org) are also applicable to the Safe Bug Bounty program: -* Issues already submitted by another user or known to the Safe team are not eligible for bounty rewards. +* Issues already submitted by another user or known to the Safe team aren't eligible for bounty rewards. * Public disclosure of a vulnerability makes it ineligible for a bounty. -* The Safe core development team, employees, and all other people paid by Safe, directly or indirectly (including the external auditors), are not eligible for rewards. +* The Safe core development team, employees, and all other people paid by Safe, directly or indirectly (including the external auditors), aren't eligible for rewards. * The Safe Bounty program considers several variables in determining rewards. Determinations of eligibility, score, and all terms related to an award are at the sole and final discretion of the Safe Bug Bounty panel. ## Scope @@ -79,15 +79,15 @@ For the allowance module, please refer to the corresponding [README file](https: All bugs (they do not necessarily need to lead to a redeploy) will be considered for a bounty, but the severity of the threat will change the reward. Below are the reward levels for each threat severity and an example of such a threat. -### High threat: up to $1,000,000 +### High threat: Up to $1,000,000 An identified attack that could steal funds or tokens or lock user funds would be considered a high threat. Likewise, a reported bug that, on its own, leads to a redeploy of the code will always be regarded as a high threat. -### Medium threat: up to $50,000 +### Medium threat: Up to $50,000 -An identified attack where it is possible to steal funds because of unexpected behavior on the user's part. Unexpected behavior here means the user can't anticipate and comprehend that they will lose the funds. +An identified attack where it's possible to steal funds because of unexpected behavior on the user's part. Unexpected behavior here means the user can't anticipate and comprehend that they will lose the funds. -### Low threat: up to $10,000 +### Low threat: Up to $10,000 A way to avoid transaction fees or an exploit that in some way compromises the experience of other Safe users. @@ -106,7 +106,7 @@ Please consult our [privacy policy](https://safe.global/privacy) for further det ## Responsible Disclosure Policy -If you comply with the policies below when reporting a security issue to us, we will not initiate a lawsuit or law enforcement investigation against you in response to your report. +If you comply with the policies below when reporting a security issue to us, we won't initiate a lawsuit or law enforcement investigation against you in response to your report. _We ask that:_ diff --git a/pages/miscellaneous/past-paid-bounties.md b/pages/miscellaneous/past-paid-bounties.md index a25bddd8..7dd37af3 100644 --- a/pages/miscellaneous/past-paid-bounties.md +++ b/pages/miscellaneous/past-paid-bounties.md @@ -6,7 +6,7 @@ _This list includes valid submissions from past and current contract versions fo We use a [MultiSend](https://github.com/safe-global/safe-contracts/blob/v1.2.0/contracts/libraries/MultiSend.sol) library to batch multiple transactions together. A transaction could be created that would self-destruct the contract. While this would not have put any funds at risk, user experience would have been seriously impacted. -We have updated the library as well as our interfaces. Details about the fix can be found on [Github](https://github.com/safe-global/safe-contracts/pull/156). +We have updated the library as well as our interfaces. Details about the fix can be found on [GitHub](https://github.com/safe-global/safe-contracts/pull/156). This bug was submitted by [Micah Zoltu](https://twitter.com/micahzoltu). It was regarded as a "Low Threat", and a bounty of 1,000 USD has been paid out. @@ -16,15 +16,15 @@ Since the beginning of the bug bounty period, the contract update has been live ## Duplicate owners during setup could render Safe unusable -A bug in the `setupOwners` function on `OwnerManager.sol` allows duplicate owners to be set when the duplicated address is next to itself in the `_owners` array. This could cause unexpected behavior. While stealing funds from existing Safes is impossible, it is unexpected, and user funds might be locked. During Safe creation, the threshold of a Safe could be set to something unreachable, making it impossible to execute a transaction afterward. +A bug in the `setupOwners` function on `OwnerManager.sol` allows duplicate owners to be set when the duplicated address is next to itself in the `_owners` array. This could cause unexpected behavior. While stealing funds from existing Safes is impossible, it's unexpected, and user funds might be locked. During Safe creation, the threshold of a Safe could be set to something unreachable, making it impossible to execute a transaction afterward. The Safe interfaces prevent this by checking for duplicates, but if users directly interact with the contracts, this can still happen. The issue is tracked on [GitHub](https://github.com/safe-global/safe-contracts/issues/244). -This bug was submitted by [David Nicholas](https://twitter.com/davidnich11). It was regarded as a "Medium Threat", and a bounty of 2,500 USD has been paid out. +This bug was submitted by [David Nicholas](https://twitter.com/davidnich11). It was regarded as a "Medium Threat," and a bounty of 2,500 USD has been paid out. ## Setting a Safe as an owner of itself essentially reduces the threshold by 1 -The contracts allow to set a Safe as an owner of itself. This has the same effect as lowering the threshold by 1, as it is possible for anyone to generate a valid signature for the Safe itself when triggering `execTransaction`. This is especially an issue for Safes with a threshold of 1. Anyone can execute transactions if a Safe with threshold 1 adds itself as an owner. +The contracts allow to set a Safe as an owner of itself. This has the same effect as lowering the threshold by 1, as it's possible for anyone to generate a valid signature for the Safe itself when triggering `execTransaction`. This is especially an issue for Safes with a threshold of 1. Anyone can execute transactions if a Safe with threshold 1 adds itself as an owner. To our knowledge, there is no actual use case where it would make sense to set a Safe as an owner of itself. Hence, only a few number of Safes used themselves as owners. Most of these Safes could be contacted, and the Safe has been removed as an owner. The Safes still affected are Safes used for testing by us or Safes owned by a single owner with a threshold > 1 (so no immediate risk). @@ -34,10 +34,10 @@ Details about this issue can be found on [GitHub](https://github.com/safe-global The bug was submitted by [Kevin Foesenek](https://github.com/keviinfoes). It was regarded as a "Medium Threat", and a bounty of 5,000 USD has been paid out. -## The function `getModulesPaginated` does not return all modules +## The function `getModulesPaginated` doesn't return all modules -The method [getModuledPaginated](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/base/ModuleManager.sol#L114) is used to return enabled modules page by page. For this, a `start` and a `pageSize` need to be specified, and the method will return an array of Safe Module addresses and `next`. This next can be used as the `start` to load the next page. When another page exists, then `next` is a module address. This module address, however, will not be present in any of the returned arrays. While this does not put any user assets at risk directly, it could lead to a wrong perception of the enabled modules of a Safe and, thereby, its state. +The method [getModuledPaginated](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/base/ModuleManager.sol#L114) is used to return enabled modules page by page. For this, a `start` and a `pageSize` need to be specified, and the method will return an array of Safe Module addresses and `next`. This next can be used as the `start` to load the next page. When another page exists, then `next` is a module address. This module address, however, won't be present in any of the returned arrays. While this doesn't put any user assets at risk directly, it could lead to a wrong perception of the enabled modules of a Safe and, thereby, its state. -The workaround is to append the `next` to the returned array of module addresses if it is not the zero or sentinel address. Alternatively, the last element of the returned array can be used as the `start` for the next page. +The workaround is to append the `next` to the returned array of module addresses if it's not the zero or sentinel address. Alternatively, the last element of the returned array can be used as the `start` for the next page. -This bug was submitted by [Renan Souza](https://github.com/RenanSouza2). It was regarded as a "Low Threat", and a bounty of 2,000 USD has been paid out. +This bug was submitted by [Renan Souza](https://github.com/RenanSouza2). It was regarded as a "Low Threat," and a bounty of 2,000 USD has been paid out. diff --git a/pages/safe-apps.md b/pages/safe-apps.md index ff885588..1d30a534 100644 --- a/pages/safe-apps.md +++ b/pages/safe-apps.md @@ -20,4 +20,4 @@ Here are several packages to make it easier to integrate third-party application | [@web3-react/gnosis-safe](https://github.com/Uniswap/web3-react/tree/main/packages/gnosis-safe) | | [web3-react](https://github.com/Uniswap/web3-react) already includes a connector for Safe Apps by default. You can check their docs on how to use it. | -{% hint style="warning" %} Safe Apps are not owned, controlled, maintained, or audited by Safe. Safe can list or delist apps from Safe{Wallet} at its sole discretion. {% endhint %} +{% hint style="warning" %} Safe Apps aren't owned, controlled, maintained, or audited by Safe. Safe can list or delist apps from Safe{Wallet} at its sole discretion. {% endhint %} diff --git a/pages/safe-apps/get-started.md b/pages/safe-apps/get-started.md index e5dd6f36..df5af1ba 100644 --- a/pages/safe-apps/get-started.md +++ b/pages/safe-apps/get-started.md @@ -24,7 +24,7 @@ If you are using our [CRA template](https://github.com/safe-global/safe-apps-sdk ### Manifest -It is mandatory that your app exposes a `manifest.json` file in the root directory with this structure: +It's mandatory that your app exposes a `manifest.json` file in the root directory with this structure: ```json { @@ -38,7 +38,7 @@ It is mandatory that your app exposes a `manifest.json` file in the root directo ### CORS -Safe needs to reach the `manifest.json` from the app. To allow this, it is required to enable *Cross Site Requests* by setting the *CORS* headers to the `manifest.json`. +Safe needs to reach the `manifest.json` from the app. To allow this, it's required to enable *Cross Site Requests* by setting the *CORS* headers to the `manifest.json`. The required headers are: @@ -50,7 +50,7 @@ The required headers are: ### React development -It is possible to use the local React development server. For this, you need to set the *CORS* headers and use the same protocol (HTTP or HTTPS) as the Safe interface you use for testing. +It's possible to use the local React development server. For this, you need to set the *CORS* headers and use the same protocol (HTTP or HTTPS) as the Safe interface you use for testing. **CORS for development** @@ -98,7 +98,7 @@ module.exports = { **SSL** -To enable SSL with `react-scripts`, it is necessary to set the `HTTPS` environment variable to `true`. This can be done in the `package.json` file by adjusting the `scripts` section to: +To enable SSL with `react-scripts`, it's necessary to set the `HTTPS` environment variable to `true`. This can be done in the `package.json` file by adjusting the `scripts` section to: ```json "scripts": { @@ -106,7 +106,7 @@ To enable SSL with `react-scripts`, it is necessary to set the `HTTPS` environme }, ``` -If the SSL certificate provided by `react-scripts` is not valid, it is required to mark it as trusted in your browser. To do this, open the Safe App in a separate tab (not in the Safe interface) and accept the certificate or ignore the warning. +If the SSL certificate provided by `react-scripts` isn't valid, it's required to mark it as trusted in your browser. To do this, open the Safe App in a separate tab (not in the Safe interface) and accept the certificate or ignore the warning. ## UI Kit diff --git a/pages/safe-apps/release.md b/pages/safe-apps/release.md index 14dee89a..b4a5e430 100644 --- a/pages/safe-apps/release.md +++ b/pages/safe-apps/release.md @@ -14,7 +14,7 @@ If you would like your Safe App to appear in the Safe, it must meet the followin ### Smart contracts must be audited -Security is the top priority for Safe. Please provide an external audit result document if the Safe App includes smart contracts. If a third party created the smart contracts, ensure they are audited. +Security is the top priority for Safe. Please provide an external audit result document if the Safe App includes smart contracts. If a third party created the smart contracts, ensure they're audited. ### Your Safe App must include a manifest diff --git a/pages/safe-core-api/rpc-requirements.md b/pages/safe-core-api/rpc-requirements.md index 53204cdd..830bb963 100644 --- a/pages/safe-core-api/rpc-requirements.md +++ b/pages/safe-core-api/rpc-requirements.md @@ -1,15 +1,15 @@ # RPC Requirements -### What are the RPC requirements for the tx service? +### What are the RPC requirements for the transaction service? -To run the tx service in **tracing mode** you will need a tracing compatible node: +To run the transaction service in **tracing mode** you will need a tracing compatible node: * [Erigon ](https://github.com/ledgerwatch/erigon)node (recommended). * Deprecated [OpenEthereum ](https://github.com/openethereum/openethereum)node with tracing enabled (`--tracing` flag) if it's still supported on your network. * [Nethermind ](https://nethermind.io/)(**archive mode** so tracing is enabled). * **Any RPC** that supports **eth_getLogs** if using the **Safe L2 Version.** From Safe **v1.3.0** there's an alternative and **recommended way** to avoid using tracing, the **L2 Safe version** ([https://github.com/safe-global/safe-deployments/blob/main/src/assets/v1.3.0/gnosis_safe_l2.json](https://github.com/safe-global/safe-deployments/blob/main/src/assets/v1.3.0/gnosis_safe_l2.json)) that emits events, so no tracing node is required. This is the approach used in networks like _Polygon_ or _Binance Smart Chain_ where fees are cheap and emitting events don't impact the user: - * A tx service configured **with a tracing** node can index L2 and non L2 versions of the Safe contracts. - * A tx service configured **without a tracing** node can only index L2 versions of the Safe contracts. Indexing mode should not be changed after initializing the service, as the database could become corrupted, so if a tracing node was not set up it shouldn't be added later. The opposite is also problematic. + * A transaction service configured **with a tracing** node can index L2 and non L2 versions of the Safe contracts. + * A transaction service configured **without a tracing** node can only index L2 versions of the Safe contracts. Indexing mode should not be changed after initializing the service, as the database could become corrupted, so if a tracing node was not set up it shouldn't be added later. The opposite is also problematic. ### What RPC methods are used? @@ -30,9 +30,9 @@ For the regular version of the Safe (not L2), tracing endpoints are used: For the L2 version of the Safe, no special RPC methods are used. The most demanding one will be [eth_getLogs](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) to get the Safe events. -### How many queries will the tx service do to the RPC? +### How many queries will the transaction service do to the RPC? -That's not written in stone. Tx service has some environment variables that can be configured to set a limit on the number of blocks that are processed together (`ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX`), but the default behaviour is trying to detect the best configuration for every network similar to how [TCP congestion control](https://en.wikipedia.org/wiki/TCP_congestion_control) works.Indexer tries to process a low number of blocks (currently 50). Depending on that: +That's not written in stone. Transaction service has some environment variables that can be configured to set a limit on the number of blocks that are processed together (`ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX`), but the default behaviour is trying to detect the best configuration for every network similar to how [TCP congestion control](https://en.wikipedia.org/wiki/TCP_congestion_control) works. Indexer tries to process a low number of blocks (currently 50). Depending on that: * If the request takes **less than 1 second**, the node can process more. The number of blocks to fetch is duplicated for the next request. * If the request takes **less than 3 seconds**, the number of blocks to process is incremented by a small amount (currently 20). @@ -41,7 +41,7 @@ That's not written in stone. Tx service has some environment variables that can * If there is **an exception** when requesting the information (I/O error) number of blocks to process is reset to the minimum number of blocks (currently 1). * All this happens in every request to the node used for indexing (safe transactions, erc20/721 events...). -Be careful, some nodes like **Binance Smart Chain** public nodes have a hardcoded limit of blocks they can process (_5000_ in the case of BSC). Set`ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX`to prevent the algorithm trying to process more blocks and erroring all the time +Be careful, some nodes like **Binance Smart Chain** public nodes have a hard-coded limit of blocks they can process (_5000_ in the case of BSC). Set `ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX` to prevent the algorithm from trying to process more blocks and raise errors all the time ## **RPC Provider expectations** @@ -50,4 +50,4 @@ For RPC providers we expect communication on every update and configuration chan * **Timeout** for the requests. * **Number of** **batch requests** allowed in the same HTTP request. * **Block range** that can be queried in queries like **eth_getLogs** or **trace_filter.** -* **Results limit for endpoints** (e.g. some providers implement a limit to the number of results of queries like **eth_getLogs**). Indexer is expecting a failure and not getting capped results. +* **Results limit for endpoints** (for example some providers implement a limit to the number of results of queries like **eth_getLogs**). Indexer is expecting a failure and not getting capped results. diff --git a/pages/safe-core-api/service-architecture.md b/pages/safe-core-api/service-architecture.md index 7933f4ff..bef0c3fb 100644 --- a/pages/safe-core-api/service-architecture.md +++ b/pages/safe-core-api/service-architecture.md @@ -9,7 +9,7 @@ The Safe infrastructure consists of four services: * [Safe Transaction Service](https://github.com/safe-global/safe-transaction-service): Keeps track of transactions related to Safe contracts (Python). Also referred to as *Transaction Service*. * [Safe Events Service](https://github.com/safe-global/safe-events-service): Handles Safe indexing events from the Transaction Service and delivers them as HTTP webhooks. * [Safe Config Service](https://github.com/safe-global/safe-config-service): Keeps track of all supported networks and chain-specific variables (Python). Also referred to as *Config Service*. -* [Safe Client Gateway](https://github.com/safe-global/safe-client-gateway-nest): Uses the config service to find the transaction service instance required for a given request (Node.js). Also referred to as *Client Gateway*. +* [Safe Client Gateway](https://github.com/safe-global/safe-client-gateway-nest): Uses the config service to find the Transaction Service instance required for a given request (Node.js). Also referred to as *Client Gateway*. Safe's production setup is a mixture of several instances of the Safe Transaction Service orchestrated by the Config Service, later consumed by the Client Gateway. @@ -25,11 +25,11 @@ The Config Service keeps track of all the supported networks and all the availab ## Safe Client Gateway -The Client Gateway leverages the config service to find the transaction service instance required for a specific request. The client gateway forwards the request to the specified Transaction Service instance for the supported networks (determined by the Config Service). The Client Gateway transforms, aggregates, and caches information from the Config and Transaction Services, optimizing data for Safe's web and mobile clients. +The Client Gateway leverages the config service to find the Transaction Service instance required for a specific request. The Client Gateway forwards the request to the specified Transaction Service instance for the supported networks (determined by the Config Service). The Client Gateway transforms, aggregates, and caches information from the Config and Transaction Services, optimizing data for Safe's web and mobile clients. ![Service interaction diagram.](../../assets/diagram-services-requests.png) -Even though Safe Config and Transaction Service instances are reachable by clients that are not the Client Gateway, this may change in the future. The Client Gateway is the outermost component of the Safe infrastructure and should be the single point of communication with any frontend client. +Even though Safe Config and Transaction Service instances are reachable by clients that aren't the Client Gateway, this may change in the future. The Client Gateway is the outermost component of the Safe infrastructure and should be the single point of communication with any frontend client. ## Running locally diff --git a/pages/safe-core-protocol.md b/pages/safe-core-protocol.md index 3497413b..9b7450c6 100644 --- a/pages/safe-core-protocol.md +++ b/pages/safe-core-protocol.md @@ -16,7 +16,7 @@ At the heart of the protocol is the `Manager`, ensuring adherence to the prescri ### Accounts -`Accounts` are smart-contract-based user accounts (or Smart Accounts). The Safe{Core} Protocol is account-agnostic, meaning it is not tied to a specific account implementation. +`Accounts` are smart-contract-based user accounts (or Smart Accounts). The Safe{Core} Protocol is account-agnostic, meaning it's not tied to a specific account implementation. ### Modules diff --git a/pages/safe-core-sdk/api-kit.md b/pages/safe-core-sdk/api-kit.md index 6b7a5104..d1f56a54 100644 --- a/pages/safe-core-sdk/api-kit.md +++ b/pages/safe-core-sdk/api-kit.md @@ -26,7 +26,7 @@ yarn add @safe-global/api-kit First of all, we need to create an `EthAdapter`, which contains all the required utilities for the SDKs to interact with the blockchain. It acts as a wrapper for [web3.js](https://web3js.readthedocs.io/) or [ethers.js](https://docs.ethers.org/v6/) Ethereum libraries. -Depending on the library used by the Dapp, there are two options: +Depending on the library used by the dapp, there are two options: - [Create an `EthersAdapter` instance](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit/src/adapters/ethers) - [Create a `Web3Adapter` instance](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit/src/adapters/web3) @@ -103,7 +103,7 @@ await safeApiKit.proposeTransaction({ ## Retrieve the pending transactions -There are different methods in the API Kit available to retrieve pending transactions depending on the situation. To retrieve a transaction given the Safe transaction hash use the uncommented method. +Different methods in the API Kit are available to retrieve pending transactions depending on the situation. To retrieve a transaction given the Safe transaction hash use the uncommented method. ```typescript const transaction = await service.getTransaction("") diff --git a/pages/safe-core-sdk/auth-kit/guides/web3auth.md b/pages/safe-core-sdk/auth-kit/guides/web3auth.md index d949c17f..3c9a6390 100644 --- a/pages/safe-core-sdk/auth-kit/guides/web3auth.md +++ b/pages/safe-core-sdk/auth-kit/guides/web3auth.md @@ -123,7 +123,7 @@ web3AuthModalPack.subscribe(ADAPTER_EVENTS.CONNECTED, () => { }) web3AuthModalPack.subscribe(ADAPTER_EVENTS.DISCONNECTED, () => { - console.log('User is not authenticated') + console.log('User isn't authenticated') }) ``` diff --git a/pages/safe-core-sdk/auth-kit/reference.md b/pages/safe-core-sdk/auth-kit/reference.md index f9bbd30c..9b059d6c 100644 --- a/pages/safe-core-sdk/auth-kit/reference.md +++ b/pages/safe-core-sdk/auth-kit/reference.md @@ -27,6 +27,6 @@ await pack.init(packInitOptions) After the initialization, use the methods in the pack to interact with the chosen provider. -There are some common methods (`signIn()`, `signOut()`, etc.) that can be called regardless of the package being used. +Some common methods (`signIn()`, `signOut()`, etc.) can be called regardless of the package being used. The kit creates a common interface that any pack should implement. Check the [`AuthKitBasePack`](./AuthKitBasePack.md) abstract class to get more details. diff --git a/pages/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md b/pages/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md index 469c5c64..baf974ab 100644 --- a/pages/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md +++ b/pages/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md @@ -43,7 +43,7 @@ Web3AuthConfig { txServiceUrl: string } ``` -- `txServiceUrl` - The URL of the Safe transaction service. It is used to retrieve the Safe addresses for an externally-owned account created using Web3Auth services. It is required to use the `Web3AuthModalPack` with Safe. +- `txServiceUrl` - The URL for the Safe transaction service. It's used to retrieve the Safe addresses for an externally-owned account created using Web3Auth services. It's required to use the `Web3AuthModalPack` with Safe. **Caveats** You should always call the `init()` method afterwards before interacting with the pack. @@ -82,8 +82,8 @@ AuthKitSignInData { **Caveats** -- To get the Safe addresses, instantiate the authKit with the `txServiceUrl` property in the config object. Otherwise, only the eoa will be returned. -- ⚠️ This method currently returns the Safe addresses which the EOA is the owner of. It does not create a Safe. We are investigating ways to enhance the Auth Kit and the associated flows. ⚠️ +- To get the Safe addresses, instantiate the authKit with the `txServiceUrl` property in the config object. Otherwise, only the EOA will be returned. +- ⚠️ This method currently returns the Safe addresses which the EOA is the owner of. It doesn't create a Safe. We are investigating ways to enhance the Auth Kit and the associated flows. ⚠️ ### signOut() diff --git a/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx b/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx index 286c58bf..2efeeac6 100644 --- a/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx +++ b/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx @@ -58,7 +58,7 @@ const safeFactory = await SafeFactory.create({ ethAdapter }) const safeSdk = await Safe.create({ ethAdapter, safeAddress }) ``` -There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. +Two versions of the Safe contracts are available: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that doesn't trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. // Why? @@ -70,7 +70,7 @@ const safeFactory = await SafeFactory.create({ ethAdapter, isL1SafeMasterCopy: t const safeSdk = await Safe.create({ ethAdapter, safeAddress, isL1SafeMasterCopy: true }) ``` -If the Safe contracts are not deployed to your current network, the property `contractNetworks` will be required to point to the addresses of the Safe contracts previously deployed by you. +If the Safe contracts aren't deployed to your current network, the property `contractNetworks` will be required to point to the addresses of the Safe contracts previously deployed by you. ```js import { ContractNetworksConfig } from '@safe-global/protocol-kit' @@ -191,7 +191,7 @@ The Protocol Kit supports the execution of single Safe transactions but also Mul const safeTransaction = await safeSdk.createTransaction({ safeTransactionData, options }) ``` -We can specify the `nonce` of our Safe transaction as long as it is not lower than the current Safe nonce. If multiple transactions are created but not executed they will share the same `nonce` if no `nonce` is specified, validating the first executed transaction and invalidating all the rest. We can prevent this by calling the method `getNextNonce` from the Safe API Kit instance. This method takes all queued/pending transactions into account when calculating the next nonce, creating a unique one for all different transactions. +We can specify the `nonce` of our Safe transaction as long as it's not lower than the current Safe nonce. If multiple transactions are created but not executed they will share the same `nonce` if no `nonce` is specified, validating the first executed transaction and invalidating all the rest. We can prevent this by calling the method `getNextNonce` from the Safe API Kit instance. This method takes all queued/pending transactions into account when calculating the next nonce, creating a unique one for all different transactions. ```js const nonce = await safeService.getNextNonce(safeAddress) diff --git a/pages/safe-core-sdk/onramp-kit/guides/monerium.md b/pages/safe-core-sdk/onramp-kit/guides/monerium.md index 2a2a7511..baee0bb7 100644 --- a/pages/safe-core-sdk/onramp-kit/guides/monerium.md +++ b/pages/safe-core-sdk/onramp-kit/guides/monerium.md @@ -66,7 +66,7 @@ Take a look to the Monerium web page URL. You will see that the query string inc - `network`: The Monerium selected network. The value is automatically calculated using the `safeSdk` instance. - `redirect_uri`: The `redirectUrl` you sent in the `open` method. Once authenticated Monerium dashboard will redirect to that url. -⚠️ It is important to be aware of what is happening during this initial interaction. A `signMessage` transaction accepting the [required Monerium message](https://monerium.dev/api-docs#operation/auth) will be proposed to your Safe the first time you try to link your Safe address. To confirm and execute it, you must also add the remaining signatures in the Safe UI and execute the transaction. +⚠️ It's important to be aware of what's happening during this initial interaction. A `signMessage` transaction accepting the [required Monerium message](https://monerium.dev/api-docs#operation/auth) will be proposed to your Safe the first time you try to link your Safe address. To confirm and execute it, you must also add the remaining signatures in the Safe UI and execute the transaction. Once you are in the Monerium web page, you should login or create a new account if you don't have one already. @@ -149,7 +149,7 @@ Once you place your order, it will be sent to the destination account. Two thing Once the transaction is recorded on the blockchain, the token is burned and the transfer of real money begins, completing the order 🚀. -7. Listening to events is important for understanding what is happening around. It helps us to create a proper UI in our web page. +7. Listening to events is important for understanding what's happening around. It helps us to create a proper UI in our web page. You probably want to know when the order is completed. For this you can listen to events using the [Monerium API websockets](https://monerium.dev/api-docs#operation/profile-orders-notifications) @@ -184,4 +184,4 @@ moneriumPack.unsubscribe(OrderState.processed, handler) ## MoneriumPack complete React example -Check a complete [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) in the `safe-core-sdk` repo. Follow the steps in the [`README.md`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/README.md) to run the example and configure the environment variables for the pack following the [`.env.sample`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/.env.sample). +Check a complete [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) in the `safe-core-sdk` sitory. Follow the steps in the [`README.md`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/README.md) to run the example and configure the environment variables for the pack following the [`.env.sample`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/.env.sample). diff --git a/pages/safe-core-sdk/onramp-kit/guides/stripe.md b/pages/safe-core-sdk/onramp-kit/guides/stripe.md index 80a2a88b..737c9afb 100644 --- a/pages/safe-core-sdk/onramp-kit/guides/stripe.md +++ b/pages/safe-core-sdk/onramp-kit/guides/stripe.md @@ -1,10 +1,10 @@ # Integration with Stripe -The [Stripe Crypto OnRamp service](https://stripe.com/docs/crypto/overview) allows individuals to securely purchase cryptocurrencies from your application. +The [Stripe Crypto Onramp service](https://stripe.com/docs/crypto/overview) allows individuals to securely purchase cryptocurrencies from your application. ## What are we going to learn? -This guide demonstrates how to use the `StripePack` as part of the [`OnRampKit`](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) and incorporate it into your web application. +This guide demonstrates how to use the `StripePack` as part of the [`OnrampKit`](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) and incorporate it into your web application. We are going to learn how to render the Stripe widget into your page. This widget allows the use your own Ethereum address for onramping cryptocurrencies. As [Stripe API](https://stripe.com/docs/crypto/using-the-api) usage [requires a server](https://stripe.com/docs/crypto/quickstart?client=html&lang=node) to start the interaction with their services, we will also be using a [pre-deployed server](https://github.com/5afe/aa-stripe-service) and providing a public key for testing purposes. @@ -25,7 +25,7 @@ yarn add @safe-global/onramp-kit @stripe/stripe-js @stripe/crypto ## Using the `StripePack` in your Web App -The `StripePack` can be used with any frontend framework like Reactjs, Vuejs, Angular or even plain HTML and Javascript. In this example, we are using it with plain JavaScript. +The `StripePack` can be used with any frontend framework like React, Vue, Angular or even plain HTML and Javascript. In this example, we are using it with plain JavaScript. 1. Load the application and initialize the `StripePack` using the following snippet: @@ -74,11 +74,11 @@ const sessionData = await stripePack.open({ Make sure you include the `element`. Otherwise, you may get the following error: -![Error when Specifying the element ID is not provided](https://user-images.githubusercontent.com/9806858/228420761-0f24df48-03a1-4fe6-bd59-45cb4d18daf6.png) +![Error when Specifying the element ID isn't provided](https://user-images.githubusercontent.com/9806858/228420761-0f24df48-03a1-4fe6-bd59-45cb4d18daf6.png) You can also specify the default options for the widget. For example, you can specify the default wallet address, supported destination networks, and supported destination currencies. See the [Stripe API documentation](https://stripe.com/docs/crypto/using-the-api) for more details. The default options you specify using the `open` method will be passed through the Stripe API when using our provided server. When you create your own one (you need to do it on your production apps) you should do something similar. -4. Listening to events is important for understanding what is happening around. It helps us to create a proper UI in our web page. +4. Listening to events is important for understanding what's happening around. It helps us to create a proper UI in our web page. Check the [Stripe frontend events](https://stripe.com/docs/crypto/using-the-api#frontend-events) for the list of available events. @@ -100,7 +100,7 @@ stripePack.unsubscribe('onramp_ui_loaded', uiLoadedHandler) stripePack.unsubscribe('onramp_session_updated', sessionUpdatedHandler) ``` -## Testing my DApp containing the Stripe widget +## Testing my dapp containing the Stripe widget In production, each customer should pass an individual KYC process but probably you want to test your application before 😊. You can use the following test data for bypass the KYC process while in [test mode](https://stripe.com/docs/test-mode). | **Field** | **Value** | **Description** | @@ -123,10 +123,10 @@ In production, each customer should pass an individual KYC process but probably | **CVC** | 123 | Use any CVC 123 | | **Billing Zip Code** | 12345 | Use any zip code 12345 for billing | -## OnRamp Kit KYC test data - Examples +## Onramp Kit KYC test data - Examples ![KYC Personal info example](https://user-images.githubusercontent.com/9806858/228418052-30b2239a-ca19-4639-9858-4344d3ba7d45.png) ![KYC Address Example](https://user-images.githubusercontent.com/9806858/228418056-48cfa6a6-fde9-4504-a8be-ce91b03c960f.png) ![Payment Method](https://user-images.githubusercontent.com/9806858/228418059-b83b6357-a6b0-4f09-a4b2-3b89767cb4f0.png) ## StripePack complete React example -Check a complete [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) in the `safe-core-sdk` repo. Follow the steps in the [`README.md`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/README.md) to run the example and configure the environment variables (`VITE_MONERIUM_CLIENT_ID` is not necessary) for the pack following the [`.env.sample`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/.env.sample). +Check a complete [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) in the `safe-core-sdk` repository. Follow the steps in the [`README.md`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/README.md) to run the example and configure the environment variables (`VITE_MONERIUM_CLIENT_ID` isn't necessary) for the pack following the [`.env.sample`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/.env.sample). diff --git a/pages/safe-core-sdk/onramp-kit/reference.md b/pages/safe-core-sdk/onramp-kit/reference.md index bf4b128e..c2568e13 100644 --- a/pages/safe-core-sdk/onramp-kit/reference.md +++ b/pages/safe-core-sdk/onramp-kit/reference.md @@ -29,6 +29,6 @@ await pack.init(packInitOptions) After the initialization, use the methods in the pack to interact with the chosen provider. -There are some common methods (`open()`, `close()`, etc.) that can be called regardless of the package being used. +Some common methods (`open()`, `close()`, etc.) can be called regardless of the package being used. The kit creates a common interface that any pack should implement. Check the [`OnRampKitBasePack`](./OnRampKitBasePack.md) abstract class to get more details. diff --git a/pages/safe-core-sdk/onramp-kit/reference/MoneriumPack.md b/pages/safe-core-sdk/onramp-kit/reference/MoneriumPack.md index fac51c60..2f277764 100644 --- a/pages/safe-core-sdk/onramp-kit/reference/MoneriumPack.md +++ b/pages/safe-core-sdk/onramp-kit/reference/MoneriumPack.md @@ -12,7 +12,7 @@ yarn add @safe-global/onramp-kit @monerium/sdk ## Reference -The `MoneriumPack` class enables the use of Monerium services with Safe. To use it, create an instance of the pack and pass it to the `SafeOnRampKit` `init` method. +The `MoneriumPack` class enables the use of Monerium services with Safe. To use it, create an instance of the pack and pass it to the `SafeOnrampKit` `init` method. This pack allows you to "Login with Monerium" by creating a connection between your Safe address and your Monerium account. This pack starts an authentication flow that uses the Monerium SDK to gain access to your account. diff --git a/pages/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md b/pages/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md index c25bee6b..bb99af68 100644 --- a/pages/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md +++ b/pages/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md @@ -20,9 +20,9 @@ class MyPack extends OnRampKitBasePack { } ``` -## Abstract methods that OnRamp packs must implement +## Abstract methods that Onramp packs must implement -These methods are the common interface for all the OnRamp packs. Check each pack's documentation to get more details. +These methods are the common interface for all the Onramp packs. Check each pack's documentation to get more details. ### init(options?) diff --git a/pages/safe-core-sdk/onramp-kit/reference/StripePack.md b/pages/safe-core-sdk/onramp-kit/reference/StripePack.md index 2321f531..82e91c26 100644 --- a/pages/safe-core-sdk/onramp-kit/reference/StripePack.md +++ b/pages/safe-core-sdk/onramp-kit/reference/StripePack.md @@ -1,6 +1,6 @@ # StripePack -[Stripe Crypto OnRamp service](https://stripe.com/docs/crypto/overview) allows individuals to securely purchase cryptocurrencies from your application. +[Stripe Crypto Onramp service](https://stripe.com/docs/crypto/overview) allows individuals to securely purchase cryptocurrencies from your application. ## Install dependencies @@ -12,7 +12,7 @@ yarn add @safe-global/onramp-kit @stripe/stripe-js @stripe/crypto ## Reference -The `StripePack` allows users to use the Stripe Crypto OnRamp services with Safe. +The `StripePack` allows users to use the Stripe Crypto Onramp services with Safe. This pack provides a customizable widget for users to purchase cryptocurrencies using Stripe services and it can be rendered in a DOM node on a webpage. @@ -23,7 +23,7 @@ await stripePack.init() ### new StripePack(stripeConfig) -**Params** +**Parameters** - `stripeConfig` - The configuration for the Stripe pack. The options are: @@ -49,7 +49,7 @@ Loads the Stripe scripts using the public key provided in the class instantiatio Opens the Stripe widget in the chosen DOM node (CSS selector) inside a webpage. -**Params** +**Parameters** The options to be passed to this method are: @@ -69,13 +69,13 @@ StripeOpenOptions { ### close() -Closes the Stripe widget. This method shouldn't be called directly but using the `SafeOnRampKit` `close` method instead. +Closes the Stripe widget. This method shouldn't be called directly but using the `SafeOnrampKit` `close` method instead. ### subscribe(event, handler) Subscribes to authentication state changes. Check the [Stripe frontend events](https://stripe.com/docs/crypto/using-the-api#frontend-events) for the list of available events. -**Params** +**Parameters** - `event` - The event you want to subscribe from. - `handler` - The handler function that will be called when the event is triggered. @@ -84,7 +84,7 @@ Subscribes to authentication state changes. Check the [Stripe frontend events](h Unsubscribes from authentication state changes. -**Params** +**Parameters** - `event` - The event you want to unsubscribe from. - `handler` - The handler function that will be called when the event is triggered. diff --git a/pages/safe-core-sdk/protocol-kit.md b/pages/safe-core-sdk/protocol-kit.md index d0da795e..0257fc35 100644 --- a/pages/safe-core-sdk/protocol-kit.md +++ b/pages/safe-core-sdk/protocol-kit.md @@ -19,7 +19,7 @@ First, we'll need to install some dependencies from `safe-core-sdk` and the `eth To interact with Ethereum and other EVM blockchains in Node, we can either use: web3.js or ethers.js. In this tutorial, we'll use the ethers.js library. To use `web3js`, see [Instantiate an EthAdapter section in Guide: Integrating the Safe Core SDK](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md#instantiate-an-ethadapter). -The Protocol Kit is compatible only with **ethers.js v6**. Make sure you specify this version when installing the SDK. +The Protocol Kit's compatible only with **ethers.js v6**. Make sure you specify this version when installing the SDK. You can store your environment variables such as private keys in a `.env` file. To read easily from `.env` files, use the `dotenv` library. diff --git a/pages/safe-core-sdk/protocol-kit/reference.md b/pages/safe-core-sdk/protocol-kit/reference.md index 32e956d6..4b69d13c 100644 --- a/pages/safe-core-sdk/protocol-kit/reference.md +++ b/pages/safe-core-sdk/protocol-kit/reference.md @@ -24,7 +24,7 @@ const safeFactory = await SafeFactory.create({ ethAdapter }) - The `isL1SafeSingleton` flag - There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. + Two versions of the Safe contracts are available: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that doesn't trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeSingleton` flag to force the use of the `Safe.sol` contract. @@ -34,7 +34,7 @@ const safeFactory = await SafeFactory.create({ ethAdapter }) - The `contractNetworks` property - If the Safe contracts are not deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you. + If the Safe contracts aren't deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you. ```typescript import { ContractNetworksConfig } from '@safe-global/protocol-kit' @@ -163,7 +163,7 @@ import Safe from '@safe-global/protocol-kit' const safeSdk = await Safe.create({ ethAdapter, safeAddress }) ``` -Initialization of a not deployed Safe using the `predictedSafe` property. Because Safes are deployed in a deterministic way, passing a `predictedSafe` will allow to initialize the SDK with the Safe configuration and use it to some extent before it is deployed: +Initialization of a not deployed Safe using the `predictedSafe` property. Because Safes are deployed in a deterministic way, passing a `predictedSafe` will allow to initialize the SDK with the Safe configuration and use it to some extent before it's deployed: ```typescript import Safe, { PredictedSafeProps } from '@safe-global/protocol-kit' @@ -178,7 +178,7 @@ const safeSdk = await Safe.create({ ethAdapter, predictedSafe }) - The `isL1SafeSingleton` flag - There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. + Two versions of the Safe contracts are available: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that doesn't trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeSingleton` flag to force the use of the `Safe.sol` contract. @@ -188,7 +188,7 @@ const safeSdk = await Safe.create({ ethAdapter, predictedSafe }) - The `contractNetworks` property - If the Safe contracts are not deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you. + If the Safe contracts aren't deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you. ```typescript import { ContractNetworksConfig } from '@safe-global/protocol-kit' @@ -243,7 +243,7 @@ const safeSdk = await safeSdk.connect({ ethAdapter, predictedSafe }) - The `isL1SafeSingleton` flag - There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. + Two versions of the Safe contracts are available: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that doesn't trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks. By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeSingleton` flag to force the use of the `Safe.sol` contract. @@ -253,7 +253,7 @@ const safeSdk = await safeSdk.connect({ ethAdapter, predictedSafe }) - The `contractNetworks` property - If the Safe contracts are not deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you. + If the Safe contracts aren't deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you. ```typescript import { ContractNetworksConfig } from '@safe-global/protocol-kit' @@ -437,7 +437,7 @@ const safeTransaction = await safeSdk.createTransaction({ }) ``` -If the optional properties are not manually set, the Safe transaction returned will have the default value for each one: +If the optional properties aren't manually set, the Safe transaction returned will have the default value for each one: - `operation`: `OperationType.Call` (0) is the default value. - `safeTxGas`: The right gas estimation is the default value. @@ -705,7 +705,7 @@ Returns the Safe transaction to add an owner and optionally change the threshold ```typescript const params: AddOwnerTxParams = { ownerAddress, - threshold // Optional. If `threshold` is not provided the current threshold will not change. + threshold // Optional. If `threshold` isn't provided the current threshold won't change. } const safeTransaction = await safeSdk.createAddOwnerTx(params) const txResponse = await safeSdk.executeTransaction(safeTransaction) @@ -726,7 +726,7 @@ Returns the Safe transaction to remove an owner and optionally change the thresh ```typescript const params: RemoveOwnerTxParams = { ownerAddress, - newThreshold // Optional. If `newThreshold` is not provided, the current threshold will be decreased by one. + newThreshold // Optional. If `newThreshold` isn't provided, the current threshold will be decreased by one. } const safeTransaction = await safeSdk.createRemoveOwnerTx(params) const txResponse = await safeSdk.executeTransaction(safeTransaction) diff --git a/pages/safe-core-sdk/relay-kit/guides/gelato.md b/pages/safe-core-sdk/relay-kit/guides/gelato.md index 978d7151..093a395c 100644 --- a/pages/safe-core-sdk/relay-kit/guides/gelato.md +++ b/pages/safe-core-sdk/relay-kit/guides/gelato.md @@ -16,7 +16,7 @@ yarn add ethers @safe-global/relay-kit @safe-global/protocol-kit @safe-global/sa ## Relay Kit options -Currently, the Relay Kit is only compatible with the [Gelato relay](https://docs.gelato.network/developer-services/relay). There are 2 different ways to use the Gelato relay: +Currently, the Relay Kit's only compatible with the [Gelato relay](https://docs.gelato.network/developer-services/relay). The Gelato relay can be used in two ways: 1. [Gelato 1Balance](https://docs.gelato.network/developer-services/relay/payment-and-fees/1balance) 2. [Gelato SyncFee](https://docs.gelato.network/developer-services/relay/quick-start/callwithsyncfee) diff --git a/pages/safe-smart-account/demo.md b/pages/safe-smart-account/demo.md index d0eeb786..205f618d 100644 --- a/pages/safe-smart-account/demo.md +++ b/pages/safe-smart-account/demo.md @@ -2,15 +2,15 @@ This page is taken from https://github.com/5afe/account-abstraction-demo-ui # Account Abstraction demo app -[The Safe{Core} SDK](https://github.com/safe-global/safe-core-sdk) allows builders to add account abstraction functionality into their apps. This demo is an example on how to use our different packages (Auth Kit, OnRamp Kit & Relay Kit). +[The Safe{Core} SDK](https://github.com/safe-global/safe-core-sdk) allows builders to add account abstraction functionality into their apps. This demo is an example on how to use our different packages (Auth Kit, Onramp Kit & Relay Kit). -See the [Safe{Core} Account Abstraction SDK Docs](https://docs.safe.global/learn/safe-core-account-abstraction-sdk) for more details. +See the [Safe{Core} Account Abstraction SDK Docs](../safe-core-sdk/overview.md) for more details. ## Installation To run this project locally: -Install deps: +Install dependencies: ```bash yarn install diff --git a/pages/safe-smart-account/modules.md b/pages/safe-smart-account/modules.md index e618c418..c773ea35 100644 --- a/pages/safe-smart-account/modules.md +++ b/pages/safe-smart-account/modules.md @@ -1,6 +1,6 @@ # Safe Modules -Safe Modules add custom features to Safe contracts. They are smart contracts that add functionality to Safe while separating module logic from Safe's core contracts. A basic Safe does not require any modules. Adding and removing a module requires confirmation from the configured threshold number of owners. Events are emitted whenever a module is added or removed and a module transaction succeeds or fails. +Safe Modules add custom features to Safe contracts. They're smart contracts that add functionality to Safe while separating module logic from Safe's core contracts. A basic Safe doesn't require any modules. Adding and removing a module requires confirmation from the configured threshold number of owners. Events are emitted whenever a module is added or removed and a module transaction succeeds or fails. Safe Modules can include daily spending allowances, amounts that can be spent without the approval of other owners, recurring transactions modules, and standing orders performed on a recurring date. For example, paying your rent or social recovery modules may allow you to recover a Safe if you lose access to owner accounts. From c9461926ddd2f0064abd7900e78ffed681864c44 Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 11:39:56 +0100 Subject: [PATCH 039/108] Fix vale errors --- .github/styles/Vocab/default/accept.txt | 12 ++++++++++++ pages/miscellaneous/bug-bounty-program.md | 8 ++++---- pages/miscellaneous/past-paid-bounties.md | 2 +- pages/safe-apps/release.md | 2 +- pages/safe-core-api/rpc-requirements.md | 12 ++++++------ .../safe-core-api/safe-transaction-service.md | 4 ++-- pages/safe-core-sdk/api-kit.md | 2 +- .../safe-core-sdk/auth-kit/guides/web3auth.md | 4 ++-- .../auth-kit/reference/AuthKitBasePack.md | 4 ++-- .../auth-kit/reference/Web3AuthModalPack.md | 18 +++++++++--------- .../integrating-the-safe-core-sdk.mdx | 2 +- .../onramp-kit/guides/monerium.md | 6 +++--- .../safe-core-sdk/onramp-kit/guides/stripe.md | 6 +++--- .../onramp-kit/reference/MoneriumPack.md | 14 +++++++------- .../onramp-kit/reference/StripePack.md | 2 +- 15 files changed, 55 insertions(+), 43 deletions(-) diff --git a/.github/styles/Vocab/default/accept.txt b/.github/styles/Vocab/default/accept.txt index ae428f2b..46898fae 100644 --- a/.github/styles/Vocab/default/accept.txt +++ b/.github/styles/Vocab/default/accept.txt @@ -15,9 +15,11 @@ Astar aurora Aurora Auth Kit +auth_code Autobahn Avax binance +Binance BNB Blockchain Blocknative @@ -30,8 +32,10 @@ CORS CRA Canto Cascadia +celo Celo Chiado +Chainlist Client Gateway CloudWalk Config @@ -44,6 +48,8 @@ DAO Darwinia EIP erigon +Erigon +EURe ERC ETH EVM @@ -59,6 +65,7 @@ Fantom Foesenek Fuji Fuse +gasless GC Gelato GitHub @@ -74,6 +81,8 @@ Haqq Holesky IPFS IoTeX +Infura +Javascript KCC Kanazawa Karura @@ -115,8 +124,10 @@ readme REI Renan RPC +react React Relay Kit +relayer Rethereum Rinkeby Rollux @@ -194,3 +205,4 @@ zkevm zkEVM zksync zkSync +Zoltu diff --git a/pages/miscellaneous/bug-bounty-program.md b/pages/miscellaneous/bug-bounty-program.md index c1bcfce1..3dc03928 100644 --- a/pages/miscellaneous/bug-bounty-program.md +++ b/pages/miscellaneous/bug-bounty-program.md @@ -1,6 +1,6 @@ # Bug Bounty -Participate in the Safe Bug Bounty program to find bugs and get rewards. Earn up to $1,000,000 for every bug you report. Please carefully read through the [submission process](./bug-bounty-program.md#submission-process) section and get in touch via [bounty@safe.global](mailto:bounty@safe.global). You can also review the [bug bounties](./past-paid-bounties.md) we have paid in the past. +Participate in the Safe Bug Bounty program to find bugs and get rewards. Earn up to $1,000,000 for every bug you report. Please carefully read through the [submission process](./bug-bounty-program.md#submission-process) section and get in touch via [bounty@safe.global](mailto:bounty@safe.global). You can also review the [bug bounties](./past-paid-bounties.md) we've paid in the past. ## Audits @@ -77,7 +77,7 @@ For the allowance module, please refer to the corresponding [README file](https: ## Compensation -All bugs (they do not necessarily need to lead to a redeploy) will be considered for a bounty, but the severity of the threat will change the reward. Below are the reward levels for each threat severity and an example of such a threat. +All bugs (they don't necessarily need to lead to a redeploy) will be considered for a bounty, but the severity of the threat will change the reward. Below are the reward levels for each threat severity and an example of such a threat. ### High threat: Up to $1,000,000 @@ -112,8 +112,8 @@ _We ask that:_ * You give us reasonable time to investigate and mitigate an issue you report before making public any information about the report or sharing such information with others. * You make a good faith effort to avoid privacy violations and disruptions to others, including (but not limited to) data destruction and interruption or degradation of our services. -* You do not exploit a security issue you discover for any reason. This includes demonstrating additional risk, such as an attempted compromise of sensitive company data or probing for additional issues. -* You do not violate any other applicable laws or regulations. +* You don't exploit a security issue you discover for any reason. This includes demonstrating additional risk, such as an attempted compromise of sensitive company data or probing for additional issues. +* You don't violate any other applicable laws or regulations. Public disclosure of the bug or the indication of an intention to exploit it on Mainnet will make the report ineligible for a bounty. If in doubt about other aspects of the bounty, most of the [Ethereum Foundation bug bounty program rules](https://bounty.ethereum.org) will apply here. diff --git a/pages/miscellaneous/past-paid-bounties.md b/pages/miscellaneous/past-paid-bounties.md index 7dd37af3..ac1df175 100644 --- a/pages/miscellaneous/past-paid-bounties.md +++ b/pages/miscellaneous/past-paid-bounties.md @@ -12,7 +12,7 @@ This bug was submitted by [Micah Zoltu](https://twitter.com/micahzoltu). It was ## Transaction failure when receiving funds via `transfer` or `send` -Since the beginning of the bug bounty period, the contract update has been live on the Ethereum Mainnet. We performed extensive internal testing and discovered an edge case where a Safe could not receive funds from another contract via `send` or `transfer`. This was due to additional gas costs caused by the [emission of additional events](https://github.com/safe-global/safe-contracts/pull/135) and [gas price changes](https://eips.ethereum.org/EIPS/eip-1884) in the latest hard fork. This issue has been fixed, and more details can be found on [GitHub](https://github.com/safe-global/safe-contracts/issues/149). +Since the beginning of the bug bounty period, the contract update has been live on the Ethereum Mainnet. We performed extensive internal testing and discovered an edge case where a Safe couldn't receive funds from another contract via `send` or `transfer`. This was due to additional gas costs caused by the [emission of additional events](https://github.com/safe-global/safe-contracts/pull/135) and [gas price changes](https://eips.ethereum.org/EIPS/eip-1884) in the latest hard fork. This issue has been fixed, and more details can be found on [GitHub](https://github.com/safe-global/safe-contracts/issues/149). ## Duplicate owners during setup could render Safe unusable diff --git a/pages/safe-apps/release.md b/pages/safe-apps/release.md index b4a5e430..59fd2b91 100644 --- a/pages/safe-apps/release.md +++ b/pages/safe-apps/release.md @@ -58,7 +58,7 @@ Create an issue in our [repository](https://github.com/5afe/safe-apps-list) once ## Official launch and beyond -After we have reviewed and integrated your Safe App, the App will first be available in the [staging environment](https://safe-wallet-web.staging.5afe.dev) of the Safe for you to do a final review. We would then approach you to coordinate the launch and a joint announcement. +After we've reviewed and integrated your Safe App, the App will first be available in the [staging environment](https://safe-wallet-web.staging.5afe.dev) of the Safe for you to do a final review. We would then approach you to coordinate the launch and a joint announcement. At any point after the launch, if you or your users encounter issues with the Safe App or want to release an update to an existing Safe App, please contact us via [Discord](https://chat.safe.global). diff --git a/pages/safe-core-api/rpc-requirements.md b/pages/safe-core-api/rpc-requirements.md index 830bb963..5a8005b4 100644 --- a/pages/safe-core-api/rpc-requirements.md +++ b/pages/safe-core-api/rpc-requirements.md @@ -1,15 +1,15 @@ # RPC Requirements -### What are the RPC requirements for the transaction service? +### What are the RPC requirements for the Transaction Service? -To run the transaction service in **tracing mode** you will need a tracing compatible node: +To run the Transaction Service in **tracing mode** you will need a tracing compatible node: * [Erigon ](https://github.com/ledgerwatch/erigon)node (recommended). * Deprecated [OpenEthereum ](https://github.com/openethereum/openethereum)node with tracing enabled (`--tracing` flag) if it's still supported on your network. * [Nethermind ](https://nethermind.io/)(**archive mode** so tracing is enabled). * **Any RPC** that supports **eth_getLogs** if using the **Safe L2 Version.** From Safe **v1.3.0** there's an alternative and **recommended way** to avoid using tracing, the **L2 Safe version** ([https://github.com/safe-global/safe-deployments/blob/main/src/assets/v1.3.0/gnosis_safe_l2.json](https://github.com/safe-global/safe-deployments/blob/main/src/assets/v1.3.0/gnosis_safe_l2.json)) that emits events, so no tracing node is required. This is the approach used in networks like _Polygon_ or _Binance Smart Chain_ where fees are cheap and emitting events don't impact the user: - * A transaction service configured **with a tracing** node can index L2 and non L2 versions of the Safe contracts. - * A transaction service configured **without a tracing** node can only index L2 versions of the Safe contracts. Indexing mode should not be changed after initializing the service, as the database could become corrupted, so if a tracing node was not set up it shouldn't be added later. The opposite is also problematic. + * A Transaction Service configured **with a tracing** node can index L2 and non L2 versions of the Safe contracts. + * A Transaction Service configured **without a tracing** node can only index L2 versions of the Safe contracts. Indexing mode shouldn't be changed after initializing the service, as the database could become corrupted, so if a tracing node wasn't set up it shouldn't be added later. The opposite is also problematic. ### What RPC methods are used? @@ -30,9 +30,9 @@ For the regular version of the Safe (not L2), tracing endpoints are used: For the L2 version of the Safe, no special RPC methods are used. The most demanding one will be [eth_getLogs](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) to get the Safe events. -### How many queries will the transaction service do to the RPC? +### How many queries will the Transaction Service do to the RPC? -That's not written in stone. Transaction service has some environment variables that can be configured to set a limit on the number of blocks that are processed together (`ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX`), but the default behaviour is trying to detect the best configuration for every network similar to how [TCP congestion control](https://en.wikipedia.org/wiki/TCP_congestion_control) works. Indexer tries to process a low number of blocks (currently 50). Depending on that: +That's not written in stone. Transaction Service has some environment variables that can be configured to set a limit on the number of blocks that are processed together (`ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX`), but the default behaviour is trying to detect the best configuration for every network similar to how [TCP congestion control](https://en.wikipedia.org/wiki/TCP_congestion_control) works. Indexer tries to process a low number of blocks (currently 50). Depending on that: * If the request takes **less than 1 second**, the node can process more. The number of blocks to fetch is duplicated for the next request. * If the request takes **less than 3 seconds**, the number of blocks to process is incremented by a small amount (currently 20). diff --git a/pages/safe-core-api/safe-transaction-service.md b/pages/safe-core-api/safe-transaction-service.md index 97d8108c..3df55d1d 100644 --- a/pages/safe-core-api/safe-transaction-service.md +++ b/pages/safe-core-api/safe-transaction-service.md @@ -35,7 +35,7 @@ For L1 chains, the indexer calls tracing methods. For the oldest blocks, [`trace For L2 chains, the indexing is by events with the [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) method with the corresponding topics. -From Safe creation, the transaction service stores each contract change on the `SafeStatus` model as `nonce`, `owners`, etc. The latest and current status of a Safe is stored as `SafeLastStatus` for easy database access and optimization. +From Safe creation, the Transaction Service stores each contract change on the `SafeStatus` model as `nonce`, `owners`, etc. The latest and current status of a Safe is stored as `SafeLastStatus` for easy database access and optimization. The following endpoints show the current indexing status of the Safe Transaction Service: - `/v1/about/indexing/` @@ -149,7 +149,7 @@ safe_address = "TheAliceAndBobSafeAddress" safe = Safe(safe_address, eth_client) safe_message_hash = safe.get_message_hash(message_hash) -# Alice is going to create the message on safe transaction service +# Alice is going to create the message on safe Transaction Service # First sign the safe_message_hash signature_alice = alice.signHash(safe_message_hash) diff --git a/pages/safe-core-sdk/api-kit.md b/pages/safe-core-sdk/api-kit.md index d1f56a54..88c61b5f 100644 --- a/pages/safe-core-sdk/api-kit.md +++ b/pages/safe-core-sdk/api-kit.md @@ -103,7 +103,7 @@ await safeApiKit.proposeTransaction({ ## Retrieve the pending transactions -Different methods in the API Kit are available to retrieve pending transactions depending on the situation. To retrieve a transaction given the Safe transaction hash use the uncommented method. +Different methods in the API Kit are available to retrieve pending transactions depending on the situation. To retrieve a transaction given the Safe transaction hash use the method that is not commented. ```typescript const transaction = await service.getTransaction("") diff --git a/pages/safe-core-sdk/auth-kit/guides/web3auth.md b/pages/safe-core-sdk/auth-kit/guides/web3auth.md index 3c9a6390..f1330034 100644 --- a/pages/safe-core-sdk/auth-kit/guides/web3auth.md +++ b/pages/safe-core-sdk/auth-kit/guides/web3auth.md @@ -15,7 +15,7 @@ npm i @safe-global/auth-kit @web3auth/base@4.6.0 @web3auth/modal@4.6.2 @web3auth ## Create a Web3AuthModalPack instance -We are going to use the provided `Web3AuthModalPack` exported in the `@safe-global/auth-kit` package. +We're going to use the provided `Web3AuthModalPack` exported in the `@safe-global/auth-kit` package. Create an instance of the [Web3AuthModalPack](https://github.com/safe-global/safe-core-sdk/tree/main/packages/auth-kit/src/packs/web3auth/Web3AuthModalPack.ts) using the required `Web3AuthConfig` configuration object. @@ -82,7 +82,7 @@ Once your `Web3AuthModalPack` instance is created, use the `signIn()` method to Important considerations about Web3Auth are: -1) When you sign in with the same social account, the same Ethereum address will be returned for the same Web3Auth client ID. Web3Auth [scopes the creation of the wallet](https://web3auth.io/docs/troubleshooting/different-wallet-address-issue) (address) to the DApp, so when interacting with other DApps using Web3Auth, a different Ethereum address will be returned. This is by design and to enhanced security. +1) When you sign in with the same social account, the same Ethereum address will be returned for the same Web3Auth client ID. Web3Auth [scopes the creation of the wallet](https://web3auth.io/docs/troubleshooting/different-wallet-address-issue) (address) to the dapp, so when interacting with other dapps using Web3Auth, a different Ethereum address will be returned. This is by design and to enhanced security. 2) If you sign in with an email and then with a social account using the same email (e.g. "Sign in with Google"), a different Ethereum address might be returned even the same email address is used. diff --git a/pages/safe-core-sdk/auth-kit/reference/AuthKitBasePack.md b/pages/safe-core-sdk/auth-kit/reference/AuthKitBasePack.md index 81125fb9..c404543a 100644 --- a/pages/safe-core-sdk/auth-kit/reference/AuthKitBasePack.md +++ b/pages/safe-core-sdk/auth-kit/reference/AuthKitBasePack.md @@ -67,8 +67,8 @@ Returns the Ethereum address extracted from the provider retrieved by `getProvid Returns the list of Safes associated with the signer address by calling the `getAddress()` method internally. -**Params** -- `txServiceUrl`: The Safe Transaction Service url to retrieve the Safes associated with the owner (signer). +**Parameters** +- `txServiceUrl`: The Safe Transaction Service URL to retrieve the Safes associated with the owner (signer). **Returns** - `safes[]`: The list of Safes associated with the owner (signer). diff --git a/pages/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md b/pages/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md index baf974ab..92d771fd 100644 --- a/pages/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md +++ b/pages/safe-core-sdk/auth-kit/reference/Web3AuthModalPack.md @@ -1,6 +1,6 @@ # Web3AuthModalPack -Web3Auth is a pluggable authentication infrastructure for Web3 wallets and applications. It simplifies onboarding for both mainstream and crypto native users, offering experiences tailored to their preferences. It supports all social logins, web and mobile native platforms, wallets, and other key management methods, creating a cryptographic key provider specific to the user and application. +Web3Auth is a plug-and-play authentication infrastructure for Web3 wallets and applications. It simplifies on-boarding for both mainstream and crypto native users, offering experiences tailored to their preferences. It supports all social logins, web and mobile native platforms, wallets, and other key management methods, creating a cryptographic key provider specific to the user and application. The `Web3AuthModalPack` enables the use of [Web3Auth modal SDK](https://web3auth.io/docs/sdk/pnp/web/modal) with added Safe capabilities, such as retrieving the related Safe addresses for a given externally-owned account created using Web3Auth services. @@ -34,7 +34,7 @@ await web3AuthModalPack.init(web3AuthModalOptions, [adapters], modalConfig) ### new Web3AuthModalPack(web3AuthConfig) -**Params** +**Parameters** - `web3AuthConfig` - The configuration used in the instantiation of the `Web3AuthModalPack` class accepts the following options: @@ -43,7 +43,7 @@ Web3AuthConfig { txServiceUrl: string } ``` -- `txServiceUrl` - The URL for the Safe transaction service. It's used to retrieve the Safe addresses for an externally-owned account created using Web3Auth services. It's required to use the `Web3AuthModalPack` with Safe. +- `txServiceUrl` - The URL of the Safe Transaction Service. It's used to retrieve the Safe addresses for an externally-owned account created using Web3Auth services. It's required to use the `Web3AuthModalPack` with Safe. **Caveats** You should always call the `init()` method afterwards before interacting with the pack. @@ -54,9 +54,9 @@ The init method initialize the required Web3Auth modal SDK and Safe services. It It initializes as well the web3 provider we can retrieve afterwards using the `getProvider()` method. -**Params** +**Parameters** -- `web3AuthModalOptions` - The options to create the `Web3Auth` [instance](https://web3auth.io/docs/sdk/pnp/web/modal/initialize#instantiating-web3auth). You can send a configuration object matching the [official one](https://web3auth.io/docs/sdk/pnp/web/modal/initialize#web3authoptions) as we passthrough the options to the `Web3Auth` instance when we instantiate it inside the pack. +- `web3AuthModalOptions` - The options to create the `Web3Auth` [instance](https://web3auth.io/docs/sdk/pnp/web/modal/initialize#instantiating-web3auth). You can send a configuration object matching the [official one](https://web3auth.io/docs/sdk/pnp/web/modal/initialize#web3authoptions) as we pass through the options to the `Web3Auth` instance when we instantiate it inside the pack. - `adapters` - The adapters for the Web3Auth modal sdk. You can use any of the [supported adapters](https://web3auth.io/docs/sdk/pnp/web/adapters/). This prop accepts an array of adapters and the `Web3AuthModalPack` will call the [`configureAdapter`](https://web3auth.io/docs/sdk/pnp/web/no-modal/initialize#configureadapteradapter) method for each one of them internally. ⚠️ Remember to add the corresponding package for each adapter (e.g `@web3auth/openlogin-adapter` for OpenLogin). @@ -82,8 +82,8 @@ AuthKitSignInData { **Caveats** -- To get the Safe addresses, instantiate the authKit with the `txServiceUrl` property in the config object. Otherwise, only the EOA will be returned. -- ⚠️ This method currently returns the Safe addresses which the EOA is the owner of. It doesn't create a Safe. We are investigating ways to enhance the Auth Kit and the associated flows. ⚠️ +- To get the Safe addresses, instantiate the Auth Kit with the `txServiceUrl` property in the config object. Otherwise, only the EOA will be returned. +- ⚠️ This method currently returns the Safe addresses which the EOA is the owner of. It doesn't create a Safe. We're investigating ways to enhance the Auth Kit and the associated flows. ⚠️ ### signOut() @@ -114,7 +114,7 @@ A web3 provider. Allow to subscribe to authentication state changes. The event depends on the pack you are using so read the chosen pack documentation. -**Params** +**Parameters** - `event` - The event you want to subscribe to. The events are defined [in the documentation](https://web3auth.io/docs/sdk/pnp/web/no-modal/initialize#subscribing-the-lifecycle-events). - `handler` - The handler function that will be called when the event is triggered. @@ -123,7 +123,7 @@ Allow to subscribe to authentication state changes. The event depends on the pac Allow to unsubscribe to authentication state changes -**Params** +**Parameters** - `event` - The event you want to unsubscribe to. - `handler` - The handler function that will be called when the event is triggered. diff --git a/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx b/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx index 2efeeac6..15ab890b 100644 --- a/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx +++ b/pages/safe-core-sdk/integrating-the-safe-core-sdk.mdx @@ -199,7 +199,7 @@ const nonce = await safeService.getNextNonce(safeAddress) ## 5. Propose the transaction to the service -Once we have the Safe transaction object we can share it with the other owners of the Safe so they can sign it. To send the transaction to the Safe Transaction Service we need to call the method `proposeTransaction` from the Safe API Kit instance and pass an object with the properties: +Once we've the Safe transaction object we can share it with the other owners of the Safe so they can sign it. To send the transaction to the Safe Transaction Service we need to call the method `proposeTransaction` from the Safe API Kit instance and pass an object with the properties: - `safeAddress`: The Safe address. - `safeTransactionData`: The `data` object inside the Safe transaction object returned from the method `createTransaction`. diff --git a/pages/safe-core-sdk/onramp-kit/guides/monerium.md b/pages/safe-core-sdk/onramp-kit/guides/monerium.md index baee0bb7..054f0a00 100644 --- a/pages/safe-core-sdk/onramp-kit/guides/monerium.md +++ b/pages/safe-core-sdk/onramp-kit/guides/monerium.md @@ -64,7 +64,7 @@ Take a look to the Monerium web page URL. You will see that the query string inc - `signature`: Always "0x". It means the origin wallet is a multisig, just like the Safe. Monerium will then verify for onchain signatures in your Safe contract - `chain`: The Monerium selected chain. The value is automatically calculated using the `safeSdk` instance. - `network`: The Monerium selected network. The value is automatically calculated using the `safeSdk` instance. -- `redirect_uri`: The `redirectUrl` you sent in the `open` method. Once authenticated Monerium dashboard will redirect to that url. +- `redirect_uri`: The `redirectUrl` you sent in the `open` method. Once authenticated Monerium dashboard will redirect to that URL. ⚠️ It's important to be aware of what's happening during this initial interaction. A `signMessage` transaction accepting the [required Monerium message](https://monerium.dev/api-docs#operation/auth) will be proposed to your Safe the first time you try to link your Safe address. To confirm and execute it, you must also add the remaining signatures in the Safe UI and execute the transaction. @@ -97,7 +97,7 @@ const balances = await moneriumClient.getBalances() const orders = await moneriumClient.getOrders() ``` -5. When you reload a page, you usually want to stay authenticated as long as the tokens are valid. To do this, we have another way to `open()` the `MoneriumPack`. +5. When you reload a page, you usually want to stay authenticated as long as the tokens are valid. To do this, we've another way to `open()` the `MoneriumPack`. Once authenticated in step 4, you can store the `refresh_token` found in the `bearerProfile` property of the `safeMoneriumClient` using browser storage methods. @@ -151,7 +151,7 @@ Once the transaction is recorded on the blockchain, the token is burned and the 7. Listening to events is important for understanding what's happening around. It helps us to create a proper UI in our web page. -You probably want to know when the order is completed. For this you can listen to events using the [Monerium API websockets](https://monerium.dev/api-docs#operation/profile-orders-notifications) +You probably want to know when the order is completed. For this you can listen to events using the [Monerium API web sockets](https://monerium.dev/api-docs#operation/profile-orders-notifications) Connecting to the socket is easy, just use the `moneriumPack` instance along with the `subscribe()` and `unsubscribe()` methods. diff --git a/pages/safe-core-sdk/onramp-kit/guides/stripe.md b/pages/safe-core-sdk/onramp-kit/guides/stripe.md index 737c9afb..322ae6c8 100644 --- a/pages/safe-core-sdk/onramp-kit/guides/stripe.md +++ b/pages/safe-core-sdk/onramp-kit/guides/stripe.md @@ -6,7 +6,7 @@ The [Stripe Crypto Onramp service](https://stripe.com/docs/crypto/overview) allo This guide demonstrates how to use the `StripePack` as part of the [`OnrampKit`](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) and incorporate it into your web application. -We are going to learn how to render the Stripe widget into your page. This widget allows the use your own Ethereum address for onramping cryptocurrencies. As [Stripe API](https://stripe.com/docs/crypto/using-the-api) usage [requires a server](https://stripe.com/docs/crypto/quickstart?client=html&lang=node) to start the interaction with their services, we will also be using a [pre-deployed server](https://github.com/5afe/aa-stripe-service) and providing a public key for testing purposes. +We're going to learn how to render the Stripe widget into your page. This widget allows the use your own Ethereum address for onramping cryptocurrencies. As [Stripe API](https://stripe.com/docs/crypto/using-the-api) usage [requires a server](https://stripe.com/docs/crypto/quickstart?client=html&lang=node) to start the interaction with their services, we will also be using a [pre-deployed server](https://github.com/5afe/aa-stripe-service) and providing a public key for testing purposes. ![The Stripe widget](https://b.stripecdn.com/docs-statics-srv/assets/crypto-onramp-overview.c4c0682697f2cd4c1c2769c3c5e08506.png) @@ -15,7 +15,7 @@ We are going to learn how to render the Stripe widget into your page. This widge 1. [Node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) 2. [Stripe account to get your own public and private keys](https://dashboard.stripe.com/register) 3. A deployed server ([example](https://github.com/5afe/aa-stripe-service)) for communicating with Stripe APIs. - We are providing both the public key and the server for testing purposes but you must use your own public key and server in production. + We're providing both the public key and the server for testing purposes but you must use your own public key and server in production. ## Install dependencies @@ -25,7 +25,7 @@ yarn add @safe-global/onramp-kit @stripe/stripe-js @stripe/crypto ## Using the `StripePack` in your Web App -The `StripePack` can be used with any frontend framework like React, Vue, Angular or even plain HTML and Javascript. In this example, we are using it with plain JavaScript. +The `StripePack` can be used with any frontend framework like React, Vue, Angular or even plain HTML and Javascript. In this example, we're using it with plain JavaScript. 1. Load the application and initialize the `StripePack` using the following snippet: diff --git a/pages/safe-core-sdk/onramp-kit/reference/MoneriumPack.md b/pages/safe-core-sdk/onramp-kit/reference/MoneriumPack.md index 2f277764..d805e50a 100644 --- a/pages/safe-core-sdk/onramp-kit/reference/MoneriumPack.md +++ b/pages/safe-core-sdk/onramp-kit/reference/MoneriumPack.md @@ -26,7 +26,7 @@ await moneriumPack.init(moneriumInitOptions) ### `new MoneriumPack(moneriumConfig)` -**Params** +**Parameters** - `moneriumConfig` - The configuration for the Monerium pack. The options are: @@ -53,7 +53,7 @@ You should always call the `init()` method afterwards before interacting with th The `init` method initializes the Monerium SDK and the Safe services by creating a new instance of the [`SafeMoneriumClient`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/src/packs/monerium/SafeMoneriumClient.ts) class. This class extends the [`MoneriumClient`](https://github.com/monerium/js-sdk/blob/main/libs/sdk/src/client.ts) class from the Monerium SDK and adds extra features to use it with the Safe services. -**Params** +**Parameters** The `MoneriumInitOptions` options to be passed to the `init` method are: @@ -69,7 +69,7 @@ MoneriumInitOptions { The `open()` method initiates the authentication process with Monerium. It opens a popup window with the Monerium authentication page. -**Params** +**Parameters** The `MoneriumOpenOptions` options to be passed to the `open` method are: @@ -84,7 +84,7 @@ MoneriumOpenOptions { - `redirectUrl` - The Monerium SDK requires a redirect URL. This URI will be used to send the user back to the app after they complete the authentication process. If you Use the open method with the `redirectUrl` parameter alone. This will open the Monerium web page for Sign In or Sign Up. -- `authCode` - This code is returned as a query parameter (auth_code) after an user has successfully signed in or signed up. The typical use case for this code is to get access to the resources (Get a token) through the Monerium SDK. Once authenticated, the dApp can call again the `open()` method with then `authCode` obtained from the query string. +- `authCode` - This code is returned as a query parameter (auth_code) after an user has successfully signed in or signed up. The typical use case for this code is to get access to the resources (Get a token) through the Monerium SDK. Once authenticated, the dapp can call again the `open()` method with then `authCode` obtained from the query string. - `refreshToken` - This token will be used to get access to the resources through the Monerium SDK. The typical use case should be to keep it in the browser storage after authenticating with the `authCode` and use it to authenticate in subsequent application openings by calling the `open()` method with the `refreshToken` alone. @@ -118,13 +118,13 @@ And it will do the following: **Caveats** -- The order we use internally in the SDK for evaluating the `redirectUrl`, `authCode` and `refreshToken` is important. Each property opens a different flow with Monerium and we evaluate the presence of the `authCode`, then the `refreshToken` and `redirectUrl` as default. So have this in mind if you use all of them together in yout app +- The order we use internally in the SDK for evaluating the `redirectUrl`, `authCode` and `refreshToken` is important. Each property opens a different flow with Monerium and we evaluate the presence of the `authCode`, then the `refreshToken` and `redirectUrl` as default. Have this in mind if you use all of them together in your app ### `subscribe(event, handler)` You can subscribe to [order status changes](https://monerium.dev/api-docs#operation/profile-orders-notifications) through the Monerium API. -**Params** +**Parameters** - `event` - The event you want to subscribe to. You can choose between one of the following: @@ -143,7 +143,7 @@ MoneriumEvent { Allow to unsubscribe to authentication state changes. -**Params** +**Parameters** - `event` - The event you want to unsubscribe to. - `handler` - The handler function that will be called when the event is triggered. diff --git a/pages/safe-core-sdk/onramp-kit/reference/StripePack.md b/pages/safe-core-sdk/onramp-kit/reference/StripePack.md index 82e91c26..9851989b 100644 --- a/pages/safe-core-sdk/onramp-kit/reference/StripePack.md +++ b/pages/safe-core-sdk/onramp-kit/reference/StripePack.md @@ -36,7 +36,7 @@ StripeConfig { The `stripePublicKey` is the public key for your Stripe account. You can get one using [your account](https://stripe.com/docs/keys#obtain-api-keys) -The `onRampBackendUrl` is the URL for the backend that starts a session with Stripe. For more information on how to create the server, refer to the [official documentation](https://stripe.com/docs/crypto/quickstart#init-stripe). You can also check out the example application and server in the [Safe{Core} SDK monorepo](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit/example/server). +The `onRampBackendUrl` is the URL of the backend that starts a session with Stripe. For more information on how to create the server, refer to the [official documentation](https://stripe.com/docs/crypto/quickstart#init-stripe). You can also check out the example application and server in the [Safe{Core} SDK monorepo](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit/example/server). **Caveats** You should always call the `init()` method afterwards before interacting with the pack. From 0a3978693c75e047882ce7df24ce1e7c73905ccd Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 12:01:53 +0100 Subject: [PATCH 040/108] Fix vale errors --- .github/styles/Microsoft/DateOrder.yml | 2 +- .github/styles/Vocab/default/accept.txt | 6 +++++- pages/miscellaneous/bug-bounty-program.md | 10 +++++----- pages/miscellaneous/past-paid-bounties.md | 4 ++-- pages/safe-apps/release.md | 2 +- pages/safe-core-api/safe-transaction-service.md | 2 +- pages/safe-core-sdk/auth-kit/guides/web3auth.md | 2 +- pages/safe-core-sdk/auth-kit/reference.md | 2 +- pages/safe-core-sdk/onramp-kit/guides/monerium.md | 4 ++-- pages/safe-core-sdk/onramp-kit/reference.md | 2 +- .../onramp-kit/reference/OnRampKitBasePack.md | 2 +- 11 files changed, 21 insertions(+), 17 deletions(-) diff --git a/.github/styles/Microsoft/DateOrder.yml b/.github/styles/Microsoft/DateOrder.yml index 12d69ba5..bd9e0e95 100644 --- a/.github/styles/Microsoft/DateOrder.yml +++ b/.github/styles/Microsoft/DateOrder.yml @@ -2,7 +2,7 @@ extends: existence message: "Always spell out the name of the month." link: https://docs.microsoft.com/en-us/style-guide/numbers#numbers-in-dates ignorecase: true -level: error +level: warning nonword: true tokens: - '\b\d{1,2}/\d{1,2}/(?:\d{4}|\d{2})\b' diff --git a/.github/styles/Vocab/default/accept.txt b/.github/styles/Vocab/default/accept.txt index 46898fae..6fc6b99e 100644 --- a/.github/styles/Vocab/default/accept.txt +++ b/.github/styles/Vocab/default/accept.txt @@ -9,6 +9,7 @@ Acala Alfajores Andromeda Apothem +arbitrum Arbitrum Arianee Astar @@ -51,6 +52,7 @@ erigon Erigon EURe ERC +eth ETH EVM EOA @@ -72,6 +74,7 @@ GitHub gnosis Gnosis Godwoken +goerli Goerli Gunicorn HTTP @@ -94,6 +97,7 @@ Lightlink Linea MainNet Mainnet +mainnet Mandala Mantle Meld @@ -120,7 +124,7 @@ polygon Polygon Protocol Kit PublicMint -readme +README REI Renan RPC diff --git a/pages/miscellaneous/bug-bounty-program.md b/pages/miscellaneous/bug-bounty-program.md index 3dc03928..379b7bfc 100644 --- a/pages/miscellaneous/bug-bounty-program.md +++ b/pages/miscellaneous/bug-bounty-program.md @@ -19,10 +19,10 @@ Many of the [Ethereum Foundation's bug bounty program rules](https://bounty.ethe The scope of the bug bounty program includes the core contracts related to the following releases of the Safe contracts: -* v1.4.1 ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.4.1), [readme](https://github.com/safe-global/safe-contracts/blob/v1.4.1/README.md)) -* _v1.3.0_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.3.0), [readme](https://github.com/safe-global/safe-contracts/blob/v1.3.0/README.md)) -* _v1.2.0_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.2.0), [readme](https://github.com/safe-global/safe-contracts/blob/v1.2.0/README.md)) -* _v1.1.1_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.1.1), [readme](https://github.com/safe-global/safe-contracts/blob/v1.1.1/README.md)) +* v1.4.1 ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.4.1), [README](https://github.com/safe-global/safe-contracts/blob/v1.4.1/README.md)) +* _v1.3.0_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.3.0), [README](https://github.com/safe-global/safe-contracts/blob/v1.3.0/README.md)) +* _v1.2.0_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.2.0), [README](https://github.com/safe-global/safe-contracts/blob/v1.2.0/README.md)) +* _v1.1.1_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.1.1), [README](https://github.com/safe-global/safe-contracts/blob/v1.1.1/README.md)) The scope of the bug bounty also includes the [Allowance Module](https://github.com/safe-global/safe-modules/blob/47e2b486b0b31d97bab7648a3f76de9038c6e67b/allowances). @@ -71,7 +71,7 @@ You can find addresses for deployed instances of these contracts [here](../safe- ## Intended behavior -Please refer to the [readme file](https://github.com/safe-global/safe-contracts/blob/v1.3.0/README.md) and the [release details](https://github.com/safe-global/safe-contracts/releases) of the respective contract version on GitHub as well as our [developer docs](https://docs.safe.global) for an extensive overview of the intended behavior of the smart contracts. +Please refer to the [README file](https://github.com/safe-global/safe-contracts/blob/v1.3.0/README.md) and the [release details](https://github.com/safe-global/safe-contracts/releases) of the respective contract version on GitHub as well as our [developer docs](https://docs.safe.global) for an extensive overview of the intended behavior of the smart contracts. For the allowance module, please refer to the corresponding [README file](https://github.com/safe-global/safe-modules/blob/47e2b486b0b31d97bab7648a3f76de9038c6e67b/allowances/README.md). diff --git a/pages/miscellaneous/past-paid-bounties.md b/pages/miscellaneous/past-paid-bounties.md index ac1df175..478c737b 100644 --- a/pages/miscellaneous/past-paid-bounties.md +++ b/pages/miscellaneous/past-paid-bounties.md @@ -8,7 +8,7 @@ We use a [MultiSend](https://github.com/safe-global/safe-contracts/blob/v1.2.0/c We have updated the library as well as our interfaces. Details about the fix can be found on [GitHub](https://github.com/safe-global/safe-contracts/pull/156). -This bug was submitted by [Micah Zoltu](https://twitter.com/micahzoltu). It was regarded as a "Low Threat", and a bounty of 1,000 USD has been paid out. +This bug was submitted by [Micah Zoltu](https://twitter.com/micahzoltu). It was regarded as a "Low Threat," and a bounty of 1,000 USD has been paid out. ## Transaction failure when receiving funds via `transfer` or `send` @@ -32,7 +32,7 @@ To fix this, the next contract update will prevent the Safe as its owner via `re Details about this issue can be found on [GitHub](https://github.com/safe-global/safe-contracts/issues/229). -The bug was submitted by [Kevin Foesenek](https://github.com/keviinfoes). It was regarded as a "Medium Threat", and a bounty of 5,000 USD has been paid out. +The bug was submitted by [Kevin Foesenek](https://github.com/keviinfoes). It was regarded as a "Medium Threat," and a bounty of 5,000 USD has been paid out. ## The function `getModulesPaginated` doesn't return all modules diff --git a/pages/safe-apps/release.md b/pages/safe-apps/release.md index 59fd2b91..56658e62 100644 --- a/pages/safe-apps/release.md +++ b/pages/safe-apps/release.md @@ -46,7 +46,7 @@ The requirement doesn't apply for battle-tested applications hosted on the same While we won't be able to do a proper audit for your Safe App, we still would like to look at the source code to raise issues or suggest improvements. Whether your Safe App is open or closed source, please send us either a link to the public repository or an invitation to the private repository. -We also would like to make a rough functional review of the App, so please provide us with a high-level test plan/feature list that allows our QA team to ensure everything works as intended in production. Video walkthroughs are also welcome. +We also would like to make a rough functional review of the App, so please provide us with a high-level test plan/feature list that allows our QA team to ensure everything works as intended in production. Video walk-throughs are also welcome. ### Help us decode your Safe App transactions diff --git a/pages/safe-core-api/safe-transaction-service.md b/pages/safe-core-api/safe-transaction-service.md index 3df55d1d..ebc5c9a9 100644 --- a/pages/safe-core-api/safe-transaction-service.md +++ b/pages/safe-core-api/safe-transaction-service.md @@ -83,7 +83,7 @@ sequenceDiagram SafeTransactionService->>-B: Http(201) {Created} ``` -**What is the `safe_tx_hash`?** +**What's the `safe_tx_hash`?** `safe_tx_hash` is the unique identifier for a Safe transaction and is calculated using the [EIP-712](https://eips.ethereum.org/EIPS/eip-712) standard: `keccak256(0x19 || 0x1 || domainSeparator || safeTxHashStruct)` diff --git a/pages/safe-core-sdk/auth-kit/guides/web3auth.md b/pages/safe-core-sdk/auth-kit/guides/web3auth.md index f1330034..5ab723fb 100644 --- a/pages/safe-core-sdk/auth-kit/guides/web3auth.md +++ b/pages/safe-core-sdk/auth-kit/guides/web3auth.md @@ -84,7 +84,7 @@ Important considerations about Web3Auth are: 1) When you sign in with the same social account, the same Ethereum address will be returned for the same Web3Auth client ID. Web3Auth [scopes the creation of the wallet](https://web3auth.io/docs/troubleshooting/different-wallet-address-issue) (address) to the dapp, so when interacting with other dapps using Web3Auth, a different Ethereum address will be returned. This is by design and to enhanced security. -2) If you sign in with an email and then with a social account using the same email (e.g. "Sign in with Google"), a different Ethereum address might be returned even the same email address is used. +2) If you sign in with an email and then with a social account using the same email (for example "Sign in with Google"), a different Ethereum address might be returned even the same email address is used. ```typescript // The signIn() method will return the user's Ethereum address diff --git a/pages/safe-core-sdk/auth-kit/reference.md b/pages/safe-core-sdk/auth-kit/reference.md index 9b059d6c..ee9fe1fc 100644 --- a/pages/safe-core-sdk/auth-kit/reference.md +++ b/pages/safe-core-sdk/auth-kit/reference.md @@ -10,7 +10,7 @@ To add the Auth Kit to your project, run: yarn add @safe-global/auth-kit ``` -The Auth Kit can integrate several providers in the form of **"packs"**. A pack is a piece of code that works with the chosen provider to give Safe users access to new services. +The Auth Kit can integrate several providers in the form of **"packs."** A pack is a piece of code that works with the chosen provider to give Safe users access to new services. To use each pack, the right package needs to be installed: diff --git a/pages/safe-core-sdk/onramp-kit/guides/monerium.md b/pages/safe-core-sdk/onramp-kit/guides/monerium.md index 054f0a00..9f4773ea 100644 --- a/pages/safe-core-sdk/onramp-kit/guides/monerium.md +++ b/pages/safe-core-sdk/onramp-kit/guides/monerium.md @@ -61,7 +61,7 @@ This action will open the Monerium web page to begin the authentication process Take a look to the Monerium web page URL. You will see that the query string includes parameters such as these, among others: - `address`: The Safe address you want to bind to your Monerium account. -- `signature`: Always "0x". It means the origin wallet is a multisig, just like the Safe. Monerium will then verify for onchain signatures in your Safe contract +- `signature`: Always "0x." It means the origin wallet is a multisig, just like the Safe. Monerium will then verify for onchain signatures in your Safe contract - `chain`: The Monerium selected chain. The value is automatically calculated using the `safeSdk` instance. - `network`: The Monerium selected network. The value is automatically calculated using the `safeSdk` instance. - `redirect_uri`: The `redirectUrl` you sent in the `open` method. Once authenticated Monerium dashboard will redirect to that URL. @@ -184,4 +184,4 @@ moneriumPack.unsubscribe(OrderState.processed, handler) ## MoneriumPack complete React example -Check a complete [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) in the `safe-core-sdk` sitory. Follow the steps in the [`README.md`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/README.md) to run the example and configure the environment variables for the pack following the [`.env.sample`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/.env.sample). +Check a complete [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) in the `safe-core-sdk` repository. Follow the steps in the [`README.md`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/README.md) to run the example and configure the environment variables for the pack following the [`.env.sample`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/.env.sample). diff --git a/pages/safe-core-sdk/onramp-kit/reference.md b/pages/safe-core-sdk/onramp-kit/reference.md index c2568e13..a1a3be22 100644 --- a/pages/safe-core-sdk/onramp-kit/reference.md +++ b/pages/safe-core-sdk/onramp-kit/reference.md @@ -11,7 +11,7 @@ To add the Onramp Kit to your project, run: ```bash yarn add @safe-global/onramp-kit ``` -The Onramp Kit can integrate several providers in the form of **"packs"**. A pack is a piece of code that works with the chosen provider to give Safe users access to new services. +The Onramp Kit can integrate several providers in the form of **"packs."** A pack is a piece of code that works with the chosen provider to give Safe users access to new services. To use each pack, the right package needs to be installed: diff --git a/pages/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md b/pages/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md index bb99af68..ad77d7e8 100644 --- a/pages/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md +++ b/pages/safe-core-sdk/onramp-kit/reference/OnRampKitBasePack.md @@ -30,7 +30,7 @@ Provides the initialization options for the required packages, classes and prope ### open(options) -Initiates the interaction with the pack. It can create a widget (e.g. Stripe) or redirect to a website (e.g. Monerium). +Initiates the interaction with the pack. It can create a widget (for example Stripe) or redirect to a website (for example Monerium). It returns the outcome of interacting with the pack. From f3f64e6e018a41617a6720d3b6e2a34f514051cb Mon Sep 17 00:00:00 2001 From: louis-md Date: Tue, 28 Nov 2023 12:06:35 +0100 Subject: [PATCH 041/108] Fix vale errors --- .github/styles/Vocab/default/accept.txt | 1 - pages/getting-started/quick-start.mdx | 4 ++-- pages/miscellaneous/past-paid-bounties.md | 2 +- pages/safe-core-sdk/api-kit.md | 2 +- pages/safe-core-sdk/onramp-kit/guides/stripe.md | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/styles/Vocab/default/accept.txt b/.github/styles/Vocab/default/accept.txt index 6fc6b99e..3ec84a78 100644 --- a/.github/styles/Vocab/default/accept.txt +++ b/.github/styles/Vocab/default/accept.txt @@ -85,7 +85,6 @@ Holesky IPFS IoTeX Infura -Javascript KCC Kanazawa Karura diff --git a/pages/getting-started/quick-start.mdx b/pages/getting-started/quick-start.mdx index 0975a0e3..8345f161 100644 --- a/pages/getting-started/quick-start.mdx +++ b/pages/getting-started/quick-start.mdx @@ -106,7 +106,7 @@ The EthersAdapter is a wrapper around the Ethers.js library that provides a cons ## Deploy a Safe -The Safe\{Core\} SDK is a library that allows you to interact with the Safe\{Core\} smart contracts (the protocol). The first thing you need to do is create a Safe instance. For a purely javascript approach, please refer to our guide [Integrating Safe\{Core\} SDK](/tutorials/integrating-the-safe-core-sdk). +The Safe\{Core\} SDK is a library that allows you to interact with the Safe\{Core\} smart contracts (the protocol). The first thing you need to do is create a Safe instance. For a purely JavaScript approach, please refer to our guide [Integrating Safe\{Core\} SDK](/tutorials/integrating-the-safe-core-sdk). For this tutorial, we will use the Safe\{Core\} SDK React hooks to deploy a Safe. Simply run the app: @@ -130,7 +130,7 @@ You can now use your app and explore its code! An easy way to test your implemen ### Submit gasless transactions -Once you have a Safe deployed, you can use it to execute gasless transactions. The Safe\{Core\} SDK provides a number of methods for executing transactions purely in javascript. You can explore them in the next pages of [Safe\{Core\} SDK documentation](https://safe-global.gitbook.io/safe-core-sdk/)! +Once you have a Safe deployed, you can use it to execute gasless transactions. The Safe\{Core\} SDK provides a number of methods for executing transactions purely in JavaScript. You can explore them in the next pages of [Safe\{Core\} SDK documentation](https://safe-global.gitbook.io/safe-core-sdk/)! For now, we'll use this test ether to deploy a Safe right from the app. You should see a button to deploy a Safe. Click on it to trigger a new transaction, and confirm it in your wallet. diff --git a/pages/miscellaneous/past-paid-bounties.md b/pages/miscellaneous/past-paid-bounties.md index 478c737b..1d7a3c14 100644 --- a/pages/miscellaneous/past-paid-bounties.md +++ b/pages/miscellaneous/past-paid-bounties.md @@ -6,7 +6,7 @@ _This list includes valid submissions from past and current contract versions fo We use a [MultiSend](https://github.com/safe-global/safe-contracts/blob/v1.2.0/contracts/libraries/MultiSend.sol) library to batch multiple transactions together. A transaction could be created that would self-destruct the contract. While this would not have put any funds at risk, user experience would have been seriously impacted. -We have updated the library as well as our interfaces. Details about the fix can be found on [GitHub](https://github.com/safe-global/safe-contracts/pull/156). +We've updated the library as well as our interfaces. Details about the fix can be found on [GitHub](https://github.com/safe-global/safe-contracts/pull/156). This bug was submitted by [Micah Zoltu](https://twitter.com/micahzoltu). It was regarded as a "Low Threat," and a bounty of 1,000 USD has been paid out. diff --git a/pages/safe-core-sdk/api-kit.md b/pages/safe-core-sdk/api-kit.md index 88c61b5f..b5ea4898 100644 --- a/pages/safe-core-sdk/api-kit.md +++ b/pages/safe-core-sdk/api-kit.md @@ -103,7 +103,7 @@ await safeApiKit.proposeTransaction({ ## Retrieve the pending transactions -Different methods in the API Kit are available to retrieve pending transactions depending on the situation. To retrieve a transaction given the Safe transaction hash use the method that is not commented. +Different methods in the API Kit are available to retrieve pending transactions depending on the situation. To retrieve a transaction given the Safe transaction hash use the method that's not commented. ```typescript const transaction = await service.getTransaction("") diff --git a/pages/safe-core-sdk/onramp-kit/guides/stripe.md b/pages/safe-core-sdk/onramp-kit/guides/stripe.md index 322ae6c8..d23f21d6 100644 --- a/pages/safe-core-sdk/onramp-kit/guides/stripe.md +++ b/pages/safe-core-sdk/onramp-kit/guides/stripe.md @@ -25,7 +25,7 @@ yarn add @safe-global/onramp-kit @stripe/stripe-js @stripe/crypto ## Using the `StripePack` in your Web App -The `StripePack` can be used with any frontend framework like React, Vue, Angular or even plain HTML and Javascript. In this example, we're using it with plain JavaScript. +The `StripePack` can be used with any frontend framework like React, Vue, Angular or even plain HTML and JavaScript. In this example, we're using it with plain JavaScript. 1. Load the application and initialize the `StripePack` using the following snippet: From 558747a249af1d7d8460989da182066e2a175c71 Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Wed, 29 Nov 2023 10:47:56 +0100 Subject: [PATCH 042/108] Reorder sidebar (#292) * Update SUMMARY.md * Update and rename available-services.md to supported-networks.md --- SUMMARY.md | 6 +++--- .../{available-services.md => supported-networks.md} | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) rename safe-core-api/{available-services.md => supported-networks.md} (96%) diff --git a/SUMMARY.md b/SUMMARY.md index 36a13b87..163ed391 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -62,13 +62,13 @@ ## Safe{Core} API -* [Available Services](safe-core-api/available-services.md) - * [Service Architecture](safe-core-api/service-architecture.md) * [Safe Transaction Service](safe-core-api/safe-transaction-service.md) * [RPC Requirements](safe-core-api/rpc-requirements.md) +* [Supported Networks](safe-core-api/supported-networks.md) + ## Safe Apps SDK * [Overview](safe-apps/README.md) @@ -80,5 +80,5 @@ ## Miscellaneous * [Bug Bounty](miscellaneous/bug-bounty-program.md) -* [Past paid bounties](miscellaneous/past-paid-bounties.md) + * [Past paid bounties](miscellaneous/past-paid-bounties.md) * [Contact us](miscellaneous/contact-us.md) diff --git a/safe-core-api/available-services.md b/safe-core-api/supported-networks.md similarity index 96% rename from safe-core-api/available-services.md rename to safe-core-api/supported-networks.md index b2e6601a..af716658 100644 --- a/safe-core-api/available-services.md +++ b/safe-core-api/supported-networks.md @@ -1,8 +1,8 @@ --- -description: This pages provides an overview of the available services +description: This page provides an overview of the available services --- -# Available Services +# Supported Networks ## Safe Transaction Service From e2da419d46d33db701b4d0d8fc422d49bdb4fe77 Mon Sep 17 00:00:00 2001 From: louis-md Date: Wed, 29 Nov 2023 12:06:24 +0100 Subject: [PATCH 043/108] Implement design feedback (color palette, font) --- assets/svg/safe-logo.svg | 14 +++++++------- pages/_app.tsx | 5 +++++ styles.css | 30 ++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 pages/_app.tsx create mode 100644 styles.css diff --git a/assets/svg/safe-logo.svg b/assets/svg/safe-logo.svg index f60bac59..c06c469d 100644 --- a/assets/svg/safe-logo.svg +++ b/assets/svg/safe-logo.svg @@ -1,18 +1,18 @@ - - - - - - - \ No newline at end of file diff --git a/pages/_app.tsx b/pages/_app.tsx new file mode 100644 index 00000000..564ab4ca --- /dev/null +++ b/pages/_app.tsx @@ -0,0 +1,5 @@ +import '../styles.css' + +export default function MyApp ({ Component, pageProps }) { + return +} diff --git a/styles.css b/styles.css new file mode 100644 index 00000000..82358d7b --- /dev/null +++ b/styles.css @@ -0,0 +1,30 @@ +html.dark.dark body { + font-family: 'DM Sans', sans-serif; + background-color: #121312; +} + +a.nx-text-primary-600 { + color: #12ff80; +} + +.nextra-nav-container.nextra-nav-container { + background-color: #12ff80; + color: rgb(59, 69, 78); +} + +.nextra-nav-container.nextra-nav-container span:not(.nx-text-xs) { + color: rgb(59, 69, 78); +} + +.nextra-nav-container-blur { + display: none; +} + +.nextra-nav-container.nextra-nav-container > nav > div > div > input, +.nextra-nav-container.nextra-nav-container + > nav + > div + > div + > input.focus-visible { + background-color: #00883f; +} From 0d8d6c7623be1d2c12f26c38679b750e1442e838 Mon Sep 17 00:00:00 2001 From: louis-md Date: Wed, 29 Nov 2023 12:06:53 +0100 Subject: [PATCH 044/108] Add torusscan as a deprecated block explorer in generateSupportedNetworks --- .github/scripts/generateSupportedNetworks.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/scripts/generateSupportedNetworks.js b/.github/scripts/generateSupportedNetworks.js index a43c99ff..202580a1 100644 --- a/.github/scripts/generateSupportedNetworks.js +++ b/.github/scripts/generateSupportedNetworks.js @@ -149,5 +149,6 @@ const deprecatedBlockExplorers = [ 'https://evm.venidiumexplorer.com', 'https://evm.explorer.canto.io', 'https://explorer.autobahn.network', - 'https://explorer.cascadia.foundation' + 'https://explorer.cascadia.foundation', + 'https://testnet.torusscan.com' ] From aa6932dd5a5ab22ad69fe3c2645dfb70d725775a Mon Sep 17 00:00:00 2001 From: louis-md Date: Wed, 29 Nov 2023 17:39:03 +0100 Subject: [PATCH 045/108] Add footer from safe.global --- assets/svg/discord-icon.svg | 3 + assets/svg/discourse-icon.svg | 3 + assets/svg/github-icon.svg | 10 + assets/svg/mirror-icon.svg | 3 + assets/svg/safe-logo-white.svg | 18 + assets/svg/x-icon.svg | 3 + assets/svg/youtube-icon.svg | 3 + components/Footer/Footer.module.css | 67 + components/Footer/index.tsx | 278 +++ components/{ => Home}/Home.module.css | 0 components/{Home.tsx => Home/index.tsx} | 0 next.config.js | 40 +- package.json | 5 + pages/_app.tsx | 69 +- pnpm-lock.yaml | 2389 ++++++++++++++++++++++- styles.css | 20 + styles/emotion.ts | 15 + styles/palette.ts | 65 + styles/theme.ts | 179 ++ theme.config.tsx | 25 +- 20 files changed, 3162 insertions(+), 33 deletions(-) create mode 100644 assets/svg/discord-icon.svg create mode 100644 assets/svg/discourse-icon.svg create mode 100644 assets/svg/github-icon.svg create mode 100644 assets/svg/mirror-icon.svg create mode 100644 assets/svg/safe-logo-white.svg create mode 100644 assets/svg/x-icon.svg create mode 100644 assets/svg/youtube-icon.svg create mode 100644 components/Footer/Footer.module.css create mode 100644 components/Footer/index.tsx rename components/{ => Home}/Home.module.css (100%) rename components/{Home.tsx => Home/index.tsx} (100%) create mode 100644 styles/emotion.ts create mode 100644 styles/palette.ts create mode 100644 styles/theme.ts diff --git a/assets/svg/discord-icon.svg b/assets/svg/discord-icon.svg new file mode 100644 index 00000000..d78504a8 --- /dev/null +++ b/assets/svg/discord-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/discourse-icon.svg b/assets/svg/discourse-icon.svg new file mode 100644 index 00000000..d4c0484a --- /dev/null +++ b/assets/svg/discourse-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/github-icon.svg b/assets/svg/github-icon.svg new file mode 100644 index 00000000..b01d2ca4 --- /dev/null +++ b/assets/svg/github-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/svg/mirror-icon.svg b/assets/svg/mirror-icon.svg new file mode 100644 index 00000000..be495ed2 --- /dev/null +++ b/assets/svg/mirror-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/safe-logo-white.svg b/assets/svg/safe-logo-white.svg new file mode 100644 index 00000000..f60bac59 --- /dev/null +++ b/assets/svg/safe-logo-white.svg @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/assets/svg/x-icon.svg b/assets/svg/x-icon.svg new file mode 100644 index 00000000..b5700350 --- /dev/null +++ b/assets/svg/x-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/youtube-icon.svg b/assets/svg/youtube-icon.svg new file mode 100644 index 00000000..3a1dc4bf --- /dev/null +++ b/assets/svg/youtube-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/components/Footer/Footer.module.css b/components/Footer/Footer.module.css new file mode 100644 index 00000000..94ecf948 --- /dev/null +++ b/components/Footer/Footer.module.css @@ -0,0 +1,67 @@ +.wrapper { + margin-top: 80px; + } + + .list { + padding: 0; + list-style: none; + display: flex; + flex-direction: column; + gap: 16px; + } + + .listItem { + font-size: 16px; + line-height: 20px; + color: var(--mui-palette-primary-light); + } + + .listItem a, + .subListItem a { + display: block; + } + + .listItem:hover a, + .subListItem:hover a { + color: white; + } + + .subList { + list-style: none; + padding: 0; + display: flex; + flex-wrap: wrap; + gap: 16px; + } + + .subListItem { + font-size: 16px; + line-height: 24px; + color: var(--mui-palette-primary-light); + } + + .socials { + display: flex; + flex-wrap: wrap; + gap: 24px; + } + + .socials svg { + width: 28px; + height: 28px; + } + + .logo { + width: 150px; + height: auto; + } + + @media (min-width: 600px) { + .subList { + gap: 32px; + } + + .subListItem { + line-height: 56px; + } + } \ No newline at end of file diff --git a/components/Footer/index.tsx b/components/Footer/index.tsx new file mode 100644 index 00000000..e98ca831 --- /dev/null +++ b/components/Footer/index.tsx @@ -0,0 +1,278 @@ +import { ButtonBase, Container, Divider, Grid, Typography } from '@mui/material' +import type { ComponentType, SyntheticEvent } from 'react' + +import DiscordIcon from '../../assets/svg/discord-icon.svg' +import XIcon from '../../assets/svg/x-icon.svg' +import YoutubeIcon from '../../assets/svg/youtube-icon.svg' +import DiscourseIcon from '../../assets/svg/discourse-icon.svg' +import MirrorIcon from '../../assets/svg/mirror-icon.svg' +import GithubIcon from '../../assets/svg/github-icon.svg' + +import css from './Footer.module.css' +import Link from 'next/link' +import Logo from '../../assets/svg/safe-logo-white.svg' + +const AppRoutes = { + '404': 'https://safe.global/404', + wallet: 'https://safe.global/wallet', + terms: 'https://safe.global/terms', + privacy: 'https://safe.global/privacy', + index: 'https://safe.global/', + imprint: 'https://safe.global/imprint', + ecosystem: 'https://safe.global/ecosystem', + core: 'https://safe.global/core', + cookie: 'https://safe.global/cookie', + cla: { + index: 'https://safe.global/cla' + }, + careers: 'https://safe.global/careers', + governance: 'https://safe.global/governance' +} + +export const WALLET_LINK = 'https://app.safe.global' +export const SAFECON_LINK = 'https://conf.safe.global' +export const CORE_LINK = 'https://core.safe.global' +export const PRESS_LINK = 'https://press.safe.global' +export const HELP_LINK = 'https://help.safe.global' +export const DOCS_LINK = 'https://docs.safe.global' +export const FORUM_LINK = 'https://forum.safe.global' +export const IOS_LINK = 'https://apps.apple.com/app/id1515759131' +export const GPLAY_LINK = + 'https://play.google.com/store/apps/details?id=io.gnosis.safe' +export const LICENSES_LINK = 'https://app.safe.global/licenses' +export const GOVERNANCE_LINK = 'https://gov.safe.global' +export const ECOSYSTEM_LINK = 'https://ecosystem.safe.global' +export const GRANTS_LINK = 'https://grants.safe.global' +export const TWITTER_LINK = 'https://x.com/safe' +export const DISCORD_LINK = 'https://chat.safe.global' +export const YOUTUBE_LINK = 'https://www.youtube.com/@safeglobal' +export const MIRROR_LINK = 'https://safe.mirror.xyz' +export const GITHUB_LINK = 'https://github.com/safe-global' + +export const PROTOCOL_KIT_LINK = + 'https://docs.safe.global/safe-core-aa-sdk/protocol-kit' +export const AUTH_KIT_LINK = + 'https://docs.safe.global/safe-core-aa-sdk/auth-kit' +export const RELAY_KIT_LINK = + 'https://docs.safe.global/safe-core-aa-sdk/relay-kit' +export const ONRAMP_KIT_LINK = + 'https://docs.safe.global/safe-core-aa-sdk/onramp-kit' + +const COOKIE_PREFERENCES = '#cookies' + +const safeProtocolItems = [ + { + label: 'Safe{Core}', + href: CORE_LINK, + target: '_blank', + rel: 'noreferrer' + }, + { + label: 'Developer Docs', + href: DOCS_LINK, + target: '_blank', + rel: 'noreferrer' + } +] + +const communityItems = [ + { + label: 'Governance', + href: AppRoutes.governance + }, + { + label: 'Ecosystem', + href: ECOSYSTEM_LINK, + target: '_blank', + rel: 'noreferrer' + }, + { + label: 'Grants', + href: GRANTS_LINK, + target: '_blank', + rel: 'noreferrer' + }, + { + label: 'Safe{Con}', + href: SAFECON_LINK, + target: '_blank', + rel: 'noreferrer' + } +] + +const resourcesItems = [ + { + label: 'Help Center', + href: HELP_LINK, + target: '_blank', + rel: 'noreferrer' + }, + { + label: 'Careers', + href: AppRoutes.careers + }, + { + label: 'Brand Kit', + href: PRESS_LINK, + target: '_blank', + rel: 'noreferrer' + } +] + +const subFooterItems = [ + { + label: 'Terms', + href: AppRoutes.terms + }, + { + label: 'Privacy', + href: AppRoutes.privacy + }, + { + label: 'Licenses', + href: LICENSES_LINK, + target: '_blank', + rel: 'noreferrer' + }, + { + label: 'Cookie Policy', + href: AppRoutes.cookie + }, + { + label: 'Preferences', + href: COOKIE_PREFERENCES + }, + { + label: 'Imprint', + href: AppRoutes.imprint + } +] + +const createFooterButton = ( + label: string, + href: string, + IconComponent: ComponentType +) => { + const buttonBaseAttributes = { + disableRipple: true, + target: '_blank', + rel: 'noreferrer' + } + + return ( + + + + ) +} + +const Footer = () => { + // const { openBanner } = useCookieBannerContext() + + const showBanner = (e: SyntheticEvent) => { + // Prevent opening the hash link + e.preventDefault() + // openBanner() + } + + return ( + + + + + + + + + + + Safe Core Protocol + +
    + {safeProtocolItems.map(item => ( +
  • + + {item.label} + +
  • + ))} +
+
+ + + + Community + +
    + {communityItems.map(item => ( +
  • + + {item.label} + +
  • + ))} +
+
+ + + + Resources + +
    + {resourcesItems.map(item => ( +
  • + + {item.label} + +
  • + ))} +
+
+ + +
+ {createFooterButton('X page', TWITTER_LINK, XIcon)} + {createFooterButton('Discourse forum', FORUM_LINK, DiscourseIcon)} + {createFooterButton('Discord server', DISCORD_LINK, DiscordIcon)} + {createFooterButton('Youtube channel', YOUTUBE_LINK, YoutubeIcon)} + {createFooterButton('Mirror blog', MIRROR_LINK, MirrorIcon)} + {createFooterButton('Github organization', GITHUB_LINK, GithubIcon)} +
+
+
+ + + + + +
    + {subFooterItems.map(item => { + const isCookiePreference = item.href === COOKIE_PREFERENCES + + return ( +
  • + + {item.label} + +
  • + ) + })} +
+
+ + + + ©{new Date().getFullYear()} Safe Ecosystem Foundation + + +
+
+ ) +} + +export default Footer diff --git a/components/Home.module.css b/components/Home/Home.module.css similarity index 100% rename from components/Home.module.css rename to components/Home/Home.module.css diff --git a/components/Home.tsx b/components/Home/index.tsx similarity index 100% rename from components/Home.tsx rename to components/Home/index.tsx diff --git a/next.config.js b/next.config.js index ef283632..478508af 100644 --- a/next.config.js +++ b/next.config.js @@ -3,4 +3,42 @@ const withNextra = require('nextra')({ themeConfig: './theme.config.tsx', }) -module.exports = withNextra() +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + swcMinify: true, + // `Image` not supported in static export + images: { + unoptimized: true, + }, + webpack(config) { + config.module.rules.push({ + test: /\.svg$/i, + issuer: { and: [/\.(js|ts|md)x?$/] }, + use: [ + { + loader: '@svgr/webpack', + options: { + prettier: false, + svgo: false, + svgoConfig: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { removeViewBox: false }, + }, + }, + ], + }, + titleProp: true, + }, + }, + ], + }) + + return config + }, +} + +module.exports = withNextra(nextConfig) diff --git a/package.json b/package.json index 116d7229..266ae99a 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,11 @@ }, "homepage": "https://github.com/safe-global/safe-docs#readme", "dependencies": { + "@emotion/cache": "^11.11.0", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@mui/material": "^5.14.18", + "@svgr/webpack": "^8.1.0", "next": "^13.0.6", "nextra": "latest", "nextra-theme-docs": "latest", diff --git a/pages/_app.tsx b/pages/_app.tsx index 564ab4ca..7905eb23 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,5 +1,70 @@ +import { + Experimental_CssVarsProvider as CssVarsProvider, + experimental_extendTheme as extendMuiTheme +} from '@mui/material/styles' +import { CssBaseline } from '@mui/material' +import { CacheProvider } from '@emotion/react' +import type { EmotionCache } from '@emotion/react' +import type { AppProps } from 'next/app' +import type { ReactElement } from 'react' + +import { createEmotionCache } from '../styles/emotion' +// import { CookieBannerContextProvider } from '../components/common/CookieBanner/CookieBannerContext' +// import { CookieBanner } from '../components/common/CookieBanner' + +import { theme } from '../styles/theme' + import '../styles.css' +// import PageLayout from '../components/common/PageLayout' +// import { useGa } from '../hooks/useGa' +// import useHotjar from '../hooks/useHotjar' +// import DOMPurify from 'isomorphic-dompurify' + +// Client-side cache, shared for the whole session of the user in the browser. +const clientSideEmotionCache = createEmotionCache() + +// Extended theme for CssVarsProvider +const cssVarsTheme = extendMuiTheme(theme) + +// Allow external links when sanitizing json data +// DOMPurify.addHook('afterSanitizeAttributes', function (node) { +// // set all elements owning target to target=_blank +// if ('target' in node) { +// node.setAttribute('target', '_blank') +// } +// }) -export default function MyApp ({ Component, pageProps }) { - return +// const InitHooks = () => { +// useGa() +// useHotjar() + +// return null +// } + +const App = ({ + Component, + pageProps, + emotionCache = clientSideEmotionCache +}: AppProps & { + emotionCache?: EmotionCache +}): ReactElement => { + return ( + + + + + {/* + + + */} + + {/* + + + */} + + + ) } + +export default App diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5459d9e0..e6d04d25 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,9 +5,24 @@ settings: excludeLinksFromLockfile: false dependencies: + '@emotion/cache': + specifier: ^11.11.0 + version: 11.11.0 + '@emotion/react': + specifier: ^11.11.1 + version: 11.11.1(@types/react@18.2.37)(react@18.2.0) + '@emotion/styled': + specifier: ^11.11.0 + version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0) + '@mui/material': + specifier: ^5.14.18 + version: 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@svgr/webpack': + specifier: ^8.1.0 + version: 8.1.0(typescript@4.9.3) next: specifier: ^13.0.6 - version: 13.0.6(react-dom@18.2.0)(react@18.2.0) + version: 13.0.6(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0) nextra: specifier: latest version: 2.2.14(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) @@ -40,6 +55,1253 @@ devDependencies: packages: + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + dev: false + + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: false + + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/core@7.23.5: + resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helpers': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/generator@7.23.5: + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + dev: false + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + dev: false + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + dev: false + + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.1 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: false + + /@babel/helper-create-class-features-plugin@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: false + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.5): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: false + + /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.5): + resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.5 + dev: false + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + dev: false + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + dev: false + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + dev: false + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + dev: false + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.5): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: false + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: false + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + dev: false + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + dev: false + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + dev: false + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.5 + dev: false + + /@babel/helpers@7.23.5: + resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: false + + /@babel/parser@7.23.5: + resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.5 + dev: false + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) + dev: false + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + dev: false + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.5): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.5): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.5): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: false + + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + dev: false + + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.5): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.5): + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/types': 7.23.5 + dev: false + + /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + dev: false + + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-typescript@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) + dev: false + + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/preset-env@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.5) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.5) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.5) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.5) + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.5) + babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.5) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.5) + core-js-compat: 3.33.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.5): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.5 + esutils: 2.0.3 + dev: false + + /@babel/preset-react@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.5) + '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.5) + dev: false + + /@babel/preset-typescript@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5) + dev: false + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: false + /@babel/runtime@7.20.6: resolution: {integrity: sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==} engines: {node: '>=6.9.0'} @@ -47,6 +1309,193 @@ packages: regenerator-runtime: 0.13.11 dev: false + /@babel/runtime@7.23.5: + resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + dev: false + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 + dev: false + + /@babel/traverse@7.23.5: + resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: false + + /@emotion/babel-plugin@11.11.0: + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + dependencies: + '@babel/helper-module-imports': 7.22.15 + '@babel/runtime': 7.23.5 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.2 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + dev: false + + /@emotion/cache@11.11.0: + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 + dev: false + + /@emotion/hash@0.9.1: + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + dev: false + + /@emotion/is-prop-valid@1.2.1: + resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} + dependencies: + '@emotion/memoize': 0.8.1 + dev: false + + /@emotion/memoize@0.8.1: + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + dev: false + + /@emotion/react@11.11.1(@types/react@18.2.37)(react@18.2.0): + resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.5 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + '@types/react': 18.2.37 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + dev: false + + /@emotion/serialize@1.1.2: + resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} + dependencies: + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 + csstype: 3.1.2 + dev: false + + /@emotion/sheet@1.2.2: + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} + dev: false + + /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0): + resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.5 + '@emotion/babel-plugin': 11.11.0 + '@emotion/is-prop-valid': 1.2.1 + '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0) + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@types/react': 18.2.37 + react: 18.2.0 + dev: false + + /@emotion/unitless@0.8.1: + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + dev: false + + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.2.0 + dev: false + + /@emotion/utils@1.2.1: + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + dev: false + + /@emotion/weak-memoize@0.3.1: + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + dev: false + + /@floating-ui/core@1.5.0: + resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} + dependencies: + '@floating-ui/utils': 0.1.6 + dev: false + + /@floating-ui/dom@1.5.3: + resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} + dependencies: + '@floating-ui/core': 1.5.0 + '@floating-ui/utils': 0.1.6 + dev: false + + /@floating-ui/react-dom@2.0.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.5.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@floating-ui/utils@0.1.6: + resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + dev: false + /@headlessui/react@1.7.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1m66h/5eayTEZVT2PI13/2PG3EVC7a9XalmUtVSC8X76pcyKYMuyX1XAL2RUtCr8WhoMa/KrDEyoeU5v+kSQOw==} engines: {node: '>=10'} @@ -59,6 +1508,36 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + dev: false + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: false + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + /@mdx-js/mdx@2.2.1: resolution: {integrity: sha512-hZ3ex7exYLJn6FfReq8yTvA6TE53uW9UHJQM9IlSauOuS55J9y8RtA7W+dzp6Yrzr00/U1sd7q+Wf61q6SfiTQ==} dependencies: @@ -93,6 +1572,167 @@ packages: react: 18.2.0 dev: false + /@mui/base@5.0.0-beta.24(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-bKt2pUADHGQtqWDZ8nvL2Lvg2GNJyd/ZUgZAJoYzRgmnxBL9j36MSlS3+exEdYkikcnvVafcBtD904RypFKb0w==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.5 + '@floating-ui/react-dom': 2.0.4(react-dom@18.2.0)(react@18.2.0) + '@mui/types': 7.2.9(@types/react@18.2.37) + '@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0) + '@popperjs/core': 2.11.8 + '@types/react': 18.2.37 + clsx: 2.0.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@mui/core-downloads-tracker@5.14.18: + resolution: {integrity: sha512-yFpF35fEVDV81nVktu0BE9qn2dD/chs7PsQhlyaV3EnTeZi9RZBuvoEfRym1/jmhJ2tcfeWXiRuHG942mQXJJQ==} + dev: false + + /@mui/material@5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-y3UiR/JqrkF5xZR0sIKj6y7xwuEiweh9peiN3Zfjy1gXWXhz5wjlaLdoxFfKIEBUFfeQALxr/Y8avlHH+B9lpQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.5 + '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0) + '@mui/base': 5.0.0-beta.24(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@mui/core-downloads-tracker': 5.14.18 + '@mui/system': 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0) + '@mui/types': 7.2.9(@types/react@18.2.37) + '@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0) + '@types/react': 18.2.37 + '@types/react-transition-group': 4.4.9 + clsx: 2.0.0 + csstype: 3.1.2 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 18.2.0 + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + dev: false + + /@mui/private-theming@5.14.18(@types/react@18.2.37)(react@18.2.0): + resolution: {integrity: sha512-WSgjqRlzfHU+2Rou3HlR2Gqfr4rZRsvFgataYO3qQ0/m6gShJN+lhVEvwEiJ9QYyVzMDvNpXZAcqp8Y2Vl+PAw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.5 + '@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0) + '@types/react': 18.2.37 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/styled-engine@5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0): + resolution: {integrity: sha512-pW8bpmF9uCB5FV2IPk6mfbQCjPI5vGI09NOLhtGXPeph/4xIfC3JdIX0TILU0WcTs3aFQqo6s2+1SFgIB9rCXA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + dependencies: + '@babel/runtime': 7.23.5 + '@emotion/cache': 11.11.0 + '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0) + csstype: 3.1.2 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/system@5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0): + resolution: {integrity: sha512-hSQQdb3KF72X4EN2hMEiv8EYJZSflfdd1TRaGPoR7CIAG347OxCslpBUwWngYobaxgKvq6xTrlIl+diaactVww==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.5 + '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0) + '@mui/private-theming': 5.14.18(@types/react@18.2.37)(react@18.2.0) + '@mui/styled-engine': 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@mui/types': 7.2.9(@types/react@18.2.37) + '@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0) + '@types/react': 18.2.37 + clsx: 2.0.0 + csstype: 3.1.2 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/types@7.2.9(@types/react@18.2.37): + resolution: {integrity: sha512-k1lN/PolaRZfNsRdAqXtcR71sTnv3z/VCCGPxU8HfdftDkzi335MdJ6scZxvofMAd/K/9EbzCZTFBmlNpQVdCg==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.37 + dev: false + + /@mui/utils@5.14.18(@types/react@18.2.37)(react@18.2.0): + resolution: {integrity: sha512-HZDRsJtEZ7WMSnrHV9uwScGze4wM/Y+u6pDVo+grUjt5yXzn+wI8QX/JwTHh9YSw/WpnUL80mJJjgCnWj2VrzQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.5 + '@types/prop-types': 15.7.11 + '@types/react': 18.2.37 + prop-types: 15.8.1 + react: 18.2.0 + react-is: 18.2.0 + dev: false + /@napi-rs/simple-git-android-arm-eabi@0.1.8: resolution: {integrity: sha512-JJCejHBB1G6O8nxjQLT4quWCcvLpC3oRdJJ9G3MFYSCoYS8i1bWCWeU+K7Br+xT+D6s1t9q8kNJAwJv9Ygpi0g==} engines: {node: '>= 10'} @@ -334,12 +1974,178 @@ packages: resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==} dev: false + /@popperjs/core@2.11.8: + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + dev: false + + /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.23.5): + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + dev: false + + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.23.5): + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + dev: false + + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.23.5): + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + dev: false + + /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.23.5): + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + dev: false + + /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.23.5): + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + dev: false + + /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.23.5): + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + dev: false + + /@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.23.5): + resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + dev: false + + /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.23.5): + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + dev: false + + /@svgr/babel-preset@8.1.0(@babel/core@7.23.5): + resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.23.5) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.23.5) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.23.5) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.23.5) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.23.5) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.23.5) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.23.5) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.23.5) + dev: false + + /@svgr/core@8.1.0(typescript@4.9.3): + resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} + engines: {node: '>=14'} + dependencies: + '@babel/core': 7.23.5 + '@svgr/babel-preset': 8.1.0(@babel/core@7.23.5) + camelcase: 6.3.0 + cosmiconfig: 8.3.6(typescript@4.9.3) + snake-case: 3.0.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@svgr/hast-util-to-babel-ast@8.0.0: + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} + engines: {node: '>=14'} + dependencies: + '@babel/types': 7.23.5 + entities: 4.5.0 + dev: false + + /@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0): + resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + dependencies: + '@babel/core': 7.23.5 + '@svgr/babel-preset': 8.1.0(@babel/core@7.23.5) + '@svgr/core': 8.1.0(typescript@4.9.3) + '@svgr/hast-util-to-babel-ast': 8.0.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0)(typescript@4.9.3): + resolution: {integrity: sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + dependencies: + '@svgr/core': 8.1.0(typescript@4.9.3) + cosmiconfig: 8.3.6(typescript@4.9.3) + deepmerge: 4.3.1 + svgo: 3.0.4 + transitivePeerDependencies: + - typescript + dev: false + + /@svgr/webpack@8.1.0(typescript@4.9.3): + resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} + engines: {node: '>=14'} + dependencies: + '@babel/core': 7.23.5 + '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.23.5) + '@babel/preset-env': 7.23.5(@babel/core@7.23.5) + '@babel/preset-react': 7.23.3(@babel/core@7.23.5) + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.5) + '@svgr/core': 8.1.0(typescript@4.9.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0)(typescript@4.9.3) + transitivePeerDependencies: + - supports-color + - typescript + dev: false + /@swc/helpers@0.4.14: resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} dependencies: tslib: 2.4.1 dev: false + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: false + /@types/acorn@4.0.6: resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} dependencies: @@ -394,9 +2200,23 @@ packages: resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==} dev: true + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: false + + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + dev: false + /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + /@types/react-transition-group@4.4.9: + resolution: {integrity: sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==} + dependencies: + '@types/react': 18.2.37 + dev: false + /@types/react@18.2.37: resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==} dependencies: @@ -455,6 +2275,51 @@ packages: hasBin: true dev: false + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.23.5 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + dev: false + + /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.5): + resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.5): + resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + core-js-compat: 3.33.3 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.5): + resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + transitivePeerDependencies: + - supports-color + dev: false + /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} dev: false @@ -463,6 +2328,10 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: false + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -470,10 +2339,35 @@ packages: concat-map: 0.0.1 dev: false + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001565 + electron-to-chromium: 1.4.596 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: false + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: false + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: false + /caniuse-lite@1.0.30001435: resolution: {integrity: sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==} dev: false + /caniuse-lite@1.0.30001565: + resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} + dev: false + /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false @@ -487,6 +2381,15 @@ packages: supports-color: 4.5.0 dev: false + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: false + /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} dev: false @@ -520,6 +2423,11 @@ packages: engines: {node: '>=6'} dev: false + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -534,6 +2442,11 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: false + /commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -547,6 +2460,47 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: false + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: false + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: false + + /core-js-compat@3.33.3: + resolution: {integrity: sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==} + dependencies: + browserslist: 4.22.1 + dev: false + + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + + /cosmiconfig@8.3.6(typescript@4.9.3): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + typescript: 4.9.3 + dev: false + /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -555,9 +2509,51 @@ packages: which: 1.3.1 dev: false + /css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + dev: false + + /css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.0.2 + dev: false + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + dev: false + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + + /csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + css-tree: 2.2.1 + dev: false + /csstype@3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + dev: false + /data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -581,6 +2577,11 @@ packages: character-entities: 2.0.2 dev: false + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: false + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -591,11 +2592,77 @@ packages: engines: {node: '>=0.3.1'} dev: false + /dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dependencies: + '@babel/runtime': 7.23.5 + csstype: 3.1.2 + dev: false + + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + dev: false + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: false + + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: false + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.1 + dev: false + + /electron-to-chromium@1.4.596: + resolution: {integrity: sha512-zW3zbZ40Icb2BCWjm47nxwcFGYlIgdXkAx85XDO7cyky9J4QQfq8t0W19/TLZqq3JPQXtlv8BPIGmfa9Jb4scg==} + dev: false + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: false + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: false + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: false + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} dev: false + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: false + /escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -651,6 +2718,11 @@ packages: resolution: {integrity: sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==} dev: false + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: false + /execa@0.8.0: resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} engines: {node: '>=4'} @@ -683,6 +2755,10 @@ packages: web-streams-polyfill: 3.2.1 dev: false + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + /flexsearch@0.7.31: resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==} dev: false @@ -706,6 +2782,11 @@ packages: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: false + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: false + /get-stream@3.0.0: resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} engines: {node: '>=4'} @@ -739,6 +2820,11 @@ packages: path-is-absolute: 1.0.1 dev: false + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: false + /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: false @@ -758,6 +2844,11 @@ packages: engines: {node: '>=0.10.0'} dev: false + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: false + /hash-obj@4.0.0: resolution: {integrity: sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==} engines: {node: '>=12'} @@ -844,6 +2935,20 @@ packages: space-separated-tokens: 2.0.2 dev: false + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: false + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -879,6 +2984,10 @@ packages: is-decimal: 2.0.1 dev: false + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: false + /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} @@ -958,6 +3067,27 @@ packages: argparse: 2.0.1 dev: false + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: false + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: false + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: false + /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: false @@ -993,6 +3123,14 @@ packages: engines: {node: '>=6'} dev: false + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: false + + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + /lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} dev: false @@ -1008,6 +3146,12 @@ packages: js-tokens: 4.0.0 dev: false + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.4.1 + dev: false + /lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: @@ -1015,6 +3159,12 @@ packages: yallist: 2.1.2 dev: false + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: false + /markdown-extensions@1.1.1: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} @@ -1209,6 +3359,14 @@ packages: resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} dev: false + /mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + dev: false + + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + dev: false + /micromark-core-commonmark@1.0.6: resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} dependencies: @@ -1604,7 +3762,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 13.0.6(react-dom@18.2.0)(react@18.2.0) + next: 13.0.6(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -1616,12 +3774,12 @@ packages: react: '*' react-dom: '*' dependencies: - next: 13.0.6(react-dom@18.2.0)(react@18.2.0) + next: 13.0.6(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next@13.0.6(react-dom@18.2.0)(react@18.2.0): + /next@13.0.6(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-COvigvms2LRt1rrzfBQcMQ2GZd86Mvk1z+LOLY5pniFtL4VrTmhZ9salrbKfSiXbhsD01TrDdD68ec3ABDyscA==} engines: {node: '>=14.6.0'} hasBin: true @@ -1645,7 +3803,7 @@ packages: postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.0(react@18.2.0) + styled-jsx: 5.1.0(@babel/core@7.23.5)(react@18.2.0) optionalDependencies: '@next/swc-android-arm-eabi': 13.0.6 '@next/swc-android-arm64': 13.0.6 @@ -1681,7 +3839,7 @@ packages: git-url-parse: 13.1.0 intersection-observer: 0.12.2 match-sorter: 6.3.1 - next: 13.0.6(react-dom@18.2.0)(react@18.2.0) + next: 13.0.6(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0) next-seo: 5.14.1(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) next-themes: 0.2.1(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) nextra: 2.2.14(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) @@ -1706,7 +3864,7 @@ packages: gray-matter: 4.0.3 katex: 0.16.4 lodash.get: 4.4.2 - next: 13.0.6(react-dom@18.2.0)(react@18.2.0) + next: 13.0.6(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0) next-mdx-remote: 4.3.0(react-dom@18.2.0)(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 @@ -1725,6 +3883,13 @@ packages: - supports-color dev: false + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.4.1 + dev: false + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -1739,6 +3904,10 @@ packages: formdata-polyfill: 4.0.10 dev: false + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: false + /npm-run-path@2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} @@ -1746,6 +3915,17 @@ packages: path-key: 2.0.1 dev: false + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: false + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -1764,6 +3944,13 @@ packages: yocto-queue: 0.1.0 dev: false + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: false + /parse-entities@4.0.0: resolution: {integrity: sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==} dependencies: @@ -1777,6 +3964,16 @@ packages: is-hexadecimal: 2.0.1 dev: false + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: false + /parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} dev: false @@ -1811,6 +4008,11 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: false + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: false + /periscopic@3.0.4: resolution: {integrity: sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==} dependencies: @@ -1831,6 +4033,14 @@ packages: source-map-js: 1.0.2 dev: false + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + /property-information@6.2.0: resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} dev: false @@ -1853,6 +4063,28 @@ packages: scheduler: 0.23.0 dev: false + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: false + + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + dependencies: + '@babel/runtime': 7.23.5 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -1871,10 +4103,50 @@ packages: resolve: 1.22.8 dev: false + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: false + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: false + /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: false + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + dev: false + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.5 + dev: false + + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: false + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: false + /rehype-katex@6.0.2: resolution: {integrity: sha512-C4gDAlS1+l0hJqctyiU64f9CvT00S03qV1T6HiMzbSuLBgWUtcqydWHY9OpKrm0SpkK16FNd62CDKyWLwV2ppg==} dependencies: @@ -1970,6 +4242,11 @@ packages: resolution: {integrity: sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U=} dev: false + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: false + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -2006,6 +4283,11 @@ packages: kind-of: 6.0.3 dev: false + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: false + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -2045,6 +4327,13 @@ packages: engines: {node: '>=8'} dev: false + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.4.1 + dev: false + /sort-keys@5.0.0: resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==} engines: {node: '>=12'} @@ -2057,6 +4346,11 @@ packages: engines: {node: '>=0.10.0'} dev: false + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: false + /source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} @@ -2093,7 +4387,7 @@ packages: inline-style-parser: 0.1.1 dev: false - /styled-jsx@5.1.0(react@18.2.0): + /styled-jsx@5.1.0(@babel/core@7.23.5)(react@18.2.0): resolution: {integrity: sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -2106,10 +4400,15 @@ packages: babel-plugin-macros: optional: true dependencies: + '@babel/core': 7.23.5 client-only: 0.0.1 react: 18.2.0 dev: false + /stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: false + /supports-color@4.5.0: resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} engines: {node: '>=4'} @@ -2117,11 +4416,36 @@ packages: has-flag: 2.0.0 dev: false + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: false + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: false + /svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + dev: false + + /svgo@3.0.4: + resolution: {integrity: sha512-T+Xul3JwuJ6VGXKo/p2ndqx1ibxNKnLTvRc1ZTWKCfyKS/GgNjRZcYsK84fxTsy/izr91g/Rwx6fGnVgaFSI5g==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.0.0 + dev: false + /title@3.5.3: resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==} hasBin: true @@ -2137,6 +4461,11 @@ packages: engines: {node: '>=0.10.0'} dev: false + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: false + /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} dev: false @@ -2158,7 +4487,29 @@ packages: resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==} engines: {node: '>=4.2.0'} hasBin: true - dev: true + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: false + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: false + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: false + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: false /unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -2256,6 +4607,17 @@ packages: unist-util-visit-parents: 5.1.1 dev: false + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.1 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: false + /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} @@ -2330,6 +4692,15 @@ packages: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} dev: false + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: false + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/styles.css b/styles.css index 82358d7b..95c5b389 100644 --- a/styles.css +++ b/styles.css @@ -7,6 +7,10 @@ a.nx-text-primary-600 { color: #12ff80; } +html[class~='dark'] .dark\:nx-bg-dark.dark\:nx-bg-dark { + background-color: #121312; +} + .nextra-nav-container.nextra-nav-container { background-color: #12ff80; color: rgb(59, 69, 78); @@ -28,3 +32,19 @@ a.nx-text-primary-600 { > input.focus-visible { background-color: #00883f; } + +#__next > div > footer { + background-color: #121312; +} + +#__next > div > footer > div { + padding-right: 0; + padding-left: 0; + padding-top: 0; + padding-bottom: 0; +} + +#__next > div > footer > div > div > div > div > ul { + margin-top: 18px; + margin-bottom: 18px; +} diff --git a/styles/emotion.ts b/styles/emotion.ts new file mode 100644 index 00000000..72603eb3 --- /dev/null +++ b/styles/emotion.ts @@ -0,0 +1,15 @@ +import createCache from '@emotion/cache' + +// On the client side, Create a meta tag at the top of the and set it as insertionPoint. +// This assures that MUI styles are loaded first. +// It allows developers to easily override MUI styles with other styling solutions, like CSS modules. +export const createEmotionCache = () => { + let insertionPoint + + if (typeof document !== 'undefined') { + const emotionInsertionPoint = document.querySelector('meta[name="emotion-insertion-point"]') + insertionPoint = emotionInsertionPoint ?? undefined + } + + return createCache({ key: 'mui-style', insertionPoint }) +} \ No newline at end of file diff --git a/styles/palette.ts b/styles/palette.ts new file mode 100644 index 00000000..70b85704 --- /dev/null +++ b/styles/palette.ts @@ -0,0 +1,65 @@ +export const palette = { + text: { + primary: '#FFFFFF', + secondary: '#636669', + disabled: '#636669', + dark: '#121312', + }, + primary: { + dark: '#0cb259', + main: '#12FF80', + light: '#A1A3A7', + }, + secondary: { + dark: '#DCDEE0', + main: '#FFFFFF', + light: '#12FF80', + background: '#303033', + }, + border: { + main: '#636669', + light: '#303033', + background: '#121312', + }, + error: { + dark: '#AC2C3B', + main: '#FF5F72', + light: '#FFB4BD', + background: '#2F2527', + }, + success: { + dark: '#028D4C', + main: '#00B460', + light: '#81C784', + background: '#1F2920', + }, + info: { + dark: '#52BFDC', + main: '#5FDDFF', + light: '#B7F0FF', + background: '#19252C', + }, + warning: { + dark: '#CD674E', + main: '#FF8061', + light: '#FFB7A6', + background: '#2F2318', + }, + background: { + default: '#121312', + dark: '#1C1C1C', + main: '#121312', + paper: '#1C1C1C', + light: '#1B2A22', + }, + backdrop: { + main: '#636669', + }, + logo: { + main: '#FFFFFF', + background: '#303033', + }, + static: { + main: '#121312', + }, + } \ No newline at end of file diff --git a/styles/theme.ts b/styles/theme.ts new file mode 100644 index 00000000..9efa1f59 --- /dev/null +++ b/styles/theme.ts @@ -0,0 +1,179 @@ +import { createTheme } from '@mui/material/styles' +import type { Shadows } from '@mui/material/styles' + +import { palette } from './palette' + +declare module '@mui/material/styles' { + // Custom color palettes + interface Palette { + border: Palette['primary'] + logo: Palette['primary'] + backdrop: Palette['primary'] + static: Palette['primary'] + } + interface PaletteOptions { + border: PaletteOptions['primary'] + logo: PaletteOptions['primary'] + backdrop: PaletteOptions['primary'] + static: PaletteOptions['primary'] + } + + interface TypeBackground { + main: string + light: string + } + + // Custom color properties + interface PaletteColor { + background?: string + } + interface SimplePaletteColorOptions { + background?: string + } +} + +// declare module '@mui/material/Button' { +// interface ButtonPropsColorOverrides { +// background: true +// } +// } + +export const theme = createTheme({ + breakpoints: { + values: { + xs: 0, + sm: 600, + md: 900, + lg: 1200, + xl: 1630 + } + }, + palette: { + mode: 'dark', + ...palette + }, + spacing: 8, + shape: { + borderRadius: 6 + }, + shadows: [ + 'none', + `0 0 2px ${palette.primary.light}`, + ...Array(23).fill('none') + ] as Shadows, + typography: { + fontFamily: 'Citerne, sans-serif', + h1: { + fontSize: '56px', + lineHeight: '60px', + fontWeight: 400, + + '@media (min-width:600px)': { + fontSize: '80px', + lineHeight: '82px' + } + }, + h2: { + fontSize: '40px', + lineHeight: '44px', + + '@media (min-width:600px)': { + fontSize: '60px', + lineHeight: '64px' + } + }, + h3: { + fontSize: '32px', + lineHeight: '36px' + }, + h4: { + fontSize: '20px', + lineHeight: '30px', + + '@media (min-width:600px)': { + fontSize: '24px', + lineHeight: '32px' + } + }, + h5: { + fontSize: '16px' + }, + body1: { + fontSize: '16px', + lineHeight: '24px', + + '@media (min-width:600px)': { + fontSize: '18px', + lineHeight: '28px' + } + }, + body2: { + fontSize: '14px', + lineHeight: '24px' + }, + caption: { + fontSize: '12px', + lineHeight: '24px', + letterSpacing: '0.1em', + fontWeight: 500, + textTransform: 'uppercase', + color: palette.primary.light + }, + overline: { + fontSize: '11px', + lineHeight: '14px', + textTransform: 'uppercase', + letterSpacing: '1px' + } + }, + components: { + MuiSvgIcon: { + styleOverrides: { + fontSizeSmall: { + width: '1rem', + height: '1rem' + } + } + }, + MuiButton: { + styleOverrides: { + sizeLarge: { + fontSize: '18px', + lineHeight: '26px', + padding: '15px 22px' + }, + root: { + textTransform: 'inherit' + } + } + }, + MuiOutlinedInput: { + styleOverrides: { + notchedOutline: { + borderColor: 'inherit' + }, + root: { + color: palette.border.main + } + } + }, + MuiContainer: { + defaultProps: { + fixed: true, + maxWidth: 'xl', + disableGutters: true + }, + styleOverrides: { + root: { + paddingLeft: '15px', + paddingRight: '15px', + + '@media (min-width:1630px)': { + paddingLeft: '24px', + paddingRight: '24px' + } + } + } + } + } +}) diff --git a/theme.config.tsx b/theme.config.tsx index 63d5e153..ed4bc2c5 100644 --- a/theme.config.tsx +++ b/theme.config.tsx @@ -3,34 +3,17 @@ import { DocsThemeConfig } from 'nextra-theme-docs' import Img from 'next/image' import SafeLogo from './assets/svg/safe-logo.svg' +import Twiter from './assets/svg/x-icon.svg' +import Footer from './components/Footer' const config: DocsThemeConfig = { - logo: logo, + logo: , project: { link: 'https://github.com/safe-global' }, - chat: { - link: 'https://twitter.com/safe', - icon: ( - - - - ) - }, docsRepositoryBase: 'https://github.com/safe-global/safe-docs/tree/main', footer: { - text: ( - - MIT {new Date().getFullYear()} ©{' '} - - Safe - - . - - ) + text: