diff --git a/.env.example b/.env.example index f5f02f9f5..6028ed228 100644 --- a/.env.example +++ b/.env.example @@ -18,6 +18,7 @@ ETH_NODE_URI_GRAVITY=https://rpc.gravity.xyz #[pre-commit-checker: not a secret ETH_NODE_URI_IMMUTABLEZKEVM=https://rpc.immutable.com #[pre-commit-checker: not a secret] ETH_NODE_URI_KAIA=https://klaytn.drpc.org #[pre-commit-checker: not a secret] ETH_NODE_URI_LINEA=https://rpc.linea.build #[pre-commit-checker: not a secret] +ETH_NODE_URI_LISK=https://rpc.api.lisk.com #[pre-commit-checker: not a secret] ETH_NODE_URI_MANTLE=https://rpc.mantle.xyz #[pre-commit-checker: not a secret] ETH_NODE_URI_METIS=https://metis-mainnet.public.blastapi.io #[pre-commit-checker: not a secret] ETH_NODE_URI_MODE=https://mainnet.mode.network #[pre-commit-checker: not a secret] @@ -26,12 +27,13 @@ ETH_NODE_URI_MOONRIVER=https://rpc.moonriver.moonbeam.network #[pre-commit-check ETH_NODE_URI_OPTIMISM=https://1rpc.io/op #[pre-commit-checker: not a secret] ETH_NODE_URI_POLYGON=https://1rpc.io/matic #[pre-commit-checker: not a secret] ETH_NODE_URI_POLYGONZKEVM=https://zkevm-rpc.com #[pre-commit-checker: not a secret] -ETH_NODE_URI_ROOTSTOCK=https://rootstock.drpc.org #[pre-commit-checker: not a secret].io -ETH_NODE_URI_SEI=https://evm-rpc.sei-apis.com #[pre-commit-checker: not a secret].io -ETH_NODE_URI_SCROLL=https://1rpc.io/scroll #[pre-commit-checker: not a secret].io -ETH_NODE_URI_TAIKO=https://rpc.taiko.tools #[pre-commit-checker: not a secret].io -ETH_NODE_URI_XLAYER=https://rpc.xlayer.tech #[pre-commit-checker: not a secret].io -ETH_NODE_URI_ZKSYNC=https://zksync2-mainnet.zksync #[pre-commit-checker: not a secret].io +ETH_NODE_URI_ROOTSTOCK=https://rootstock.drpc.org #[pre-commit-checker: not a secret] +ETH_NODE_URI_SEI=https://evm-rpc.sei-apis.com #[pre-commit-checker: not a secret] +ETH_NODE_URI_SCROLL=https://1rpc.io/scroll #[pre-commit-checker: not a secret] +ETH_NODE_URI_TAIKO=https://rpc.taiko.tools #[pre-commit-checker: not a secret] +ETH_NODE_URI_WORLDCHAIN=https://worldchain-mainnet.g.alchemy.com/public #[pre-commit-checker: not a secret] +ETH_NODE_URI_XLAYER=https://rpc.xlayer.tech #[pre-commit-checker: not a secret] +ETH_NODE_URI_ZKSYNC=https://zksync2-mainnet.zksync #[pre-commit-checker: not a secret] # Testnet RPCs ETH_NODE_URI_GOERLI=https://rpc.ankr.com/eth_goerli #[pre-commit-checker: not a secret] @@ -59,6 +61,7 @@ GRAVITY_ETHERSCAN_API_KEY= IMMUTABLEZKEVM_ETHERSCAN_API_KEY= KAIA_ETHERSCAN_API_KEY= LINEA_ETHERSCAN_API_KEY= +LISK_ETHERSCAN_API_KEY= MANTLE_ETHERSCAN_API_KEY= METIS_ETHERSCAN_API_KEY= MODE_ETHERSCAN_API_KEY= @@ -69,6 +72,7 @@ POLYGON_ETHERSCAN_API_KEY= POLYGONZKEVM_ETHERSCAN_API_KEY= SCROLL_ETHERSCAN_API_KEY= SEI_ETHERSCAN_API_KEY= +WORLDCHAIN_ETHERSCAN_API_KEY= XLAYER_ETHERSCAN_API_KEY= TAIKO_ETHERSCAN_API_KEY= diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 542a47ac2..a8fffb820 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -7,6 +7,7 @@ - [ ] I have performed a self-review of my code - [ ] This pull request is as small as possible and only tackles one problem - [ ] I have added tests that cover the functionality / test the bug +- [ ] For new facets: I have checked all points from this list: https://www.notion.so/lifi/New-Facet-Contract-Checklist-157f0ff14ac78095a2b8f999d655622e - [ ] I have updated any required documentation # Checklist for reviewer (DO NOT DEPLOY and contracts BEFORE CHECKING THIS!!!) diff --git a/.github/workflows/diamondEmergencyPause.yml b/.github/workflows/diamondEmergencyPause.yml index 223a664a3..8265ffcbd 100644 --- a/.github/workflows/diamondEmergencyPause.yml +++ b/.github/workflows/diamondEmergencyPause.yml @@ -65,6 +65,7 @@ jobs: ETH_NODE_URI_IMMUTABLEZKEVM: ${{ secrets.ETH_NODE_URI_IMMUTABLEZKEVM }} ETH_NODE_URI_KAIA: ${{ secrets.ETH_NODE_URI_KAIA }} ETH_NODE_URI_LINEA: ${{ secrets.ETH_NODE_URI_LINEA }} + ETH_NODE_URI_LISK: ${{ secrets.ETH_NODE_URI_LISK }} ETH_NODE_URI_MANTLE: ${{ secrets.ETH_NODE_URI_MANTLE }} ETH_NODE_URI_METIS: ${{ secrets.ETH_NODE_URI_METIS }} ETH_NODE_URI_MODE: ${{ secrets.ETH_NODE_URI_MODE }} @@ -78,6 +79,7 @@ jobs: ETH_NODE_URI_SCROLL: ${{ secrets.ETH_NODE_URI_SCROLL }} ETH_NODE_URI_SEI: ${{ secrets.ETH_NODE_URI_SEI }} ETH_NODE_URI_TAIKO: ${{ secrets.ETH_NODE_URI_TAIKO }} + ETH_NODE_URI_WORLDCHAIN: ${{ secrets.ETH_NODE_URI_WORLDCHAIN }} ETH_NODE_URI_XLAYER: ${{ secrets.ETH_NODE_URI_XLAYER }} ETH_NODE_URI_ZKSYNC: ${{ secrets.ETH_NODE_URI_ZKSYNC }} PRIVATE_KEY_PAUSER_WALLET: ${{ secrets.PRIV_KEY_PAUSER_WALLET }} diff --git a/.github/workflows/enforceTestCoverage.yml b/.github/workflows/enforceTestCoverage.yml index fcef73462..a61a80f18 100644 --- a/.github/workflows/enforceTestCoverage.yml +++ b/.github/workflows/enforceTestCoverage.yml @@ -24,7 +24,7 @@ jobs: ETH_NODE_URI_ARBITRUM: ${{ secrets.ETH_NODE_URI_ARBITRUM }} ETH_NODE_URI_BSC: ${{ secrets.ETH_NODE_URI_BSC }} ETH_NODE_URI_GNOSIS: ${{ secrets.ETH_NODE_URI_GNOSIS }} - MIN_TEST_COVERAGE: 74 # = 74% line coverage + MIN_TEST_COVERAGE: ${{ secrets.MIN_TEST_COVERAGE }} steps: - uses: actions/checkout@v4.1.7 diff --git a/.github/workflows/forge.yml b/.github/workflows/forge.yml index 48ead5721..c5732ff67 100644 --- a/.github/workflows/forge.yml +++ b/.github/workflows/forge.yml @@ -46,7 +46,7 @@ jobs: run: forge install - name: Run forge tests (with auto-repeat in case of error) - uses: Wandalen/wretry.action@v3.7.0 + uses: Wandalen/wretry.action@v3.7.2 with: command: forge test --evm-version 'shanghai' attempt_limit: 10 diff --git a/.github/workflows/protectAuditLabels.yml b/.github/workflows/protectAuditLabels.yml index 10da37961..de2a3935d 100644 --- a/.github/workflows/protectAuditLabels.yml +++ b/.github/workflows/protectAuditLabels.yml @@ -4,7 +4,6 @@ # - Will fail if it runs into an error, otherwise pass # - Will skip checks if the PR was just approved or set from draft to "ready for review" state - name: Protect Audit Labels on: @@ -12,7 +11,7 @@ on: types: [labeled, unlabeled, synchronize, review_requested, ready_for_review] pull_request_review: - types: [submitted] + types: [submitted] jobs: protect_audit_labels: runs-on: ubuntu-latest @@ -93,3 +92,4 @@ jobs: echo -e "\033[32mUnauthorized label modification was successfully prevented and undone.\033[0m" else echo -e "\033[32mNo protected labels were modified.\033[0m" + fi diff --git a/.github/workflows/protectSecurityRelevantCode.yml b/.github/workflows/protectSecurityRelevantCode.yml index 44e3b193e..39046bdae 100644 --- a/.github/workflows/protectSecurityRelevantCode.yml +++ b/.github/workflows/protectSecurityRelevantCode.yml @@ -6,8 +6,8 @@ name: Protect security-critical code/system # - protects the pre-commit checker script stored in .husky/pre-commit on: - pull_request: - types: [opened, synchronize, reopened, ready_for_review] + pull_request_review: + types: [submitted] jobs: protect-critical-code: diff --git a/.github/workflows/types.yaml b/.github/workflows/types.yaml index 074b2a142..e169f5171 100644 --- a/.github/workflows/types.yaml +++ b/.github/workflows/types.yaml @@ -10,111 +10,179 @@ jobs: generate-tag: runs-on: ubuntu-latest permissions: - contents: read + contents: write # Needed to push new tags steps: - - name: Checkout contracts repository - uses: actions/checkout@v4 + # Step 1: Checkout the contracts repository + - name: Checkout Contracts Repository + uses: actions/checkout@v4.1.7 with: ref: ${{ env.BRANCH_NAME }} + # Step 2: Install Foundry - name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 - - name: Install Solidity Libs + # Step 3: Install Solidity Libraries + - name: Install Solidity Libraries run: forge install + # Step 4: Setup Node.js - name: Setup Node.js uses: actions/setup-node@v4.1.0 with: node-version: 20 - - name: Install Node deps + # Step 5: Install Node.js dependencies + - name: Install Node Dependencies run: yarn install + # Step 6: Generate ABI from contracts - name: Generate ABI run: yarn abi:generate - - name: Generate types bindings + # Step 7: Generate TypeScript bindings from ABI + - name: Generate TypeScript Bindings run: yarn typechain - - name: Checkout lifi-contract-types repository - uses: actions/checkout@v4 + # Step 8: Checkout the lifi-contract-types repository + - name: Checkout lifi-contract-types Repository + uses: actions/checkout@v4.1.7 with: repository: lifinance/lifi-contract-types path: lifi-contract-types ssh-key: ${{ secrets.SSH_REPO_TOKEN }} ref: main - - name: Copy types bindings + # Step 9: Copy generated types and ABI into the lifi-contract-types repo + - name: Copy Type Bindings and ABI run: | - rm -r lifi-contract-types/src/ - mv typechain lifi-contract-types/src + rm -rf lifi-contract-types/src/ + mkdir -p lifi-contract-types/src + cp -r typechain/* lifi-contract-types/src/ cp diamond.json lifi-contract-types/dist/ - - name: Build contract types + - name: Verify File Status (for debugging) + run: | + cd lifi-contract-types + git status + + # Step 10: Build the lifi-contract-types project + - name: Build Contract Types run: cd lifi-contract-types && yarn install && yarn build - - name: Retrieve latest Tag + # Step 11: Retrieve the latest tag from the repository + - name: Retrieve Latest Tag id: latest_release run: | - # fetch tag releases - release_json=$(curl https://api.github.com/repos/lifinance/lifi-contract-types/tags) + # Fetch tags from the lifi-contract-types repository + RELEASE_JSON=$(curl https://api.github.com/repos/lifinance/lifi-contract-types/tags) - # get the latest tag - LATEST_TAG=$(echo "$release_json" | jq -r '.[0].name') + # Extract the latest tag name + LATEST_TAG=$(echo "$RELEASE_JSON" | jq -r '.[0].name') - # we need to make sure that on staging we're going to update a -beta version, if any + # Handle beta versions for non-main branches if [[ "$BRANCH_NAME" != "main" ]]; then - # if it has already "-beta", no other action is required, since it means - # that we're already going to update the latest staging release if [[ "$LATEST_TAG" != *"beta"* ]]; then - # otherwise, start looping through the tags and search for the latest -beta tag - while read item; do - tag_name=$(jq -r '.name' <<< "$item") - # check if there's already a latest tag beta release - # and, if present, use it instead of the main one - # if we end up without any latest beta tag, we will create a beta release from the latest tag - if [[ "$tag_name" == "$LATEST_TAG-$beta"* ]]; then - LATEST_TAG=$tag_name + while read ITEM; do + TAG_NAME=$(jq -r '.name' <<< "$ITEM") + if [[ "$TAG_NAME" == "$LATEST_TAG-$beta"* ]]; then + LATEST_TAG=$TAG_NAME break fi - done <<<$(echo "$release_json" | jq -c -r '.[]') + done <<<$(echo "$RELEASE_JSON" | jq -c -r '.[]') fi fi - echo "latest tag: $LATEST_TAG" - echo "LATEST_TAG=${LATEST_TAG}" >> $GITHUB_ENV - - name: Update version + # Check if LATEST_TAG is empty or null + if [[ -z "$LATEST_TAG" || "$LATEST_TAG" == "null" ]]; then + echo "ERROR: No latest tag found in the repository." + exit 1 + fi + + # Validate semver format + if [[ ! "$LATEST_TAG" =~ ^v?[0-9]+\.[0-9]+\.[0-9]+(-beta)?$ ]]; then + echo "ERROR: Invalid version format: $LATEST_TAG (not a valid semver format)" + exit 1 + fi + + echo "LATEST_TAG=$LATEST_TAG" + echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV + + # Step 12: Increment the version number based on the commit message and branch + - name: Update Version + if: ${{ success() }} env: + LATEST_TAG: ${{ env.LATEST_TAG }} + BRANCH_NAME: ${{ env.BRANCH_NAME }} MESSAGE: ${{ github.event.head_commit.message }} id: bump_version - uses: christian-draeger/increment-semantic-version@1.1.0 - with: - current-version: '${{ env.LATEST_TAG }}' - version-fragment: "${{ env.BRANCH_NAME == 'main' && (contains(env.MESSAGE, 'major') && 'major' || contains(env.MESSAGE, 'feat') && 'feature' || 'bug') || 'beta' }}" + run: | + # Remove leading "v" from LATEST_TAG for semver parsing + CURRENT_VERSION="${LATEST_TAG#v}" + echo "Current version: $CURRENT_VERSION" + + VERSION_FRAGMENT="" + + # Determine the type of version bump + if [[ "$BRANCH_NAME" == "main" ]]; then + if [[ "$MESSAGE" =~ "major" ]]; then + VERSION_FRAGMENT="major" + elif [[ "$MESSAGE" =~ "feat" ]]; then + VERSION_FRAGMENT="minor" + else + VERSION_FRAGMENT="patch" + fi + else + VERSION_FRAGMENT="beta" + fi + + # Parse and increment the version + IFS='.' read -r MAJOR MINOR PATCH <<< "${CURRENT_VERSION//[^0-9.]/}" + + if [[ "$VERSION_FRAGMENT" == "major" ]]; then + MAJOR=$((MAJOR + 1)) + MINOR=0 + PATCH=0 + elif [[ "$VERSION_FRAGMENT" == "minor" ]]; then + MINOR=$((MINOR + 1)) + PATCH=0 + elif [[ "$VERSION_FRAGMENT" == "patch" ]]; then + PATCH=$((PATCH + 1)) + elif [[ "$VERSION_FRAGMENT" == "beta" ]]; then + PATCH=$((PATCH + 1)) + NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}-beta" + else + NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}" + fi + + echo "New version: $NEW_VERSION" + echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV - - name: Push tag + # Step 13: Push the updated version tag to the repository + - name: Push Updated Tag + if: ${{ success() }} env: + NEW_VERSION: ${{ env.NEW_VERSION }} + BRANCH_NAME: ${{ env.BRANCH_NAME }} MESSAGE: ${{ github.event.head_commit.message }} - if: steps.bump_version.outputs.next-version run: | cd lifi-contract-types - tmp=$(mktemp) - jq '.version="${{ steps.bump_version.outputs.next-version }}"' package.json > "$tmp" && mv "$tmp" package.json + TMP=$(mktemp) + jq '.version="${NEW_VERSION}"' package.json > "$TMP" && mv "$TMP" package.json git config user.name github-actions git config user.email github-actions@github.com - echo 'Updating version from ${{ env.LATEST_TAG }} to ${{ steps.bump_version.outputs.next-version }}' - git add src/* - git add dist/* - git add package.json - git commit -m 'actions: new contracts version ${{ steps.bump_version.outputs.next-version }}' + echo "Updating version from $LATEST_TAG to $NEW_VERSION" + # git add src/* + # git add dist/* + # git add package.json + git add -A # Stage all changes, including deletions - # Sanitize the commit message by removing single quotes - COMMIT_MSG=$(echo "$MESSAGE" | sed "s/'//g") + git commit -m "actions: new contracts version $NEW_VERSION" - git tag -a v${{ steps.bump_version.outputs.next-version }} -m "$MESSAGE" - git push origin tag v${{ steps.bump_version.outputs.next-version }} + # Annotate and push the new tag + git tag -a "v$NEW_VERSION" -m "$MESSAGE" + git push origin tag "v$NEW_VERSION" if [[ "$BRANCH_NAME" == "main" ]]; then git push -u origin $BRANCH_NAME fi diff --git a/.github/workflows/unreviewedPRReminder.yml b/.github/workflows/unreviewedPRReminder.yml index fc90df5e0..62da74a11 100644 --- a/.github/workflows/unreviewedPRReminder.yml +++ b/.github/workflows/unreviewedPRReminder.yml @@ -16,33 +16,45 @@ jobs: env: # set the GH_TOKEN environment variable here GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - set -x + + # Use GitHub API and jq to parse the data PRS=$(gh api repos/lifinance/contracts/pulls -q '.[] | {number: .number, created_at: .created_at, labels: (.labels | map(.name)), draft: .draft}') - echo "PRS: $PRS" + echo "PRs found: $PRS" OLD_PRS="" while read -r PR; do + echo "------------------------------------------------------------------" PR_CREATED_AT=$(echo "$PR" | jq -r '.created_at') PR_NUMBER=$(echo "$PR" | jq -r '.number') PR_LABELS=$(echo "$PR" | jq -c '.labels') PR_ISDRAFT=$(echo "$PR" | jq -r '.draft') + echo "Now checking PR: $PR_NUMBER" + echo "PR is in DRAFT status: $PR_ISDRAFT" + echo "The following labels are assigned to this PR: $PR_LABELS" + + # Continue loop if the PR is draft if [[ "$PR_ISDRAFT" == "true" ]]; then + echo "skipping this PR cause it is in draft mode" continue fi # Continue loop if the PR has the label "WIP" if echo "$PR_LABELS" | grep -q "WIP"; then + echo "skipping this PR cause it is labeled with 'WIP'" continue fi - # Continue loop if the PR has the label "WaitForBackend" - if echo "$PR_LABELS" | grep -q "WaitForBackend"; then + + # Continue loop if the PR has the label "waitForAudit" + if echo "$PR_LABELS" | grep -q "waitForAudit"; then + echo "skipping this PR cause it is labeled with 'waitForAudit'" continue fi - # Continue loop if the PR has the label "WaitForBackend" - if echo "$PR_LABELS" | grep -q "WaitForBackend"; then + # Continue loop if the PR has the label "waitForBackend" + if echo "$PR_LABELS" | grep -q "waitForBackend"; then + echo "skipping this PR cause it is labeled with 'waitForBackend'" continue fi diff --git a/.github/workflows_deactivated/types.oldVersion.yml b/.github/workflows_deactivated/types.oldVersion.yml new file mode 100644 index 000000000..074b2a142 --- /dev/null +++ b/.github/workflows_deactivated/types.oldVersion.yml @@ -0,0 +1,120 @@ +name: Types Bindings + +on: + push: + +env: + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + +jobs: + generate-tag: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout contracts repository + uses: actions/checkout@v4 + with: + ref: ${{ env.BRANCH_NAME }} + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Install Solidity Libs + run: forge install + + - name: Setup Node.js + uses: actions/setup-node@v4.1.0 + with: + node-version: 20 + + - name: Install Node deps + run: yarn install + + - name: Generate ABI + run: yarn abi:generate + + - name: Generate types bindings + run: yarn typechain + + - name: Checkout lifi-contract-types repository + uses: actions/checkout@v4 + with: + repository: lifinance/lifi-contract-types + path: lifi-contract-types + ssh-key: ${{ secrets.SSH_REPO_TOKEN }} + ref: main + + - name: Copy types bindings + run: | + rm -r lifi-contract-types/src/ + mv typechain lifi-contract-types/src + cp diamond.json lifi-contract-types/dist/ + + - name: Build contract types + run: cd lifi-contract-types && yarn install && yarn build + + - name: Retrieve latest Tag + id: latest_release + run: | + # fetch tag releases + release_json=$(curl https://api.github.com/repos/lifinance/lifi-contract-types/tags) + + # get the latest tag + LATEST_TAG=$(echo "$release_json" | jq -r '.[0].name') + + # we need to make sure that on staging we're going to update a -beta version, if any + if [[ "$BRANCH_NAME" != "main" ]]; then + # if it has already "-beta", no other action is required, since it means + # that we're already going to update the latest staging release + if [[ "$LATEST_TAG" != *"beta"* ]]; then + # otherwise, start looping through the tags and search for the latest -beta tag + while read item; do + tag_name=$(jq -r '.name' <<< "$item") + # check if there's already a latest tag beta release + # and, if present, use it instead of the main one + # if we end up without any latest beta tag, we will create a beta release from the latest tag + if [[ "$tag_name" == "$LATEST_TAG-$beta"* ]]; then + LATEST_TAG=$tag_name + break + fi + done <<<$(echo "$release_json" | jq -c -r '.[]') + fi + fi + echo "latest tag: $LATEST_TAG" + echo "LATEST_TAG=${LATEST_TAG}" >> $GITHUB_ENV + + - name: Update version + env: + MESSAGE: ${{ github.event.head_commit.message }} + id: bump_version + uses: christian-draeger/increment-semantic-version@1.1.0 + with: + current-version: '${{ env.LATEST_TAG }}' + version-fragment: "${{ env.BRANCH_NAME == 'main' && (contains(env.MESSAGE, 'major') && 'major' || contains(env.MESSAGE, 'feat') && 'feature' || 'bug') || 'beta' }}" + + - name: Push tag + env: + MESSAGE: ${{ github.event.head_commit.message }} + if: steps.bump_version.outputs.next-version + run: | + cd lifi-contract-types + tmp=$(mktemp) + jq '.version="${{ steps.bump_version.outputs.next-version }}"' package.json > "$tmp" && mv "$tmp" package.json + git config user.name github-actions + git config user.email github-actions@github.com + echo 'Updating version from ${{ env.LATEST_TAG }} to ${{ steps.bump_version.outputs.next-version }}' + git add src/* + git add dist/* + git add package.json + git commit -m 'actions: new contracts version ${{ steps.bump_version.outputs.next-version }}' + + # Sanitize the commit message by removing single quotes + COMMIT_MSG=$(echo "$MESSAGE" | sed "s/'//g") + + git tag -a v${{ steps.bump_version.outputs.next-version }} -m "$MESSAGE" + git push origin tag v${{ steps.bump_version.outputs.next-version }} + if [[ "$BRANCH_NAME" == "main" ]]; then + git push -u origin $BRANCH_NAME + fi diff --git a/.gitignore b/.gitignore index d61a39609..e156cd5ec 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ test/logs # Bash Script Stuff script/config.sh script/playground.sh +test/solidity/TestPlayground.t.sol diff --git a/.gitmodules b/.gitmodules index 916ca16ca..ce1a6a0ef 100644 --- a/.gitmodules +++ b/.gitmodules @@ -22,3 +22,6 @@ [submodule "lib/solady"] path = lib/solady url = https://github.com/Vectorized/solady +[submodule "lib/Permit2"] + path = lib/Permit2 + url = https://github.com/Uniswap/Permit2 diff --git a/docs/HyphenFacet.md b/archive/docs/HyphenFacet.md similarity index 100% rename from docs/HyphenFacet.md rename to archive/docs/HyphenFacet.md diff --git a/script/deploy/facets/DeployHyphenFacet.s.sol b/archive/scripts/Deploy/DeployHyphenFacet.s.sol similarity index 100% rename from script/deploy/facets/DeployHyphenFacet.s.sol rename to archive/scripts/Deploy/DeployHyphenFacet.s.sol diff --git a/script/deploy/facets/UpdateHyphenFacet.s.sol b/archive/scripts/Deploy/UpdateHyphenFacet.s.sol similarity index 100% rename from script/deploy/facets/UpdateHyphenFacet.s.sol rename to archive/scripts/Deploy/UpdateHyphenFacet.s.sol diff --git a/src/Facets/HyphenFacet.sol b/archive/src/Facets/HyphenFacet.sol similarity index 100% rename from src/Facets/HyphenFacet.sol rename to archive/src/Facets/HyphenFacet.sol diff --git a/test/solidity/Facets/HyphenFacet.t.sol b/archive/test/HyphenFacet.t.sol similarity index 100% rename from test/solidity/Facets/HyphenFacet.t.sol rename to archive/test/HyphenFacet.t.sol diff --git a/audit/auditLog.json b/audit/auditLog.json index 03a396447..d0ef689be 100644 --- a/audit/auditLog.json +++ b/audit/auditLog.json @@ -35,12 +35,33 @@ "auditReportPath": "./audit/reports/2024.11.05_EmergencyPauseFacet_ReAudit.pdf", "auditCommitHash": "da61880ba3847c07c35b64a78b957ff845ec18ac" }, + "audit20241107": { + "auditCompletedOn": "07.11.2024", + "auditedBy": "Sujith Somraaj (individual security researcher)", + "auditorGitHandle": "sujithsomraaj", + "auditReportPath": "./audit/reports/2024.11.07_GasZip.pdf", + "auditCommitHash": "2d8927ababff6ace0c577d92407bcf289ebb89c0" + }, + "audit20241122": { + "auditCompletedOn": "22.11.2024", + "auditedBy": "Sujith Somraaj (individual security researcher)", + "auditorGitHandle": "sujithsomraaj", + "auditReportPath": "./audit/reports/2024.11.22_Permit2Proxy.pdf", + "auditCommitHash": "0e3debb78abcdf9a9f934115338b611e16b039a0" + }, "audit20241202": { "auditCompletedOn": "02.12.2024", "auditedBy": "Sujith Somraaj (individual security researcher)", "auditorGitHandle": "sujithsomraaj", "auditReportPath": "./audit/reports/2024-12-02_RelayFacet(v1.0.0).pdf", "auditCommitHash": "291d0a78bc4174b3ec29bb2ce0b27c6b5d3e8ec8" + }, + "audit20241203": { + "auditCompletedOn": "03.12.2024", + "auditedBy": "Sujith Somraaj (individual security researcher)", + "auditorGitHandle": "sujithsomraaj", + "auditReportPath": "./audit/reports/2024.12.03_LiFiDexAggregator.pdf", + "auditCommitHash": "8a34562c912b5b19c919bb95338655c944428af5" } }, "auditedContracts": { @@ -62,6 +83,25 @@ "audit20241007" ] }, + "GasZipFacet": { + "2.0.0": ["audit20241107"] + }, + "GasZipPeriphery": { + "1.0.0": ["audit20241107"] + }, + "IGasZip": { + "1.0.0": ["audit20241107"] + }, + "EmergencyPauseFacet": { + "1.0.0": ["audit20240913"], + "1.0.1": ["audit20241105"] + }, + "LiFiDEXAggregator": { + "1.5.0": ["audit20241203"] + }, + "Permit2Proxy": { + "1.0.0": ["audit20241122"] + }, "ReceiverAcrossV3": { "1.0.0": [ "audit20241007" diff --git a/audit/reports/2024.11.07_GasZip.pdf b/audit/reports/2024.11.07_GasZip.pdf new file mode 100644 index 000000000..d1d9d46a9 Binary files /dev/null and b/audit/reports/2024.11.07_GasZip.pdf differ diff --git a/audit/reports/2024.11.22_Permit2Proxy.pdf b/audit/reports/2024.11.22_Permit2Proxy.pdf new file mode 100644 index 000000000..f23a830c8 Binary files /dev/null and b/audit/reports/2024.11.22_Permit2Proxy.pdf differ diff --git a/audit/reports/2024.12.03_LiFiDexAggregator.pdf b/audit/reports/2024.12.03_LiFiDexAggregator.pdf new file mode 100644 index 000000000..eea33b846 Binary files /dev/null and b/audit/reports/2024.12.03_LiFiDexAggregator.pdf differ diff --git a/config/across.json b/config/across.json index 0ca6dcf91..48570a8f8 100644 --- a/config/across.json +++ b/config/across.json @@ -1,4 +1,5 @@ { + "comment": "Note: this file is generated by a backend script, do not change it manually!", "mainnet": { "chainId": 1, "acrossSpokePool": "0x5c7bcd6e7de5423a257d81b442095a1a6ced35c5", @@ -112,6 +113,14 @@ "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f" ] }, + "lisk": { + "chainId": 1135, + "acrossSpokePool": "0x9552a0a6624A23B848060AE5901659CDDa1f83f8", + "weth": "0x4200000000000000000000000000000000000006", + "tokensToApprove": [ + "0x4200000000000000000000000000000000000006" + ] + }, "blast": { "chainId": 81457, "acrossSpokePool": "0x2D509190Ed0172ba588407D4c2df918F955Cc6E1", @@ -132,5 +141,13 @@ "0x5300000000000000000000000000000000000004", "0xf55BEC9cafDbE8730f096Aa55dad6D22d44099Df" ] + }, + "worldchain": { + "chainId": 480, + "acrossSpokePool": "0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64", + "weth": "0x4200000000000000000000000000000000000006", + "tokensToApprove": [ + "0x4200000000000000000000000000000000000006" + ] } } \ No newline at end of file diff --git a/config/amarok.json b/config/amarok.json index fa9dd1408..f8bdb2aa5 100644 --- a/config/amarok.json +++ b/config/amarok.json @@ -1,4 +1,5 @@ { + "comment": "Note: this file is generated by a backend script, do not change it manually!", "mainnet": { "chainId": 1, "connextHandler": "0x8898B472C54c31894e3B9bb83cEA802a5d0e63C6", @@ -8,9 +9,7 @@ "0x9e32b13ce7f2e80a01932b42553652e053d6ed8e", "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "0xdac17f958d2ee523a2206206994597c13d831ec7", - "0xBC6DA0FE9aD5f3b0d58160288917AA56653660E9", - "0x0100546F2cD4C9D97f798fFC9755E47865FF7Ee6" + "0xdac17f958d2ee523a2206206994597c13d831ec7" ] }, "optimism": { @@ -21,11 +20,15 @@ "0x4200000000000000000000000000000000000006", "0x7f5c764cbc14f9669b88837ca1490cca17c31607", "0x94b008aa00579c1307b0ef2c499ad98a8ce58e58", - "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", - "0xCB8FA9a76b8e203D8C3797bF438d8FB81Ea3326A", - "0x3E29D3A9316dAB217754d13b28646B76607c5f04" + "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1" ] }, + "opbnb": { + "chainId": 204, + "connextHandler": "0x0000000000000000000000000000000000000000", + "domain": "", + "tokensToApprove": [] + }, "bsc": { "chainId": 56, "connextHandler": "0xCd401c10afa37d641d2F594852DA94C700e4F2CE", @@ -47,24 +50,6 @@ "0xddafbb505ad214d7b80b1f830fccc89b60fb7a83" ] }, - "gravity": { - "chainId": 1625, - "connextHandler": "0x0000000000000000000000000000000000000000", - "domain": "", - "tokensToApprove": [] - }, - "immutablezkevm": { - "chainId": 13371, - "connextHandler": "0x0000000000000000000000000000000000000000", - "domain": "", - "tokensToApprove": [] - }, - "kaia": { - "chainId": 8217, - "connextHandler": "0x0000000000000000000000000000000000000000", - "domain": "", - "tokensToApprove": [] - }, "polygon": { "chainId": 137, "connextHandler": "0x11984dc4465481512eb5b777E44061C158CF2259", @@ -83,9 +68,7 @@ "tokensToApprove": [ "0x420000000000000000000000000000000000000a", "0xbb06dca3ae6887fabf931640f67cab3e3a16f4dc", - "0xea32a96608495e54156ae48931a7c20f0dcc1a21", - "0x303241e2B3b4aeD0bb0F8623e7442368FED8Faf3", - "0x0E17934B9735D479B2388347fAeF0F4e58b9cc06" + "0xea32a96608495e54156ae48931a7c20f0dcc1a21" ] }, "base": { @@ -97,29 +80,13 @@ "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913" ] }, - "blast": { - "chainId": 81457, - "connextHandler": "0x0000000000000000000000000000000000000000", - "domain": "", - "tokensToApprove": [] - }, - "sei": { - "chainId": 1329, - "connextHandler": "0x0000000000000000000000000000000000000000", - "domain": "", - "tokensToApprove": [] - }, - "rootstock": { - "chainId": 30, - "connextHandler": "0x0000000000000000000000000000000000000000", - "domain": "", - "tokensToApprove": [] - }, "mode": { "chainId": 34443, "connextHandler": "0x7380511493DD4c2f1dD75E9CCe5bD52C787D4B51", "domain": "1836016741", - "tokensToApprove": ["0x4200000000000000000000000000000000000006"] + "tokensToApprove": [ + "0x4200000000000000000000000000000000000006" + ] }, "arbitrum": { "chainId": 42161, @@ -129,9 +96,7 @@ "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", - "0xCB8FA9a76b8e203D8C3797bF438d8FB81Ea3326A", - "0x17573150d67d820542EFb24210371545a4868B03" + "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8" ] }, "linea": { @@ -143,6 +108,12 @@ "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f" ] }, + "lisk": { + "chainId": 1135, + "connextHandler": "0x0000000000000000000000000000000000000000", + "domain": "", + "tokensToApprove": [] + }, "mantle": { "chainId": 5000, "connextHandler": "0x0000000000000000000000000000000000000000", @@ -299,10 +270,16 @@ "domain": "", "tokensToApprove": [] }, + "worldchain": { + "chainId": 480, + "connextHandler": "0x0000000000000000000000000000000000000000", + "domain": "", + "tokensToApprove": [] + }, "xlayer": { "chainId": 196, "connextHandler": "0x0000000000000000000000000000000000000000", "domain": "", "tokensToApprove": [] } -} +} \ No newline at end of file diff --git a/config/cbridge.json b/config/cbridge.json index 46974053c..f0e92ba8d 100644 --- a/config/cbridge.json +++ b/config/cbridge.json @@ -1,163 +1,246 @@ { - "hardhat": { - "cBridge": "0x5427FEFA711Eff984124bFBB1AB6fbf5E3DA1820" - }, + "comment": "Note: this file is generated by a backend script, do not change it manually!", "mainnet": { "cBridge": "0x5427FEFA711Eff984124bFBB1AB6fbf5E3DA1820", - "messageBus": "0x4066D196A423b2b3B8B054f4F40efB47a74E200C", "cfUSDC": "0x317F8d18FB16E49a958Becd0EA72f8E153d25654", + "messageBus": "0x4066d196a423b2b3b8b054f4f40efb47a74e200c", "tokensToApprove": [ - "0xdac17f958d2ee523a2206206994597c13d831ec7", - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - "0x6b175474e89094c44da98b954eedeac495271d0f", - "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0" + "0x8457CA5040ad67fdebbCC8EdCE889A335Bc0fbFB", + "0x38B0e3A59183814957D83dF2a97492AED1F003e2", + "0x8A7aDc1B690E81c758F1BD0F72DFe27Ae6eC56A5", + "0x1fE24F25b1Cf609B9c4e7E12D802e3640dFA5e43", + "0xA487bF43cF3b10dffc97A9A744cbB7036965d3b9", + "0x431ad2ff6a9C365805eBaD47Ee021148d6f7DBe0", + "0xca1207647Ff814039530D7d35df0e1Dd2e91Fa84", + "0x43Dfc4159D86F3A37A5A4B3D4580b888ad7d4DDd", + "0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409", + "0xeEAA40B28A2d1b0B08f6f97bB1DD4B75316c6107", + "0xF655C8567E0f213e6C634CD2A68d992152161dC6", + "0x431D5dfF03120AFA4bDf332c61A6e1766eF37BDB", + "0x3af33bEF05C2dCb3C7288b77fe1C8d2AeBA4d789", + "0x01BA67AAC7f75f647D94220Cc98FB30FCc5105Bf", + "0x69af81e73A73B40adF4f3d4223Cd9b1ECE623074", + "0x4e352cF164E64ADCBad318C3a1e222E9EBa4Ce42", + "0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2", + "0x9E32b13ce7f2E80A01932B42553652E053D6ed8e", + "0x57f12FE6A4e5fe819eec699FAdf9Db2D06606bB4", + "0x808507121B80c02388fAd14726482e061B8da827", + "0xfB5c6815cA3AC72Ce9F5006869AE67f18bF77006", + "0x9040e237C3bF18347bb00957Dc22167D0f2b999d", + "0x2FFdE077455f81E28bAa675a46B9c085740216d4", + "0x8947da500Eb47F82df21143D0C01A29862a8C3c5", + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "0xdAC17F958D2ee523a2206206994597C13D831ec7", + "0x0a5E677a6A24b2F1A2Bf4F3bFfC443231d2fDEc8", + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x9C7BEBa8F6eF6643aBd725e45a4E8387eF260649", + "0x3E5D9D8a63CC8a88748f229999CF59487e90721e", + "0x7F3EDcdD180Dbe4819Bd98FeE8929b5cEdB3AdEB", + "0x0A3BB08b3a15A19b4De82F8AcFc862606FB69A2D", + "0x9ad37205d608B8b219e6a2573f922094CEc5c200" ] }, - "arbitrum": { - "cBridge": "0x1619DE6B6B20eD217a58d00f37B9d47C7663feca", - "messageBus": "0x3Ad9d0648CDAA2426331e894e980D0a5Ed16257f", + "bsc": { + "cBridge": "0xdd90E5E87A2081Dcf0391920868eBc2FFB81a1aF", + "messageBus": "0x95714818fdd7a5454f73da9c777b3ee6ebaeea6b", "tokensToApprove": [ - "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", - "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1" + "0x8457CA5040ad67fdebbCC8EdCE889A335Bc0fbFB", + "0x06FDA0758c17416726f77Cb11305EAC94C074Ec0", + "0x766AFcf83Fd5eaf884B3d529b432CA27A6d84617", + "0x1613957159E9B0ac6c80e824F7Eea748a32a0AE2", + "0x4A9A2b2b04549C3927dd2c9668A5eF3fCA473623", + "0x67ee3Cb086F8a16f34beE3ca72FAD36F7Db929e2", + "0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409", + "0x2eD9a5C8C13b93955103B9a7C167B67Ef4d568a3", + "0x5fE80d2CD054645b9419657d3d10d26391780A7B", + "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", + "0x55d398326f99059fF775485246999027B3197955", + "0xB5102CeE1528Ce2C760893034A4603663495fD72", + "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + "0x9C7BEBa8F6eF6643aBd725e45a4E8387eF260649", + "0x582C12b30F85162Fa393e5DBe2573f9F601f9D91", + "0x0A3BB08b3a15A19b4De82F8AcFc862606FB69A2D", + "0x60D01EC2D5E98Ac51C8B4cF84DfCCE98D527c747", + "0xBBCA42c60b5290F2c48871A596492F93fF0Ddc82" ] }, - "aurora": { - "cBridge": "0x841ce48F9446C8E281D3F1444cB859b4A6D0738C", - "messageBus": "0xc1a2D967DfAa6A10f3461bc21864C23C1DD51EeA" - }, "avalanche": { "cBridge": "0xef3c714c9425a8F3697A9C969Dc1af30ba82e5d4", - "messageBus": "0x5a926eeeAFc4D217ADd17e9641e8cE23Cd01Ad57", + "messageBus": "0x5a926eeeafc4d217add17e9641e8ce23cd01ad57", "tokensToApprove": [ - "0xc7198437980c041c805a1edcba50c1ce5db95118", - "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", - "0xd586e7f844cea2f87f50152665bcbc2c279d8d70", - "0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab" + "0x089d3dAF549f99553C2182DB24bC4336A4F0C824", + "0x431D5dfF03120AFA4bDf332c61A6e1766eF37BDB", + "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", + "0xc7198437980c041c805A1EDcbA50c1Ce5db95118", + "0x853ea32391AaA14c112C645FD20BA389aB25C5e0", + "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB", + "0xFc6Da929c031162841370af240dEc19099861d3B" ] }, - "base": { - "cBridge": "0x7d43AABC515C356145049227CeE54B608342c0ad" - }, - "blast": { - "cBridge": "0x841ce48F9446C8E281D3F1444cB859b4A6D0738C", - "messageBus": "0xFCE49bAa70E415bF410c18D89D321f39BF2637f4" - }, - "boba": { - "cBridge": "0x841ce48F9446C8E281D3F1444cB859b4A6D0738C" - }, - "bsc": { - "cBridge": "0xdd90E5E87A2081Dcf0391920868eBc2FFB81a1aF", - "messageBus": "0x95714818fdd7a5454F73Da9c777B3ee6EbAEEa6B", + "polygon": { + "cBridge": "0x88DCDC47D2f83a99CF0000FDF667A468bB958a78", + "messageBus": "0xaFDb9C40C7144022811F034EE07Ce2E110093fe6", "tokensToApprove": [ - "0x55d398326f99059ff775485246999027b3197955", - "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", - "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3", - "0x2170ed0880ac9a755fd29b2688956bd959f933f8", - "0xcc42724c6683b7e57334c4e856f4c9965ed682bd", - "0x1ce0c2827e2ef14d5c4f29a091d735a204794041" + "0xEcc4176B90613Ed78185f01bd1E42C5640C4F09d", + "0x4b27Cd6E6a5E83d236eAD376D256Fe2F9e9f0d2E", + "0x2Ab4f9aC80F33071211729e45Cfc346C1f8446d5", + "0x08C15FA26E519A78a666D19CE5C646D55047e0a3", + "0x8C92e38eCA8210f4fcBf17F0951b198Dd7668292", + "0x43Df9c0a1156c96cEa98737b511ac89D0e2A1F46", + "0xf972DACEd7C6b03223710C11413036D17eB298f6", + "0x431D5dfF03120AFA4bDf332c61A6e1766eF37BDB", + "0x14Af1F2f02DCcB1e43402339099A05a5E363b83c", + "0xee7666aACAEFaa6efeeF62ea40176d3eB21953B9", + "0x44ACD96620B708162af4A90524F29A6839675533", + "0x692C44990E4F408ba0917f5c78A83160c1557237", + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", + "0xCf66EB3D546F0415b368d98A95EAF56DeD7aA752", + "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + "0xadBe0eac80F955363f4Ff47B0f70189093908c04", + "0x0A3BB08b3a15A19b4De82F8AcFc862606FB69A2D", + "0x60D01EC2D5E98Ac51C8B4cF84DfCCE98D527c747", + "0x111111517e4929D3dcbdfa7CCe55d30d4B6BC4d6", + "0x2760E46d9BB43dafCbEcaad1F64b93207f9f0eD7" ] }, - "celo": { - "cBridge": "0xBB7684Cc5408F4DD0921E5c2Cadd547b8f1AD573" - }, - "evmos": { - "cBridge": "0x5F52B9d1C0853da636e178169e6B426E4cCfA813" + "arbitrum": { + "cBridge": "0x1619DE6B6B20eD217a58d00f37B9d47C7663feca", + "messageBus": "0x3ad9d0648cdaa2426331e894e980d0a5ed16257f", + "tokensToApprove": [ + "0x81dE4945807bb31425362F8F7109C18E3dc4f8F0", + "0x21E60EE73F17AC0A411ae5D690f908c3ED66Fe12", + "0xaE6aab43C4f3E0cea4Ab83752C278f8dEbabA689", + "0x69Eb4FA4a2fbd498C257C57Ea8b7655a2559A581", + "0x07E49d5dE43DDA6162Fa28D24d5935C151875283", + "0x56659245931CB6920e39C189D2a0e7DD0dA2d57b", + "0x55fF62567f09906A85183b866dF84bf599a4bf70", + "0x079504b86d38119F859c4194765029F692b7B7aa", + "0x4e352cF164E64ADCBad318C3a1e222E9EBa4Ce42", + "0x57f12FE6A4e5fe819eec699FAdf9Db2D06606bB4", + "0x0c880f6761F1af8d9Aa9C466984b80DAb9a8c9e8", + "0xE85B662Fe97e8562f4099d8A1d5A92D4B453bF30", + "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", + "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", + "0x641441c631e2F909700d2f41FD87F0aA6A6b4EDb", + "0xF0A5717Ec0883eE56438932b0fe4A20822735fBa", + "0x0A3BB08b3a15A19b4De82F8AcFc862606FB69A2D", + "0x60D01EC2D5E98Ac51C8B4cF84DfCCE98D527c747", + "0xadf5DD3E51bF28aB4F07e684eCF5d00691818790", + "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1" + ] }, "fantom": { "cBridge": "0x374B8a9f3eC5eB2D97ECA84Ea27aCa45aa1C57EF", - "messageBus": "0xFF4E183a0Ceb4Fa98E63BbF8077B929c8E5A2bA4" - }, - "gnosis": { - "cBridge": "0x3795C36e7D12A8c252A20C5a7B455f7c57b60283" - }, - "harmony": { - "cBridge": "0x78a21C1D3ED53A82d4247b9Ee5bF001f4620Ceec" - }, - "heco": { - "cBridge": "0xBB7684Cc5408F4DD0921E5c2Cadd547b8f1AD573" - }, - "kaia": { - "cBridge": "0x4C882ec256823eE773B25b414d36F92ef58a7c0C" + "messageBus": "0xFF4E183a0Ceb4Fa98E63BbF8077B929c8E5A2bA4", + "tokensToApprove": [] }, - "linea": { - "cBridge": "0x9B36f165baB9ebe611d491180418d8De4b8f3a1f" - }, - "localanvil": { - "cBridge": "0xf89354F314faF344Abd754924438bA798E306DF2", - "cfUSDC": "0x0000000000000000000000000000000000000000", - "messageBus": "0xAd204986D6cB67A5Bc76a3CB8974823F43Cb9AAA" - }, - "moonbeam": { - "cBridge": "0x841ce48F9446C8E281D3F1444cB859b4A6D0738C" + "metis": { + "cBridge": "0x841ce48F9446C8E281D3F1444cB859b4A6D0738C", + "tokensToApprove": [ + "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", + "0xc12caC7090baa48Ec750CceeC57C80768F6ee58E" + ] }, "moonriver": { "cBridge": "0x841ce48F9446C8E281D3F1444cB859b4A6D0738C", - "messageBus": "0x940dAAbA3F713abFabD79CdD991466fe698CBe54" + "messageBus": "0x940dAAbA3F713abFabD79CdD991466fe698CBe54", + "tokensToApprove": [] }, - "okx": { - "cBridge": "0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98" + "celo": { + "cBridge": "0xBB7684Cc5408F4DD0921E5c2Cadd547b8f1AD573", + "tokensToApprove": [] + }, + "harmony": { + "cBridge": "0x78a21C1D3ED53A82d4247b9Ee5bF001f4620Ceec", + "tokensToApprove": [] }, "optimism": { "cBridge": "0x9D39Fc627A6d9d9F8C831c16995b209548cc3401", "messageBus": "0x0D71D18126E03646eb09FEc929e2ae87b7CAE69d", "tokensToApprove": [ - "0x94b008aa00579c1307b0ef2c499ad98a8ce58e58", - "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1" + "0x048C6bAd48C51436764ed1FdB3c9D1c25d2C0ada", + "0x9e5AAC1Ba1a2e6aEd6b32689DFcF62A509Ca96f3", + "0xAF9fE3B5cCDAe78188B1F8b9a49Da7ae9510F151", + "0xF98dCd95217E15E05d8638da4c91125E59590B07", + "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb", + "0x929B939f8524c3Be977af57A4A0aD3fb1E374b50", + "0x217D47011b23BB961eB6D93cA9945B7501a5BB11", + "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", + "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", + "0xbfD291DA8A403DAAF7e5E9DC1ec0aCEaCd4848B9", + "0x3E5D9D8a63CC8a88748f229999CF59487e90721e", + "0x4200000000000000000000000000000000000006" ] }, - "polygon": { - "cBridge": "0x88DCDC47D2f83a99CF0000FDF667A468bB958a78", - "messageBus": "0xaFDb9C40C7144022811F034EE07Ce2E110093fe6", - "tokensToApprove": [ - "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", - "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", - "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", - "0x2C89bbc92BD86F8075d1DEcc58C7F4E0107f286b" - ] + "boba": { + "cBridge": "0x841ce48F9446C8E281D3F1444cB859b4A6D0738C", + "tokensToApprove": [] + }, + "gnosis": { + "cBridge": "0x3795C36e7D12A8c252A20C5a7B455f7c57b60283", + "tokensToApprove": [] + }, + "aurora": { + "cBridge": "0x841ce48F9446C8E281D3F1444cB859b4A6D0738C", + "messageBus": "0xc1a2D967DfAa6A10f3461bc21864C23C1DD51EeA", + "tokensToApprove": [] }, "polygonzkevm": { "cBridge": "0xD46F8E428A06789B5884df54E029e738277388D1", - "messageBus": "0x9Bb46D5100d2Db4608112026951c9C965b233f4D" - }, - "xlayer": { - "cBridge": "0xf5C6825015280CdfD0b56903F9F8B5A2233476F5" + "messageBus": "0x9Bb46D5100d2Db4608112026951c9C965b233f4D", + "tokensToApprove": [ + "0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9" + ] }, "zksync": { "cBridge": "0x54069e96C4247b37C2fbd9559CA99f08CD1CD66c", "messageBus": "0x9a98a376D30f2c9A0A7332715c15D940dE3da0e2", "tokensToApprove": [ - "0x7400793aAd94C8CA801aa036357d10F5Fd0ce08f", - "0x2039bb4116B4EFc145Ec4f0e2eA75012D6C0f181", - "0x6A5279E99CA7786fb13F827Fc1Fb4F61684933d6", - "0x28a487240e4D45CfF4A2980D334CC933B7483842", - "0xbcADdDAD3F224115fC7efA8f0C5d3778a41D24Dc", - "0x68a8b2DBce73a9221A8cd981Ad6A70d2BaE40668", - "0x7E2A6456Bb3eCEcbdb38bC76Ad8dF9e448B15835", - "0x8483bf6d5E45e467f2979c5d51B76100AAB60294", - "0x8b69A4e5AEB67858E3d03d0124176E85C3DFa51d" + "0x7DF222b011DcbD450E2104C5ecffa73ACE2FEFB6", + "0xD63eF5e9C628c8a0E8984CDfb7444AEE44B09044", + "0xbe9f8C0d6f0Fd7e46CDaCCA340747EA2f247991D", + "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4", + "0xdb89D7b0Dccd0C0e5aC3571133A9aa1a037945cb", + "0x1382628e018010035999A1FF330447a0751aa84f", + "0x16A9494e257703797D747540f01683952547EE5b", + "0xC8Ac6191CDc9c7bF846AD6b52aaAA7a0757eE305", + "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91" ] }, - "scroll": { + "linea": { "cBridge": "0x9B36f165baB9ebe611d491180418d8De4b8f3a1f", - "tokensToApprove": ["0x5300000000000000000000000000000000000004"] - }, - "goerli": { - "cBridge": "0x358234B325EF9eA8115291A8b81b7d33A2Fa762D", - "messageBus": "0xF25170F86E4291a99a9A560032Fe9948b8BcFBB2" + "tokensToApprove": [ + "0x0A3BB08b3a15A19b4De82F8AcFc862606FB69A2D", + "0x60D01EC2D5E98Ac51C8B4cF84DfCCE98D527c747", + "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f" + ] }, - "bscTestnet": { - "cBridge": "0xf89354F314faF344Abd754924438bA798E306DF2", - "messageBus": "0xAd204986D6cB67A5Bc76a3CB8974823F43Cb9AAA" + "base": { + "cBridge": "0x7d43AABC515C356145049227CeE54B608342c0ad", + "tokensToApprove": [ + "0x54BC229d1cB15F8B6415EfEab4290a40bc8b7D84", + "0xba7D47f471ADD16875e765edEe0858C3413A56Fd", + "0x38815A4455921667d673B4cb3d48F0383eE93400", + "0xf34e0cff046e154CAfCae502C7541b9E5FD8C249", + "0xc142171B138DB17a1B7Cb999C44526094a4dae05" + ] }, - "mumbai": { - "cBridge": "0xf89354F314faF344Abd754924438bA798E306DF2", - "cfUSDC": "0x0000000000000000000000000000000000000000", - "messageBus": "0xAd204986D6cB67A5Bc76a3CB8974823F43Cb9AAA" + "scroll": { + "cBridge": "0x9B36f165baB9ebe611d491180418d8De4b8f3a1f", + "messageBus": "0x7d43AABC515C356145049227CeE54B608342c0ad", + "tokensToApprove": [ + "0x78Ab77F7D590FB101AA18affc238cbfEA31EAd5b", + "0x5300000000000000000000000000000000000004" + ] }, - "optimisticKovan": { - "cBridge": "0x265B25e22bcd7f10a5bD6E6410F10537Cc7567e8" + "blast": { + "cBridge": "0x841ce48F9446C8E281D3F1444cB859b4A6D0738C", + "messageBus": "0xFCE49bAa70E415bF410c18D89D321f39BF2637f4", + "tokensToApprove": [ + "0x9f04B6CEfd5BCd67d76aB708F17553Ce40188e6A", + "0xcBf7B47E9da345812e3Bd732E3EE369a7203B5ae", + "0x4300000000000000000000000000000000000004" + ] } } diff --git a/config/dexs.json b/config/dexs.json index b30142600..013b0a66e 100644 --- a/config/dexs.json +++ b/config/dexs.json @@ -41,7 +41,10 @@ "0x19dBa5df5383168f760617aaDD23322BC5F9Ff7b", "0x827179dD56d07A7eeA32e3873493835da2866976", "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0x7d0ccaa3fac1e5a943c5168b6ced828691b46b36", + "0x40aA958dd87FC8305b97f2BA922CDdCa374bcD7f", + "0xFe837A3530dD566401d35beFCd55582AF7c4dfFC" ], "arbitrum": [ "0x5215E9fd223BC909083fbdB2860213873046e45d", @@ -85,7 +88,9 @@ "0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0", "0xfc506AaA1340b4dedFfd88bE278bEe058952D674", "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0xf332761c673b59b21ff6dfa8ada44d78c12def09", + "0x70cBb871E8f30Fc8Ce23609E9E0Ea87B6b222F58" ], "aurora": [ "0x5215E9fd223BC909083fbdB2860213873046e45d", @@ -147,7 +152,11 @@ "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "0x400d75dAb26bBc18D163AEA3e83D9Ea68F6c1804", "0x717b7948AA264DeCf4D780aa6914482e5F46Da3e", - "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", + "0x1dac23e41fc8ce857e86fd8c1ae5b6121c67d96d", + "0x40aA958dd87FC8305b97f2BA922CDdCa374bcD7f", + "0x3a64Ec3606FF7310E8fAd6FcC008e39705fB496d" ], "base": [ "0x5215E9fd223BC909083fbdB2860213873046e45d", @@ -172,7 +181,9 @@ "0x0000000000001ff3684f28c67538d4d072c22734", "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0x6b2c0c7be2048daa9b5527982c29f48062b34d58", + "0x57df6092665eb6058DE53939612413ff4B09114E" ], "blast": [ "0x6352a56caadC4F1E25CD6c75970Fa768A3304e64", @@ -187,7 +198,9 @@ "0xCdBCd51a5E8728E0AF4895ce5771b7d17fF71959", "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0x2e86f54943fafd2cb62958c3deed36c879e3e944", + "0x5fD2Dc91FF1dE7FF4AEB1CACeF8E9911bAAECa68" ], "boba": [ "0x5215E9fd223BC909083fbdB2860213873046e45d", @@ -255,7 +268,10 @@ "0x7cf167390E2526Bc03F3CF6852A7AF1CEC3e243d", "0x400d75dAb26bBc18D163AEA3e83D9Ea68F6c1804", "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0x9333c74bdd1e118634fe5664aca7a9710b108bab", + "0x2c34A2Fb1d0b4f55de51E1d0bDEfaDDce6b7cDD6", + "0x0343C5757Fb98aD9eF39824e08B852aF61C71c64" ], "celo": [ "0xC85c2B19958D116d79C654ecE73b359c08802A76", @@ -297,7 +313,12 @@ "0x693c18A628866BdD04956d9544Ce769C0e468149", "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "0x70D6cFE9146D6B6ebEb88BcB22fa220E78058D6F", - "0x11d40Dc8Ff0CE92F54A315aD8e674a55a866cBEe" + "0x11d40Dc8Ff0CE92F54A315aD8e674a55a866cBEe", + "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", + "0xf88F6948C8AFf60c0B011f3175CDF459c66Ed035", + "0x3a629404258dF01bef29Dd5d428508D92e207bD0", + "0xf332761c673b59b21ff6dfa8ada44d78c12def09", + "0x70cbb871e8f30fc8ce23609e9e0ea87b6b222f58" ], "evmos": [ "0xdFC2983401614118E1F2D5A5FD93C17Fecf8BdC6", @@ -346,7 +367,10 @@ "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "0x3D2f8ae0344d38525d2AE96Ab750B83480c0844F", "0x2214A42d8e2A1d20635c2cb0664422c528B6A432", - "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", + "0xf332761c673b59b21ff6dfa8ada44d78c12def09", + "0x70cBb871E8f30Fc8Ce23609E9E0Ea87B6b222F58" ], "fuse": [ "0x5215E9fd223BC909083fbdB2860213873046e45d", @@ -396,6 +420,7 @@ "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "0x1e9B24073183d5c6B7aE5FB4b8f0b1dd83FDC77a", "0xBBDe1d67297329148Fe1ED5e6B00114842728e65", + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55" ], "gravity": [ @@ -403,6 +428,7 @@ "0x7fA60f4A59Dd8285C5Fcd8fd2A92A2Ca45ef8a0C", "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "0x134f525AC05E4724e55C363A9C4FA35ceB13F88d", + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "0x6352a56caadc4f1e25cd6c75970fa768a3304e64" ], "immutablezkevm": [ @@ -414,8 +440,8 @@ "fraxtal": [ "0x7956280Ec4B4d651C4083Ca737a1fa808b5319D8", "0x9870F0C91D722B3393383722968269496d919bD8", - "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "0xC82fd49be3F3D851b9E10589C50784cEAC7114a5" + "0xC82fd49be3F3D851b9E10589C50784cEAC7114a5", + "0xE38621607316cB43367c134C65dca3f41B61250f" ], "harmony": [ "0xdFC2983401614118E1F2D5A5FD93C17Fecf8BdC6", @@ -471,7 +497,17 @@ "0x46b3fdf7b5cde91ac049936bf0bdb12c5d22202e", "0x000000000000175a8b9bc6d539b3708eed92ea6c", "0xcaA342e4f781d63EF41E220D7622B97E66BAEcF3", - "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55" + "0x0ec6D2eEb94541C51620830D151995fCFf83Aa74", + "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", + "0x6b2c0c7be2048daa9b5527982c29f48062b34d58", + "0x57df6092665eb6058DE53939612413ff4B09114E" + ], + "lisk": [ + "0x603a538477d44064eA5A5d8C345b4Ff6fca1142a", + "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", + "0x8f023b4193a6b18C227B4a755f8e28B3D30Ef9a1", + "0x76aE215b11797b32397d878e6f3E65081ff58b13", + "0x50D5a8aCFAe13Dceb217E9a071F6c6Bd5bDB4155" ], "mantle": [ "0xD9F4e85489aDCD0bAF0Cd63b4231c6af58c26745", @@ -481,15 +517,22 @@ "0xf3552b98BB4234B47674700A99a0308D74B40F51", "0xF2ee649caB7a0edEdED7a27821B0aCDF77778aeD", "0x0263180888007D45340F86eC0b610d250BbDcB23", + "0xEcf953290D36fA96236356e171044DC802EeC598", "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "0x6131b5fae19ea4f9d964eac0408e4408b66337b5" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0x6131b5fae19ea4f9d964eac0408e4408b66337b5", + "0x6b2c0c7be2048daa9b5527982c29f48062b34d58", + "0x57df6092665eb6058DE53939612413ff4B09114E" ], "metis": [ "0x6352a56caadc4f1e25cd6c75970fa768a3304e64", "0x27f0e36dE6B1BA8232f6c2e87E00A50731048C6B", "0xB45e53277a7e0F1D35f2a77160e91e25507f1763", "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", - "0x9E4c63c9a0EDE2Ca2e772ee48C819Ca5CB4529AC" + "0x799525cE72B5cc9eb310dc8c7b9e7A3128a6dA79", + "0x9E4c63c9a0EDE2Ca2e772ee48C819Ca5CB4529AC", + "0x6b2c0c7be2048daa9b5527982c29f48062b34d58", + "0x57df6092665eb6058DE53939612413ff4B09114E" ], "mode": [ "0x7E15EB462cdc67Cf92Af1f7102465a8F8c784874", @@ -500,7 +543,10 @@ "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "0x6352a56caadC4F1E25CD6c75970Fa768A3304e64", "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0xd0f95fafa06de1b21e79db03c649919501e99ea9", + "0xbd0ebe49779e154e5042b34d5bcfbc498e4b3249", + "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9" ], "moonbeam": [ "0x5215E9fd223BC909083fbdB2860213873046e45d", @@ -615,10 +661,15 @@ "0x96E04591579f298681361C6122Dc4Ef405c19385", "0x4C5D5234f232BD2D76B96aA33F5AE4FCF0E4BFAb", "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" ], "opbnb": [ - "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc" + "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "0xf332761c673b59b21ff6dfa8ada44d78c12def09", + "0x68D6B739D2020067D1e2F713b999dA97E4d54812", + "0x6A2420650139854F17964b8C3Bb60248470aB57E", + "0xEc41F702d36b43a1E1d017Cb4da92F431dFA7a0E", + "0x077A38b812e57E2e76849954c880E1a2f5e0A68d" ], "polygon": [ "0x5215E9fd223BC909083fbdB2860213873046e45d", @@ -667,7 +718,10 @@ "0x0dc8E47a1196bcB590485eE8bF832c5c68A52f4B", "0x0a6e511Fe663827b9cA7e2D2542b20B37fC217A6", "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0xa748d6573aca135af68f2635be60cb80278bd855", + "0x3B86917369B83a6892f553609F3c2F439C184e31", + "0x46AFE01D758a46d64c7d8E0791314D5db3E2e683" ], "polygonzkevm": [ "0x5215E9fd223BC909083fbdB2860213873046e45d", @@ -689,7 +743,9 @@ "0xc8a21fcd5a100c3ecc037c97e2f9c53a8d3a02a1", "0x2f686751b19a9d91cc3d57d90150Bc767f050066", "0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55", - "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc" + "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "0x6b2c0c7be2048daa9b5527982c29f48062b34d58", + "0x57df6092665eb6058DE53939612413ff4B09114E" ], "rootstock": [ "0x6352A56caaDc4F1e25cd6c75970fA768A3304E64", @@ -705,8 +761,10 @@ "0x6352a56caadC4F1E25CD6c75970Fa768A3304e64", "0x7956280Ec4B4d651C4083Ca737a1fa808b5319D8", "0x9870F0C91D722B3393383722968269496d919bD8", - "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "0xC82fd49be3F3D851b9E10589C50784cEAC7114a5" + "0xfdE9CE4e17B650efdcA13d524F132876700d806f", + "0xC82fd49be3F3D851b9E10589C50784cEAC7114a5", + "0xdb3af8df1cab8ae4159ed6a9b33df5f8c3ad1485", + "0x801d8ed849039007a7170830623180396492c7ed" ], "scroll": [ "0x6352a56caadC4F1E25CD6c75970Fa768A3304e64", @@ -718,14 +776,17 @@ "0xbfe03c9e20a9fc0b37de01a172f207004935e0b1", "0x0000000000005e88410ccdfade4a5efae4b49562", "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9", + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0x6b2c0c7be2048daa9b5527982c29f48062b34d58", + "0x57df6092665eb6058DE53939612413ff4B09114E" ], "taiko": [ "0xDd8A081efC90DFFD79940948a1528C51793C4B03", "0xff2F39692A90262b8Ed4DFD92799bB450425773F", "0xD989E929517B0e5eD0c8EfE7607Fa167B697cBa8", "0xcaA342e4f781d63EF41E220D7622B97E66BAEcF3", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x0ec6D2eEb94541C51620830D151995fCFf83Aa74" ], "velas": [ "0xdFC2983401614118E1F2D5A5FD93C17Fecf8BdC6", @@ -742,7 +803,16 @@ "0xC69994fd72824ca98F8a0B1E2ABc954E65a91cf4", "0x12904D12A84702f9F079E1e393fdAbD313496e97", "0x833Be894C596b15FAe740C2D522d660084c48B05", - "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54" + "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", + "0x127a986ce31aa2ea8e1a6a0f0d5b7e5dbad7b0be", + "0x8b773D83bc66Be128c60e07E17C8901f7a64F000" + ], + "worldchain": [ + "0x50D5a8aCFAe13Dceb217E9a071F6c6Bd5bDB4155", + "0x8f023b4193a6b18C227B4a755f8e28B3D30Ef9a1", + "0x76aE215b11797b32397d878e6f3E65081ff58b13", + "0x603a538477d44064eA5A5d8C345b4Ff6fca1142a" ], "zksync": [ "0xf15485ada1a1826fA46225032b13F6A972eC73C1", @@ -760,7 +830,9 @@ "0xe832e655E4C3c36b2be5256915ECF8536a642f59", "0x6fd4383cb451173d5f9304f041c7bcbf27d561ff", "0x1F683faf1E2a770aa75f7B2e92117A5c11183E9C", - "0xbbbbbBB520d69a9775E85b458C58c648259FAD5F" + "0x4000f76450d9d40558fd60F66863F583B7A5BCCb", + "0xb9061e38fee7d30134f56aef7117e2f6d1580666", + "0xc67879F4065d3B9fe1C09EE990B891Aa8E3a4c2f" ], "---------------FROM HERE ON JUST OLD NETWORKS - PLEASE ADD NEW NETWORKS ABOVE IN ALPHABETICAL ORDER ^^^^ ----------": [], "goerli": [ @@ -775,9 +847,7 @@ "0xf91bb752490473b8342a3e964e855b9f9a2a668e" ], "avalancheFujiTestnet": [], - "bscTestnet": [ - "0x1b02da8cb0d097eb8d57a175b88c7d8b47997506" - ], + "bscTestnet": ["0x1b02da8cb0d097eb8d57a175b88c7d8b47997506"], "localanvil": [], "mumbai": [ "0x5215E9fd223BC909083fbdB2860213873046e45d", @@ -786,4 +856,4 @@ "0xf471d32cb40837bf24529fcf17418fc1a4807626", "0x427bFc2E0aa683ec43fbF7861d5F4A74147938d8" ] -} \ No newline at end of file +} diff --git a/config/gaszip.json b/config/gaszip.json new file mode 100644 index 000000000..f4142d294 --- /dev/null +++ b/config/gaszip.json @@ -0,0 +1,26 @@ +{ + "gasZipRouters": { + "---ListOfRouterAddresses---": "https://dev.gas.zip/gas/chain-support/inbound", + "mainnet": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "arbitrum": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "avalanche": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "base": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "bsc": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "blast": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "fantom": "0xA60768b03eB14d940F6c9a8553329B7F9037C91b", + "gnosis": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "gravity": "0x6Efc6Ead40786bD87A884382b6EA4BcA3C985e99", + "linea": "0xA60768b03eB14d940F6c9a8553329B7F9037C91b", + "lisk": "0xA60768b03eB14d940F6c9a8553329B7F9037C91b", + "mantle": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "metis": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "mode": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "optimism": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "polygon": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "scroll": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "taiko": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "worldchain": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "xlayer": "0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762", + "zksync": "0x252fb662e4d7435d2a5ded8ec94d8932cf76c178" + } +} \ No newline at end of file diff --git a/config/global.json b/config/global.json index ba7b5afd8..8a2946dea 100644 --- a/config/global.json +++ b/config/global.json @@ -83,7 +83,7 @@ "aurora": "https://safe-transaction-aurora.safe.global/api", "avalanche": "https://safe-transaction-avalanche.safe.global/api", "base": "https://safe-transaction-base.safe.global/api", - "blast": "https://transaction.blast-safe.io/api", + "blast": "https://safe-transaction-blast.safe.global/api", "boba": "https://safe-transaction.mainnet.boba.network/api", "bsc": "https://safe-transaction-bsc.safe.global/api", "celo": "https://safe-transaction-celo.safe.global/api", @@ -143,6 +143,7 @@ "sei": "0x0000000000000000000000000000000000000000", "xlayer": "0x0000000000000000000000000000000000000000", "taiko": "0x0000000000000000000000000000000000000000", + "worldchain": "0x0000000000000000000000000000000000000000", "zksync": "0x0000000000000000000000000000000000000000" }, "autoWhitelistPeripheryContracts": [ diff --git a/config/hop.json b/config/hop.json index 110e85206..dcf9a1efe 100644 --- a/config/hop.json +++ b/config/hop.json @@ -1,19 +1,15 @@ { - "280": { - "chainId": 280, - "tokens": [], - "approvals": [] - }, - "534354": { - "chainId": 534354, - "tokens": [], - "approvals": [] - }, + "comment": "Note: this file is generated by a backend script, do not change it manually!", "mainnet": { "chainId": 1, "tokens": [ { "name": "USDC", + "token": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "ammWrapper": "0x0000000000000000000000000000000000000000" + }, + { + "name": "USDC.e", "bridge": "0x3666f603Cc164936C1b87e207F36BEBa4AC5f18a", "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "ammWrapper": "0x0000000000000000000000000000000000000000" @@ -65,13 +61,19 @@ "bridge": "0x87269B23e73305117D0404557bAdc459CEd0dbEc", "token": "0xae78736Cd615f374D3085123A210448E74Fc6393", "ammWrapper": "0x0000000000000000000000000000000000000000" + }, + { + "name": "MAGIC", + "bridge": "0xf074540eb83c86211F305E145eB31743E228E57d", + "token": "0xB0c7a3Ba49C7a6EaBa6cD4a96C55a1391070Ac9A", + "ammWrapper": "0x0000000000000000000000000000000000000000" } ], "approvals": [ { "a_tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "b_contractAddress": "0x3666f603Cc164936C1b87e207F36BEBa4AC5f18a", - "c_tokenName": "USDC", + "c_tokenName": "USDC.e", "d_contractName": "l1Bridge" }, { @@ -115,6 +117,12 @@ "b_contractAddress": "0x87269B23e73305117D0404557bAdc459CEd0dbEc", "c_tokenName": "rETH", "d_contractName": "l1Bridge" + }, + { + "a_tokenAddress": "0xB0c7a3Ba49C7a6EaBa6cD4a96C55a1391070Ac9A", + "b_contractAddress": "0xf074540eb83c86211F305E145eB31743E228E57d", + "c_tokenName": "MAGIC", + "d_contractName": "l1Bridge" } ] }, @@ -123,6 +131,10 @@ "tokens": [ { "name": "USDC", + "token": "0xaf88d065e77c8cc2239327c5edb3a432268e5831" + }, + { + "name": "USDC.e", "bridge": "0x0e0E3d2C5c292161999474247956EF542caBF8dd", "token": "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", "ammWrapper": "0xe22D2beDb3Eca35E6397e0C6D62857094aA26F52" @@ -162,19 +174,25 @@ "bridge": "0xc315239cFb05F1E130E7E28E603CEa4C014c57f0", "token": "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8", "ammWrapper": "0x16e08C02e4B78B0a5b3A917FF5FeaeDd349a5a95" + }, + { + "name": "MAGIC", + "bridge": "0xEa5abf2C909169823d939de377Ef2Bf897A6CE98", + "token": "0x539bdE0d7Dbd336b79148AA742883198BBF60342", + "ammWrapper": "0x50a3a623d00fd8b8a4F3CbC5aa53D0Bc6FA912DD" } ], "approvals": [ { "a_tokenAddress": "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", "b_contractAddress": "0xe22D2beDb3Eca35E6397e0C6D62857094aA26F52", - "c_tokenName": "USDC", + "c_tokenName": "USDC.e", "d_contractName": "l2AmmWrapper" }, { "a_tokenAddress": "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", "b_contractAddress": "0x10541b07d8Ad2647Dc6cD67abd4c03575dade261", - "c_tokenName": "USDC", + "c_tokenName": "USDC.e", "d_contractName": "l2SaddleSwap" }, { @@ -230,67 +248,173 @@ "b_contractAddress": "0x0Ded0d521AC7B0d312871D18EA4FDE79f03Ee7CA", "c_tokenName": "rETH", "d_contractName": "l2SaddleSwap" + }, + { + "a_tokenAddress": "0x539bdE0d7Dbd336b79148AA742883198BBF60342", + "b_contractAddress": "0x50a3a623d00fd8b8a4F3CbC5aa53D0Bc6FA912DD", + "c_tokenName": "MAGIC", + "d_contractName": "l2AmmWrapper" + }, + { + "a_tokenAddress": "0x539bdE0d7Dbd336b79148AA742883198BBF60342", + "b_contractAddress": "0xFFe42d3Ba79Ee5Ee74a999CAd0c60EF1153F0b82", + "c_tokenName": "MAGIC", + "d_contractName": "l2SaddleSwap" } ] }, - "base": { - "chainId": 8453, + "optimism": { + "chainId": 10, "tokens": [ { "name": "USDC", + "token": "0x0b2c639c533813f4aa9d7837caf62653d097ff85" + }, + { + "name": "USDC.e", + "bridge": "0xa81D244A1814468C734E5b4101F7b9c0c577a8fC", + "token": "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", + "ammWrapper": "0x2ad09850b0CA4c7c1B33f5AcD6cBAbCaB5d6e796" + }, + { + "name": "USDT", "bridge": "0x46ae9BaB8CEA96610807a275EBD36f8e916b5C61", - "token": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", + "token": "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", "ammWrapper": "0x7D269D3E0d61A05a0bA976b7DBF8805bF844AF3F" }, + { + "name": "DAI", + "bridge": "0x7191061D5d4C60f598214cC6913502184BAddf18", + "token": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", + "ammWrapper": "0xb3C68a491608952Cb1257FC9909a537a0173b63B" + }, { "name": "ETH", - "bridge": "0x3666f603Cc164936C1b87e207F36BEBa4AC5f18a", + "bridge": "0x83f6244Bd87662118d96D9a6D44f09dffF14b30E", "token": "0x4200000000000000000000000000000000000006", - "ammWrapper": "0x10541b07d8Ad2647Dc6cD67abd4c03575dade261" + "ammWrapper": "0x86cA30bEF97fB651b8d866D45503684b90cb3312" }, { "name": "ETH", - "bridge": "0x3666f603Cc164936C1b87e207F36BEBa4AC5f18a", + "bridge": "0x83f6244Bd87662118d96D9a6D44f09dffF14b30E", "token": "0x0000000000000000000000000000000000000000", - "ammWrapper": "0x10541b07d8Ad2647Dc6cD67abd4c03575dade261" + "ammWrapper": "0x86cA30bEF97fB651b8d866D45503684b90cb3312" }, { "name": "HOP", - "bridge": "0xe22D2beDb3Eca35E6397e0C6D62857094aA26F52", + "bridge": "0x03D7f750777eC48d39D080b020D83Eb2CB4e3547", "token": "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", "ammWrapper": "0x0000000000000000000000000000000000000000" + }, + { + "name": "SNX", + "bridge": "0x16284c7323c35F4960540583998C98B1CfC581a7", + "token": "0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4", + "ammWrapper": "0xf11EBB94EC986EA891Aec29cfF151345C83b33Ec" + }, + { + "name": "sUSD", + "bridge": "0x33Fe5bB8DA466dA55a8A32D6ADE2BB104E2C5201", + "token": "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9", + "ammWrapper": "0x29Fba7d2A6C95DB162ee09C6250e912D6893DCa6" + }, + { + "name": "rETH", + "bridge": "0xA0075E8cE43dcB9970cB7709b9526c1232cc39c2", + "token": "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D", + "ammWrapper": "0x19B2162CA4C2C6F08C6942bFB846ce5C396aCB75" } ], "approvals": [ { - "a_tokenAddress": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", + "a_tokenAddress": "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", + "b_contractAddress": "0x2ad09850b0CA4c7c1B33f5AcD6cBAbCaB5d6e796", + "c_tokenName": "USDC.e", + "d_contractName": "l2AmmWrapper" + }, + { + "a_tokenAddress": "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", + "b_contractAddress": "0x3c0FFAca566fCcfD9Cc95139FEF6CBA143795963", + "c_tokenName": "USDC.e", + "d_contractName": "l2SaddleSwap" + }, + { + "a_tokenAddress": "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", "b_contractAddress": "0x7D269D3E0d61A05a0bA976b7DBF8805bF844AF3F", - "c_tokenName": "USDC", + "c_tokenName": "USDT", "d_contractName": "l2AmmWrapper" }, { - "a_tokenAddress": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", - "b_contractAddress": "0x022C5cE6F1Add7423268D41e08Df521D5527C2A0", - "c_tokenName": "USDC", + "a_tokenAddress": "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", + "b_contractAddress": "0xeC4B41Af04cF917b54AEb6Df58c0f8D78895b5Ef", + "c_tokenName": "USDT", + "d_contractName": "l2SaddleSwap" + }, + { + "a_tokenAddress": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", + "b_contractAddress": "0xb3C68a491608952Cb1257FC9909a537a0173b63B", + "c_tokenName": "DAI", + "d_contractName": "l2AmmWrapper" + }, + { + "a_tokenAddress": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", + "b_contractAddress": "0xF181eD90D6CfaC84B8073FdEA6D34Aa744B41810", + "c_tokenName": "DAI", "d_contractName": "l2SaddleSwap" }, { "a_tokenAddress": "0x4200000000000000000000000000000000000006", - "b_contractAddress": "0x10541b07d8Ad2647Dc6cD67abd4c03575dade261", + "b_contractAddress": "0x86cA30bEF97fB651b8d866D45503684b90cb3312", "c_tokenName": "ETH", "d_contractName": "l2AmmWrapper" }, { "a_tokenAddress": "0x4200000000000000000000000000000000000006", - "b_contractAddress": "0x0ce6c85cF43553DE10FC56cecA0aef6Ff0DD444d", + "b_contractAddress": "0xaa30D6bba6285d0585722e2440Ff89E23EF68864", "c_tokenName": "ETH", "d_contractName": "l2SaddleSwap" }, { "a_tokenAddress": "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", - "b_contractAddress": "0xe22D2beDb3Eca35E6397e0C6D62857094aA26F52", + "b_contractAddress": "0x03D7f750777eC48d39D080b020D83Eb2CB4e3547", "c_tokenName": "HOP", "d_contractName": "l2Bridge" + }, + { + "a_tokenAddress": "0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4", + "b_contractAddress": "0xf11EBB94EC986EA891Aec29cfF151345C83b33Ec", + "c_tokenName": "SNX", + "d_contractName": "l2AmmWrapper" + }, + { + "a_tokenAddress": "0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4", + "b_contractAddress": "0x1990BC6dfe2ef605Bfc08f5A23564dB75642Ad73", + "c_tokenName": "SNX", + "d_contractName": "l2SaddleSwap" + }, + { + "a_tokenAddress": "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9", + "b_contractAddress": "0x29Fba7d2A6C95DB162ee09C6250e912D6893DCa6", + "c_tokenName": "sUSD", + "d_contractName": "l2AmmWrapper" + }, + { + "a_tokenAddress": "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9", + "b_contractAddress": "0x8d4063E82A4Db8CdAed46932E1c71e03CA69Bede", + "c_tokenName": "sUSD", + "d_contractName": "l2SaddleSwap" + }, + { + "a_tokenAddress": "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D", + "b_contractAddress": "0x19B2162CA4C2C6F08C6942bFB846ce5C396aCB75", + "c_tokenName": "rETH", + "d_contractName": "l2AmmWrapper" + }, + { + "a_tokenAddress": "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D", + "b_contractAddress": "0x9Dd8685463285aD5a94D2c128bda3c5e8a6173c8", + "c_tokenName": "rETH", + "d_contractName": "l2SaddleSwap" } ] }, @@ -298,7 +422,7 @@ "chainId": 100, "tokens": [ { - "name": "USDC", + "name": "USDC.e", "bridge": "0x25D8039bB044dC227f741a9e381CA4cEAE2E6aE8", "token": "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83", "ammWrapper": "0x76b22b8C1079A44F1211D867D68b1eda76a635A7" @@ -344,13 +468,13 @@ { "a_tokenAddress": "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83", "b_contractAddress": "0x76b22b8C1079A44F1211D867D68b1eda76a635A7", - "c_tokenName": "USDC", + "c_tokenName": "USDC.e", "d_contractName": "l2AmmWrapper" }, { "a_tokenAddress": "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83", "b_contractAddress": "0x5C32143C8B198F392d01f8446b754c181224ac26", - "c_tokenName": "USDC", + "c_tokenName": "USDC.e", "d_contractName": "l2SaddleSwap" }, { @@ -409,98 +533,126 @@ } ] }, - "localanvil": { - "chainId": 31337, + "polygon": { + "chainId": 137, "tokens": [ { - "name": "ETH", - "bridge": "0x3E4a3a4796d16c0Cd582C382691998f7c06420B6", - "token": "0x2C1b868d6596a18e32E61B901E4060C872647b6C", - "ammWrapper": "0xC08055b634D43F2176d721E26A3428D3b7E7DdB5" + "name": "USDC", + "token": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359" }, { - "name": "HOP", - "bridge": "0x2E9bB44C9CB774939462eF874Fc854D8df524F13", - "token": "0x6F03052743CD99ce1b29265E377e320CD24Eb632", - "ammWrapper": "0x0000000000000000000000000000000000000000" + "name": "USDC.e", + "bridge": "0x25D8039bB044dC227f741a9e381CA4cEAE2E6aE8", + "token": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + "ammWrapper": "0x76b22b8C1079A44F1211D867D68b1eda76a635A7" }, { - "name": "USDC", - "bridge": "0x884d1Aa15F9957E1aEAA86a82a72e49Bc2bfCbe3", - "token": "0xf56dc6695cF1f5c364eDEbC7Dc7077ac9B586068", - "ammWrapper": "0x50d7d8B850e0e880295800790551928F4546BfE2" + "name": "USDT", + "bridge": "0x6c9a1ACF73bd85463A46B0AFc076FBdf602b690B", + "token": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", + "ammWrapper": "0x8741Ba6225A6BF91f9D73531A98A89807857a2B3" }, { - "name": "USDT", - "bridge": "0xdb16fbF595C02EeF7D9233d38C232495734F3D85", - "token": "0x1990BC6dfe2ef605Bfc08f5A23564dB75642Ad73", - "ammWrapper": "0x0000000000000000000000000000000000000000" + "name": "MATIC", + "bridge": "0x553bC791D746767166fA3888432038193cEED5E2", + "token": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", + "ammWrapper": "0x884d1Aa15F9957E1aEAA86a82a72e49Bc2bfCbe3" + }, + { + "name": "MATIC", + "bridge": "0x553bC791D746767166fA3888432038193cEED5E2", + "token": "0x0000000000000000000000000000000000000000", + "ammWrapper": "0x884d1Aa15F9957E1aEAA86a82a72e49Bc2bfCbe3" }, { "name": "DAI", - "bridge": "0xf11EBB94EC986EA891Aec29cfF151345C83b33Ec", - "token": "0x8741Ba6225A6BF91f9D73531A98A89807857a2B3", - "ammWrapper": "0x0000000000000000000000000000000000000000" + "bridge": "0xEcf268Be00308980B5b3fcd0975D47C4C8e1382a", + "token": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + "ammWrapper": "0x28529fec439cfF6d7D1D5917e956dEE62Cd3BE5c" + }, + { + "name": "ETH", + "bridge": "0xb98454270065A31D71Bf635F6F7Ee6A518dFb849", + "token": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + "ammWrapper": "0xc315239cFb05F1E130E7E28E603CEa4C014c57f0" }, { - "name": "UNI", - "bridge": "0xb07c6505e1E41112494123e40330c5Ac09817CFB", - "token": "0x7823E8DCC8bfc23EA3AC899EB86921f90e80F499", + "name": "HOP", + "bridge": "0x58c61AeE5eD3D748a1467085ED2650B697A66234", + "token": "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", "ammWrapper": "0x0000000000000000000000000000000000000000" } ], "approvals": [ { - "a_tokenAddress": "0x2C1b868d6596a18e32E61B901E4060C872647b6C", - "b_contractAddress": "0xC08055b634D43F2176d721E26A3428D3b7E7DdB5", - "c_tokenName": "ETH", + "a_tokenAddress": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + "b_contractAddress": "0x76b22b8C1079A44F1211D867D68b1eda76a635A7", + "c_tokenName": "USDC.e", "d_contractName": "l2AmmWrapper" }, { - "a_tokenAddress": "0x2C1b868d6596a18e32E61B901E4060C872647b6C", - "b_contractAddress": "0x7191061D5d4C60f598214cC6913502184BAddf18", - "c_tokenName": "ETH", + "a_tokenAddress": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + "b_contractAddress": "0x5C32143C8B198F392d01f8446b754c181224ac26", + "c_tokenName": "USDC.e", "d_contractName": "l2SaddleSwap" }, { - "a_tokenAddress": "0x6F03052743CD99ce1b29265E377e320CD24Eb632", - "b_contractAddress": "0x2E9bB44C9CB774939462eF874Fc854D8df524F13", - "c_tokenName": "HOP", - "d_contractName": "l2Bridge" + "a_tokenAddress": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", + "b_contractAddress": "0x8741Ba6225A6BF91f9D73531A98A89807857a2B3", + "c_tokenName": "USDT", + "d_contractName": "l2AmmWrapper" + }, + { + "a_tokenAddress": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", + "b_contractAddress": "0xB2f7d27B21a69a033f85C42d5EB079043BAadC81", + "c_tokenName": "USDT", + "d_contractName": "l2SaddleSwap" }, { - "a_tokenAddress": "0xf56dc6695cF1f5c364eDEbC7Dc7077ac9B586068", - "b_contractAddress": "0x50d7d8B850e0e880295800790551928F4546BfE2", - "c_tokenName": "USDC", + "a_tokenAddress": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", + "b_contractAddress": "0x884d1Aa15F9957E1aEAA86a82a72e49Bc2bfCbe3", + "c_tokenName": "MATIC", "d_contractName": "l2AmmWrapper" }, { - "a_tokenAddress": "0xf56dc6695cF1f5c364eDEbC7Dc7077ac9B586068", - "b_contractAddress": "0x723194C6Cfed24883b598931Ee802ab80952C001", - "c_tokenName": "USDC", + "a_tokenAddress": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", + "b_contractAddress": "0x3d4Cc8A61c7528Fd86C55cfe061a78dCBA48EDd1", + "c_tokenName": "MATIC", "d_contractName": "l2SaddleSwap" }, { - "a_tokenAddress": "0x1990BC6dfe2ef605Bfc08f5A23564dB75642Ad73", - "b_contractAddress": "0xdb16fbF595C02EeF7D9233d38C232495734F3D85", - "c_tokenName": "USDT", - "d_contractName": "l2Bridge" + "a_tokenAddress": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + "b_contractAddress": "0x28529fec439cfF6d7D1D5917e956dEE62Cd3BE5c", + "c_tokenName": "DAI", + "d_contractName": "l2AmmWrapper" }, { - "a_tokenAddress": "0x8741Ba6225A6BF91f9D73531A98A89807857a2B3", - "b_contractAddress": "0xf11EBB94EC986EA891Aec29cfF151345C83b33Ec", + "a_tokenAddress": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + "b_contractAddress": "0x25FB92E505F752F730cAD0Bd4fa17ecE4A384266", "c_tokenName": "DAI", - "d_contractName": "l2Bridge" + "d_contractName": "l2SaddleSwap" + }, + { + "a_tokenAddress": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + "b_contractAddress": "0xc315239cFb05F1E130E7E28E603CEa4C014c57f0", + "c_tokenName": "ETH", + "d_contractName": "l2AmmWrapper" + }, + { + "a_tokenAddress": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + "b_contractAddress": "0x266e2dc3C4c59E42AA07afeE5B09E964cFFe6778", + "c_tokenName": "ETH", + "d_contractName": "l2SaddleSwap" }, { - "a_tokenAddress": "0x7823E8DCC8bfc23EA3AC899EB86921f90e80F499", - "b_contractAddress": "0xb07c6505e1E41112494123e40330c5Ac09817CFB", - "c_tokenName": "UNI", + "a_tokenAddress": "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", + "b_contractAddress": "0x58c61AeE5eD3D748a1467085ED2650B697A66234", + "c_tokenName": "HOP", "d_contractName": "l2Bridge" } ] }, - "nova": { + "arbitrumnova": { "chainId": 42170, "tokens": [ { @@ -508,6 +660,18 @@ "bridge": "0x8796860ca1677Bf5d54cE5A348Fe4b779a8212f3", "token": "0x722E8BdD2ce80A4422E880164f2079488e115365", "ammWrapper": "0xd6bFB71b5Ad5fD378CaC15C72D8652E3b8D542c4" + }, + { + "name": "HOP", + "bridge": "0x02D47f76523d2f059b617E4346de67482792eB83", + "token": "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", + "ammWrapper": "0x0000000000000000000000000000000000000000" + }, + { + "name": "MAGIC", + "bridge": "0xE638433e2C1dF5f7a3a21b0a6b5c4b37278e55DC", + "token": "0xe8936ac97A85d708d5312D52C30c18d4533b8A9c", + "ammWrapper": "0x40C8fdFf725b20862e22953AFfa0bBaf42D4B467" } ], "approvals": [ @@ -522,270 +686,130 @@ "b_contractAddress": "0x9908109e51D093cF17ef945Df2C62cb17cB877c4", "c_tokenName": "ETH", "d_contractName": "l2SaddleSwap" + }, + { + "a_tokenAddress": "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", + "b_contractAddress": "0x02D47f76523d2f059b617E4346de67482792eB83", + "c_tokenName": "HOP", + "d_contractName": "l2Bridge" + }, + { + "a_tokenAddress": "0xe8936ac97A85d708d5312D52C30c18d4533b8A9c", + "b_contractAddress": "0x40C8fdFf725b20862e22953AFfa0bBaf42D4B467", + "c_tokenName": "MAGIC", + "d_contractName": "l2AmmWrapper" + }, + { + "a_tokenAddress": "0xe8936ac97A85d708d5312D52C30c18d4533b8A9c", + "b_contractAddress": "0xAB2D307E9563Faa3b935784fE7a32BE3868399A6", + "c_tokenName": "MAGIC", + "d_contractName": "l2SaddleSwap" } ] }, - "optimism": { - "chainId": 10, + "base": { + "chainId": 8453, "tokens": [ { "name": "USDC", - "bridge": "0xa81D244A1814468C734E5b4101F7b9c0c577a8fC", - "token": "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", - "ammWrapper": "0x2ad09850b0CA4c7c1B33f5AcD6cBAbCaB5d6e796" + "token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" }, { - "name": "USDT", + "name": "USDC.e", "bridge": "0x46ae9BaB8CEA96610807a275EBD36f8e916b5C61", - "token": "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", + "token": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", "ammWrapper": "0x7D269D3E0d61A05a0bA976b7DBF8805bF844AF3F" }, - { - "name": "DAI", - "bridge": "0x7191061D5d4C60f598214cC6913502184BAddf18", - "token": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", - "ammWrapper": "0xb3C68a491608952Cb1257FC9909a537a0173b63B" - }, { "name": "ETH", - "bridge": "0x83f6244Bd87662118d96D9a6D44f09dffF14b30E", + "bridge": "0x3666f603Cc164936C1b87e207F36BEBa4AC5f18a", "token": "0x4200000000000000000000000000000000000006", - "ammWrapper": "0x86cA30bEF97fB651b8d866D45503684b90cb3312" + "ammWrapper": "0x10541b07d8Ad2647Dc6cD67abd4c03575dade261" }, { "name": "ETH", - "bridge": "0x83f6244Bd87662118d96D9a6D44f09dffF14b30E", + "bridge": "0x3666f603Cc164936C1b87e207F36BEBa4AC5f18a", "token": "0x0000000000000000000000000000000000000000", - "ammWrapper": "0x86cA30bEF97fB651b8d866D45503684b90cb3312" + "ammWrapper": "0x10541b07d8Ad2647Dc6cD67abd4c03575dade261" }, { "name": "HOP", - "bridge": "0x03D7f750777eC48d39D080b020D83Eb2CB4e3547", + "bridge": "0xe22D2beDb3Eca35E6397e0C6D62857094aA26F52", "token": "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", "ammWrapper": "0x0000000000000000000000000000000000000000" - }, - { - "name": "SNX", - "bridge": "0x16284c7323c35F4960540583998C98B1CfC581a7", - "token": "0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4", - "ammWrapper": "0xf11EBB94EC986EA891Aec29cfF151345C83b33Ec" - }, - { - "name": "sUSD", - "bridge": "0x33Fe5bB8DA466dA55a8A32D6ADE2BB104E2C5201", - "token": "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9", - "ammWrapper": "0x29Fba7d2A6C95DB162ee09C6250e912D6893DCa6" - }, - { - "name": "rETH", - "bridge": "0xA0075E8cE43dcB9970cB7709b9526c1232cc39c2", - "token": "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D", - "ammWrapper": "0x19B2162CA4C2C6F08C6942bFB846ce5C396aCB75" } ], "approvals": [ { - "a_tokenAddress": "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", - "b_contractAddress": "0x2ad09850b0CA4c7c1B33f5AcD6cBAbCaB5d6e796", - "c_tokenName": "USDC", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", - "b_contractAddress": "0x3c0FFAca566fCcfD9Cc95139FEF6CBA143795963", - "c_tokenName": "USDC", - "d_contractName": "l2SaddleSwap" - }, - { - "a_tokenAddress": "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", + "a_tokenAddress": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", "b_contractAddress": "0x7D269D3E0d61A05a0bA976b7DBF8805bF844AF3F", - "c_tokenName": "USDT", + "c_tokenName": "USDC.e", "d_contractName": "l2AmmWrapper" }, { - "a_tokenAddress": "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", - "b_contractAddress": "0xeC4B41Af04cF917b54AEb6Df58c0f8D78895b5Ef", - "c_tokenName": "USDT", - "d_contractName": "l2SaddleSwap" - }, - { - "a_tokenAddress": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", - "b_contractAddress": "0xb3C68a491608952Cb1257FC9909a537a0173b63B", - "c_tokenName": "DAI", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", - "b_contractAddress": "0xF181eD90D6CfaC84B8073FdEA6D34Aa744B41810", - "c_tokenName": "DAI", + "a_tokenAddress": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", + "b_contractAddress": "0x022C5cE6F1Add7423268D41e08Df521D5527C2A0", + "c_tokenName": "USDC.e", "d_contractName": "l2SaddleSwap" }, { "a_tokenAddress": "0x4200000000000000000000000000000000000006", - "b_contractAddress": "0x86cA30bEF97fB651b8d866D45503684b90cb3312", + "b_contractAddress": "0x10541b07d8Ad2647Dc6cD67abd4c03575dade261", "c_tokenName": "ETH", "d_contractName": "l2AmmWrapper" }, { "a_tokenAddress": "0x4200000000000000000000000000000000000006", - "b_contractAddress": "0xaa30D6bba6285d0585722e2440Ff89E23EF68864", + "b_contractAddress": "0x0ce6c85cF43553DE10FC56cecA0aef6Ff0DD444d", "c_tokenName": "ETH", "d_contractName": "l2SaddleSwap" }, { "a_tokenAddress": "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", - "b_contractAddress": "0x03D7f750777eC48d39D080b020D83Eb2CB4e3547", + "b_contractAddress": "0xe22D2beDb3Eca35E6397e0C6D62857094aA26F52", "c_tokenName": "HOP", "d_contractName": "l2Bridge" - }, - { - "a_tokenAddress": "0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4", - "b_contractAddress": "0xf11EBB94EC986EA891Aec29cfF151345C83b33Ec", - "c_tokenName": "SNX", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4", - "b_contractAddress": "0x1990BC6dfe2ef605Bfc08f5A23564dB75642Ad73", - "c_tokenName": "SNX", - "d_contractName": "l2SaddleSwap" - }, - { - "a_tokenAddress": "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9", - "b_contractAddress": "0x29Fba7d2A6C95DB162ee09C6250e912D6893DCa6", - "c_tokenName": "sUSD", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9", - "b_contractAddress": "0x8d4063E82A4Db8CdAed46932E1c71e03CA69Bede", - "c_tokenName": "sUSD", - "d_contractName": "l2SaddleSwap" - }, - { - "a_tokenAddress": "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D", - "b_contractAddress": "0x19B2162CA4C2C6F08C6942bFB846ce5C396aCB75", - "c_tokenName": "rETH", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D", - "b_contractAddress": "0x9Dd8685463285aD5a94D2c128bda3c5e8a6173c8", - "c_tokenName": "rETH", - "d_contractName": "l2SaddleSwap" } ] }, - "polygon": { - "chainId": 137, + "linea": { + "chainId": 59144, "tokens": [ { - "name": "USDC", - "bridge": "0x25D8039bB044dC227f741a9e381CA4cEAE2E6aE8", - "token": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "ammWrapper": "0x76b22b8C1079A44F1211D867D68b1eda76a635A7" - }, - { - "name": "USDT", - "bridge": "0x6c9a1ACF73bd85463A46B0AFc076FBdf602b690B", - "token": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - "ammWrapper": "0x8741Ba6225A6BF91f9D73531A98A89807857a2B3" - }, - { - "name": "MATIC", - "bridge": "0x553bC791D746767166fA3888432038193cEED5E2", - "token": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", - "ammWrapper": "0x884d1Aa15F9957E1aEAA86a82a72e49Bc2bfCbe3" - }, - { - "name": "MATIC", - "bridge": "0x553bC791D746767166fA3888432038193cEED5E2", - "token": "0x0000000000000000000000000000000000000000", - "ammWrapper": "0x884d1Aa15F9957E1aEAA86a82a72e49Bc2bfCbe3" - }, - { - "name": "DAI", - "bridge": "0xEcf268Be00308980B5b3fcd0975D47C4C8e1382a", - "token": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - "ammWrapper": "0x28529fec439cfF6d7D1D5917e956dEE62Cd3BE5c" + "name": "ETH", + "bridge": "0xCbb852A6274e03fA00fb4895dE0463f66dF27a11", + "token": "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f", + "ammWrapper": "0xC8A4FB931e8D77df8497790381CA7d228E68a41b" }, { "name": "ETH", - "bridge": "0xb98454270065A31D71Bf635F6F7Ee6A518dFb849", - "token": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", - "ammWrapper": "0xc315239cFb05F1E130E7E28E603CEa4C014c57f0" + "bridge": "0xCbb852A6274e03fA00fb4895dE0463f66dF27a11", + "token": "0x0000000000000000000000000000000000000000", + "ammWrapper": "0xC8A4FB931e8D77df8497790381CA7d228E68a41b" }, { "name": "HOP", - "bridge": "0x58c61AeE5eD3D748a1467085ED2650B697A66234", + "bridge": "0x0a6b1904369fE59E002ad0713ae89d4E3dF5A7Cf", "token": "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", "ammWrapper": "0x0000000000000000000000000000000000000000" } ], "approvals": [ { - "a_tokenAddress": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "b_contractAddress": "0x76b22b8C1079A44F1211D867D68b1eda76a635A7", - "c_tokenName": "USDC", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "b_contractAddress": "0x5C32143C8B198F392d01f8446b754c181224ac26", - "c_tokenName": "USDC", - "d_contractName": "l2SaddleSwap" - }, - { - "a_tokenAddress": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - "b_contractAddress": "0x8741Ba6225A6BF91f9D73531A98A89807857a2B3", - "c_tokenName": "USDT", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - "b_contractAddress": "0xB2f7d27B21a69a033f85C42d5EB079043BAadC81", - "c_tokenName": "USDT", - "d_contractName": "l2SaddleSwap" - }, - { - "a_tokenAddress": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", - "b_contractAddress": "0x884d1Aa15F9957E1aEAA86a82a72e49Bc2bfCbe3", - "c_tokenName": "MATIC", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", - "b_contractAddress": "0x3d4Cc8A61c7528Fd86C55cfe061a78dCBA48EDd1", - "c_tokenName": "MATIC", - "d_contractName": "l2SaddleSwap" - }, - { - "a_tokenAddress": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - "b_contractAddress": "0x28529fec439cfF6d7D1D5917e956dEE62Cd3BE5c", - "c_tokenName": "DAI", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - "b_contractAddress": "0x25FB92E505F752F730cAD0Bd4fa17ecE4A384266", - "c_tokenName": "DAI", - "d_contractName": "l2SaddleSwap" - }, - { - "a_tokenAddress": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", - "b_contractAddress": "0xc315239cFb05F1E130E7E28E603CEa4C014c57f0", + "a_tokenAddress": "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f", + "b_contractAddress": "0xC8A4FB931e8D77df8497790381CA7d228E68a41b", "c_tokenName": "ETH", "d_contractName": "l2AmmWrapper" }, { - "a_tokenAddress": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", - "b_contractAddress": "0x266e2dc3C4c59E42AA07afeE5B09E964cFFe6778", + "a_tokenAddress": "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f", + "b_contractAddress": "0x2935173357c010F8B56c8719a44f9FbdDa90f67c", "c_tokenName": "ETH", "d_contractName": "l2SaddleSwap" }, { "a_tokenAddress": "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", - "b_contractAddress": "0x58c61AeE5eD3D748a1467085ED2650B697A66234", + "b_contractAddress": "0x0a6b1904369fE59E002ad0713ae89d4E3dF5A7Cf", "c_tokenName": "HOP", "d_contractName": "l2Bridge" } @@ -800,6 +824,12 @@ "token": "0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9", "ammWrapper": "0xbd72882120508518FCba2AE58E134EceaD18d979" }, + { + "name": "ETH", + "bridge": "0x0ce6c85cF43553DE10FC56cecA0aef6Ff0DD444d", + "token": "0x0000000000000000000000000000000000000000", + "ammWrapper": "0xbd72882120508518FCba2AE58E134EceaD18d979" + }, { "name": "HOP", "bridge": "0x9ec9551d4A1a1593b0ee8124D98590CC71b3B09D", @@ -827,336 +857,5 @@ "d_contractName": "l2Bridge" } ] - }, - "goerli": { - "chainId": 5, - "tokens": [ - { - "name": "ETH", - "bridge": "0xd9e10C6b1bd26dE4E2749ce8aFe8Dd64294BcBF5", - "token": "0x0000000000000000000000000000000000000000", - "ammWrapper": "0x0000000000000000000000000000000000000000" - }, - { - "name": "HOP", - "bridge": "0x9051Dc48d27dAb53DbAB9E844f8E48c469603938", - "token": "0x38aF6928BF1Fd6B3c768752e716C49eb8206e20c", - "ammWrapper": "0x0000000000000000000000000000000000000000" - }, - { - "name": "USDC", - "bridge": "0x889CD829cE211c92b31fDFE1d75299482839ea2b", - "token": "0x07865c6e87b9f70255377e024ace6630c1eaa37f", - "ammWrapper": "0x0000000000000000000000000000000000000000" - }, - { - "name": "USDT", - "bridge": "0x53B94FAf104A484ff4E7c66bFe311fd48ce3D887", - "token": "0xfad6367E97217cC51b4cd838Cc086831f81d38C2", - "ammWrapper": "0x0000000000000000000000000000000000000000" - }, - { - "name": "DAI", - "bridge": "0xAa1603822b43e592e33b58d34B4423E1bcD8b4dC", - "token": "0xb93cba7013f4557cDFB590fD152d24Ef4063485f", - "ammWrapper": "0x0000000000000000000000000000000000000000" - }, - { - "name": "UNI", - "bridge": "0x9D3A7fB18CA7F1237F977Dc5572883f8b24F5638", - "token": "0x41E5E6045f91B61AACC99edca0967D518fB44CFB", - "ammWrapper": "0x0000000000000000000000000000000000000000" - } - ], - "approvals": [ - { - "a_tokenAddress": "0x38aF6928BF1Fd6B3c768752e716C49eb8206e20c", - "b_contractAddress": "0xC7C736deFBfF0aD1CB63dB82f55f053D331B4d7C", - "c_tokenName": "HOP", - "d_contractName": "l1Bridge" - }, - { - "a_tokenAddress": "0x38aF6928BF1Fd6B3c768752e716C49eb8206e20c", - "b_contractAddress": "0x9051Dc48d27dAb53DbAB9E844f8E48c469603938", - "c_tokenName": "HOP", - "d_contractName": "l1BridgeWrapper" - }, - { - "a_tokenAddress": "0x07865c6e87b9f70255377e024ace6630c1eaa37f", - "b_contractAddress": "0x0AA3256364e6fBb277cCf7bd90F8b512CE39eFFA", - "c_tokenName": "USDC", - "d_contractName": "l1Bridge" - }, - { - "a_tokenAddress": "0x07865c6e87b9f70255377e024ace6630c1eaa37f", - "b_contractAddress": "0x889CD829cE211c92b31fDFE1d75299482839ea2b", - "c_tokenName": "USDC", - "d_contractName": "l1BridgeWrapper" - }, - { - "a_tokenAddress": "0xfad6367E97217cC51b4cd838Cc086831f81d38C2", - "b_contractAddress": "0x4A26dE45BD65ef6e5535846b92a8575E0A0e5CEd", - "c_tokenName": "USDT", - "d_contractName": "l1Bridge" - }, - { - "a_tokenAddress": "0xfad6367E97217cC51b4cd838Cc086831f81d38C2", - "b_contractAddress": "0x53B94FAf104A484ff4E7c66bFe311fd48ce3D887", - "c_tokenName": "USDT", - "d_contractName": "l1BridgeWrapper" - }, - { - "a_tokenAddress": "0xb93cba7013f4557cDFB590fD152d24Ef4063485f", - "b_contractAddress": "0x2d6fd82C7f531328BCaCA96EF985325C0894dB62", - "c_tokenName": "DAI", - "d_contractName": "l1Bridge" - }, - { - "a_tokenAddress": "0xb93cba7013f4557cDFB590fD152d24Ef4063485f", - "b_contractAddress": "0xAa1603822b43e592e33b58d34B4423E1bcD8b4dC", - "c_tokenName": "DAI", - "d_contractName": "l1BridgeWrapper" - }, - { - "a_tokenAddress": "0x41E5E6045f91B61AACC99edca0967D518fB44CFB", - "b_contractAddress": "0x4Ef4C1208F7374d0252767E3992546d61dCf9848", - "c_tokenName": "UNI", - "d_contractName": "l1Bridge" - }, - { - "a_tokenAddress": "0x41E5E6045f91B61AACC99edca0967D518fB44CFB", - "b_contractAddress": "0x9D3A7fB18CA7F1237F977Dc5572883f8b24F5638", - "c_tokenName": "UNI", - "d_contractName": "l1BridgeWrapper" - } - ] - }, - "arbitrumTestnet": { - "chainId": 421613, - "tokens": [ - { - "name": "ETH", - "bridge": "0xb276BC046DFf5024D20A3947475eA20C9F08eB1F", - "token": "0xcb5ddfb8d0038247dc0beeecaa7f3457befcb77c", - "ammWrapper": "0xa832293f2DCe2f092182F17dd873ae06AD5fDbaF" - } - ], - "approvals": [ - { - "a_tokenAddress": "0xcb5ddfb8d0038247dc0beeecaa7f3457befcb77c", - "b_contractAddress": "0xa832293f2DCe2f092182F17dd873ae06AD5fDbaF", - "c_tokenName": "ETH", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0xcb5ddfb8d0038247dc0beeecaa7f3457befcb77c", - "b_contractAddress": "0x69a71b7F6Ff088a0310b4f911b4f9eA11e2E9740", - "c_tokenName": "ETH", - "d_contractName": "l2SaddleSwap" - } - ] - }, - "baseTestnet": { - "chainId": 84531, - "tokens": [ - { - "name": "ETH", - "bridge": "0xCB4cEeFce514B2d910d3ac529076D18e3aDD3775", - "token": "0x4200000000000000000000000000000000000006", - "ammWrapper": "0xCbb852A6274e03fA00fb4895dE0463f66dF27a11" - }, - { - "name": "ETH", - "bridge": "0xCB4cEeFce514B2d910d3ac529076D18e3aDD3775", - "token": "0x0000000000000000000000000000000000000000", - "ammWrapper": "0xCbb852A6274e03fA00fb4895dE0463f66dF27a11" - } - ], - "approvals": [ - { - "a_tokenAddress": "0x4200000000000000000000000000000000000006", - "b_contractAddress": "0xCbb852A6274e03fA00fb4895dE0463f66dF27a11", - "c_tokenName": "ETH", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0x4200000000000000000000000000000000000006", - "b_contractAddress": "0xB87aC009F61Fa214f196e232fD14A6f8AE422FA1", - "c_tokenName": "ETH", - "d_contractName": "l2SaddleSwap" - } - ] - }, - "lineatest": { - "chainId": 59140, - "tokens": [ - { - "name": "ETH", - "bridge": "0x3E4a3a4796d16c0Cd582C382691998f7c06420B6", - "token": "0x2C1b868d6596a18e32E61B901E4060C872647b6C", - "ammWrapper": "0xC08055b634D43F2176d721E26A3428D3b7E7DdB5" - }, - { - "name": "HOP", - "bridge": "0x2E9bB44C9CB774939462eF874Fc854D8df524F13", - "token": "0x6F03052743CD99ce1b29265E377e320CD24Eb632", - "ammWrapper": "0x0000000000000000000000000000000000000000" - }, - { - "name": "USDC", - "bridge": "0x884d1Aa15F9957E1aEAA86a82a72e49Bc2bfCbe3", - "token": "0xf56dc6695cF1f5c364eDEbC7Dc7077ac9B586068", - "ammWrapper": "0x50d7d8B850e0e880295800790551928F4546BfE2" - }, - { - "name": "USDT", - "bridge": "0xdb16fbF595C02EeF7D9233d38C232495734F3D85", - "token": "0x1990BC6dfe2ef605Bfc08f5A23564dB75642Ad73", - "ammWrapper": "0x0000000000000000000000000000000000000000" - }, - { - "name": "DAI", - "bridge": "0xf11EBB94EC986EA891Aec29cfF151345C83b33Ec", - "token": "0x8741Ba6225A6BF91f9D73531A98A89807857a2B3", - "ammWrapper": "0x0000000000000000000000000000000000000000" - }, - { - "name": "UNI", - "bridge": "0xb07c6505e1E41112494123e40330c5Ac09817CFB", - "token": "0x7823E8DCC8bfc23EA3AC899EB86921f90e80F499", - "ammWrapper": "0x0000000000000000000000000000000000000000" - } - ], - "approvals": [ - { - "a_tokenAddress": "0x2C1b868d6596a18e32E61B901E4060C872647b6C", - "b_contractAddress": "0xC08055b634D43F2176d721E26A3428D3b7E7DdB5", - "c_tokenName": "ETH", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0x2C1b868d6596a18e32E61B901E4060C872647b6C", - "b_contractAddress": "0x7191061D5d4C60f598214cC6913502184BAddf18", - "c_tokenName": "ETH", - "d_contractName": "l2SaddleSwap" - }, - { - "a_tokenAddress": "0x6F03052743CD99ce1b29265E377e320CD24Eb632", - "b_contractAddress": "0x2E9bB44C9CB774939462eF874Fc854D8df524F13", - "c_tokenName": "HOP", - "d_contractName": "l2Bridge" - }, - { - "a_tokenAddress": "0xf56dc6695cF1f5c364eDEbC7Dc7077ac9B586068", - "b_contractAddress": "0x50d7d8B850e0e880295800790551928F4546BfE2", - "c_tokenName": "USDC", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0xf56dc6695cF1f5c364eDEbC7Dc7077ac9B586068", - "b_contractAddress": "0x723194C6Cfed24883b598931Ee802ab80952C001", - "c_tokenName": "USDC", - "d_contractName": "l2SaddleSwap" - }, - { - "a_tokenAddress": "0x1990BC6dfe2ef605Bfc08f5A23564dB75642Ad73", - "b_contractAddress": "0xdb16fbF595C02EeF7D9233d38C232495734F3D85", - "c_tokenName": "USDT", - "d_contractName": "l2Bridge" - }, - { - "a_tokenAddress": "0x8741Ba6225A6BF91f9D73531A98A89807857a2B3", - "b_contractAddress": "0xf11EBB94EC986EA891Aec29cfF151345C83b33Ec", - "c_tokenName": "DAI", - "d_contractName": "l2Bridge" - }, - { - "a_tokenAddress": "0x7823E8DCC8bfc23EA3AC899EB86921f90e80F499", - "b_contractAddress": "0xb07c6505e1E41112494123e40330c5Ac09817CFB", - "c_tokenName": "UNI", - "d_contractName": "l2Bridge" - } - ] - }, - "linea": { - "chainId": 59144, - "tokens": [ - { - "name": "ETH", - "bridge": "0xCbb852A6274e03fA00fb4895dE0463f66dF27a11", - "token": "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f", - "ammWrapper": "0xC8A4FB931e8D77df8497790381CA7d228E68a41b" - }, - { - "name": "ETH", - "bridge": "0xCbb852A6274e03fA00fb4895dE0463f66dF27a11", - "token": "0x0000000000000000000000000000000000000000", - "ammWrapper": "0xC8A4FB931e8D77df8497790381CA7d228E68a41b" - } - ], - "approvals": [ - { - "a_tokenAddress": "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f", - "b_contractAddress": "0xC8A4FB931e8D77df8497790381CA7d228E68a41b", - "c_tokenName": "ETH", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f", - "b_contractAddress": "0x2935173357c010F8B56c8719a44f9FbdDa90f67c", - "c_tokenName": "ETH", - "d_contractName": "l2SaddleSwap" - } - ] - }, - "mumbai": { - "chainId": 80001, - "tokens": [ - { - "name": "ETH", - "bridge": "0x34E8251051687BfF4EA23C18e466b3Ed13492abd", - "token": "0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa", - "ammWrapper": "0x0e0E3d2C5c292161999474247956EF542caBF8dd" - } - ], - "approvals": [ - { - "a_tokenAddress": "0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa", - "b_contractAddress": "0x0e0E3d2C5c292161999474247956EF542caBF8dd", - "c_tokenName": "ETH", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa", - "b_contractAddress": "0x3666f603Cc164936C1b87e207F36BEBa4AC5f18a", - "c_tokenName": "ETH", - "d_contractName": "l2SaddleSwap" - } - ] - }, - "optimismTestnet": { - "chainId": 420, - "tokens": [ - { - "name": "ETH", - "bridge": "0x2708E5C7087d4C6D295c8B58b2D452c360D505C7", - "token": "0xDc38c5aF436B9652225f92c370A011C673FA7Ba5", - "ammWrapper": "0xC1985d7a3429cDC85E59E2E4Fcc805b857e6Ee2E" - } - ], - "approvals": [ - { - "a_tokenAddress": "0xDc38c5aF436B9652225f92c370A011C673FA7Ba5", - "b_contractAddress": "0xC1985d7a3429cDC85E59E2E4Fcc805b857e6Ee2E", - "c_tokenName": "ETH", - "d_contractName": "l2AmmWrapper" - }, - { - "a_tokenAddress": "0xDc38c5aF436B9652225f92c370A011C673FA7Ba5", - "b_contractAddress": "0xa50395bdEaca7062255109fedE012eFE63d6D402", - "c_tokenName": "ETH", - "d_contractName": "l2SaddleSwap" - } - ] } } diff --git a/config/networks.json b/config/networks.json index 8a014a0e2..a21cbdfbf 100644 --- a/config/networks.json +++ b/config/networks.json @@ -1,6 +1,6 @@ { "mainnet": { - "name": "Ethereum Mainnet", + "name": "mainnet", "chainId": 1, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -14,10 +14,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-mainnet.safe.global/api", "safeAddress": "0x37347dD595C49212C5FC2D95EA10d1085896f51E", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=eth:0x37347dD595C49212C5FC2D95EA10d1085896f51E", "gasZipChainId": 255 }, "arbitrum": { - "name": "Arbitrum One", + "name": "arbitrum", "chainId": 42161, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -31,10 +32,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-arbitrum.safe.global/api", "safeAddress": "0x9e606d0d2BbA344b911e2F4Eab95d9235A83fe15", + "safeWebUrl": "https://app.safe.global/home?chain=oeth&safe=arb1:0x9e606d0d2BbA344b911e2F4Eab95d9235A83fe15", "gasZipChainId": 57 }, "aurora": { - "name": "Aurora", + "name": "aurora", "chainId": 1313161554, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -48,10 +50,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-aurora.safe.global/api", "safeAddress": "0xC7291F249424A35b17976F057D2C97B30c92b88C", + "safeWebUrl": "https://app.safe.global/home?chain=oeth&safe=aurora:0xC7291F249424A35b17976F057D2C97B30c92b88C", "gasZipChainId": 62 }, "avalanche": { - "name": "Avalanche C-Chain", + "name": "avalanche", "chainId": 43114, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "AVAX", @@ -65,10 +68,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-avalanche.safe.global/api", "safeAddress": "0x27d4eb2854d93a1A7Df8e2aeD1a535b080a6f6e4", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=avax:0x27d4eb2854d93a1A7Df8e2aeD1a535b080a6f6e4", "gasZipChainId": 15 }, "base": { - "name": "Base", + "name": "base", "chainId": 8453, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -82,10 +86,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-base.safe.global/api", "safeAddress": "0x1F6974C11B833Eb52ea07E0B442510165D87d82e", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=base:0x1F6974C11B833Eb52ea07E0B442510165D87d82e", "gasZipChainId": 54 }, "blast": { - "name": "Blast", + "name": "blast", "chainId": 81457, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -97,12 +102,13 @@ "explorerUrl": "https://blastscan.io", "explorerApiUrl": "https://api.blastscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", - "safeApiUrl": "https://transaction.blast-safe.io/api", + "safeApiUrl": "https://safe-transaction-blast.safe.global/api", "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=blast:0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", "gasZipChainId": 96 }, "boba": { - "name": "Boba Network", + "name": "boba", "chainId": 288, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -116,10 +122,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction.mainnet.boba.network/api", "safeAddress": "0x05d34Bd70E0CBf8b82423d0C2ee8b2a8f02E4128", + "safeWebUrl": "https://multisig.boba.network/home?chain=boba&safe=boba:0x05d34Bd70E0CBf8b82423d0C2ee8b2a8f02E4128", "gasZipChainId": 140 }, "bsc": { - "name": "BNB Smart Chain", + "name": "bsc", "chainId": 56, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "BNB", @@ -133,10 +140,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-bsc.safe.global/api", "safeAddress": "0x20B6b31D76E054C3e4de6154fEca385Ca58c7C15", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=bnb:0x20B6b31D76E054C3e4de6154fEca385Ca58c7C15", "gasZipChainId": 148 }, "celo": { - "name": "Celo", + "name": "celo", "chainId": 42220, "nativeAddress": "0x471EcE3750Da237f93B8E339c536989b8978a438", "nativeCurrency": "CELO", @@ -150,10 +158,11 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://safe-transaction-celo.safe.global/api", "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=celo:0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", "gasZipChainId": 21 }, "cronos": { - "name": "Cronos", + "name": "cronos", "chainId": 25, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "CRO", @@ -167,10 +176,11 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.cronos-safe.org/api", "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", + "safeWebUrl": "https://cronos-safe.org/home?safe=cro:0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", "gasZipChainId": 36 }, "fantom": { - "name": "Fantom", + "name": "fantom", "chainId": 250, "nativeCurrency": "FTM", "nativeAddress": "0x0000000000000000000000000000000000000000", @@ -184,10 +194,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-txservice.fantom.network/api", "safeAddress": "0x9B325B1c43BB3c018FcDB24A64E05EF4B8B8057b", + "safeWebUrl": "https://safe.fantom.network/transactions/queue?safe=ftm:0x9B325B1c43BB3c018FcDB24A64E05EF4B8B8057b", "gasZipChainId": 20 }, "fraxtal": { - "name": "Fraxtal", + "name": "fraxtal", "chainId": 252, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "frxETH", @@ -201,10 +212,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://transaction-frax.safe.optimism.io/api", "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", + "safeWebUrl": "https://safe.optimism.io/transactions/queue?safe=fraxtal:0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", "gasZipChainId": 10 }, "fuse": { - "name": "Fuse", + "name": "fuse", "chainId": 122, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "FUSE", @@ -218,10 +230,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://transaction-fuse.safe.fuse.io/api", "safeAddress": "0x5336e97bA7332FAC20281Bda8B790c8892245Ded", + "safeWebUrl": "https://safe.fuse.io/fuse:0x5336e97bA7332FAC20281Bda8B790c8892245Ded/transactions/queue", "gasZipChainId": 31 }, "gnosis": { - "name": "Gnosis Chain", + "name": "gnosis", "chainId": 100, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "XDAI", @@ -235,10 +248,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-gnosis-chain.safe.global/api", "safeAddress": "0x2bC523875b59A1Ddd03CEB1F1b28c5B0e8e6654A", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=gno:0x2bC523875b59A1Ddd03CEB1F1b28c5B0e8e6654A", "gasZipChainId": 16 }, "gravity": { - "name": "Gravity Alpha Mainnet", + "name": "gravity", "chainId": 1625, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "G", @@ -252,10 +266,11 @@ "multicallAddress": "0xf8ac4BEB2F75d2cFFb588c63251347fdD629B92c", "safeApiUrl": "https://safe.gravity.xyz/txs/api", "safeAddress": "0x245B16CaCE8730b009c5352186DcE7d73c3037A1", + "safeWebUrl": "https://safe.gravity.xyz/transactions/queue?safe=gravity:0x245B16CaCE8730b009c5352186DcE7d73c3037A1", "gasZipChainId": 240 }, "immutablezkevm": { - "name": "Immutable zkEVM", + "name": "immutablezkevm", "chainId": 13371, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "IMX", @@ -269,10 +284,11 @@ "multicallAddress": "0x236bdA4589e44e6850f5aC6a74BfCa398a86c6c0", "safeApiUrl": "https://transaction.safe.immutable.com/api", "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", + "safeWebUrl": "https://safe.immutable.com/transactions/queue?safe=imx:0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", "gasZipChainId": 95 }, "kaia": { - "name": "Kaia", + "name": "kaia", "chainId": 8217, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "KLAYTN", @@ -286,10 +302,11 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://docs-safe.kaia.io/txs-cypress/api", "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", + "safeWebUrl": "https://safe.kaia.io/transactions/queue?safe=mainnet:0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", "gasZipChainId": 33 }, "linea": { - "name": "Linea", + "name": "linea", "chainId": 59144, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -303,10 +320,29 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://safe-transaction-linea.safe.global/api", "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=linea:0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", "gasZipChainId": 59 }, + "lisk": { + "name": "Lisk", + "chainId": 1135, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", + "status": "active", + "type": "mainnet", + "rpcUrl": "https://rpc.api.lisk.com", + "verificationType": "blockscout", + "explorerUrl": "https://blockscout.lisk.com", + "explorerApiUrl": "https://blockscout.lisk.com/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction-lisk.safe.optimism.io/api", + "safeAddress": "0x86E02d7383D6a045848b0a1A842996AC9E943113", + "safeWebUrl": "https://safe.optimism.io/home?safe=lisk:0x86E02d7383D6a045848b0a1A842996AC9E943113", + "gasZipChainId": 238 + }, "mantle": { - "name": "Mantle", + "name": "mantle", "chainId": 5000, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "MNT", @@ -320,10 +356,11 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.multisig.mantle.xyz/api", "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", + "safeWebUrl": "https://multisig.mantle.xyz/transactions/queue?safe=mantle:0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", "gasZipChainId": 13 }, "metis": { - "name": "Metis Andromeda Mainnet", + "name": "metis", "chainId": 1088, "nativeAddress": "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", "nativeCurrency": "METIS", @@ -337,10 +374,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://metissafe.tech/txs/api", "safeAddress": "0x925cD8289Ac2d617F52974da8338867f3bB62d56", + "safeWebUrl": "https://metissafe.tech/transactions/queue?safe=metis-andromeda:0x925cD8289Ac2d617F52974da8338867f3bB62d56", "gasZipChainId": 30 }, "mode": { - "name": "Mode", + "name": "mode", "chainId": 34443, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -354,10 +392,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://transaction-mode.safe.optimism.io/api", "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", + "safeWebUrl": "https://safe.optimism.io/transactions/queue?safe=mode:0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", "gasZipChainId": 73 }, "moonbeam": { - "name": "Moonbeam", + "name": "moonbeam", "chainId": 1284, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "GLMR", @@ -371,10 +410,11 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.multisig.moonbeam.network/api", "safeAddress": "0xB51E43CeCAB8A42cD6225e16C9C3a3ba1A76871A", + "safeWebUrl": "https://multisig.moonbeam.network/transactions/queue?safe=mbeam:0xB51E43CeCAB8A42cD6225e16C9C3a3ba1A76871A", "gasZipChainId": 28 }, "moonriver": { - "name": "Moonriver", + "name": "moonriver", "chainId": 1285, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "MOVR", @@ -388,10 +428,11 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.moonriver.multisig.moonbeam.network/api", "safeAddress": "0xfC78B018B4daD77351095f00D92934A9A851DA34", + "safeWebUrl": "https://multisig.moonbeam.network/transactions/queue?safe=mriver:0xfC78B018B4daD77351095f00D92934A9A851DA34", "gasZipChainId": 29 }, "optimism": { - "name": "Optimism", + "name": "optimism", "chainId": 10, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -405,10 +446,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-optimism.safe.global/api", "safeAddress": "0xa8892eA3fdDeF2aa8AfB1E3643a3284f978A5114", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=oeth:0xa8892eA3fdDeF2aa8AfB1E3643a3284f978A5114", "gasZipChainId": 55 }, "opbnb": { - "name": "OP BNB", + "name": "opbnb", "chainId": 204, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "BNB", @@ -420,12 +462,13 @@ "explorerUrl": "https://opbnb.bscscan.com/", "explorerApiUrl": "", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", - "safeApiUrl": "", - "safeAddress": "", + "safeApiUrl": "https://safe-transaction-opbnb-mainnet.bnbchain.org/api", + "safeAddress": "0xaAD94196680Edb94B421bb5B1E1A0B27db686C72", + "safeWebUrl": "https://multisig.bnbchain.org/transactions/queue?safe=opbnb:0xaAD94196680Edb94B421bb5B1E1A0B27db686C72", "gasZipChainId": 58 }, "polygon": { - "name": "Polygon", + "name": "polygon", "chainId": 137, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "MATIC", @@ -439,10 +482,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-polygon.safe.global/api", "safeAddress": "0x8BCC385948C73736423D38cc567cFEdE0F1826A3", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=matic:0x8BCC385948C73736423D38cc567cFEdE0F1826A3", "gasZipChainId": 17 }, "polygonzkevm": { - "name": "Polygon zkEVM", + "name": "polygonzkevm", "chainId": 1101, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -456,10 +500,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-zkevm.safe.global/api", "safeAddress": "0x9575B9fC42dec56D3772B3df5DA047a1f1D55582", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=zkevm:0x9575B9fC42dec56D3772B3df5DA047a1f1D55582", "gasZipChainId": 52 }, "rootstock": { - "name": "Rootstock", + "name": "rootstock", "chainId": 30, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "RBTC", @@ -473,10 +518,11 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.safe.rootstock.io/api", "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", + "safeWebUrl": "https://safe.rootstock.io/transactions/queue?safe=rsk:0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", "gasZipChainId": 254 }, "scroll": { - "name": "zkScroll", + "name": "scroll", "chainId": 534352, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -490,10 +536,11 @@ "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-scroll.safe.global/api", "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", + "safeWebUrl": "https://app.safe.global/transactions/queue?safe=scr:0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", "gasZipChainId": 41 }, "sei": { - "name": "Sei Network", + "name": "sei", "chainId": 1329, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "SEI", @@ -507,10 +554,11 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.sei-safe.protofire.io/api", "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", + "safeWebUrl": "https://sei-safe.protofire.io/transactions/queue?safe=sei:0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", "gasZipChainId": 246 }, "taiko": { - "name": "Taiko", + "name": "taiko", "chainId": 167000, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -524,10 +572,29 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.safe.taiko.xyz/api", "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", + "safeWebUrl": "https://safe.taiko.xyz/transactions/queue?safe=tko-mainnet:0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", "gasZipChainId": 249 }, + "worldchain": { + "name": "World Chain", + "chainId": 480, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", + "status": "inactive", + "type": "mainnet", + "rpcUrl": "https://worldchain-mainnet.gateway.tenderly.co", + "verificationType": "etherscan", + "explorerUrl": "https://worldscan.org", + "explorerApiUrl": "https://api.worldscan.org/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://safe-transaction-worldchain.safe.global/api", + "safeAddress": "0xa6E64bC059ddAa72ec374C50B1A5c6b3a27d64Ce", + "safeWebUrl": "https://app.safe.global/home?safe=wc:0xa6E64bC059ddAa72ec374C50B1A5c6b3a27d64Ce", + "gasZipChainId": 269 + }, "xlayer": { - "name": "X Layer", + "name": "xlayer", "chainId": 196, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "OKB", @@ -541,10 +608,11 @@ "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://safe-transaction-xlayer.safe.global/api", "safeAddress": "0x3fD21B437b5E0a903A8376D33824F9BA658756C2", + "safeWebUrl": "https://app.safe.global/home?chain=oeth&safe=xlayer:0x3fD21B437b5E0a903A8376D33824F9BA658756C2", "gasZipChainId": 146 }, "zksync": { - "name": "zkSync Era Mainnet", + "name": "zksync", "chainId": 324, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -558,10 +626,11 @@ "multicallAddress": "0xF9cda624FBC7e059355ce98a31693d299FACd963", "safeApiUrl": "https://safe-transaction-zksync.safe.global/api", "safeAddress": "0x02f1272aEaCaf7BD8b30278bc2AA381Cc623A744", + "safeWebUrl": "https://app.safe.global/home?chain=oeth&safe=zksync:0x02f1272aEaCaf7BD8b30278bc2AA381Cc623A744", "gasZipChainId": 51 }, "localanvil": { - "name": "Local Anvil (temporary Foundry test network)", + "name": "localanvil", "chainId": 31337, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", @@ -575,6 +644,7 @@ "multicallAddress": "", "safeApiUrl": "", "safeAddress": "", + "safeWebUrl": "", "gasZipChainId": 0 } } \ No newline at end of file diff --git a/config/permit2Proxy.json b/config/permit2Proxy.json new file mode 100644 index 000000000..c4ac60ac2 --- /dev/null +++ b/config/permit2Proxy.json @@ -0,0 +1,31 @@ +{ + "mainnet": "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "arbitrum": "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "aurora": "", + "avalanche": "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "base": "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "blast": "0x000000000022d473030f116ddee9f6b43ac78ba3", + "boba": "", + "bsc": "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "celo": "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "fantom": "", + "fraxtal": "", + "fuse": "", + "gnosis": "", + "gravity": "", + "immutablezkevm": "", + "linea": "", + "mantle": "", + "metis": "", + "mode": "", + "moonbeam": "", + "moonriver": "", + "optimism": "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "polygon": "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "polygonzkevm": "", + "rootstock": "", + "scroll": "", + "sei": "", + "taiko": "", + "zksync": "0x0000000000225e31d15943971f47ad3022f714fa" +} \ No newline at end of file diff --git a/config/sigs.json b/config/sigs.json index 620ec1025..d927ab4bf 100644 --- a/config/sigs.json +++ b/config/sigs.json @@ -8,7 +8,6 @@ "0xc6aabf84", "0xf8be52e1", "0x1eacd35f", - "0x91695586", "0xa5be382e", "0xfc374157", "0x18cbafe5", @@ -57,7 +56,6 @@ "0x414bf389", "0xf28c0498", "0xdb3e2198", - "0xbc80f1a8", "0x84bd6d29", "0x62e238bb", "0x3eca9c0a", @@ -65,7 +63,6 @@ "0x5a099843", "0xe5d7bde6", "0x12aa3caf", - "0xe449022e", "0xbc80f1a8", "0x0502b1c5", "0xf78dc253", @@ -149,6 +146,12 @@ "0x47f8bd41", "0x6678ec1f", "0x30eef8bd", - "0x4dcebcba" + "0x4dcebcba", + "0x8b71ae6c", + "0xc4af5a74", + "0x03b87e5f", + "0x0d5f0e3b", + "0x08298b5a", + "0xff84aafa" ] } diff --git a/config/stargate.json b/config/stargate.json index f79202d0f..2a659494b 100644 --- a/config/stargate.json +++ b/config/stargate.json @@ -23,6 +23,7 @@ "moonriver": "0x1a44076050125825900e736c501f859c50fE728c", "nova": "0x1a44076050125825900e736c501f859c50fE728c", "okx": "0x1a44076050125825900e736c501f859c50fE728c", + "opbnb": "0x0000000000000000000000000000000000000000", "optimism": "0x1a44076050125825900e736c501f859c50fE728c", "polygon": "0x1a44076050125825900e736c501f859c50fE728c", "polygonzkevm": "0x1a44076050125825900e736c501f859c50fE728c", @@ -30,6 +31,7 @@ "kaia": "0x0000000000000000000000000000000000000000", "velas": "0x0000000000000000000000000000000000000000", "linea": "0x1a44076050125825900e736c501f859c50fE728c", + "lisk": "0x0000000000000000000000000000000000000000", "metis": "0x1a44076050125825900e736c501f859c50fE728c", "mode": "0x1a44076050125825900e736c501f859c50fE728c", "mantle": "0x1a44076050125825900e736c501f859c50fE728c", @@ -54,6 +56,7 @@ "kaia": "0x16F3F98D82d965988E6853681fD578F4d719A1c0", "scroll": "0x4e422b0acb2bd7e3ac70b5c0e5eb806e86a94038", "optimism": "0xf1fcb4cbd57b67d683972a59b6a7b1e2e8bf27e6", + "opbnb": "0x0000000000000000000000000000000000000000", "base": "0x5634c4a5fed09819e3c46d86a965dd9447d86e47", "avalanche": "0x17e450be3ba9557f2378e20d64ad417e59ef9a34", "aurora": "0x5f688f563dc16590e570f97b542fa87931af2fed", @@ -211,6 +214,7 @@ "moonriver": "0x0000000000000000000000000000000000000000", "nova": "0x0000000000000000000000000000000000000000", "okx": "0x0000000000000000000000000000000000000000", + "opbnb": "0x0000000000000000000000000000000000000000", "optimism": "0xeCc19E177d24551aA7ed6Bc6FE566eCa726CC8a9", "polygon": "0xeCc19E177d24551aA7ed6Bc6FE566eCa726CC8a9", "polygonzkevm": "0x0000000000000000000000000000000000000000", @@ -221,12 +225,14 @@ "bsc-testnet": "0x0000000000000000000000000000000000000000", "lineatest": "0x0000000000000000000000000000000000000000", "linea": "0xeCc19E177d24551aA7ed6Bc6FE566eCa726CC8a9", + "lisk": "0x0000000000000000000000000000000000000000", "metis": "0xeCc19E177d24551aA7ed6Bc6FE566eCa726CC8a9", "mode": "0x0000000000000000000000000000000000000000", "mantle": "0x296F55F8Fb28E498B858d0BcDA06D955B2Cb3f97", "scroll": "0x0000000000000000000000000000000000000000", "xlayer": "0x0000000000000000000000000000000000000000", "taiko": "0x0000000000000000000000000000000000000000", + "worldchain": "0x0000000000000000000000000000000000000000", "localanvil": "0x0000000000000000000000000000000000000000", "mumbai": "0x0000000000000000000000000000000000000000", "sepolia": "0x0000000000000000000000000000000000000000" @@ -262,6 +268,7 @@ "bsc-testnet": "0x0000000000000000000000000000000000000000", "lineatest": "0x0000000000000000000000000000000000000000", "linea": "0x2F6F07CDcf3588944Bf4C42aC74ff24bF56e7590", + "lisk": "0x0000000000000000000000000000000000000000", "mantle": "0x2F6F07CDcf3588944Bf4C42aC74ff24bF56e7590", "metis": "0x2F6F07CDcf3588944Bf4C42aC74ff24bF56e7590", "scroll": "0x36d4686e19c052787D7f24E6913cEbC025714895", @@ -271,4 +278,4 @@ "mumbai": "0x817436a076060D158204d955E5403b6Ed0A5fac0", "sepolia": "0x0000000000000000000000000000000000000000" } -} +} \ No newline at end of file diff --git a/config/symbiosis.json b/config/symbiosis.json index cc769bddf..ed09db678 100644 --- a/config/symbiosis.json +++ b/config/symbiosis.json @@ -35,6 +35,10 @@ "metaRouter": "0xcE8f24A58D85eD5c5A6824f7be1F8d4711A0eb4C", "gateway": "0xAdB2d3b711Bb8d8Ea92ff70292c466140432c278" }, + "gravity": { + "metaRouter": "0xcE8f24A58D85eD5c5A6824f7be1F8d4711A0eb4C", + "gateway": "0xAdB2d3b711Bb8d8Ea92ff70292c466140432c278" + }, "linea": { "metaRouter": "0x9A31bAC4b3B958C835C243800B474818D04393dd", "gateway": "0x83f71AabdDBb9F0E3B6462Cc7635b6fFAD0f2f2e" @@ -83,4 +87,4 @@ "metaRouter": "0x7057aB3fB2BeE9c18e0cDe4240DE4ff7f159E365", "gateway": "0xa0079829B9F1Edc5DD0DE3eC104f281745C4bD81" } -} \ No newline at end of file +} diff --git a/config/tokenwrapper.json b/config/tokenwrapper.json index 826697c45..471e6039a 100644 --- a/config/tokenwrapper.json +++ b/config/tokenwrapper.json @@ -1,46 +1,40 @@ { - "128": "0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f", + "comment": "Note: this file is generated by a backend script, do not change it manually!", "mainnet": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "goerli": "0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6", "optimism": "0x4200000000000000000000000000000000000006", "cronos": "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", + "rootstock": "0x542fda317318ebf1d3deaf76e0b632741a7e677d", "bsc": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", - "okx": "0x8f8526dbfd6e38e3d8307702ca8469bae6c56c15", - "bsc-testnet": "0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd", "gnosis": "0xe91d153e0b41518a2ce8dd3d7944fa863463a97d", - "gravity": "0xBB859E225ac8Fb6BE1C7e38D87b767e95Fef0EbD", "velas": "0xc579d1f3cf86749e05cd06f7ade17856c2ce3126", "fuse": "0x0be9e53fd7edac9f859882afdda116645287c629", "polygon": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", + "xlayer": "0xe538905cf8410324e03a5a23c1c177a474d59b2b", "fantom": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", "fraxtal": "0xfc00000000000000000000000000000000000006", "boba": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000", "zksync": "0x5aea5775959fbc2557cc8789bc1bf90a239d9a91", - "optimismTestnet": "0x4200000000000000000000000000000000000006", "metis": "0x75cb093E4D61d2A2e65D8e0BBb01DE8d89b53481", "polygonzkevm": "0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9", - "kaia": "0x19aac5f612f524b754ca7e7c41cbfa2e981a4432", "moonbeam": "0xacc15dc74880c9944775448304b263d191c6077f", "moonriver": "0x98878b06940ae243284ca214f92bb71a2b032b8a", - "mode": "0x4200000000000000000000000000000000000006", + "sei": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7", + "gravity": "0xBB859E225ac8Fb6BE1C7e38D87b767e95Fef0EbD", + "mantle": "0x78c1b0C915c4FAA5FffA6CAbf0219DA63d7f4cb8", + "kaia": "0x19aac5f612f524b754ca7e7c41cbfa2e981a4432", "base": "0x4200000000000000000000000000000000000006", "evmos": "0xd4949664cd82660aae99bedc034a0dea8a0bd517", + "immutablezkevm": "0x3a0c2ba54d6cbd3121f01b96dfd20e99d1696c9d", + "mode": "0x4200000000000000000000000000000000000006", "arbitrum": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", "celo": "0x471ece3750da237f93b8e339c536989b8978a438", "avalanche": "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", - "lineatest": "0x2C1b868d6596a18e32E61B901E4060C872647b6C", "linea": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", - "mumbai": "0x9c3c9283d3e44854697cd22d3faa240cfb032889", - "arbitrumTestnet": "0x42da9eE191833756c618778145A86E6709f70C9b", - "aurora": "0xc9bdeed33cd01541e1eed10f90519d2c06fe3feb", - "harmony": "0xcf664087a5bb0237a0bad6742852ec6c8d69a27a", - "harmonyTestnet": "0x7466d7d0c21fa05f32f5a0fa27e12bdc06348ce2", - "scroll": "0x5300000000000000000000000000000000000004", - "mantle": "0x78c1b0C915c4FAA5FffA6CAbf0219DA63d7f4cb8", + "lisk": "0x4200000000000000000000000000000000000006", "blast": "0x4300000000000000000000000000000000000004", - "rootstock": "0x542fda317318ebf1d3deaf76e0b632741a7e677d", - "sei": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7", - "xlayer": "0xe538905cf8410324e03a5a23c1c177a474d59b2b", + "worldchain": "0x4200000000000000000000000000000000000006", "taiko": "0xA51894664A773981C6C112C43ce576f315d5b1B6", - "immutablezkevm": "0x3a0c2ba54d6cbd3121f01b96dfd20e99d1696c9d" -} + "scroll": "0x5300000000000000000000000000000000000004", + "aurora": "0xc9bdeed33cd01541e1eed10f90519d2c06fe3feb", + "harmony": "0xcf664087a5bb0237a0bad6742852ec6c8d69a27a" +} \ No newline at end of file diff --git a/deployments/_deployments_log_file.json b/deployments/_deployments_log_file.json index d8c1a4a03..0e75c2db1 100644 --- a/deployments/_deployments_log_file.json +++ b/deployments/_deployments_log_file.json @@ -513,12 +513,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0xaD50118509eB4c8e3E39a370151B0fD5D5957013", + "ADDRESS": "0x7c76E992B0E65e4AFa657f61bf9fF4b9aeBf3F65", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-09-18 11:28:56", + "TIMESTAMP": "2024-10-07 13:20:56", "CONSTRUCTOR_ARGS": "0x", "SALT": "", - "VERIFIED": "false" + "VERIFIED": "true" } ] } @@ -690,6 +690,34 @@ } ] } + }, + "worldchain": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0x57FdfF2e36De6c8a8Cde297B150Ae291132Eae8d", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:28.756Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0x57FdfF2e36De6c8a8Cde297B150Ae291132Eae8d", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:23.651Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "DiamondLoupeFacet": { @@ -1193,12 +1221,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0xc21a00a346d5b29955449Ca912343a3bB4c5552f", + "ADDRESS": "0x62E3c4539eBe661643319f46181Ed6C7d11AaF95", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-09-18 11:29:11", + "TIMESTAMP": "2024-10-07 13:14:30", "CONSTRUCTOR_ARGS": "0x", "SALT": "", - "VERIFIED": "false" + "VERIFIED": "true" } ] } @@ -1370,6 +1398,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xA1a4d577709dC4A70CA38F1D41562fab3aD09D3f", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:28.954Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xA1a4d577709dC4A70CA38F1D41562fab3aD09D3f", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:24.128Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "OwnershipFacet": { @@ -1872,12 +1928,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0x6faA6906b9e4A59020e673910105567e809789E0", + "ADDRESS": "0x6e9A2579c67686C6Bb069b663B5d2fFF12dfB582", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-09-18 11:29:34", + "TIMESTAMP": "2024-10-07 13:23:12", "CONSTRUCTOR_ARGS": "0x", "SALT": "", - "VERIFIED": "false" + "VERIFIED": "true" } ] } @@ -2049,6 +2105,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x81Ae738700D8f1e5BB2A200584174cDf17Fb5455", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:29.159Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x81Ae738700D8f1e5BB2A200584174cDf17Fb5455", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:24.830Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "DexManagerFacet": { @@ -2742,6 +2826,16 @@ "SALT": "", "VERIFIED": "false" } + ], + "1.0.1": [ + { + "ADDRESS": "0x082Bc525FdFa4739c5042060e8f72291CEfe6422", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-07 13:25:48", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -3006,6 +3100,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0xE154389c1bAE241F220661131b7AfDc1514C55c7", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:29.361Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0xE154389c1bAE241F220661131b7AfDc1514C55c7", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:25.125Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "AccessManagerFacet": { @@ -3482,12 +3604,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0x77A13abB679A0DAFB4435D1Fa4cCC95D1ab51cfc", + "ADDRESS": "0xfC25728DBD6C4FE500d586CeA632a9c2CAa4adF3", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-09-18 11:30:02", + "TIMESTAMP": "2024-10-07 13:26:40", "CONSTRUCTOR_ARGS": "0x", "SALT": "", - "VERIFIED": "false" + "VERIFIED": "true" } ] } @@ -3686,6 +3808,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x314E1E760316050B0D6338bCf3d689b8D301F593", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:29.567Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x314E1E760316050B0D6338bCf3d689b8D301F593", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:25.519Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "WithdrawFacet": { @@ -4161,12 +4311,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0x711e80A9c1eB906d9Ae9d37E5432E6E7aCeEdA0B", + "ADDRESS": "0x5486c27f34C0132Ccc77d4ACb8635C2e12b70e97", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-09-18 11:30:53", + "TIMESTAMP": "2024-10-07 13:24:54", "CONSTRUCTOR_ARGS": "0x", "SALT": "", - "VERIFIED": "false" + "VERIFIED": "true" } ] } @@ -4352,6 +4502,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xfA009cd56d35AE3BbdF975135b0BAE9b403c7da1", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:29.774Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xfA009cd56d35AE3BbdF975135b0BAE9b403c7da1", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:25.844Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "PeripheryRegistryFacet": { @@ -4840,12 +5018,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0x69cb467EfD8044ac9eDB88F363309ab1cbFA0A15", + "ADDRESS": "0x864D5B4DA52E8E8851479C964c250147f9FfFba0", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-09-18 11:31:23", + "TIMESTAMP": "2024-10-07 13:27:32", "CONSTRUCTOR_ARGS": "0x", "SALT": "", - "VERIFIED": "false" + "VERIFIED": "true" } ] } @@ -5031,6 +5209,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x54ECfbAaeb49c864a9c45C70B785ca6C70c66453", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:29.981Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x54ECfbAaeb49c864a9c45C70B785ca6C70c66453", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:26.132Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "LiFiDiamond": { @@ -5685,6 +5891,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:31.204Z", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f11121df7256c40339393b0fb045321022ce4400000000000000000000000057fdff2e36de6c8a8cde297b150ae291132eae8d", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:27.951Z", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f11121df7256c40339393b0fb045321022ce4400000000000000000000000057fdff2e36de6c8a8cde297b150ae291132eae8d", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "LiFiDiamondImmutable": { @@ -7205,12 +7439,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0xE0c5e721b40D54f2aA09418B1237db9d88220C73", + "ADDRESS": "0x3E085Dd54bdD7DEd0FcDCfb4a24CEb0e0635bDE2", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-09-18 11:32:20", + "TIMESTAMP": "2024-10-07 13:33:28", "CONSTRUCTOR_ARGS": "0x", "SALT": "", - "VERIFIED": "false" + "VERIFIED": "true" } ] } @@ -7396,6 +7630,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xd2B3b3605e630232c13111458Ae3a97d13c8F477", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:30.182Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xd2B3b3605e630232c13111458Ae3a97d13c8F477", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:26.451Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "HopFacetOptimized": { @@ -8615,6 +8877,16 @@ "SALT": "", "VERIFIED": "false" } + ], + "1.0.1": [ + { + "ADDRESS": "0xfB595B4DeDA77fFce1B1AB7D6797121fbD10dDDa", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-07 13:32:20", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -8842,6 +9114,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x14Dd70456Bfe4Cd8b605f7A0d24b3A74aCe99713", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:30.592Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x14Dd70456Bfe4Cd8b605f7A0d24b3A74aCe99713", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:26.777Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "MultichainFacet": { @@ -10517,12 +10817,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", + "ADDRESS": "0x9cb7bE51524DA96806EC38a9A7dDC58608650243", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-09-18 11:38:38", - "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f11121df7256c40339393b0fb045321022ce44", + "TIMESTAMP": "2024-10-07 13:51:24", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", "SALT": "", - "VERIFIED": "true" + "VERIFIED": "false" } ] } @@ -10708,22 +11008,50 @@ } ] } - } - }, - "Executor": { - "optimism": { + }, + "worldchain": { "production": { "1.0.0": [ { - "ADDRESS": "0x2120c7A5CCf73d6Fb5C7e9B2A0d4B3A4f587E7a4", + "ADDRESS": "0x98750e70Cf1313D9702f0f57D399DD0bA05d16E0", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-04-12 11:11:25", - "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f11121df7256c40339393b0fb045321022ce440000000000000000000000000654eba982ec082036a3d0f59964d302f1ba5cda", - "VERIFIED": "true" + "TIMESTAMP": "2024-12-02T07:45:32.025Z", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f11121df7256c40339393b0fb045321022ce44", + "SALT": "", + "VERIFIED": true } - ], - "2.0.0": [ - { + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x98750e70Cf1313D9702f0f57D399DD0bA05d16E0", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:29.375Z", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f11121df7256c40339393b0fb045321022ce44", + "SALT": "", + "VERIFIED": true + } + ] + } + } + }, + "Executor": { + "optimism": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x2120c7A5CCf73d6Fb5C7e9B2A0d4B3A4f587E7a4", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2023-04-12 11:11:25", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f11121df7256c40339393b0fb045321022ce440000000000000000000000000654eba982ec082036a3d0f59964d302f1ba5cda", + "VERIFIED": "true" + } + ], + "2.0.0": [ + { "ADDRESS": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", "OPTIMIZER_RUNS": "1000000", "TIMESTAMP": "2023-07-25 22:08:16", @@ -11371,12 +11699,12 @@ "production": { "2.0.0": [ { - "ADDRESS": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", + "ADDRESS": "0xDaF30Ca8fbB0f6cE6FF21fe33932eE786CC77646", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-09-18 11:39:03", - "CONSTRUCTOR_ARGS": "0x0000000000000000000000005741a7ffe7c39ca175546a54985fa79211290b51", + "TIMESTAMP": "2024-10-07 13:53:06", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000009cb7be51524da96806ec38a9a7ddc58608650243", "SALT": "", - "VERIFIED": "false" + "VERIFIED": "true" } ] } @@ -11562,6 +11890,34 @@ } ] } + }, + "worldchain": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xd9318fFE1EbbfA71049A443e623Be566067C9D6B", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:32.229Z", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000098750e70cf1313d9702f0f57d399dd0ba05d16e0", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xd9318fFE1EbbfA71049A443e623Be566067C9D6B", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:29.736Z", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000098750e70cf1313d9702f0f57d399dd0ba05d16e0", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "FeeCollector": { @@ -12026,12 +12382,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0x44Ff747185C9Df233D07536E08341ff624896164", + "ADDRESS": "0x6A2420650139854F17964b8C3Bb60248470aB57E", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-09-18 11:39:17", + "TIMESTAMP": "2024-10-07 13:54:18", "CONSTRUCTOR_ARGS": "0x00000000000000000000000008647cc950813966142a416d40c382e2c5db73bb", "SALT": "", - "VERIFIED": "false" + "VERIFIED": "true" } ] } @@ -12217,6 +12573,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x50D5a8aCFAe13Dceb217E9a071F6c6Bd5bDB4155", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:32.433Z", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000008647cc950813966142a416d40c382e2c5db73bb", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x50D5a8aCFAe13Dceb217E9a071F6c6Bd5bDB4155", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:30.068Z", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000008647cc950813966142a416d40c382e2c5db73bb", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "Receiver": { @@ -13233,6 +13617,16 @@ "SALT": "", "VERIFIED": "false" } + ], + "2.0.2": [ + { + "ADDRESS": "0x423d018777dE97059129E046BBc1026548553A20", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-07 13:59:01", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000daf30ca8fbb0f6ce6ff21fe33932ee786cc7764600000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -13417,6 +13811,34 @@ } ] } + }, + "worldchain": { + "production": { + "2.0.2": [ + { + "ADDRESS": "0xD9e3837E42198aaFc13cb51536d7c31f590aD6Fd", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:32.639Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9318ffe1ebbfa71049a443e623be566067c9d6b00000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "2.0.2": [ + { + "ADDRESS": "0xD9e3837E42198aaFc13cb51536d7c31f590aD6Fd", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:30.366Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9318ffe1ebbfa71049a443e623be566067c9d6b00000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "ServiceFeeCollector": { @@ -18673,6 +19095,16 @@ "SALT": "", "VERIFIED": "false" } + ], + "1.1.0": [ + { + "ADDRESS": "0x8Fb506A8040243c1Bc9AC779cF311839176692c3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-07 13:36:02", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -18955,6 +19387,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.1.0": [ + { + "ADDRESS": "0xe6C6A35684308f2DaadbeeA50B62CFEaAFaa407E", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:31.003Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.1.0": [ + { + "ADDRESS": "0xe6C6A35684308f2DaadbeeA50B62CFEaAFaa407E", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:27.568Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "CalldataVerificationFacet": { @@ -19636,6 +20096,30 @@ ] } }, + "opbnb": { + "production": { + "1.1.1": [ + { + "ADDRESS": "0x9E4f2474Cbbe682c1d050D48A12486100eDA2EE3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-07 13:37:01", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ], + "1.1.2": [ + { + "ADDRESS": "0x96f213947D724766d9016f86799042744070Fbd0", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-20 09:24:11", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, "cronos": { "production": { "1.1.2": [ @@ -19649,6 +20133,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.1.2": [ + { + "ADDRESS": "0x1feB868BF64AdC552E051fB7387681F78b988a81", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:30.799Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.1.2": [ + { + "ADDRESS": "0x1feB868BF64AdC552E051fB7387681F78b988a81", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:27.218Z", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "LiFuelFeeCollector": { @@ -20236,6 +20748,16 @@ "SALT": "", "VERIFIED": "false" } + ], + "1.0.1": [ + { + "ADDRESS": "0xEc41F702d36b43a1E1d017Cb4da92F431dFA7a0E", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-07 14:01:16", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000c71284231a726a18ac85c94d75f9fe17a185beaf", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -20478,6 +21000,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x8f023b4193a6b18C227B4a755f8e28B3D30Ef9a1", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:32.845Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000c71284231a726a18ac85c94d75f9fe17a185beaf", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x8f023b4193a6b18C227B4a755f8e28B3D30Ef9a1", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:30.746Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000c71284231a726a18ac85c94d75f9fe17a185beaf", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "AcrossFacetPacked": { @@ -21193,6 +21743,20 @@ } ] } + }, + "gravity": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xbb44687E13B0DdB11682FA9299F5F982Ba3cc029", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-09 17:40:50", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000ce8f24a58d85ed5c5a6824f7be1f8d4711a0eb4c000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c278", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "MayanBridgeFacet": { @@ -21709,6 +22273,20 @@ ] } }, + "opbnb": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x077A38b812e57E2e76849954c880E1a2f5e0A68d", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-07 14:13:26", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000004200000000000000000000000000000000000006", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, "cronos": { "production": { "1.0.0": [ @@ -21722,6 +22300,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x603a538477d44064eA5A5d8C345b4Ff6fca1142a", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:33.048Z", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000004200000000000000000000000000000000000006", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x603a538477d44064eA5A5d8C345b4Ff6fca1142a", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:31.141Z", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000004200000000000000000000000000000000000006", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "GasRebateDistributor": { @@ -22363,6 +22969,20 @@ ] } }, + "opbnb": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x4E1D2308e11C06c93700FfFdD5b658D2d35a1e15", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-07 13:34:46", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000000000000000000000000000000000000000000000", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, "cronos": { "production": { "1.0.1": [ @@ -22376,11 +22996,39 @@ } ] } - } - }, - "StargateFacetV2": { - "polygon": { - "staging": { + }, + "worldchain": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0xBa713B18c806EcdEEE49FAec623dE2D872192872", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-19 10:35:41", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000000000000000000000000000000000000000000000", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "lisk": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0xBa713B18c806EcdEEE49FAec623dE2D872192872", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 10:30:44", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000000000000000000000000000000000000000000000", + "SALT": "", + "VERIFIED": "true" + } + ] + } + } + }, + "StargateFacetV2": { + "polygon": { + "staging": { "1.0.0": [ { "ADDRESS": "0xeb3f9490d8cbD0C34C0642a8d0495e5E0B0745AA", @@ -23114,6 +23762,16 @@ "SALT": "", "VERIFIED": "false" } + ], + "1.2.0": [ + { + "ADDRESS": "0xfdE9CE4e17B650efdcA13d524F132876700d806f", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-17 07:16:41", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003b6211981d47fb6375e0125a6a401830616f7906", + "SALT": "20241016", + "VERIFIED": "true" + } ] } }, @@ -23128,6 +23786,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.3.0": [ + { + "ADDRESS": "0xEcf953290D36fA96236356e171044DC802EeC598", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-08 06:54:16", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000029dacdf7ccadf4ee67c923b4c22255a4b2494ed7", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -23184,6 +23852,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.1.0": [ + { + "ADDRESS": "0xE38621607316cB43367c134C65dca3f41B61250f", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-11 15:46:23", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d38743b48d26743c0ec6898d699394fbc94657ee", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -23310,6 +23988,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.5.0": [ + { + "ADDRESS": "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-22 12:43:30", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d38743b48d26743c0ec6898d699394fbc94657ee", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -23366,6 +24054,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.5.0": [ + { + "ADDRESS": "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-22 12:57:37", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d38743b48d26743c0ec6898d699394fbc94657ee", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -23439,7 +24137,7 @@ ] } }, - "cronos": { + "opbnb": { "production": { "1.0.0": [ { @@ -23450,6 +24148,44 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.4.0": [ + { + "ADDRESS": "0xf88F6948C8AFf60c0B011f3175CDF459c66Ed035", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-14 11:54:19", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d38743b48d26743c0ec6898d699394fbc94657ee", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:33.459Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d38743b48d26743c0ec6898d699394fbc94657ee", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:31.571Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d38743b48d26743c0ec6898d699394fbc94657ee", + "SALT": "", + "VERIFIED": true + } ] } } @@ -23964,6 +24700,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0xF6Eff8df65Fc4a4c1528761Aa727b5471956A844", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:31.409Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000d38743b48d26743c0ec6898d699394fbc94657ee", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0xF6Eff8df65Fc4a4c1528761Aa727b5471956A844", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:28.266Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000d38743b48d26743c0ec6898d699394fbc94657ee", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "AcrossFacetV3": { @@ -24091,9 +24855,9 @@ "production": { "1.0.0": [ { - "ADDRESS": "0x80b96CA9B47aCD6c2a888128fEb9b0F4Ea518FEc", + "ADDRESS": "0x2531368BAca8c5E85031FC0a9a2f148b65da389A", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2024-09-02 15:45:40", + "TIMESTAMP": "2024-11-15 11:54:09", "CONSTRUCTOR_ARGS": "0x0000000000000000000000007e63a5f1a8f0b4d0934b2f2327daed3f6bb2ee75000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f", "SALT": "", "VERIFIED": "true" @@ -24142,6 +24906,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xB5dD83183fD7CCF859b227CA83663a034d5B2f92", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:31.618Z", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000009aea4b2242abc8bb4bb78d537a67a245a7bec640000000000000000000000004200000000000000000000000000000000000006", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xB5dD83183fD7CCF859b227CA83663a034d5B2f92", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:28.661Z", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000009552a0a6624a23b848060ae5901659cdda1f83f80000000000000000000000004200000000000000000000000000000000000006", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "ReceiverAcrossV3": { @@ -24319,6 +25111,34 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xD263a23453CB9A77860ed6393A2B9a55AF70EFAb", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:33.646Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f000000000000000000000000d9318ffe1ebbfa71049a443e623be566067c9d6b00000000000000000000000009aea4b2242abc8bb4bb78d537a67a245a7bec6400000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xD263a23453CB9A77860ed6393A2B9a55AF70EFAb", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:32.000Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f000000000000000000000000d9318ffe1ebbfa71049a443e623be566067c9d6b0000000000000000000000009552a0a6624a23b848060ae5901659cdda1f83f800000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": true + } + ] + } } }, "AcrossFacetPackedV3": { @@ -24448,9 +25268,9 @@ "production": { "1.0.0": [ { - "ADDRESS": "0xAfEB7e1DA0Ff4DcD0dbC4De3F51a933E2054B0ed", + "ADDRESS": "0x922D1c381Cb5b0AFAAe9E7C86ed34FDE337766b0", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2024-09-12 15:15:00", + "TIMESTAMP": "2024-11-15 11:55:31", "CONSTRUCTOR_ARGS": "0x0000000000000000000000007e63a5f1a8f0b4d0934b2f2327daed3f6bb2ee75000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f00000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", "SALT": "", "VERIFIED": "true" @@ -24485,6 +25305,826 @@ } ] } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x90ADbFc03002aaA3d9FEdf2517D593CfD93e6c57", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T07:45:31.821Z", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000009aea4b2242abc8bb4bb78d537a67a245a7bec64000000000000000000000000420000000000000000000000000000000000000600000000000000000000000011f11121df7256c40339393b0fb045321022ce44", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x90ADbFc03002aaA3d9FEdf2517D593CfD93e6c57", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-02T08:02:29.037Z", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000009552a0a6624a23b848060ae5901659cdda1f83f8000000000000000000000000420000000000000000000000000000000000000600000000000000000000000011f11121df7256c40339393b0fb045321022ce44", + "SALT": "", + "VERIFIED": true + } + ] + } + } + }, + "Permit2Proxy": { + "arbitrum": { + "staging": { + "1.0.0": [ + { + "ADDRESS": "0x6FC01BC9Ff6Cdab694Ec8Ca41B21a2F04C8c37E5", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-21 09:31:13", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000d3b2b0ac0afdd0d166a495f5e9fca4ecc715a782000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000009e606d0d2bba344b911e2f4eab95d9235a83fe15", + "SALT": "", + "VERIFIED": "true" + } + ] + }, + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 11:24:27", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000009e606d0d2bba344b911e2f4eab95d9235a83fe15", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "polygon": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 11:26:53", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000008bcc385948c73736423d38cc567cfede0f1826a3", + "SALT": "", + "VERIFIED": "true" + } + ] + }, + "staging": { + "1.0.0": [ + { + "ADDRESS": "0x6FC01BC9Ff6Cdab694Ec8Ca41B21a2F04C8c37E5", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-21 09:32:45", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000d3b2b0ac0afdd0d166a495f5e9fca4ecc715a782000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000008bcc385948c73736423d38cc567cfede0f1826a3", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "optimism": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 11:25:40", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000a8892ea3fddef2aa8afb1e3643a3284f978a5114", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "mainnet": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 11:10:40", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba300000000000000000000000037347dd595c49212c5fc2d95ea10d1085896f51e", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "avalanche": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 12:15:16", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba300000000000000000000000027d4eb2854d93a1a7df8e2aed1a535b080a6f6e4", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "base": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 12:26:53", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000001f6974c11b833eb52ea07e0b442510165d87d82e", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "blast": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 12:38:05", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000df61270fdc1a892874fd3c0143a0a4cba74f4ef1", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "bsc": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 12:39:31", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba300000000000000000000000020b6b31d76e054c3e4de6154feca385ca58c7c15", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "celo": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 13:03:21", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000a89a87986e8ee1ac8fdacc5ac91627010ec9f772", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "zksync": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6275f6631c955DC5dA9fBe8Dc7f24a3A5919443A", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-25 13:42:32", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000341e94069f53234fe6dabef707ad4248305257150000000000000000000000000000000000225e31d15943971f47ad3022f714fa00000000000000000000000002f1272aeacaf7bd8b30278bc2aa381cc623a744", + "SALT": "", + "VERIFIED": "true" + } + ] + } + } + }, + "GasZipFacet": { + "bsc": { + "staging": { + "1.0.0": [ + { + "ADDRESS": "0xA269cb81E6bBB86683558e449cb1bAFFdb155Bfc", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-07-03 09:43:10", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000085e5fb57844be79b42997c898d177a39f328ccf0", + "SALT": "", + "VERIFIED": "true" + } + ], + "2.0.0": [ + { + "ADDRESS": "0x0DAff7e73fDb2bbaDa232A16a5BEA72463893E35", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-22 09:32:31", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + }, + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:22:00", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "mainnet": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:18:35", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "arbitrum": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:19:32", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "avalanche": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:19:48", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "base": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:20:08", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "blast": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:20:36", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "gnosis": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:22:31", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "linea": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0x75943d7305310635945736D00235d825181018f3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 16:33:11", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000a60768b03eb14d940f6c9a8553329b7f9037c91b", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "mantle": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 16:33:44", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "metis": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xb518364B2F4e480eCc64998Da12F072A63a25093", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:23:33", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "mode": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:24:55", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "optimism": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:25:37", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "polygon": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:27:27", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "scroll": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:29:08", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "xlayer": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-11 17:29:57", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "gravity": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:01:12", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000006efc6ead40786bd87a884382b6ea4bca3c985e99", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0x75943d7305310635945736D00235d825181018f3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:04:08", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "fantom": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:04:53", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000a60768b03eb14d940f6c9a8553329b7f9037c91b", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "zksync": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0x313c27Aad40c7e0A0b923b539F05617D8114566D", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-13 16:42:46", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000252fb662e4d7435d2a5ded8ec94d8932cf76c178", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "lisk": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xb40044Bf27c2448e05e1f34ED83Ca4A3DfA54D19", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-04T12:47:31.763Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000a60768b03eb14d940f6c9a8553329b7f9037c91b", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "worldchain": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xb40044Bf27c2448e05e1f34ED83Ca4A3DfA54D19", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-04 16:13:55", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762", + "SALT": "", + "VERIFIED": "true" + } + ] + } + } + }, + "GasZipPeriphery": { + "bsc": { + "staging": { + "1.0.0": [ + { + "ADDRESS": "0x46d8Aa20D5aD98927Cf885De9eBf9436E8E551c2", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-10-24 08:49:38", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc00000000000000000000000020b6b31d76e054c3e4de6154feca385ca58c7c15", + "SALT": "20241024", + "VERIFIED": "false" + } + ] + }, + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:28:56", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc00000000000000000000000020b6b31d76e054c3e4de6154feca385ca58c7c15", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "mainnet": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:27:02", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc00000000000000000000000037347dd595c49212c5fc2d95ea10d1085896f51e", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "arbitrum": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:27:13", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc0000000000000000000000009e606d0d2bba344b911e2f4eab95d9235a83fe15", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "avalanche": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:27:25", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc00000000000000000000000027d4eb2854d93a1a7df8e2aed1a535b080a6f6e4", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "base": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:27:34", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc0000000000000000000000001f6974c11b833eb52ea07e0b442510165d87d82e", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "blast": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:27:43", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc000000000000000000000000df61270fdc1a892874fd3c0143a0a4cba74f4ef1", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "fantom": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:29:11", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000a60768b03eb14d940f6c9a8553329b7f9037c91b0000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc0000000000000000000000009b325b1c43bb3c018fcdb24a64e05ef4b8b8057b", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "gnosis": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:29:24", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc0000000000000000000000002bc523875b59a1ddd03ceb1f1b28c5b0e8e6654a", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "gravity": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:29:35", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000006efc6ead40786bd87a884382b6ea4bca3c985e990000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc000000000000000000000000245b16cace8730b009c5352186dce7d73c3037a1", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "linea": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x0ec6D2eEb94541C51620830D151995fCFf83Aa74", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:14:56", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000a60768b03eb14d940f6c9a8553329b7f9037c91b000000000000000000000000caa342e4f781d63ef41e220d7622b97e66baecf3000000000000000000000000df61270fdc1a892874fd3c0143a0a4cba74f4ef1", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "mantle": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:15:29", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc000000000000000000000000a89a87986e8ee1ac8fdacc5ac91627010ec9f772", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "metis": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x799525cE72B5cc9eb310dc8c7b9e7A3128a6dA79", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:22:29", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000009e4c63c9a0ede2ca2e772ee48c819ca5cb4529ac000000000000000000000000925cd8289ac2d617f52974da8338867f3bb62d56", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "mode": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:23:06", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc000000000000000000000000df61270fdc1a892874fd3c0143a0a4cba74f4ef1", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "optimism": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:31:29", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc000000000000000000000000a8892ea3fddef2aa8afb1e3643a3284f978a5114", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "polygon": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:31:44", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc0000000000000000000000008bcc385948c73736423d38cc567cfede0f1826a3", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "scroll": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:32:50", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000006140b987d6b51fd75b66c3b07733beb5167c42fc000000000000000000000000df61270fdc1a892874fd3c0143a0a4cba74f4ef1", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x0ec6D2eEb94541C51620830D151995fCFf83Aa74", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:34:04", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc2762000000000000000000000000caa342e4f781d63ef41e220d7622b97e66baecf3000000000000000000000000a89a87986e8ee1ac8fdacc5ac91627010ec9f772", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "xlayer": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-12 11:34:56", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000002321f1a63a683a1f3634dbe1cba0d657d5f56d540000000000000000000000003fd21b437b5e0a903a8376d33824f9ba658756c2", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "zksync": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x4000f76450d9d40558fd60F66863F583B7A5BCCb", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-11-13 16:47:48", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000252fb662e4d7435d2a5ded8ec94d8932cf76c1780000000000000000000000001f683faf1e2a770aa75f7b2e92117a5c11183e9c00000000000000000000000002f1272aeacaf7bd8b30278bc2aa381cc623a744", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "lisk": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x76aE215b11797b32397d878e6f3E65081ff58b13", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-04T12:47:32.171Z", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000a60768b03eb14d940f6c9a8553329b7f9037c91b0000000000000000000000002321f1a63a683a1f3634dbe1cba0d657d5f56d5400000000000000000000000086e02d7383d6a045848b0a1a842996ac9e943113", + "SALT": "", + "VERIFIED": true + } + ] + } + }, + "worldchain": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x76aE215b11797b32397d878e6f3E65081ff58b13", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-04 16:18:00", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002a37d63eadfe4b4682a3c28c1c2cd4f109cc27620000000000000000000000002321f1a63a683a1f3634dbe1cba0d657d5f56d54000000000000000000000000a6e64bc059ddaa72ec374c50b1a5c6b3a27d64ce", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "RelayFacet": { diff --git a/deployments/arbitrum.diamond.json b/deployments/arbitrum.diamond.json index 50fbefe25..19e5cceaf 100644 --- a/deployments/arbitrum.diamond.json +++ b/deployments/arbitrum.diamond.json @@ -144,14 +144,20 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "GasZipFacet", + "Version": "2.0.0" } }, "Periphery": { "ERC20Proxy": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", "Executor": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", "FeeCollector": "0xB0210dE78E28e2633Ca200609D9f528c13c26cD9", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", diff --git a/deployments/arbitrum.json b/deployments/arbitrum.json index 85d203c12..570c0c5db 100644 --- a/deployments/arbitrum.json +++ b/deployments/arbitrum.json @@ -48,8 +48,11 @@ "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f" -} + "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" +} \ No newline at end of file diff --git a/deployments/arbitrum.staging.json b/deployments/arbitrum.staging.json index 9897cdb97..8094fded2 100644 --- a/deployments/arbitrum.staging.json +++ b/deployments/arbitrum.staging.json @@ -46,6 +46,7 @@ "LiFuelFeeCollector": "0x94EA56D8049e93E0308B9c7d1418Baf6A7C68280", "TokenWrapper": "0xF63b27AE2Dc887b88f82E2Cc597d07fBB2E78E70", "EmergencyPauseFacet": "0x17Bb203F42d8e404ac7E8dB6ff972B7E8473850b", + "Permit2Proxy": "0x6FC01BC9Ff6Cdab694Ec8Ca41B21a2F04C8c37E5", "AcrossFacetV3": "0x6124C65B6264bE13f059b7C3A891a5b77DA8Bd95", "ReceiverAcrossV3": "0x3877f47B560819E96BBD7e7700a02dfACe36D696", "AcrossFacetPackedV3": "0x4352459F6BE1C7D1278F8c34Bb598b0feeB50f8b", diff --git a/deployments/aurora.diamond.json b/deployments/aurora.diamond.json index 16e7d04dc..b1843e7eb 100644 --- a/deployments/aurora.diamond.json +++ b/deployments/aurora.diamond.json @@ -60,18 +60,23 @@ "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61": { "Name": "StargateFacetV2", "Version": "1.0.1" + }, + "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { + "Name": "EmergencyPauseFacet", + "Version": "1.0.0" } }, "Periphery": { - "ERC20Proxy": "", - "Executor": "", + "ERC20Proxy": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", + "Executor": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", "FeeCollector": "0xB0210dE78E28e2633Ca200609D9f528c13c26cD9", - "LiFiDEXAggregator": "", - "LiFuelFeeCollector": "", - "Receiver": "0x5439f8ca43f832DD21a28C5BF038dad4c07ad02c", + "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "LiFuelFeeCollector": "0x8E92e662573CBC66B0AB6A93B5FE291925508085", + "Permit2Proxy": "", + "Receiver": "", "ReceiverAcrossV3": "", - "ReceiverStargateV2": "", - "RelayerCelerIM": "", + "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", + "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" } } diff --git a/deployments/avalanche.diamond.json b/deployments/avalanche.diamond.json index 2a38d0dbe..649710359 100644 --- a/deployments/avalanche.diamond.json +++ b/deployments/avalanche.diamond.json @@ -116,16 +116,22 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "GasZipFacet", + "Version": "2.0.0" } }, "Periphery": { "ERC20Proxy": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", "Executor": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", "FeeCollector": "0xB0210dE78E28e2633Ca200609D9f528c13c26cD9", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", - "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "ReceiverAcrossV3": "", + "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" diff --git a/deployments/avalanche.json b/deployments/avalanche.json index c6378272c..78c378314 100644 --- a/deployments/avalanche.json +++ b/deployments/avalanche.json @@ -45,5 +45,8 @@ "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" + "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" } \ No newline at end of file diff --git a/deployments/base.diamond.json b/deployments/base.diamond.json index 994fa4e55..88eb383ab 100644 --- a/deployments/base.diamond.json +++ b/deployments/base.diamond.json @@ -132,16 +132,26 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "GasZipFacet", + "Version": "2.0.0" + }, + "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { + "Name": "AcrossFacetV3", + "Version": "1.0.0" } }, "Periphery": { "ERC20Proxy": "0x74a55CaDb12501A3707E9F3C5dfd8b563C6A5940", "Executor": "0x4DaC9d1769b9b304cb04741DCDEb2FC14aBdF110", "FeeCollector": "0x0A6d96E7f4D7b96CFE42185DF61E64d255c12DFf", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", - "Receiver": "0xeC03B65CbDc5f8858b02F44EBa54C90664249fb1", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", + "Receiver": "0xeC03B65CbDc5f8858b02F44EBa54C90664249fb1", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "", "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" diff --git a/deployments/base.json b/deployments/base.json index 8291f7601..640f520a4 100644 --- a/deployments/base.json +++ b/deployments/base.json @@ -41,5 +41,8 @@ "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f" -} + "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" +} \ No newline at end of file diff --git a/deployments/blast.diamond.json b/deployments/blast.diamond.json index 24daaddb6..dd301a901 100644 --- a/deployments/blast.diamond.json +++ b/deployments/blast.diamond.json @@ -73,7 +73,7 @@ "Name": "AcrossFacetPackedV3", "Version": "1.0.0" }, - "0x00990C0FfBB7eAB014351652aFB65AaE00db43A4": { + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { "Name": "", "Version": "" }, @@ -88,11 +88,13 @@ "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", "ReceiverStargateV2": "", "RelayerCelerIM": "", - "TokenWrapper": "0xF2ee649caB7a0edEdED7a27821B0aCDF77778aeD" + "TokenWrapper": "0xF2ee649caB7a0edEdED7a27821B0aCDF77778aeD", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } } } \ No newline at end of file diff --git a/deployments/blast.json b/deployments/blast.json index 519ddd42b..692da772b 100644 --- a/deployments/blast.json +++ b/deployments/blast.json @@ -28,5 +28,8 @@ "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f" -} + "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" +} \ No newline at end of file diff --git a/deployments/boba.diamond.json b/deployments/boba.diamond.json index f9a009d95..6f989e752 100644 --- a/deployments/boba.diamond.json +++ b/deployments/boba.diamond.json @@ -72,6 +72,7 @@ "FeeCollector": "0xB0210dE78E28e2633Ca200609D9f528c13c26cD9", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0x5439f8ca43f832DD21a28C5BF038dad4c07ad02c", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", diff --git a/deployments/bsc.diamond.json b/deployments/bsc.diamond.json index ebbff036e..90bd9baef 100644 --- a/deployments/bsc.diamond.json +++ b/deployments/bsc.diamond.json @@ -120,6 +120,10 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "", + "Version": "" } }, "Periphery": { @@ -128,11 +132,13 @@ "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", "ReceiverAcrossV3": "", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } } } \ No newline at end of file diff --git a/deployments/bsc.diamond.staging.json b/deployments/bsc.diamond.staging.json index d94710630..f89fccfee 100644 --- a/deployments/bsc.diamond.staging.json +++ b/deployments/bsc.diamond.staging.json @@ -82,21 +82,22 @@ "Version": "1.0.1" }, "0x0DAff7e73fDb2bbaDa232A16a5BEA72463893E35": { - "Name": "", - "Version": "" + "Name": "GasZipFacet", + "Version": "2.0.0" } }, "Periphery": { "ERC20Proxy": "0xf90a432dD1D0541470BC9C440d9dEc3659755238", "Executor": "0x4f3B1b1075cC19daA15b7cc681b28e2fB82145eD", "FeeCollector": "0x7f98D45c7902f079fDb65811B633522e2d227BB6", + "GasZipPeriphery": "0x46d8Aa20D5aD98927Cf885De9eBf9436E8E551c2", "LiFiDEXAggregator": "0xD6f02718B9df9FAd2665c7304BC5b26D5bbD8642", "LiFuelFeeCollector": "0xc4f7A34b8d283f66925eF0f5CCdFC2AF3030DeaE", "Receiver": "0x76EE0F8fb09047284B6ea89881595Fc6F5B09E12", - "ReceiverAcrossV3": "", + "ReceiverAcrossV3": "0x76EE0F8fb09047284B6ea89881595Fc6F5B09E12", "ReceiverStargateV2": "", "RelayerCelerIM": "", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" + "TokenWrapper": "" } } -} \ No newline at end of file +} diff --git a/deployments/bsc.json b/deployments/bsc.json index b875005f3..b11ce7df0 100644 --- a/deployments/bsc.json +++ b/deployments/bsc.json @@ -46,5 +46,8 @@ "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" + "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" } \ No newline at end of file diff --git a/deployments/bsc.staging.json b/deployments/bsc.staging.json index cba680d41..5b5014a94 100644 --- a/deployments/bsc.staging.json +++ b/deployments/bsc.staging.json @@ -25,10 +25,13 @@ "StargateFacet": "0xAfcC5c55d5Ec3082675D51331E7Ed9AdE195db48", "ThorSwapFacet": "0xa6aAe470E7B8E8916e692882A5db25bB40C398A7", "AmarokFacetPacked": "0x7ac3EB2D191EBAb9E925CAbFD4F8155be066b3aa", + "GasZip": "0xD9a07743138b6a76A8a56F305048D17f1175B11A", "MayanBridgeFacet": "0x5Ba4FeD1DAd2fD057A9f687B399B8e4cF2368214", "MayanFacet": "0xd596C903d78870786c5DB0E448ce7F87A65A0daD", + "GasZipFacet": "0x0DAff7e73fDb2bbaDa232A16a5BEA72463893E35", "GenericSwapFacetV3": "0xE871874D8AC30E8aCD0eC67529b4a5dDD73Bf0d6", "EmergencyPauseFacet": "0xf03AFcA857918BE01EBD6C6800Fc2974b8a9eBA2", "StargateFacetV2": "0x089153117bffd37CBbE0c604dAE8e493D4743fA8", - "LiFiDEXAggregator": "0xD6f02718B9df9FAd2665c7304BC5b26D5bbD8642" -} + "LiFiDEXAggregator": "0x6140b987d6b51fd75b66c3b07733beb5167c42fc", + "GasZipPeriphery": "0x46d8Aa20D5aD98927Cf885De9eBf9436E8E551c2" +} \ No newline at end of file diff --git a/deployments/celo.diamond.json b/deployments/celo.diamond.json index 1a3abf9e4..8805dfad4 100644 --- a/deployments/celo.diamond.json +++ b/deployments/celo.diamond.json @@ -72,6 +72,7 @@ "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", diff --git a/deployments/celo.json b/deployments/celo.json index d0980da36..baa221a3c 100644 --- a/deployments/celo.json +++ b/deployments/celo.json @@ -24,5 +24,6 @@ "AllBridgeFacet": "0x222b97E533220A47ad8700C396537D58e001808C", "GenericSwapFacetV3": "0xD8066332e52A210f7E6BD8F8D4F2be4197BE290D", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" + "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" } \ No newline at end of file diff --git a/deployments/cronos.diamond.json b/deployments/cronos.diamond.json index ebc2b9096..f9657b085 100644 --- a/deployments/cronos.diamond.json +++ b/deployments/cronos.diamond.json @@ -2,12 +2,12 @@ "LiFiDiamond": { "Facets": { "0xf7993A8df974AD022647E63402d6315137c58ABf": { - "Name": "DiamondCutFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0xF5ba8Db6fEA7aF820De35C8D0c294e17DBC1b9D2": { - "Name": "DiamondLoupeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x6faA6906b9e4A59020e673910105567e809789E0": { "Name": "OwnershipFacet", @@ -62,10 +62,11 @@ "ERC20Proxy": "0x9B112948F3c71eBFb59961657b37c21328cFb01e", "Executor": "0xd00DaEC49Cd4F33Fe8542050294759cD971c7116", "FeeCollector": "0x11d40Dc8Ff0CE92F54A315aD8e674a55a866cBEe", - "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "LiFuelFeeCollector": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "ReceiverAcrossV3": "", + "LiFiDEXAggregator": "0xf88F6948C8AFf60c0B011f3175CDF459c66Ed035", + "LiFuelFeeCollector": "0x70D6cFE9146D6B6ebEb88BcB22fa220E78058D6F", + "Permit2Proxy": "", "Receiver": "0x4891e076b18FccEBE62962A26e74df85BB04168b", + "ReceiverAcrossV3": "", "ReceiverStargateV2": "", "RelayerCelerIM": "", "TokenWrapper": "0x693c18A628866BdD04956d9544Ce769C0e468149" diff --git a/deployments/cronos.json b/deployments/cronos.json index 2f542bf21..b98dde7ec 100644 --- a/deployments/cronos.json +++ b/deployments/cronos.json @@ -24,5 +24,5 @@ "SymbiosisFacet": "0x70a51Bbc58D6180709D99a759bd91A3feD212fD3", "EmergencyPauseFacet": "0x3CDDc79Da7c829643F5b2378110158Ea6ff349F9", "TokenWrapper": "0x693c18A628866BdD04956d9544Ce769C0e468149", - "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc" + "LiFiDEXAggregator": "0xf88F6948C8AFf60c0B011f3175CDF459c66Ed035" } \ No newline at end of file diff --git a/deployments/fantom.diamond.json b/deployments/fantom.diamond.json index 0ea49d0a1..5dc3da18d 100644 --- a/deployments/fantom.diamond.json +++ b/deployments/fantom.diamond.json @@ -88,6 +88,10 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "", + "Version": "" } }, "Periphery": { @@ -96,11 +100,13 @@ "FeeCollector": "0xB0210dE78E28e2633Ca200609D9f528c13c26cD9", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } } } \ No newline at end of file diff --git a/deployments/fantom.json b/deployments/fantom.json index d33576473..68c91daa6 100644 --- a/deployments/fantom.json +++ b/deployments/fantom.json @@ -35,5 +35,7 @@ "SquidFacet": "0x5C2C3F56e33F45389aa4e1DA4D3a807A532a910c", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" + "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } \ No newline at end of file diff --git a/deployments/fraxtal.diamond.json b/deployments/fraxtal.diamond.json index 519182896..3db5dd05b 100644 --- a/deployments/fraxtal.diamond.json +++ b/deployments/fraxtal.diamond.json @@ -68,6 +68,7 @@ "FeeCollector": "0x7956280Ec4B4d651C4083Ca737a1fa808b5319D8", "LiFiDEXAggregator": "0xE38621607316cB43367c134C65dca3f41B61250f", "LiFuelFeeCollector": "0x9870F0C91D722B3393383722968269496d919bD8", + "Permit2Proxy": "", "Receiver": "0xf22c55c50fF14d9AB1fa4D9DCA832085D143E854", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", @@ -75,4 +76,4 @@ "TokenWrapper": "0xC82fd49be3F3D851b9E10589C50784cEAC7114a5" } } -} \ No newline at end of file +} diff --git a/deployments/fraxtal.json b/deployments/fraxtal.json index 2449415c1..105a4043f 100644 --- a/deployments/fraxtal.json +++ b/deployments/fraxtal.json @@ -21,6 +21,6 @@ "ServiceFeeCollector": "0x45d69A8a07F79DE2364F0B80F78af86e99015162", "TokenWrapper": "0xC82fd49be3F3D851b9E10589C50784cEAC7114a5", "SymbiosisFacet": "0x095857146B116802fBf4f75D96CC1b35c5F3ad1a", - "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "LiFiDEXAggregator": "0xE38621607316cB43367c134C65dca3f41B61250f", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" -} \ No newline at end of file +} diff --git a/deployments/fuse.diamond.json b/deployments/fuse.diamond.json index 269cce84f..2706f86b3 100644 --- a/deployments/fuse.diamond.json +++ b/deployments/fuse.diamond.json @@ -64,6 +64,7 @@ "FeeCollector": "0xB0210dE78E28e2633Ca200609D9f528c13c26cD9", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0x5439f8ca43f832DD21a28C5BF038dad4c07ad02c", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", diff --git a/deployments/gnosis.diamond.json b/deployments/gnosis.diamond.json index 2b7b148a8..85abda5a8 100644 --- a/deployments/gnosis.diamond.json +++ b/deployments/gnosis.diamond.json @@ -92,6 +92,10 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "", + "Version": "" } }, "Periphery": { @@ -100,11 +104,13 @@ "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0x5439f8ca43f832DD21a28C5BF038dad4c07ad02c", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", "RelayerCelerIM": "", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } } } \ No newline at end of file diff --git a/deployments/gnosis.json b/deployments/gnosis.json index 14cb386c5..90e89c8ac 100644 --- a/deployments/gnosis.json +++ b/deployments/gnosis.json @@ -31,5 +31,7 @@ "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" + "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } \ No newline at end of file diff --git a/deployments/gravity.diamond.json b/deployments/gravity.diamond.json index ac7295607..729f675f6 100644 --- a/deployments/gravity.diamond.json +++ b/deployments/gravity.diamond.json @@ -56,14 +56,32 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "GasZipFacet", + "Version": "2.0.0" + }, + "0x49e93F6A99c590a8E70138D2710B9eDd88C077FF": { + "Name": "", + "Version": "" + }, + "0x325DA62543447A48c7b044C5642B87CeA88B0fd3": { + "Name": "", + "Version": "" + }, + "0xbb44687E13B0DdB11682FA9299F5F982Ba3cc029": { + "Name": "SymbiosisFacet", + "Version": "1.0.0" } }, "Periphery": { "ERC20Proxy": "0x4307ca7Eca98daF86D4f65b4367B273C628A39B7", "Executor": "0xCdE9376F284d5CA9aaec69dD4D0761278b4ae034", "FeeCollector": "0x79540403cdE176Ca5f1fb95bE84A7ec91fFDEF76", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0x134f525AC05E4724e55C363A9C4FA35ceB13F88d", + "Permit2Proxy": "", "Receiver": "0x2DeB3bFa2b19024A0c1Ba299b6b79276f1F77b14", "ReceiverAcrossV3": "", "ReceiverStargateV2": "0x6A3d6652fb7be72200a47313C092342218aAeb72", diff --git a/deployments/gravity.json b/deployments/gravity.json index 9852a454b..9fc2897f9 100644 --- a/deployments/gravity.json +++ b/deployments/gravity.json @@ -21,5 +21,8 @@ "ReceiverStargateV2": "0x6A3d6652fb7be72200a47313C092342218aAeb72", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "Receiver": "0x2DeB3bFa2b19024A0c1Ba299b6b79276f1F77b14", - "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" + "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "SymbiosisFacet": "0xbb44687E13B0DdB11682FA9299F5F982Ba3cc029" } \ No newline at end of file diff --git a/deployments/immutablezkevm.diamond.json b/deployments/immutablezkevm.diamond.json index afe36af97..7f786f1d3 100644 --- a/deployments/immutablezkevm.diamond.json +++ b/deployments/immutablezkevm.diamond.json @@ -64,6 +64,7 @@ "FeeCollector": "0x1a4E99aB56BBac95810C0A957F173054f6FA8fDc", "LiFiDEXAggregator": "0xAcD913Ad6936Bb662395ac9a66D75bFc77c165fF", "LiFuelFeeCollector": "0x677Fa29FFe6c8f03D6bbE789090Dceb498b7aaA4", + "Permit2Proxy": "", "Receiver": "0xCfDfbAa460EFAd6F58D4459d82863CfA137e4993", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", diff --git a/deployments/kaia.diamond.json b/deployments/kaia.diamond.json index c175272ce..0f1f0414c 100644 --- a/deployments/kaia.diamond.json +++ b/deployments/kaia.diamond.json @@ -72,6 +72,7 @@ "FeeCollector": "0x5e6525c873D6FD3D6BE0D9845018F6298583981d", "LiFiDEXAggregator": "0xE275759e85e5497A1B07EA65529187FD7E987509", "LiFuelFeeCollector": "0xD5F295EA94Bcd6792185542CFa5AB77DC4422B77", + "Permit2Proxy": "", "Receiver": "0x53F9ee918d173B19EA75DD5A304A6eDcfF52cc0c", "ReceiverAcrossV3": "", "ReceiverStargateV2": "0xAF300C06AA7cff43640B7cE943a96142f6ABf0b1", diff --git a/deployments/linea.diamond.json b/deployments/linea.diamond.json index 00cad3d95..3502dbf03 100644 --- a/deployments/linea.diamond.json +++ b/deployments/linea.diamond.json @@ -106,29 +106,39 @@ "Version": "1.0.1" }, "0x80b96CA9B47aCD6c2a888128fEb9b0F4Ea518FEc": { - "Name": "AcrossFacetV3", - "Version": "1.0.0" + "Name": "", + "Version": "" }, - "0xAfEB7e1DA0Ff4DcD0dbC4De3F51a933E2054B0ed": { + "0x922D1c381Cb5b0AFAAe9E7C86ed34FDE337766b0": { "Name": "AcrossFacetPackedV3", "Version": "1.0.0" }, "0xe07c030dDC7Fb9ca23b633b1028106DAA5fdbF96": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0x75943d7305310635945736D00235d825181018f3": { + "Name": "GasZipFacet", + "Version": "2.0.0" + }, + "0x2531368BAca8c5E85031FC0a9a2f148b65da389A": { + "Name": "AcrossFacetV3", + "Version": "1.0.0" } }, "Periphery": { "ERC20Proxy": "0x57ec2C57fA654aABAeCc63c8dad47cb6efaCCC24", "Executor": "0x2a202Ed587F0BC7dfa80ea1DD943d8470492Dd0F", "FeeCollector": "0xA4A24BdD4608D7dFC496950850f9763B674F0DB2", + "GasZipPeriphery": "0x0ec6D2eEb94541C51620830D151995fCFf83Aa74", "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0x68B21d21509446Bf5449B6F5F8aBD4b3cfcbc3f8", + "Permit2Proxy": "", "Receiver": "0xdcBEcDE898c067cA58ABD01a7de51660bBD5A897", - "ReceiverAcrossV3": "", + "ReceiverAcrossV3": "0x4BB377A1A624bDeF72d352891dc5E64087345fe6", "ReceiverStargateV2": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6", "RelayerCelerIM": "", "TokenWrapper": "0xf6C9605c6E231C1547b7a6545d93e7233f97322a" } } -} \ No newline at end of file +} diff --git a/deployments/linea.json b/deployments/linea.json index bd43ba3c3..3943a1634 100644 --- a/deployments/linea.json +++ b/deployments/linea.json @@ -36,7 +36,9 @@ "ReceiverStargateV2": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6", "LiFiDEXAggregator": "0xcaA342e4f781d63EF41E220D7622B97E66BAEcF3", "EmergencyPauseFacet": "0xe07c030dDC7Fb9ca23b633b1028106DAA5fdbF96", - "AcrossFacetV3": "0x80b96CA9B47aCD6c2a888128fEb9b0F4Ea518FEc", + "AcrossFacetV3": "0x2531368BAca8c5E85031FC0a9a2f148b65da389A", "ReceiverAcrossV3": "0x4BB377A1A624bDeF72d352891dc5E64087345fe6", - "AcrossFacetPackedV3": "0xAfEB7e1DA0Ff4DcD0dbC4De3F51a933E2054B0ed" + "AcrossFacetPackedV3": "0x922D1c381Cb5b0AFAAe9E7C86ed34FDE337766b0", + "GasZipFacet": "0x75943d7305310635945736D00235d825181018f3", + "GasZipPeriphery": "0x0ec6D2eEb94541C51620830D151995fCFf83Aa74" } diff --git a/deployments/lisk.diamond.json b/deployments/lisk.diamond.json new file mode 100644 index 000000000..dbce21a66 --- /dev/null +++ b/deployments/lisk.diamond.json @@ -0,0 +1,84 @@ +{ + "LiFiDiamond": { + "Facets": { + "0x57FdfF2e36De6c8a8Cde297B150Ae291132Eae8d": { + "Name": "DiamondCutFacet", + "Version": "2.0.0" + }, + "0xA1a4d577709dC4A70CA38F1D41562fab3aD09D3f": { + "Name": "DiamondLoupeFacet", + "Version": "1.0.0" + }, + "0x81Ae738700D8f1e5BB2A200584174cDf17Fb5455": { + "Name": "OwnershipFacet", + "Version": "1.0.0" + }, + "0xfA009cd56d35AE3BbdF975135b0BAE9b403c7da1": { + "Name": "WithdrawFacet", + "Version": "1.0.0" + }, + "0xE154389c1bAE241F220661131b7AfDc1514C55c7": { + "Name": "DexManagerFacet", + "Version": "1.0.1" + }, + "0x314E1E760316050B0D6338bCf3d689b8D301F593": { + "Name": "AccessManagerFacet", + "Version": "1.0.0" + }, + "0x54ECfbAaeb49c864a9c45C70B785ca6C70c66453": { + "Name": "PeripheryRegistryFacet", + "Version": "1.0.0" + }, + "0x14Dd70456Bfe4Cd8b605f7A0d24b3A74aCe99713": { + "Name": "LIFuelFacet", + "Version": "1.0.1" + }, + "0xd2B3b3605e630232c13111458Ae3a97d13c8F477": { + "Name": "GenericSwapFacet", + "Version": "1.0.0" + }, + "0xBa713B18c806EcdEEE49FAec623dE2D872192872": { + "Name": "GenericSwapFacetV3", + "Version": "1.0.1" + }, + "0xe6C6A35684308f2DaadbeeA50B62CFEaAFaa407E": { + "Name": "StandardizedCallFacet", + "Version": "1.1.0" + }, + "0x1feB868BF64AdC552E051fB7387681F78b988a81": { + "Name": "CalldataVerificationFacet", + "Version": "1.1.2" + }, + "0xF6Eff8df65Fc4a4c1528761Aa727b5471956A844": { + "Name": "EmergencyPauseFacet", + "Version": "1.0.1" + }, + "0xB5dD83183fD7CCF859b227CA83663a034d5B2f92": { + "Name": "AcrossFacetV3", + "Version": "1.0.0" + }, + "0x90ADbFc03002aaA3d9FEdf2517D593CfD93e6c57": { + "Name": "AcrossFacetPackedV3", + "Version": "1.0.0" + }, + "0xb40044Bf27c2448e05e1f34ED83Ca4A3DfA54D19": { + "Name": "GasZipFacet", + "Version": "2.0.0" + } + }, + "Periphery": { + "ERC20Proxy": "0x98750e70Cf1313D9702f0f57D399DD0bA05d16E0", + "Executor": "0xd9318fFE1EbbfA71049A443e623Be566067C9D6B", + "FeeCollector": "0x50D5a8aCFAe13Dceb217E9a071F6c6Bd5bDB4155", + "GasZipPeriphery": "0x76aE215b11797b32397d878e6f3E65081ff58b13", + "LiFiDEXAggregator": "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", + "LiFuelFeeCollector": "0x8f023b4193a6b18C227B4a755f8e28B3D30Ef9a1", + "Permit2Proxy": "", + "ReceiverAcrossV3": "0xD263a23453CB9A77860ed6393A2B9a55AF70EFAb", + "Receiver": "0xD9e3837E42198aaFc13cb51536d7c31f590aD6Fd", + "ReceiverStargateV2": "", + "RelayerCelerIM": "", + "TokenWrapper": "0x603a538477d44064eA5A5d8C345b4Ff6fca1142a" + } + } +} \ No newline at end of file diff --git a/deployments/lisk.json b/deployments/lisk.json new file mode 100644 index 000000000..ee8533b6e --- /dev/null +++ b/deployments/lisk.json @@ -0,0 +1,28 @@ +{ + "DiamondCutFacet": "0x57FdfF2e36De6c8a8Cde297B150Ae291132Eae8d", + "DiamondLoupeFacet": "0xA1a4d577709dC4A70CA38F1D41562fab3aD09D3f", + "GenericSwapFacetV3": "0xBa713B18c806EcdEEE49FAec623dE2D872192872", + "OwnershipFacet": "0x81Ae738700D8f1e5BB2A200584174cDf17Fb5455", + "DexManagerFacet": "0xE154389c1bAE241F220661131b7AfDc1514C55c7", + "AccessManagerFacet": "0x314E1E760316050B0D6338bCf3d689b8D301F593", + "WithdrawFacet": "0xfA009cd56d35AE3BbdF975135b0BAE9b403c7da1", + "PeripheryRegistryFacet": "0x54ECfbAaeb49c864a9c45C70B785ca6C70c66453", + "GenericSwapFacet": "0xd2B3b3605e630232c13111458Ae3a97d13c8F477", + "LIFuelFacet": "0x14Dd70456Bfe4Cd8b605f7A0d24b3A74aCe99713", + "CalldataVerificationFacet": "0x1feB868BF64AdC552E051fB7387681F78b988a81", + "StandardizedCallFacet": "0xe6C6A35684308f2DaadbeeA50B62CFEaAFaa407E", + "LiFiDiamond": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + "EmergencyPauseFacet": "0xF6Eff8df65Fc4a4c1528761Aa727b5471956A844", + "AcrossFacetV3": "0xB5dD83183fD7CCF859b227CA83663a034d5B2f92", + "AcrossFacetPackedV3": "0x90ADbFc03002aaA3d9FEdf2517D593CfD93e6c57", + "ERC20Proxy": "0x98750e70Cf1313D9702f0f57D399DD0bA05d16E0", + "Executor": "0xd9318fFE1EbbfA71049A443e623Be566067C9D6B", + "FeeCollector": "0x50D5a8aCFAe13Dceb217E9a071F6c6Bd5bDB4155", + "Receiver": "0xD9e3837E42198aaFc13cb51536d7c31f590aD6Fd", + "LiFuelFeeCollector": "0x8f023b4193a6b18C227B4a755f8e28B3D30Ef9a1", + "TokenWrapper": "0x603a538477d44064eA5A5d8C345b4Ff6fca1142a", + "LiFiDEXAggregator": "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", + "ReceiverAcrossV3": "0xD263a23453CB9A77860ed6393A2B9a55AF70EFAb", + "GasZipFacet": "0xb40044Bf27c2448e05e1f34ED83Ca4A3DfA54D19", + "GasZipPeriphery": "0x76aE215b11797b32397d878e6f3E65081ff58b13" +} \ No newline at end of file diff --git a/deployments/mainnet.diamond.json b/deployments/mainnet.diamond.json index 8428ec9f0..c8875fd41 100644 --- a/deployments/mainnet.diamond.json +++ b/deployments/mainnet.diamond.json @@ -168,6 +168,14 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "", + "Version": "" + }, + "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { + "Name": "AcrossFacetV3", + "Version": "1.0.0" } }, "Periphery": { @@ -176,11 +184,13 @@ "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } } } \ No newline at end of file diff --git a/deployments/mainnet.json b/deployments/mainnet.json index d28177b4c..6cdca6796 100644 --- a/deployments/mainnet.json +++ b/deployments/mainnet.json @@ -59,5 +59,8 @@ "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f" -} + "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" +} \ No newline at end of file diff --git a/deployments/mantle.diamond.json b/deployments/mantle.diamond.json index ef7fe724e..a9dfac7f8 100644 --- a/deployments/mantle.diamond.json +++ b/deployments/mantle.diamond.json @@ -64,14 +64,24 @@ "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61": { "Name": "StargateFacetV2", "Version": "1.0.1" + }, + "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { + "Name": "EmergencyPauseFacet", + "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "GasZipFacet", + "Version": "2.0.0" } }, "Periphery": { "ERC20Proxy": "0xA950Ac46b0b844c0564d18A54A9685e614B9086C", "Executor": "0x7078d1DE45C7D3e87f71D5DA663db2a8Ee1dfEbe", "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0x2fA14922ABc117c4737260032C8fD6D9Ab35395A", "ReceiverAcrossV3": "", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", @@ -79,4 +89,4 @@ "TokenWrapper": "0x0263180888007D45340F86eC0b610d250BbDcB23" } } -} \ No newline at end of file +} diff --git a/deployments/mantle.json b/deployments/mantle.json index a386b2bd4..908d2bae4 100644 --- a/deployments/mantle.json +++ b/deployments/mantle.json @@ -24,6 +24,8 @@ "SquidFacet": "0xc23ae3A8d74C0a428FA59E4AD3EB6aa4b2330530", "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", - "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" -} \ No newline at end of file + "LiFiDEXAggregator": "0xEcf953290D36fA96236356e171044DC802EeC598", + "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" +} diff --git a/deployments/metis.diamond.json b/deployments/metis.diamond.json index d47ff324a..fc5cfce75 100644 --- a/deployments/metis.diamond.json +++ b/deployments/metis.diamond.json @@ -72,6 +72,10 @@ "0xD5734b44Bb7Ada52ea6503088612E70a2a612371": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xb518364B2F4e480eCc64998Da12F072A63a25093": { + "Name": "GasZipFacet", + "Version": "2.0.0" } }, "Periphery": { @@ -80,11 +84,13 @@ "FeeCollector": "0x27f0e36dE6B1BA8232f6c2e87E00A50731048C6B", "LiFiDEXAggregator": "0x9E4c63c9a0EDE2Ca2e772ee48C819Ca5CB4529AC", "LiFuelFeeCollector": "0x851450e3b624ea4b068c3E8cFBcf79cD03D31C54", + "Permit2Proxy": "", "Receiver": "0x0a4D7f27e8d24625eCb8d29d6445934a440A05E0", "ReceiverAcrossV3": "", "ReceiverStargateV2": "0xe7392Fc0f61503dB53C70789c6F2c34C0675C929", "RelayerCelerIM": "", - "TokenWrapper": "0x01bDf46A673FC3c081ddBD21cb51fBA4972d00aC" + "TokenWrapper": "0x01bDf46A673FC3c081ddBD21cb51fBA4972d00aC", + "GasZipPeriphery": "0x799525cE72B5cc9eb310dc8c7b9e7A3128a6dA79" } } } \ No newline at end of file diff --git a/deployments/metis.json b/deployments/metis.json index 0b5d346da..59b8f51b6 100644 --- a/deployments/metis.json +++ b/deployments/metis.json @@ -25,5 +25,7 @@ "StargateFacetV2": "0xCb667deA2894ab64e8e75EACB0d5d027AC672e25", "ReceiverStargateV2": "0xe7392Fc0f61503dB53C70789c6F2c34C0675C929", "LiFiDEXAggregator": "0x9E4c63c9a0EDE2Ca2e772ee48C819Ca5CB4529AC", - "EmergencyPauseFacet": "0xD5734b44Bb7Ada52ea6503088612E70a2a612371" + "EmergencyPauseFacet": "0xD5734b44Bb7Ada52ea6503088612E70a2a612371", + "GasZipFacet": "0xb518364B2F4e480eCc64998Da12F072A63a25093", + "GasZipPeriphery": "0x799525cE72B5cc9eb310dc8c7b9e7A3128a6dA79" } \ No newline at end of file diff --git a/deployments/mode.diamond.json b/deployments/mode.diamond.json index 3605b3b8e..fe73413a8 100644 --- a/deployments/mode.diamond.json +++ b/deployments/mode.diamond.json @@ -73,7 +73,15 @@ "Name": "AcrossFacetPackedV3", "Version": "1.0.0" }, - "0x00990C0FfBB7eAB014351652aFB65AaE00db43A4": { + "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { + "Name": "AcrossFacetV3", + "Version": "1.0.0" + }, + "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { + "Name": "EmergencyPauseFacet", + "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { "Name": "", "Version": "" } @@ -84,11 +92,13 @@ "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", "ReceiverStargateV2": "", "RelayerCelerIM": "", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } } } \ No newline at end of file diff --git a/deployments/mode.json b/deployments/mode.json index 5c2cb696c..59a8bdc0f 100644 --- a/deployments/mode.json +++ b/deployments/mode.json @@ -24,9 +24,11 @@ "AcrossFacet": "0x4D67951397bc8162111BC45F973Ae7576Fd814F0", "AcrossFacetPacked": "0x54910b7b4723a775708aFd88f31b6572e168aF66", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", - "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "LiFiDEXAggregator": "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f" -} + "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" +} \ No newline at end of file diff --git a/deployments/moonbeam.diamond.json b/deployments/moonbeam.diamond.json index 4f1306f10..afc910fcc 100644 --- a/deployments/moonbeam.diamond.json +++ b/deployments/moonbeam.diamond.json @@ -80,6 +80,7 @@ "FeeCollector": "0xB0210dE78E28e2633Ca200609D9f528c13c26cD9", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0x5439f8ca43f832DD21a28C5BF038dad4c07ad02c", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", diff --git a/deployments/moonriver.diamond.json b/deployments/moonriver.diamond.json index e892b32a4..ddb14714b 100644 --- a/deployments/moonriver.diamond.json +++ b/deployments/moonriver.diamond.json @@ -84,6 +84,7 @@ "FeeCollector": "0xB0210dE78E28e2633Ca200609D9f528c13c26cD9", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0x5439f8ca43f832DD21a28C5BF038dad4c07ad02c", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", diff --git a/deployments/opbnb.diamond.json b/deployments/opbnb.diamond.json index d862c5841..a4635cd70 100644 --- a/deployments/opbnb.diamond.json +++ b/deployments/opbnb.diamond.json @@ -2,52 +2,52 @@ "LiFiDiamond": { "Facets": { "0x7c76E992B0E65e4AFa657f61bf9fF4b9aeBf3F65": { - "Name": "", - "Version": "" + "Name": "DiamondCutFacet", + "Version": "1.0.0" }, "0x62E3c4539eBe661643319f46181Ed6C7d11AaF95": { - "Name": "", - "Version": "" + "Name": "DiamondLoupeFacet", + "Version": "1.0.0" }, "0x6e9A2579c67686C6Bb069b663B5d2fFF12dfB582": { - "Name": "", - "Version": "" + "Name": "OwnershipFacet", + "Version": "1.0.0" }, "0x5486c27f34C0132Ccc77d4ACb8635C2e12b70e97": { - "Name": "", - "Version": "" + "Name": "WithdrawFacet", + "Version": "1.0.0" }, "0x082Bc525FdFa4739c5042060e8f72291CEfe6422": { - "Name": "", - "Version": "" + "Name": "DexManagerFacet", + "Version": "1.0.1" }, "0xfC25728DBD6C4FE500d586CeA632a9c2CAa4adF3": { - "Name": "", - "Version": "" + "Name": "AccessManagerFacet", + "Version": "1.0.0" }, "0x864D5B4DA52E8E8851479C964c250147f9FfFba0": { - "Name": "", - "Version": "" + "Name": "PeripheryRegistryFacet", + "Version": "1.0.0" }, "0xfB595B4DeDA77fFce1B1AB7D6797121fbD10dDDa": { - "Name": "", - "Version": "" + "Name": "LIFuelFacet", + "Version": "1.0.1" }, "0x3E085Dd54bdD7DEd0FcDCfb4a24CEb0e0635bDE2": { - "Name": "", - "Version": "" + "Name": "GenericSwapFacet", + "Version": "1.0.0" }, - "0x9E4f2474Cbbe682c1d050D48A12486100eDA2EE3": { - "Name": "", - "Version": "" + "0x96f213947D724766d9016f86799042744070Fbd0": { + "Name": "CalldataVerificationFacet", + "Version": "1.1.2" }, "0x8Fb506A8040243c1Bc9AC779cF311839176692c3": { - "Name": "", - "Version": "" + "Name": "StandardizedCallFacet", + "Version": "1.1.0" }, "0x4E1D2308e11C06c93700FfFdD5b658D2d35a1e15": { "Name": "GenericSwapFacetV3", - "Version": "" + "Version": "1.0.1" }, "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", @@ -55,11 +55,12 @@ } }, "Periphery": { - "ERC20Proxy": "0x9cb7bE51524DA96806EC38a9A7dDC58608650243", + "ERC20Proxy": "0x9B112948F3c71eBFb59961657b37c21328cFb01e", "Executor": "0xDaF30Ca8fbB0f6cE6FF21fe33932eE786CC77646", "FeeCollector": "0x6A2420650139854F17964b8C3Bb60248470aB57E", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xEc41F702d36b43a1E1d017Cb4da92F431dFA7a0E", + "Permit2Proxy": "", "Receiver": "0x423d018777dE97059129E046BBc1026548553A20", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", diff --git a/deployments/opbnb.json b/deployments/opbnb.json index 13143a831..a02675b63 100644 --- a/deployments/opbnb.json +++ b/deployments/opbnb.json @@ -1,23 +1,24 @@ { - "DiamondCutFacet": "0xaD50118509eB4c8e3E39a370151B0fD5D5957013", - "DiamondLoupeFacet": "0xc21a00a346d5b29955449Ca912343a3bB4c5552f", - "OwnershipFacet": "0x6faA6906b9e4A59020e673910105567e809789E0", - "DexManagerFacet": "0x4bEAa5D26300e81cd17e0981fc15494Bb4B10959", - "AccessManagerFacet": "0x77A13abB679A0DAFB4435D1Fa4cCC95D1ab51cfc", - "WithdrawFacet": "0x711e80A9c1eB906d9Ae9d37E5432E6E7aCeEdA0B", - "PeripheryRegistryFacet": "0x69cb467EfD8044ac9eDB88F363309ab1cbFA0A15", - "LIFuelFacet": "0x51709aF40dE8feEbD9d694F26826F29ce915DcbF", - "GenericSwapFacet": "0xE0c5e721b40D54f2aA09418B1237db9d88220C73", + "DiamondCutFacet": "0x7c76E992B0E65e4AFa657f61bf9fF4b9aeBf3F65", + "DiamondLoupeFacet": "0x62E3c4539eBe661643319f46181Ed6C7d11AaF95", + "OwnershipFacet": "0x6e9A2579c67686C6Bb069b663B5d2fFF12dfB582", + "DexManagerFacet": "0x082Bc525FdFa4739c5042060e8f72291CEfe6422", + "AccessManagerFacet": "0xfC25728DBD6C4FE500d586CeA632a9c2CAa4adF3", + "WithdrawFacet": "0x5486c27f34C0132Ccc77d4ACb8635C2e12b70e97", + "PeripheryRegistryFacet": "0x864D5B4DA52E8E8851479C964c250147f9FfFba0", + "LIFuelFacet": "0xfB595B4DeDA77fFce1B1AB7D6797121fbD10dDDa", + "GenericSwapFacet": "0x3E085Dd54bdD7DEd0FcDCfb4a24CEb0e0635bDE2", "GenericSwapFacetV3": "0x4E1D2308e11C06c93700FfFdD5b658D2d35a1e15", "LiFiDiamond": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", - "StandardizedCallFacet": "0x2E61751366B7e006f8D53becB4b697890B30144F", - "CalldataVerificationFacet": "0xaE77c9aD4af61fAec96f04bD6723F6F6A804a567", - "ERC20Proxy": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", - "Executor": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", - "FeeCollector": "0x44Ff747185C9Df233D07536E08341ff624896164", - "Receiver": "0xddc22EAaa960e052946D842cEC61eb91bbE06eeD", + "StandardizedCallFacet": "0x8Fb506A8040243c1Bc9AC779cF311839176692c3", + "CalldataVerificationFacet": "0x96f213947D724766d9016f86799042744070Fbd0", + "ERC20Proxy": "0x9B112948F3c71eBFb59961657b37c21328cFb01e", + "Executor": "0xDaF30Ca8fbB0f6cE6FF21fe33932eE786CC77646", + "FeeCollector": "0x6A2420650139854F17964b8C3Bb60248470aB57E", + "Receiver": "0x423d018777dE97059129E046BBc1026548553A20", "ServiceFeeCollector": "0xC85c2B19958D116d79C654ecE73b359c08802A76", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", - "LiFuelFeeCollector": "0xc4f7A34b8d283f66925eF0f5CCdFC2AF3030DeaE", + "LiFuelFeeCollector": "0xEc41F702d36b43a1E1d017Cb4da92F431dFA7a0E", + "TokenWrapper": "0x077A38b812e57E2e76849954c880E1a2f5e0A68d", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" -} +} \ No newline at end of file diff --git a/deployments/optimism.diamond.json b/deployments/optimism.diamond.json index b9447d035..b6c6a3dd2 100644 --- a/deployments/optimism.diamond.json +++ b/deployments/optimism.diamond.json @@ -144,6 +144,14 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "", + "Version": "" + }, + "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { + "Name": "AcrossFacetV3", + "Version": "1.0.0" } }, "Periphery": { @@ -152,11 +160,14 @@ "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } } } \ No newline at end of file diff --git a/deployments/optimism.json b/deployments/optimism.json index de6819514..1e158644e 100644 --- a/deployments/optimism.json +++ b/deployments/optimism.json @@ -47,8 +47,11 @@ "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f" -} + "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" +} \ No newline at end of file diff --git a/deployments/polygon.diamond.json b/deployments/polygon.diamond.json index 6549a587a..44626fb1c 100644 --- a/deployments/polygon.diamond.json +++ b/deployments/polygon.diamond.json @@ -144,14 +144,24 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "GasZipFacet", + "Version": "2.0.0" + }, + "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { + "Name": "AcrossFacetV3", + "Version": "1.0.0" } }, "Periphery": { "ERC20Proxy": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", "Executor": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", diff --git a/deployments/polygon.diamond.staging.json b/deployments/polygon.diamond.staging.json index 6b71f56e5..03e420933 100644 --- a/deployments/polygon.diamond.staging.json +++ b/deployments/polygon.diamond.staging.json @@ -140,4 +140,4 @@ "TokenWrapper": "0xF63b27AE2Dc887b88f82E2Cc597d07fBB2E78E70" } } -} \ No newline at end of file +} diff --git a/deployments/polygon.json b/deployments/polygon.json index 0a8e98c7f..d9b402b6a 100644 --- a/deployments/polygon.json +++ b/deployments/polygon.json @@ -54,5 +54,8 @@ "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f" -} + "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", + "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" +} \ No newline at end of file diff --git a/deployments/polygon.staging.json b/deployments/polygon.staging.json index cdbbb5a31..b5a516e91 100644 --- a/deployments/polygon.staging.json +++ b/deployments/polygon.staging.json @@ -47,5 +47,6 @@ "HopFacetOptimized": "0xf82135385765f1324257ffF74489F16382EBBb8A", "SymbiosisFacet": "0x21571D628B0bCBeb954D5933A604eCac35bAF2c7", "AcrossFacetV3": "0xe2e5428F972d9C0a5Ba433e0c402752b472dB248", - "RelayFacet": "0x3cf7dE0e31e13C93c8Aada774ADF1C7eD58157f5" + "RelayFacet": "0x3cf7dE0e31e13C93c8Aada774ADF1C7eD58157f5", + "Permit2Proxy": "0x6FC01BC9Ff6Cdab694Ec8Ca41B21a2F04C8c37E5" } \ No newline at end of file diff --git a/deployments/polygonzkevm.diamond.json b/deployments/polygonzkevm.diamond.json index 291e00f98..bc220885a 100644 --- a/deployments/polygonzkevm.diamond.json +++ b/deployments/polygonzkevm.diamond.json @@ -88,6 +88,7 @@ "FeeCollector": "0xB49EaD76FE09967D7CA0dbCeF3C3A06eb3Aa0cB4", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0xC850013FC01A264018D58D112000E32835D15fBC", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", diff --git a/deployments/rootstock.diamond.json b/deployments/rootstock.diamond.json index aaabd6558..c48e8aba9 100644 --- a/deployments/rootstock.diamond.json +++ b/deployments/rootstock.diamond.json @@ -64,6 +64,7 @@ "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", diff --git a/deployments/scroll.diamond.json b/deployments/scroll.diamond.json index 4a9f50126..79f7c9235 100644 --- a/deployments/scroll.diamond.json +++ b/deployments/scroll.diamond.json @@ -92,19 +92,29 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "", + "Version": "" + }, + "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { + "Name": "AcrossFacetV3", + "Version": "1.0.0" } }, "Periphery": { "ERC20Proxy": "0xA950Ac46b0b844c0564d18A54A9685e614B9086C", "Executor": "0x7078d1DE45C7D3e87f71D5DA663db2a8Ee1dfEbe", "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", - "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "LiFiDEXAggregator": "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", + "Permit2Proxy": "", "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } } } \ No newline at end of file diff --git a/deployments/scroll.json b/deployments/scroll.json index d4053ff43..137126dab 100644 --- a/deployments/scroll.json +++ b/deployments/scroll.json @@ -28,9 +28,11 @@ "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "AcrossFacet": "0x9535A1AFd986FA9a2D324657116F02C364edebFf", "AcrossFacetPacked": "0xFd796bf7Ff74d414b99CacF6F216eAC24bF3aC8E", - "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "LiFiDEXAggregator": "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f" -} + "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" +} \ No newline at end of file diff --git a/deployments/sei.diamond.json b/deployments/sei.diamond.json index 835c2e91d..a3b88f717 100644 --- a/deployments/sei.diamond.json +++ b/deployments/sei.diamond.json @@ -68,6 +68,7 @@ "FeeCollector": "0x7956280Ec4B4d651C4083Ca737a1fa808b5319D8", "LiFiDEXAggregator": "0xfdE9CE4e17B650efdcA13d524F132876700d806f", "LiFuelFeeCollector": "0x9870F0C91D722B3393383722968269496d919bD8", + "Permit2Proxy": "", "Receiver": "0xf22c55c50fF14d9AB1fa4D9DCA832085D143E854", "ReceiverAcrossV3": "", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", diff --git a/deployments/sei.json b/deployments/sei.json index dff18b74c..0bc03616c 100644 --- a/deployments/sei.json +++ b/deployments/sei.json @@ -22,6 +22,6 @@ "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", - "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "LiFiDEXAggregator": "0xfdE9CE4e17B650efdcA13d524F132876700d806f", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" -} \ No newline at end of file +} diff --git a/deployments/taiko.diamond.json b/deployments/taiko.diamond.json index c8ff2a516..d0c010982 100644 --- a/deployments/taiko.diamond.json +++ b/deployments/taiko.diamond.json @@ -68,11 +68,13 @@ "FeeCollector": "0xDd8A081efC90DFFD79940948a1528C51793C4B03", "LiFiDEXAggregator": "0xcaA342e4f781d63EF41E220D7622B97E66BAEcF3", "LiFuelFeeCollector": "0xff2F39692A90262b8Ed4DFD92799bB450425773F", + "Permit2Proxy": "", "Receiver": "0xe38326Ae727e3fA6669249063Ce7b8ea1754e756", "ReceiverAcrossV3": "", "ReceiverStargateV2": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6", "RelayerCelerIM": "", - "TokenWrapper": "0xD989E929517B0e5eD0c8EfE7607Fa167B697cBa8" + "TokenWrapper": "0xD989E929517B0e5eD0c8EfE7607Fa167B697cBa8", + "GasZipPeriphery": "" } } } \ No newline at end of file diff --git a/deployments/taiko.json b/deployments/taiko.json index 65a865d66..b4c0620aa 100644 --- a/deployments/taiko.json +++ b/deployments/taiko.json @@ -22,5 +22,7 @@ "ReceiverStargateV2": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6", "TokenWrapper": "0xD989E929517B0e5eD0c8EfE7607Fa167B697cBa8", "Receiver": "0xe38326Ae727e3fA6669249063Ce7b8ea1754e756", - "EmergencyPauseFacet": "0xe07c030dDC7Fb9ca23b633b1028106DAA5fdbF96" + "EmergencyPauseFacet": "0xe07c030dDC7Fb9ca23b633b1028106DAA5fdbF96", + "GasZipFacet": "0x75943d7305310635945736D00235d825181018f3", + "GasZipPeriphery": "0x0ec6D2eEb94541C51620830D151995fCFf83Aa74" } \ No newline at end of file diff --git a/deployments/worldchain.diamond.json b/deployments/worldchain.diamond.json new file mode 100644 index 000000000..dbce21a66 --- /dev/null +++ b/deployments/worldchain.diamond.json @@ -0,0 +1,84 @@ +{ + "LiFiDiamond": { + "Facets": { + "0x57FdfF2e36De6c8a8Cde297B150Ae291132Eae8d": { + "Name": "DiamondCutFacet", + "Version": "2.0.0" + }, + "0xA1a4d577709dC4A70CA38F1D41562fab3aD09D3f": { + "Name": "DiamondLoupeFacet", + "Version": "1.0.0" + }, + "0x81Ae738700D8f1e5BB2A200584174cDf17Fb5455": { + "Name": "OwnershipFacet", + "Version": "1.0.0" + }, + "0xfA009cd56d35AE3BbdF975135b0BAE9b403c7da1": { + "Name": "WithdrawFacet", + "Version": "1.0.0" + }, + "0xE154389c1bAE241F220661131b7AfDc1514C55c7": { + "Name": "DexManagerFacet", + "Version": "1.0.1" + }, + "0x314E1E760316050B0D6338bCf3d689b8D301F593": { + "Name": "AccessManagerFacet", + "Version": "1.0.0" + }, + "0x54ECfbAaeb49c864a9c45C70B785ca6C70c66453": { + "Name": "PeripheryRegistryFacet", + "Version": "1.0.0" + }, + "0x14Dd70456Bfe4Cd8b605f7A0d24b3A74aCe99713": { + "Name": "LIFuelFacet", + "Version": "1.0.1" + }, + "0xd2B3b3605e630232c13111458Ae3a97d13c8F477": { + "Name": "GenericSwapFacet", + "Version": "1.0.0" + }, + "0xBa713B18c806EcdEEE49FAec623dE2D872192872": { + "Name": "GenericSwapFacetV3", + "Version": "1.0.1" + }, + "0xe6C6A35684308f2DaadbeeA50B62CFEaAFaa407E": { + "Name": "StandardizedCallFacet", + "Version": "1.1.0" + }, + "0x1feB868BF64AdC552E051fB7387681F78b988a81": { + "Name": "CalldataVerificationFacet", + "Version": "1.1.2" + }, + "0xF6Eff8df65Fc4a4c1528761Aa727b5471956A844": { + "Name": "EmergencyPauseFacet", + "Version": "1.0.1" + }, + "0xB5dD83183fD7CCF859b227CA83663a034d5B2f92": { + "Name": "AcrossFacetV3", + "Version": "1.0.0" + }, + "0x90ADbFc03002aaA3d9FEdf2517D593CfD93e6c57": { + "Name": "AcrossFacetPackedV3", + "Version": "1.0.0" + }, + "0xb40044Bf27c2448e05e1f34ED83Ca4A3DfA54D19": { + "Name": "GasZipFacet", + "Version": "2.0.0" + } + }, + "Periphery": { + "ERC20Proxy": "0x98750e70Cf1313D9702f0f57D399DD0bA05d16E0", + "Executor": "0xd9318fFE1EbbfA71049A443e623Be566067C9D6B", + "FeeCollector": "0x50D5a8aCFAe13Dceb217E9a071F6c6Bd5bDB4155", + "GasZipPeriphery": "0x76aE215b11797b32397d878e6f3E65081ff58b13", + "LiFiDEXAggregator": "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", + "LiFuelFeeCollector": "0x8f023b4193a6b18C227B4a755f8e28B3D30Ef9a1", + "Permit2Proxy": "", + "ReceiverAcrossV3": "0xD263a23453CB9A77860ed6393A2B9a55AF70EFAb", + "Receiver": "0xD9e3837E42198aaFc13cb51536d7c31f590aD6Fd", + "ReceiverStargateV2": "", + "RelayerCelerIM": "", + "TokenWrapper": "0x603a538477d44064eA5A5d8C345b4Ff6fca1142a" + } + } +} \ No newline at end of file diff --git a/deployments/worldchain.json b/deployments/worldchain.json new file mode 100644 index 000000000..e1b23bab1 --- /dev/null +++ b/deployments/worldchain.json @@ -0,0 +1,28 @@ +{ + "DiamondCutFacet": "0x57FdfF2e36De6c8a8Cde297B150Ae291132Eae8d", + "DiamondLoupeFacet": "0xA1a4d577709dC4A70CA38F1D41562fab3aD09D3f", + "OwnershipFacet": "0x81Ae738700D8f1e5BB2A200584174cDf17Fb5455", + "DexManagerFacet": "0xE154389c1bAE241F220661131b7AfDc1514C55c7", + "AccessManagerFacet": "0x314E1E760316050B0D6338bCf3d689b8D301F593", + "WithdrawFacet": "0xfA009cd56d35AE3BbdF975135b0BAE9b403c7da1", + "PeripheryRegistryFacet": "0x54ECfbAaeb49c864a9c45C70B785ca6C70c66453", + "GenericSwapFacet": "0xd2B3b3605e630232c13111458Ae3a97d13c8F477", + "GenericSwapFacetV3": "0xBa713B18c806EcdEEE49FAec623dE2D872192872", + "LIFuelFacet": "0x14Dd70456Bfe4Cd8b605f7A0d24b3A74aCe99713", + "CalldataVerificationFacet": "0x1feB868BF64AdC552E051fB7387681F78b988a81", + "StandardizedCallFacet": "0xe6C6A35684308f2DaadbeeA50B62CFEaAFaa407E", + "LiFiDiamond": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + "EmergencyPauseFacet": "0xF6Eff8df65Fc4a4c1528761Aa727b5471956A844", + "AcrossFacetV3": "0xB5dD83183fD7CCF859b227CA83663a034d5B2f92", + "AcrossFacetPackedV3": "0x90ADbFc03002aaA3d9FEdf2517D593CfD93e6c57", + "ERC20Proxy": "0x98750e70Cf1313D9702f0f57D399DD0bA05d16E0", + "Executor": "0xd9318fFE1EbbfA71049A443e623Be566067C9D6B", + "FeeCollector": "0x50D5a8aCFAe13Dceb217E9a071F6c6Bd5bDB4155", + "Receiver": "0xD9e3837E42198aaFc13cb51536d7c31f590aD6Fd", + "LiFuelFeeCollector": "0x8f023b4193a6b18C227B4a755f8e28B3D30Ef9a1", + "TokenWrapper": "0x603a538477d44064eA5A5d8C345b4Ff6fca1142a", + "LiFiDEXAggregator": "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", + "ReceiverAcrossV3": "0xD263a23453CB9A77860ed6393A2B9a55AF70EFAb", + "GasZipFacet": "0xb40044Bf27c2448e05e1f34ED83Ca4A3DfA54D19", + "GasZipPeriphery": "0x76aE215b11797b32397d878e6f3E65081ff58b13" +} \ No newline at end of file diff --git a/deployments/xlayer.diamond.json b/deployments/xlayer.diamond.json index dd7c1a9ce..1d03e3af7 100644 --- a/deployments/xlayer.diamond.json +++ b/deployments/xlayer.diamond.json @@ -60,14 +60,20 @@ "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61": { "Name": "EmergencyPauseFacet", "Version": "1.0.0" + }, + "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { + "Name": "GasZipFacet", + "Version": "2.0.0" } }, "Periphery": { "ERC20Proxy": "0x32f9EBAEA88bfE6b965108A2315AC2bE6253cC82", "Executor": "0x4c2fd9A794ac2337aD7AD547158B68397B6458A7", "FeeCollector": "0xC69994fd72824ca98F8a0B1E2ABc954E65a91cf4", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", "LiFuelFeeCollector": "0x12904D12A84702f9F079E1e393fdAbD313496e97", + "Permit2Proxy": "", "Receiver": "0xE33aFf67082eD48A162996670A3FC80AD01C4B5D", "ReceiverAcrossV3": "", "ReceiverStargateV2": "", @@ -75,4 +81,4 @@ "TokenWrapper": "0x833Be894C596b15FAe740C2D522d660084c48B05" } } -} \ No newline at end of file +} diff --git a/deployments/xlayer.json b/deployments/xlayer.json index b7873a0bd..5f7932c95 100644 --- a/deployments/xlayer.json +++ b/deployments/xlayer.json @@ -21,5 +21,7 @@ "LiFuelFeeCollector": "0x12904D12A84702f9F079E1e393fdAbD313496e97", "TokenWrapper": "0x833Be894C596b15FAe740C2D522d660084c48B05", "LiFiDEXAggregator": "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", - "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61" + "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", + "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } \ No newline at end of file diff --git a/deployments/zksync.diamond.json b/deployments/zksync.diamond.json index 94de61cf1..ae9fc63b8 100644 --- a/deployments/zksync.diamond.json +++ b/deployments/zksync.diamond.json @@ -10,7 +10,7 @@ "Version": "1.0.0" }, "0xCe81D9bB9D9605FFF296CCF8Af6b6B38f02Cf15d": { - "Name": "", + "Name": "CBridgeFacetPacked", "Version": "" }, "0x862FB4813657A40D1828Cac1e28a600625D78fC0": { @@ -69,19 +69,25 @@ "Name": "AcrossFacetPackedV3", "Version": "1.0.0" }, - "0x57C72BFf1514cd5b66FE84Ac462412B15e286Fa8": { - "Name": "", - "Version": "" + "0xcF8c70683D7c0E2a094348896A46407646b94859": { + "Name": "EmergencyPauseFacet", + "Version": "1.0.0" + }, + "0x313c27Aad40c7e0A0b923b539F05617D8114566D": { + "Name": "GasZipFacet", + "Version": "2.0.0" } }, "Periphery": { "ERC20Proxy": "0x8E1cf39Df64D9DCAdA7831d90CC852e02663410a", "Executor": "0xa9bfa49F26733271f4FD34A4b57bB7C563Ae056A", "FeeCollector": "0x8dBf6f59187b2EB36B980F3D8F4cFC6DC4E4642e", + "GasZipPeriphery": "0x4000f76450d9d40558fd60F66863F583B7A5BCCb", "LiFiDEXAggregator": "0x1F683faf1E2a770aa75f7B2e92117A5c11183E9C", "LiFuelFeeCollector": "0xB87C536E048Cfc082187E559fCFeFc3f1c89aEc7", - "Receiver": "0xdeDB2DAe4a9BC63910a722a3b7DC930C7E6f6421", + "Permit2Proxy": "0x6275f6631c955DC5dA9fBe8Dc7f24a3A5919443A", "ReceiverAcrossV3": "0xFa94c1A99799B3cA89DE6cbB3ccCDEcf1da62aFE", + "Receiver": "0xdeDB2DAe4a9BC63910a722a3b7DC930C7E6f6421", "ReceiverStargateV2": "", "RelayerCelerIM": "0xFf9565e1C4f01C368444D2bE4B9ef36ce7E95541", "TokenWrapper": "0xf15485ada1a1826fA46225032b13F6A972eC73C1" diff --git a/deployments/zksync.json b/deployments/zksync.json index 1ee211b4c..750531be8 100644 --- a/deployments/zksync.json +++ b/deployments/zksync.json @@ -18,8 +18,12 @@ "TokenWrapper": "0xf15485ada1a1826fA46225032b13F6A972eC73C1", "SymbiosisFacet": "0x9209f20CEab76c53F41348393BC0E8adFC6C6241", "LIFuelFacet": "0x1c21F1De46ff4f29D47517d753454E2EB8BEbe31", + "CBridgeFacetPacked": "0xCe81D9bB9D9605FFF296CCF8Af6b6B38f02Cf15d", "LiFiDEXAggregator": "0x1F683faf1E2a770aa75f7B2e92117A5c11183E9C", "AcrossFacetV3": "0x2e47355B70D6935C6A69d5F67e0aFe437791138e", "ReceiverAcrossV3": "0xFa94c1A99799B3cA89DE6cbB3ccCDEcf1da62aFE", - "AcrossFacetPackedV3": "0x9243578F60a2A3821642481b5851578cE92d9a78" -} + "AcrossFacetPackedV3": "0x9243578F60a2A3821642481b5851578cE92d9a78", + "GasZipFacet": "0x313c27Aad40c7e0A0b923b539F05617D8114566D", + "GasZipPeriphery": "0x4000f76450d9d40558fd60F66863F583B7A5BCCb", + "Permit2Proxy": "0x6275f6631c955DC5dA9fBe8Dc7f24a3A5919443A" +} \ No newline at end of file diff --git a/docs/GasZipFacet.md b/docs/GasZipFacet.md new file mode 100644 index 000000000..e3af721d0 --- /dev/null +++ b/docs/GasZipFacet.md @@ -0,0 +1,52 @@ +# GasZipFacet + +## Description + +The GasZipFacet offers functionality to send native gas tokens to other chains using the Gas.Zip protocol (https://www.gas.zip/) +If gas is sent to several chains, each chain will receive an equal amount + +## How To Use + +### Functions for bridging + +- `function startBridgeTokensViaGasZip(BridgeData memory _bridgeData, GasZipData calldata _gasZipData)` + - Simply deposits native tokens to Gas.zip protocol (this function can only be used for native tokens) +- `function swapAndStartBridgeTokensViaGasZip(BridgeData memory _bridgeData, SwapData[] calldata _swapData, GasZipData calldata _gasZipData)` + - Performs swap(s) from ERC20 to native before depositing to Gas.zip protocol. The last receiving token must be native. + +## Bridge Specific Parameters + +Some of the methods listed above take a variable labeled `_gasZipData`. + +This data is specific to Gas.Zip and is represented as the following struct type: + +```solidity +/// @dev GasZip-specific bridge data +/// @param receiverAddress the address on destination chain(s) where gas should be sent to +/// @param destinationChains a value that represents a list of chains to which gas should be distributed (see https://dev.gas.zip/gas/code-examples/deposit for more details) +struct GasZipData { + bytes32 receiverAddress; + // EVM addresses need to be padded with trailing 0s, e.g.: + // 0x391E7C679D29BD940D63BE94AD22A25D25B5A604000000000000000000000000 (correct) + // 0x000000000000000000000000391E7C679D29BD940D63BE94AD22A25D25B5A604 (incorrect) + uint256 destinationChains; +} +``` + +## Swap Data + +Some methods accept a `SwapData _swapData` parameter. + +Swapping is performed by a swap specific library that expects an array of calldata to can be run on various DEXs (i.e. Uniswap) to make one or multiple swaps before performing another action. + +The swap library can be found [here](../src/Libraries/LibSwap.sol). + +## LiFi Data + +Most of the methods accept a `BridgeData _bridgeData` parameter. + +The facet uses the `destinationChainId` parameter to determine which chain to send gas to. +It will send the `minAmount` to this chain (or convert it to native before in case of ERC20). +The funds will be sent to the `receiver` address. + +The `_bridgeData` also used to emit events that we can later track and index in our subgraphs and provide data on how our contracts are being used. `BridgeData` and the events we can emit can be found [here](../src/Interfaces/ILiFi.sol). diff --git a/docs/GasZipPeriphery.md b/docs/GasZipPeriphery.md new file mode 100644 index 000000000..b4f2edd82 --- /dev/null +++ b/docs/GasZipPeriphery.md @@ -0,0 +1,57 @@ +# GasZipPeriphery + +## Description + +The GasZipPeriphery contract offers functionality to send native gas tokens to other chains using the Gas.Zip protocol (https://www.gas.zip/) +It can be used as (LibSwap.SwapData) swap step prior to bridging. + +## How To Use + +### Functions for using this facet as a LibSwap.SwapData step + +The contract provides two public methods: +One for ERC20 tokens (these will be swapped into native before depositing to Gas.zip using the LiFiDEXAggregator) + +```solidity +/// @notice Swaps ERC20 tokens to native and deposits these native tokens in the GasZip router contract +/// Swaps are only allowed via the LiFiDEXAggregator +/// @dev this function can be used as a LibSwap.SwapData protocol step to combine it with any other bridge +/// @param _swapData The swap data that executes the swap from ERC20 to native +/// @param _gasZipData contains information which chains and address gas should be sent to +function depositToGasZipERC20( + LibSwap.SwapData calldata _swapData, + IGasZip.GasZipData calldata _gasZipData, +) +``` + +and another for native tokens (these will be directly deposited) + +```solidity +/// @notice Deposits native tokens to the GasZip router contract +/// @dev this function can be used as a LibSwap.SwapData protocol step to combine it with any other bridge +/// @param _gasZipData contains information which chains and address gas should be sent to +/// @param _amount the total amount to be deposited (will be split equally across all chains) +function depositToGasZipNative( + IGasZip.GasZipData calldata _gasZipData, + uint256 _amount +) +``` + +## Bridge Specific Parameters + +Some of the methods listed above take a variable labeled `_gasZipData`. + +This data is specific to Gas.Zip and is represented as the following struct type: + +```solidity +/// @dev GasZip-specific bridge data +/// @param receiverAddress the address on destination chain(s) where gas should be sent to +/// @param destinationChains a value that represents a list of chains to which gas should be distributed (see https://dev.gas.zip/gas/code-examples/deposit for more details) +struct GasZipData { + bytes32 receiverAddress; + // EVM addresses need to be padded with trailing 0s, e.g.: + // 0x391E7C679D29BD940D63BE94AD22A25D25B5A604000000000000000000000000 (correct) + // 0x000000000000000000000000391E7C679D29BD940D63BE94AD22A25D25B5A604 (incorrect) + uint256 destinationChains; +} +``` diff --git a/docs/Permit2Proxy.md b/docs/Permit2Proxy.md new file mode 100644 index 000000000..fa248bf27 --- /dev/null +++ b/docs/Permit2Proxy.md @@ -0,0 +1,126 @@ +# Permit2 Proxy + +## Description + +Periphery contract which enables gasless and semi-gasless transaction flows +enabled through ERC20 Permit and Uniswap's Permit2 + +## How To Use + +The contract has a number of methods for making gasless and semi-gasless calls +as well as a few helpful utility methods. + +The following methods are available: + +This method is used to execute a transaction where the approval is granted +using an ERC20 Permit signature. It can only be called by the signer in order +to prevent front-running attacks. + +```solidity +/// @notice Allows to bridge tokens through a LI.FI diamond contract using +/// an EIP2612 gasless permit (only works with tokenAddresses that +/// implement EIP2612) (in contrast to Permit2, calldata and diamondAddress +/// are not signed by the user and could therefore be replaced by the user) +/// Can only be called by the permit signer to prevent front-running. +/// @param tokenAddress Address of the token to be bridged +/// @param amount Amount of tokens to be bridged +/// @param deadline Transaction must be completed before this timestamp +/// @param v User signature (recovery ID) +/// @param r User signature (ECDSA output) +/// @param s User signature (ECDSA output) +/// @param diamondCalldata Address of the token to be bridged +function callDiamondWithEIP2612Signature( + address tokenAddress, + uint256 amount, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s, + bytes calldata diamondCalldata +) public payable +```` + +This method is used to execute a transaction where the approval is granted via +Uniswap's Permit2 contract. It can only be called by the signer in order to +prevent front-running attacks. + +```solidity +/// @notice Allows to bridge tokens of one type through a LI.FI diamond +/// contract using Uniswap's Permit2 contract and a user signature +/// that verifies allowance. The calldata can be changed by the +/// user. Can only be called by the permit signer to prevent +/// front-running. +/// @param _diamondCalldata the calldata to execute +/// @param _permit the Uniswap Permit2 parameters +/// @param _signature the signature giving approval to transfer tokens +function callDiamondWithPermit2( + bytes calldata _diamondCalldata, + ISignatureTransfer.PermitTransferFrom calldata _permit, + bytes calldata _signature +) external payable +``` + +This method enables a gasless flow by allowing a user to sign a Uniswap Permit2 +message hash which includes a "witness" type. This extra type restricts which +calldata can be called during execution and cannot be changed. Anyone with the +signature can execute the transaction on behalf of the signer. + +```solidity +/// @notice Allows to bridge tokens of one type through a LI.FI diamond +/// contract using Uniswap's Permit2 contract and a user signature +/// that verifies allowance, diamondAddress and diamondCalldata +/// @param _diamondCalldata the calldata to execute +/// @param _signer the signer giving permission to transfer tokens +/// @param _permit the Uniswap Permit2 parameters +/// @param _signature the signature giving approval to transfer tokens +function callDiamondWithPermit2Witness( + bytes calldata _diamondCalldata, + address _signer, + ISignatureTransfer.PermitTransferFrom calldata _permit, + bytes calldata _signature +) external payable +``` + +There are a few utility methods to make it easier to generate the necessary +signature for the gasless flow. + +Calling this method will return a valid message hash that can then be signed +in order to be executed later by another wallet. + +```solidity +/// @notice utitlity method for constructing a valid Permit2 message hash +/// @param _diamondCalldata the calldata to execute +/// @param _assetId the address of the token to approve +/// @param _amount amount of tokens to approve +/// @param _nonce the nonce to use +/// @param _deadline the expiration deadline +function getPermit2MsgHash( + bytes calldata _diamondCalldata, + address _assetId, + uint256 _amount, + uint256 _nonce, + uint256 _deadline +) external view returns (bytes32 msgHash) +``` + +Permit2 nonces are non-sequential and are a bit complicated to work with. The +following utility methods allow you to fetch the next valid nonce or sequence +of nonces for use when generating Permit2 signatures. + +```solidity +/// @notice Finds the next valid nonce for a user, starting from 0. +/// @param owner The owner of the nonces +/// @return nonce The first valid nonce starting from 0 +function nextNonce(address owner) external view returns (uint256 nonce) + +/// @notice Finds the next valid nonce for a user, after from a given nonce. +/// @dev This can be helpful if you're signing multiple nonces in a row and +/// need the next nonce to sign but the start one is still valid. +/// @param owner The owner of the nonces +/// @param start The nonce to start from +/// @return nonce The first valid nonce after the given nonce +function nextNonceAfter( + address owner, + uint256 start +) external view returns (uint256 nonce) +``` diff --git a/docs/README.md b/docs/README.md index a035266aa..cb4f60b94 100644 --- a/docs/README.md +++ b/docs/README.md @@ -62,3 +62,4 @@ - [Receiver](./Receiver.md) - [ReceiverStargateV2](./ReceiverStargateV2.md) - [RelayerCelerIM](./RelayerCelerIM.md) +- [Permit2Proxy](./Permit2Proxy.md) diff --git a/foundry-zksync/.gitignore b/foundry-zksync/.gitignore new file mode 100644 index 000000000..831a32ae7 --- /dev/null +++ b/foundry-zksync/.gitignore @@ -0,0 +1,2 @@ +forge +cast diff --git a/foundry-zksync/Dockerfile b/foundry-zksync/Dockerfile deleted file mode 100644 index e4a190bcf..000000000 --- a/foundry-zksync/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM ubuntu - -WORKDIR /foundry - -RUN apt update && apt install -y wget jq -RUN wget https://github.com/matter-labs/foundry-zksync/releases/download/nightly/foundry_nightly_linux_amd64.tar.gz -RUN tar -xzvf ./foundry_nightly_linux_amd64.tar.gz - -RUN mv ./forge /usr/local/bin/forge -RUN mv ./cast /usr/local/bin/cast - -CMD ["forge"] diff --git a/foundry.toml b/foundry.toml index 38924fa56..f613dae73 100644 --- a/foundry.toml +++ b/foundry.toml @@ -42,6 +42,7 @@ gravity = "${ETH_NODE_URI_GRAVITY}" immutablezkevm = "${ETH_NODE_URI_IMMUTABLEZKEVM}" kaia = "${ETH_NODE_URI_KAIA}" linea = "${ETH_NODE_URI_LINEA}" +lisk = "${ETH_NODE_URI_LISK}" moonbeam = "${ETH_NODE_URI_MOONBEAM}" moonriver = "${ETH_NODE_URI_MOONRIVER}" nova = "${ETH_NODE_URI_NOVA}" @@ -57,6 +58,7 @@ rootstock = "${ETH_NODE_URI_ROOTSTOCK}" sei = "${ETH_NODE_URI_SEI}" taiko = "${ETH_NODE_URI_TAIKO}" velas = "${ETH_NODE_URI_VELAS}" +worldchain = "${ETH_NODE_URI_WORLDCHAIN}" xlayer = "${ETH_NODE_URI_XLAYER}" zksync = "${ETH_NODE_URI_ZKSYNC}" scroll = "${ETH_NODE_URI_SCROLL}" @@ -88,18 +90,20 @@ gravity = { key = "${GRAVITY_ETHERSCAN_API_KEY}", url = "https://explorer.gravit immutablezkevm = { key = "${IMMUTABLEZKEVM_ETHERSCAN_API_KEY}", url = "https://explorer.immutable.com/api", chain = "13371", verifier = "blockscout" } kaia = { key = "${KAIA_ETHERSCAN_API_KEY}", url = "https://api-cypress.klaytnscope.com/api", chain = "8217", verifier = "blockscout" } linea = { key = "${LINEA_ETHERSCAN_API_KEY}", url = "https://api.lineascan.build/api", chain = "59144" } +lisk = { key = "${LISK_ETHERSCAN_API_KEY}", url = "https://blockscout.lisk.com/api", chain = "1135", verifier = "blockscout" } mantle = { key = "${MANTLE_ETHERSCAN_API_KEY}", url = "https://api.routescan.io/v2/network/mainnet/evm/5000/etherscan", chain = "5000" } metis = { key = "${METIS_ETHERSCAN_API_KEY}", url = "https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan", chain = "1088" } mode = { key = "${MODE_ETHERSCAN_API_KEY}", url = "https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan", chain = "34443" } moonbeam = { key = "${MOONBEAM_ETHERSCAN_API_KEY}", url = "https://api-moonbeam.moonscan.io/api", chain = "1284" } moonriver = { key = "${MOONRIVER_ETHERSCAN_API_KEY}", url = "https://api-moonriver.moonscan.io/api", chain = "1285" } optimism = { key = "${OPTIMISM_ETHERSCAN_API_KEY}", url = "https://api-optimistic.etherscan.io/api", chain = "10" } -opbnb = { key = "${OPBNB_ETHERSCAN_API_KEY}", url = "https://open-platform.nodereal.io/2462d1f4552043fba279ef0cee4661d9/op-bnb-mainnet/contract/", chain = "204" } +opbnb = { key = "${OPBNB_ETHERSCAN_API_KEY}", url = "https://api-opbnb.bscscan.com/api", chain = "204" } polygon = { key = "${POLYGON_ETHERSCAN_API_KEY}", url = "https://api.polygonscan.com/api", chain = "137" } polygonzkevm = { key = "${POLYGONZKEVM_ETHERSCAN_API_KEY}", url = "https://api-zkevm.polygonscan.com/api", chain = "1101" } scroll = { key = "${SCROLL_ETHERSCAN_API_KEY}", url = "https://api.scrollscan.com/api", chain = "534352" } sei = { key = "${SEI_ETHERSCAN_API_KEY}", url = "https://seitrace.com/pacific-1/api", chain = "1329" } taiko = { key = "${TAIKO_ETHERSCAN_API_KEY}", url = "https://api.taikoscan.io/api", chain = "167000" } +worldchain = { key = "${WORLDCHAIN_ETHERSCAN_API_KEY}", url = "https://api.worldscan.org/api", chain = "480" } xlayer = { key = "${XLAYER_ETHERSCAN_API_KEY}", url = "https://www.oklink.com/api/v5/explorer/xlayer/api", chain = "196" } #testnets diff --git a/lib/Permit2 b/lib/Permit2 new file mode 160000 index 000000000..cc56ad0f3 --- /dev/null +++ b/lib/Permit2 @@ -0,0 +1 @@ +Subproject commit cc56ad0f3439c502c246fc5cfcc3db92bb8b7219 diff --git a/networks b/networks index 4473c58bc..af8e0eedb 100644 --- a/networks +++ b/networks @@ -16,6 +16,7 @@ gravity immutablezkevm kaia linea +lisk mantle metis mode @@ -29,6 +30,7 @@ rootstock scroll sei taiko +worldchain xlayer zksync bsc-testnet diff --git a/package.json b/package.json index eed801663..51cc55fde 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "hardhat-preprocessor": "^0.1.5", "husky": "^8.0.1", "lint-staged": "^13.2.3", + "node-gyp": "^10.2.0", "patch-package": "^6.4.7", "plop": "^3.1.2", "postinstall-postinstall": "^2.1.0", @@ -79,7 +80,7 @@ "abi:generate": "forge clean && rm -fr typechain/* && forge build --skip script --skip test --skip Base --skip Test && hardhat diamondABI", "typechain": "forge clean && rm -rf typechain/* && forge build src && typechain --target ethers-v5 'out/*.sol/*.json' --out-dir typechain", "codegen": "plop", - "healthcheck": "tsx ./script/deploy/healthCheck.mts", + "healthcheck": "tsx ./script/deploy/healthCheck.ts", "propose-safe-tx": "ts-node ./script/deploy/safe/propose-to-safe.ts", "confirm-safe-tx": "ts-node ./script/deploy/safe/confirm-safe-tx.ts", "add-safe-owners": "ts-node ./script/deploy/safe/add-owners-to-safe.ts", @@ -96,6 +97,7 @@ "@safe-global/safe-apps-sdk": "^9.0.0", "@safe-global/safe-core-sdk-types": "^4.1.0", "@uma/sdk": "^0.22.1", + "@uniswap/permit2-sdk": "^1.3.0", "@uniswap/sdk": "^3.0.3", "chalk": "4.1.2", "citty": "^0.1.6", @@ -107,9 +109,9 @@ "merkletreejs": "^0.3.11", "notify-send": "^0.1.2", "pino": "^7.9.2", - "tsx": "^4.7.2", - "viem": "^2.18.7", - "zx": "^8.0.2" + "tsx": "^4.19.2", + "viem": "^2.21.48", + "zx": "^8.2.2" }, "lint-staged": { "*.{ts,js}": [ @@ -121,4 +123,4 @@ "solhint --fix" ] } -} +} \ No newline at end of file diff --git a/remappings.txt b/remappings.txt index cf75a7770..d4a7a4506 100644 --- a/remappings.txt +++ b/remappings.txt @@ -9,7 +9,7 @@ celer-network/=lib/sgn-v2-contracts/ create3-factory/=lib/create3-factory/src/ solmate/=lib/solmate/src/ solady/=lib/solady/src/ - +permit2/=lib/Permit2/src/ ds-test/=lib/ds-test/src/ forge-std/=lib/forge-std/src/ diff --git a/script/demoScripts/demoPermit2.ts b/script/demoScripts/demoPermit2.ts new file mode 100644 index 000000000..e12c71d58 --- /dev/null +++ b/script/demoScripts/demoPermit2.ts @@ -0,0 +1,158 @@ +import { + http, + createPublicClient, + parseAbi, + Hex, + parseUnits, + createWalletClient, + PublicClient, +} from 'viem' +import { privateKeyToAccount, sign } from 'viem/accounts' +import { arbitrum } from 'viem/chains' +import { defineCommand, runMain } from 'citty' +import { PermitTransferFrom, SignatureTransfer } from '@uniswap/Permit2-sdk' + +// Sample Transfer: +// sent: +// https://arbiscan.io/tx/0x8d0caf2b4fda6688b5ab36254632f6b6412cf25f0f262689ed41a2a21fe489f1 +// status: +// https://scan.li.fi/tx/0x8d0caf2b4fda6688b5ab36254632f6b6412cf25f0f262689ed41a2a21fe489f1 +// received: +// https://polygonscan.com/tx/0x5dda19403942912027ef5e941e844de3a2a65b0c5a4173e3d388a71a54e5e635 + +const USDT_ADDRESS = '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9' +const PERMIT2_PROXY_ADDRESS = '0xA3C7a31a2A97b847D967e0B755921D084C46a742' +const PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3' + +/** + * Get the nonce from the PERMIT2 contract + */ +const getNonceForAddress = async ( + client: PublicClient, + address: `0x${string}` +): Promise => { + const permit2ProxyAbi = parseAbi([ + 'function nextNonce(address owner) external view returns (uint256)', + ]) + + return client.readContract({ + address: PERMIT2_PROXY_ADDRESS, + abi: permit2ProxyAbi, + functionName: 'nextNonce', + args: [address], + }) +} + +/** + * Generate permit data + */ +const getPermitData = async (params: { + userAddress: `0x${string}` + tokenAddress: `0x${string}` + amount: bigint + deadline: bigint +}) => { + const client = createPublicClient({ + chain: arbitrum, + transport: http(), + }) + + // Get latest block + const block = await client.getBlock() + const _deadline = block.timestamp + params.deadline + const nonce = await getNonceForAddress(client, params.userAddress) + + // build hash + const permitTransferFrom: PermitTransferFrom = { + permitted: { + token: params.tokenAddress, + amount: params.amount, + }, + nonce, + spender: PERMIT2_PROXY_ADDRESS, + deadline: _deadline, + } + const msgHash: `0x${string}` = SignatureTransfer.hash( + permitTransferFrom, + PERMIT2_ADDRESS, + arbitrum.id + ) as `0x${string}` + + const transferFromData: [[`0x${string}`, bigint], bigint, bigint] = [ + [params.tokenAddress, params.amount], + nonce, + _deadline, + ] + + return { + msgHash, + transferFromData, + } +} + +const main = defineCommand({ + meta: { + name: 'demo-permit2', + description: 'Demonstrate a Permit2 tx', + }, + args: { + signerKey: { + type: 'string', + description: 'Private key of signer', + required: true, + }, + }, + async run({ args }) { + const SIGNER_PRIVATE_KEY = `0x${args.signerKey}` as Hex + + // Setup the required ABI + const permit2ProxyAbi = parseAbi([ + 'function callDiamondWithPermit2(bytes,((address,uint256),uint256,uint256),bytes) external', + 'function nextNonce(address owner) external view returns (uint256)', + ]) + + // Setup a signer account + const account = privateKeyToAccount(SIGNER_PRIVATE_KEY) + + // Get calldata to bridge USDT from LIFI API + const url = + 'https://li.quest/v1/quote?fromChain=ARB&toChain=POL&fromToken=0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9&toToken=0xc2132D05D31c914a87C6611C10748AEb04B58e8F&fromAddress=0xb9c0dE368BECE5e76B52545a8E377a4C118f597B&toAddress=0xb9c0dE368BECE5e76B52545a8E377a4C118f597B&fromAmount=5000000' + const options = { method: 'GET', headers: { accept: 'application/json' } } + const lifiResp = await fetch(url, options) + const calldata = (await lifiResp.json()).transactionRequest.data + + // Get Hash + const permitData = await getPermitData({ + userAddress: account.address, + tokenAddress: USDT_ADDRESS, + amount: parseUnits('5', 6), + deadline: 1200n, // 20min + }) + console.log(permitData) + + // Sign the message hash + const signature = await sign({ + hash: permitData.msgHash, + privateKey: SIGNER_PRIVATE_KEY, + to: 'hex', + }) + console.log('signature', signature) + + // Instantiate the executor account and a WRITE enabled client + const executorAccount = privateKeyToAccount(SIGNER_PRIVATE_KEY) + const walletClient = createWalletClient({ + account: executorAccount, + chain: arbitrum, + transport: http(), + }) + const tx = await walletClient.writeContract({ + address: PERMIT2_PROXY_ADDRESS, + abi: permit2ProxyAbi, + functionName: 'callDiamondWithPermit2', + args: [calldata, permitData.transferFromData, signature], + }) + console.log(`Transfers submitted in tx: ${tx}`) + }, +}) + +runMain(main) diff --git a/script/demoScripts/demoPermit2Proxy.ts b/script/demoScripts/demoPermit2Proxy.ts new file mode 100644 index 000000000..af37ab52d --- /dev/null +++ b/script/demoScripts/demoPermit2Proxy.ts @@ -0,0 +1,117 @@ +import { + http, + createPublicClient, + parseAbi, + Hex, + parseUnits, + serializeSignature, + createWalletClient, +} from 'viem' +import { privateKeyToAccount, sign } from 'viem/accounts' +import { arbitrum } from 'viem/chains' +import { defineCommand, runMain } from 'citty' + +const DIAMOND_ADDRESS = '0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE' +const USDT_ADDRESS = '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9' +const PERMIT2_PROXY_ADDRESS = '0xA3C7a31a2A97b847D967e0B755921D084C46a742' +const PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3' +const PRIVATE_KEY = `0x${process.env.PRIVATE_KEY}` + +const main = defineCommand({ + meta: { + name: 'demo-permit2', + description: 'Demonstrate a Permit2 tx', + }, + args: { + signerKey: { + type: 'string', + description: 'Private key of signer', + required: true, + }, + executorKey: { + type: 'string', + description: 'Private key of the executor', + required: true, + }, + }, + async run({ args }) { + const SIGNER_PRIVATE_KEY = `0x${args.signerKey}` as Hex + const EXECUTOR_PRIVATE_KEY = `0x${args.executorKey}` as Hex + + // Setup the required ABI + const permit2ProxyAbi = parseAbi([ + 'function getPermit2MsgHash(bytes,address,uint256,uint256,uint256) external view returns (bytes32)', + 'function nextNonce(address owner) external view returns (uint256)', + 'function callDiamondWithPermit2Witness(bytes,address,((address,uint256),uint256,uint256),bytes) external', + ]) + + // Setup a READ-ONLY client + const client = createPublicClient({ + chain: arbitrum, + transport: http(), + }) + + // Setup a signer account + const account = privateKeyToAccount(SIGNER_PRIVATE_KEY) + + // Get calldata to bridge USDT from LIFI API + const url = + 'https://li.quest/v1/quote?fromChain=ARB&toChain=POL&fromToken=0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9&toToken=0xc2132D05D31c914a87C6611C10748AEb04B58e8F&fromAddress=0xb9c0dE368BECE5e76B52545a8E377a4C118f597B&toAddress=0xb9c0dE368BECE5e76B52545a8E377a4C118f597B&fromAmount=5000000' + const options = { method: 'GET', headers: { accept: 'application/json' } } + const lifiResp = await fetch(url, options) + const calldata = (await lifiResp.json()).transactionRequest.data + + // Get the nonce from the PERMIT2 contract + const nonce = await client.readContract({ + address: PERMIT2_PROXY_ADDRESS, + abi: permit2ProxyAbi, + functionName: 'nextNonce', + args: [account.address], + }) + + // Get latest block + const block = await client.getBlock() + + // Construct a valid message hash to sign using Permit2Proxy's utility func + const msgHash = await client.readContract({ + address: PERMIT2_PROXY_ADDRESS, + abi: permit2ProxyAbi, + functionName: 'getPermit2MsgHash', + args: [ + calldata, + USDT_ADDRESS, + parseUnits('5', 6), + nonce, + block.timestamp + 1200n, // 20 min deadline + ], + }) + console.log(msgHash) + + // Sign the message hash + const rsvSig = await sign({ hash: msgHash, privateKey: SIGNER_PRIVATE_KEY }) + const signature = serializeSignature(rsvSig) + console.log(signature) + + // Setup the parameters for the executor to call + const tokenPermissions = [USDT_ADDRESS, parseUnits('5', 6)] + const permit = [tokenPermissions, nonce, block.timestamp + 1200n] + + // Instantiate the executor account and a WRITE enabled client + const executorAccount = privateKeyToAccount(EXECUTOR_PRIVATE_KEY) + const walletClient = createWalletClient({ + account: executorAccount, + chain: arbitrum, + transport: http(), + }) + + // Execute using the Permit2 Proxy + const tx = await walletClient.writeContract({ + address: PERMIT2_PROXY_ADDRESS, + abi: permit2ProxyAbi, + functionName: 'callDiamondWithPermit2Witness', + args: [calldata, account.address, permit, signature], + }) + }, +}) + +runMain(main) diff --git a/script/deploy/_targetState.json b/script/deploy/_targetState.json index 162fdb83b..cb50b4b72 100644 --- a/script/deploy/_targetState.json +++ b/script/deploy/_targetState.json @@ -12,9 +12,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -24,6 +24,7 @@ "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AcrossFacetV3": "1.0.0", @@ -38,11 +39,11 @@ "CelerCircleBridgeFacet": "1.0.1", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", + "GasZipFacet": "2.0.0", "GnosisBridgeFacet": "1.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", "HopFacetOptimized": "2.0.0", - "HyphenFacet": "1.0.0", "MayanFacet": "1.0.0", "OmniBridgeFacet": "1.0.0", "OptimismBridgeFacet": "1.0.0", @@ -69,9 +70,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -81,6 +82,7 @@ "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AcrossFacetV3": "1.0.0", @@ -94,10 +96,10 @@ "CelerCircleBridgeFacet": "1.0.1", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", + "GasZipFacet": "2.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", "HopFacetOptimized": "2.0.0", - "HyphenFacet": "1.0.0", "MayanFacet": "1.0.0", "SquidFacet": "1.0.0", "StargateFacet": "2.2.0", @@ -108,7 +110,7 @@ } }, "bsc": { - "production": { + "staging": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", @@ -122,7 +124,6 @@ "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -131,7 +132,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "AllBridgeFacet": "2.0.0", "AmarokFacet": "3.0.0", "AmarokFacetPacked": "1.0.0", @@ -146,6 +146,86 @@ "StargateFacetV2": "1.0.1", "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0", + "ThorSwapFacet": "1.2.0", + "GasZipPeriphery": "1.0.0" + }, + "LiFiDiamondImmutable": { + "DiamondCutFacet": "1.0.0", + "DiamondLoupeFacet": "1.0.0", + "OwnershipFacet": "1.0.0", + "DexManagerFacet": "1.0.1", + "AccessManagerFacet": "1.0.0", + "WithdrawFacet": "1.0.0", + "PeripheryRegistryFacet": "1.0.0", + "GenericSwapFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.1", + "StandardizedCallFacet": "1.1.0", + "LiFiDiamondImmutable": "1.0.0", + "ERC20Proxy": "1.0.0", + "Executor": "2.0.0", + "FeeCollector": "1.0.0", + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AllBridgeFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetImmutable": "2.0.0", + "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "SquidFacet": "1.0.0", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "ThorSwapFacet": "1.2.0" + } + }, + "production": { + "LiFiDiamond": { + "DiamondCutFacet": "1.0.0", + "DiamondLoupeFacet": "1.0.0", + "OwnershipFacet": "1.0.0", + "DexManagerFacet": "1.0.1", + "AccessManagerFacet": "1.0.0", + "WithdrawFacet": "1.0.0", + "PeripheryRegistryFacet": "1.0.0", + "GenericSwapFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.2", + "StandardizedCallFacet": "1.1.0", + "EmergencyPauseFacet": "1.0.1", + "LiFiDiamond": "1.0.0", + "ERC20Proxy": "1.0.0", + "Executor": "2.0.0", + "FeeCollector": "1.0.0", + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", + "AllBridgeFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetMutable": "2.0.0", + "GasZipFacet": "2.0.0", + "MayanFacet": "1.0.0", + "SquidFacet": "1.0.0", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", "ThorSwapFacet": "1.2.0" } } @@ -163,9 +243,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -174,10 +254,11 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AmarokFacet": "3.0.0", "AmarokFacetPacked": "1.0.0", "CBridgeFacet": "1.0.0", + "GasZipFacet": "2.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", "HopFacetOptimized": "2.0.0", @@ -198,9 +279,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -209,11 +290,11 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "CBridgeFacet": "1.0.0", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", - "HyphenFacet": "1.0.0", + "GasZipFacet": "2.0.0", "SquidFacet": "1.0.0", "StargateFacet": "2.2.0" } @@ -233,9 +314,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -245,13 +326,14 @@ "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AllBridgeFacet": "2.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", "CelerCircleBridgeFacet": "1.0.1", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", - "HyphenFacet": "1.0.0", + "GasZipFacet": "2.0.0", "MayanFacet": "1.0.0", "SquidFacet": "1.0.0", "StargateFacet": "2.2.0", @@ -275,9 +357,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -287,6 +369,7 @@ "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AcrossFacetV3": "1.0.0", @@ -300,10 +383,10 @@ "CelerCircleBridgeFacet": "1.0.1", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", + "GasZipFacet": "2.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", "HopFacetOptimized": "2.0.0", - "HyphenFacet": "1.0.0", "MayanFacet": "1.0.0", "SquidFacet": "1.0.0", "StargateFacet": "2.2.0", @@ -326,9 +409,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -338,6 +421,7 @@ "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AcrossFacetV3": "1.0.0", @@ -351,10 +435,10 @@ "CelerCircleBridgeFacet": "1.0.1", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", + "GasZipFacet": "2.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", "HopFacetOptimized": "2.0.0", - "HyphenFacet": "1.0.0", "StargateFacet": "2.2.0", "StargateFacetV2": "1.0.1", "ReceiverStargateV2": "1.0.0", @@ -375,9 +459,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -386,7 +470,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "CBridgeFacet": "1.0.0", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0" @@ -406,9 +489,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -417,7 +500,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "CBridgeFacet": "1.0.0", "SquidFacet": "1.0.0" } @@ -436,9 +518,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -446,8 +528,7 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0" + "LiFiDEXAggregator": "1.0.0" } } }, @@ -467,9 +548,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -478,7 +559,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "CBridgeFacet": "1.0.0", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", @@ -500,9 +580,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -511,43 +591,12 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "CBridgeFacet": "1.0.0", "SymbiosisFacet": "1.0.0" } } }, - "arbitrumnova": { - "production": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.1", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.2", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0", - "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0", - "SymbiosisFacet": "1.0.0" - } - } - }, + "arbitrumnova": {}, "zksync": { "production": { "LiFiDiamond": { @@ -561,9 +610,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -573,6 +622,7 @@ "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AcrossFacetV3": "1.0.0", @@ -581,6 +631,7 @@ "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", "CelerIMFacetMutable": "2.0.0", + "GasZipFacet": "2.0.0", "SymbiosisFacet": "1.0.0" } } @@ -598,9 +649,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -609,7 +660,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "CBridgeFacet": "1.0.0", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", @@ -632,9 +682,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -643,10 +693,11 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AmarokFacet": "3.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", + "GasZipFacet": "2.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", "HopFacetOptimized": "2.0.0", @@ -670,9 +721,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -715,9 +766,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -725,8 +776,7 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0" + "LiFiDEXAggregator": "1.0.0" } } }, @@ -743,9 +793,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -754,8 +804,9 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AmarokFacet": "3.0.0", + "GasZipFacet": "2.0.0", "StargateFacet": "2.2.0", "StargateFacetV2": "1.0.1", "ReceiverStargateV2": "1.0.0", @@ -776,9 +827,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -787,7 +838,7 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AcrossFacetV3": "1.0.0", @@ -795,6 +846,7 @@ "ReceiverAcrossV3": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", + "GasZipFacet": "2.0.0", "StargateFacet": "2.2.0", "StargateFacetV2": "1.0.1", "ReceiverStargateV2": "1.0.0", @@ -815,9 +867,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -826,13 +878,14 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AcrossFacetV3": "1.0.0", "AcrossFacetPackedV3": "1.0.0", "ReceiverAcrossV3": "1.0.0", "AmarokFacet": "3.0.0", + "GasZipFacet": "2.0.0", "SymbiosisFacet": "1.0.0" } } @@ -850,9 +903,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -861,7 +914,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "SquidFacet": "1.0.0", "StargateFacet": "2.2.0", "StargateFacetV2": "1.0.1", @@ -883,9 +935,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -913,9 +965,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -925,6 +977,7 @@ "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AcrossFacetV3": "1.0.0", @@ -932,13 +985,13 @@ "ReceiverAcrossV3": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", + "GasZipFacet": "2.0.0", "SquidFacet": "1.0.0", "SymbiosisFacet": "1.0.0" } } }, - "rootstock": {}, - "sei": { + "rootstock": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", @@ -951,9 +1004,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -962,15 +1015,11 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", - "SquidFacet": "1.0.0", - "StargateFacetV2": "1.0.1", - "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0" } } }, - "fraxtal": { + "sei": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", @@ -983,9 +1032,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -994,8 +1043,9 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "SquidFacet": "1.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0" } } @@ -1013,9 +1063,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1024,7 +1074,8 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", + "GasZipFacet": "2.0.0", "StargateFacetV2": "1.0.1", "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0" @@ -1044,9 +1095,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1055,10 +1106,11 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", "RelayerCelerIM": "2.0.0", + "GasZipFacet": "2.0.0", "StargateFacetV2": "1.0.1", "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0" @@ -1078,9 +1130,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1089,7 +1141,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "SquidFacet": "1.0.0" } } @@ -1107,9 +1158,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1118,7 +1169,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0" } @@ -1137,9 +1187,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1147,8 +1197,7 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0" + "LiFiDEXAggregator": "1.0.0" } } }, @@ -1165,9 +1214,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1176,7 +1225,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0" } @@ -1195,9 +1243,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1206,7 +1254,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0" } @@ -1225,9 +1272,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1235,8 +1282,7 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0" + "LiFiDEXAggregator": "1.0.0" } } }, @@ -1253,9 +1299,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1264,7 +1310,6 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", "RelayerCelerIM": "2.0.0", @@ -1287,9 +1332,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1298,9 +1343,10 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", + "GasZipPeriphery": "1.0.0", "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3" + "CBridgeFacetPacked": "1.0.3", + "GasZipFacet": "2.0.0" } } }, @@ -1317,21 +1363,79 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", + "StandardizedCallFacet": "1.1.0", + "EmergencyPauseFacet": "1.0.1", + "LiFiDiamond": "1.0.0", + "ERC20Proxy": "1.0.0", + "Executor": "2.0.0", + "FeeCollector": "1.0.0", + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "LiFiDEXAggregator": "1.0.0" + } + } + }, + "cronos": { + "production": { + "LiFiDiamond": { + "DiamondCutFacet": "1.0.0", + "DiamondLoupeFacet": "1.0.0", + "OwnershipFacet": "1.0.0", + "DexManagerFacet": "1.0.1", + "AccessManagerFacet": "1.0.0", + "WithdrawFacet": "1.0.0", + "PeripheryRegistryFacet": "1.0.0", + "GenericSwapFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0" + } + } + }, + "worldchain": { + "production": { + "LiFiDiamond": { + "DiamondCutFacet": "1.0.0", + "DiamondLoupeFacet": "1.0.0", + "OwnershipFacet": "1.0.0", + "DexManagerFacet": "1.0.1", + "AccessManagerFacet": "1.0.0", + "WithdrawFacet": "1.0.0", + "PeripheryRegistryFacet": "1.0.0", + "GenericSwapFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.2", + "StandardizedCallFacet": "1.1.0", + "EmergencyPauseFacet": "1.0.1", + "LiFiDiamond": "1.0.0", + "ERC20Proxy": "1.0.0", + "Executor": "2.0.0", + "FeeCollector": "1.0.0", + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0" + "GasZipPeriphery": "1.0.0", + "AcrossFacetV3": "1.0.0", + "AcrossFacetPackedV3": "1.0.0", + "ReceiverAcrossV3": "1.0.0", + "GasZipFacet": "2.0.0" } } }, - "rootstocks": { + "lisk": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", @@ -1344,9 +1448,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1355,12 +1459,15 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", - "SymbiosisFacet": "1.0.0" + "GasZipPeriphery": "1.0.0", + "AcrossFacetV3": "1.0.0", + "AcrossFacetPackedV3": "1.0.0", + "ReceiverAcrossV3": "1.0.0", + "GasZipFacet": "2.0.0" } } }, - "cronos": { + "abstract": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", @@ -1373,9 +1480,9 @@ "GenericSwapFacet": "1.0.0", "GenericSwapFacetV3": "1.0.1", "LIFuelFacet": "1.0.1", - "CalldataVerificationFacet": "1.1.1", + "CalldataVerificationFacet": "1.1.2", "StandardizedCallFacet": "1.1.0", - "EmergencyPauseFacet": "1.0.0", + "EmergencyPauseFacet": "1.0.1", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -1384,9 +1491,41 @@ "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", "LiFiDEXAggregator": "1.0.0", - "Permit2Proxy": "1.0.0", + "AcrossFacetV3": "1.0.0", + "AcrossFacetPackedV3": "1.0.0", + "ReceiverAcrossV3": "1.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.1" + } + } + }, + "fraxtal": { + "production": { + "LiFiDiamond": { + "DiamondCutFacet": "1.0.0", + "DiamondLoupeFacet": "1.0.0", + "OwnershipFacet": "1.0.0", + "DexManagerFacet": "1.0.1", + "AccessManagerFacet": "1.0.0", + "WithdrawFacet": "1.0.0", + "PeripheryRegistryFacet": "1.0.0", + "GenericSwapFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.2", + "StandardizedCallFacet": "1.1.0", + "EmergencyPauseFacet": "1.0.1", + "LiFiDiamond": "1.0.0", + "ERC20Proxy": "1.0.0", + "Executor": "2.0.0", + "FeeCollector": "1.0.0", + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "SquidFacet": "1.0.0", "SymbiosisFacet": "1.0.0" } } } -} \ No newline at end of file +} diff --git a/script/deploy/deploySingleContract.sh b/script/deploy/deploySingleContract.sh index 3209b0a49..b7c1e73da 100755 --- a/script/deploy/deploySingleContract.sh +++ b/script/deploy/deploySingleContract.sh @@ -96,7 +96,7 @@ deploySingleContract() { if [[ $NETWORK == "zksync" ]]; then DEPLOY_SCRIPT_DIRECTORY="script/deploy/zksync/" fi - + if [[ -z "$CONTRACT" ]]; then # get user-selected deploy script and contract from list SCRIPT=$(ls -1 "$DEPLOY_SCRIPT_DIRECTORY" | sed -e 's/\.s.sol$//' | grep 'Deploy' | gum filter --placeholder "Deploy Script") @@ -207,11 +207,10 @@ deploySingleContract() { rm -fr ./out rm -fr ./zkout # Clean zksync cache - docker run --rm -it --volume .:/foundry -u $(id -u):$(id -g) -e FOUNDRY_PROFILE=zksync foundry-zksync forge cache clean + FOUNDRY_PROFILE=zksync ./foundry-zksync/forge cache clean - # Run zksync specific fork of forge from Docker so as not to pollute the - # local foundry forge setup - docker run --rm -it --volume .:/foundry -u $(id -u):$(id -g) -e FOUNDRY_PROFILE=zksync foundry-zksync forge build --zksync + # Run zksync specific fork of forge + FOUNDRY_PROFILE=zksync ./foundry-zksync/forge build --zksync fi # execute script @@ -224,17 +223,17 @@ deploySingleContract() { doNotContinueUnlessGasIsBelowThreshold "$NETWORK" if [[ $NETWORK == "zksync" ]]; then - # Deploy zksync scripts using the zksync specific fork of forge from Docker - RAW_RETURN_DATA=$(docker run --rm -it --volume .:/foundry -u $(id -u):$(id -g) -e FOUNDRY_PROFILE=zksync -e DEPLOYSALT=$DEPLOYSALT -e NETWORK=$NETWORK -e FILE_SUFFIX=$FILE_SUFFIX -e PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") foundry-zksync forge script "$FULL_SCRIPT_PATH" -f $NETWORK --json --silent --broadcast --skip-simulation --slow --zksync) + # Deploy zksync scripts using the zksync specific fork of forge + RAW_RETURN_DATA=$(FOUNDRY_PROFILE=zksync DEPLOYSALT=$DEPLOYSALT NETWORK=$NETWORK FILE_SUFFIX=$FILE_SUFFIX PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") ./foundry-zksync/forge script "$FULL_SCRIPT_PATH" -f $NETWORK --json --broadcast --skip-simulation --slow --zksync) else # try to execute call - RAW_RETURN_DATA=$(DEPLOYSALT=$DEPLOYSALT CREATE3_FACTORY_ADDRESS=$CREATE3_FACTORY_ADDRESS NETWORK=$NETWORK FILE_SUFFIX=$FILE_SUFFIX DEFAULT_DIAMOND_ADDRESS_DEPLOYSALT=$DEFAULT_DIAMOND_ADDRESS_DEPLOYSALT DEPLOY_TO_DEFAULT_DIAMOND_ADDRESS=$DEPLOY_TO_DEFAULT_DIAMOND_ADDRESS PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") DIAMOND_TYPE=$DIAMOND_TYPE forge script "$FULL_SCRIPT_PATH" -f $NETWORK -vvvvvv --json --silent --broadcast --skip-simulation --legacy) + RAW_RETURN_DATA=$(DEPLOYSALT=$DEPLOYSALT CREATE3_FACTORY_ADDRESS=$CREATE3_FACTORY_ADDRESS NETWORK=$NETWORK FILE_SUFFIX=$FILE_SUFFIX DEFAULT_DIAMOND_ADDRESS_DEPLOYSALT=$DEFAULT_DIAMOND_ADDRESS_DEPLOYSALT DEPLOY_TO_DEFAULT_DIAMOND_ADDRESS=$DEPLOY_TO_DEFAULT_DIAMOND_ADDRESS PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") DIAMOND_TYPE=$DIAMOND_TYPE forge script "$FULL_SCRIPT_PATH" -f $NETWORK --json --broadcast --skip-simulation --legacy) fi RETURN_CODE=$? # print return data only if debug mode is activated - echoDebug "RAW_RETURN_DATA: $RAW_RETURN_DATA" + # echoDebug "RAW_RETURN_DATA: $RAW_RETURN_DATA" # check return data for error message (regardless of return code as this is not 100% reliable) if [[ $RAW_RETURN_DATA == *"\"logs\":[]"* && $RAW_RETURN_DATA == *"\"returns\":{}"* ]]; then diff --git a/script/deploy/facets/DeployGasZipFacet.s.sol b/script/deploy/facets/DeployGasZipFacet.s.sol new file mode 100644 index 000000000..627bb265f --- /dev/null +++ b/script/deploy/facets/DeployGasZipFacet.s.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import { DeployScriptBase } from "./utils/DeployScriptBase.sol"; +import { GasZipFacet } from "lifi/Facets/GasZipFacet.sol"; +import { stdJson } from "forge-std/Script.sol"; + +contract DeployScript is DeployScriptBase { + using stdJson for string; + + constructor() DeployScriptBase("GasZipFacet") {} + + function run() + public + returns (GasZipFacet deployed, bytes memory constructorArgs) + { + constructorArgs = getConstructorArgs(); + + deployed = GasZipFacet(deploy(type(GasZipFacet).creationCode)); + } + + function getConstructorArgs() internal override returns (bytes memory) { + string memory gasZipConfig = string.concat( + root, + "/config/gaszip.json" + ); + + string memory gasZipConfigJson = vm.readFile(gasZipConfig); + + address gasZipRouter = gasZipConfigJson.readAddress( + string.concat(".gasZipRouters.", network) + ); + + return abi.encode(gasZipRouter); + } +} diff --git a/script/deploy/facets/DeployGasZipPeriphery.s.sol b/script/deploy/facets/DeployGasZipPeriphery.s.sol new file mode 100644 index 000000000..0bef977e4 --- /dev/null +++ b/script/deploy/facets/DeployGasZipPeriphery.s.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import { DeployScriptBase } from "./utils/DeployScriptBase.sol"; +import { GasZipPeriphery } from "lifi/Periphery/GasZipPeriphery.sol"; +import { stdJson } from "forge-std/Script.sol"; + +contract DeployScript is DeployScriptBase { + using stdJson for string; + + constructor() DeployScriptBase("GasZipPeriphery") {} + + function run() + public + returns (GasZipPeriphery deployed, bytes memory constructorArgs) + { + constructorArgs = getConstructorArgs(); + + deployed = GasZipPeriphery(deploy(type(GasZipPeriphery).creationCode)); + } + + function getConstructorArgs() internal override returns (bytes memory) { + // get gasZipRouter address + string memory gasZipConfig = string.concat( + root, + "/config/gaszip.json" + ); + + string memory gasZipConfigJson = vm.readFile(gasZipConfig); + + address gasZipRouter = gasZipConfigJson.readAddress( + string.concat(".gasZipRouters.", network) + ); + + // get LiFiDEXAggregator address + string memory deployLog = string.concat( + root, + "/deployments/", + network, + ".", + fileSuffix, + "json" + ); + string memory json = vm.readFile(deployLog); + + address liFiDEXAggregator = json.readAddress(".LiFiDEXAggregator"); + + // get network's SAFE address to become contract owner for potential fund withdrawals + string memory networks = string.concat(root, "/config/networks.json"); + + string memory networksJson = vm.readFile(networks); + + address safeAddress = networksJson.readAddress( + string.concat(".", network, ".safeAddress") + ); + + return abi.encode(gasZipRouter, liFiDEXAggregator, safeAddress); + } +} diff --git a/script/deploy/facets/DeployPermit2Proxy.s.sol b/script/deploy/facets/DeployPermit2Proxy.s.sol new file mode 100644 index 000000000..d1553cd3e --- /dev/null +++ b/script/deploy/facets/DeployPermit2Proxy.s.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import { DeployScriptBase } from "./utils/DeployScriptBase.sol"; +import { Permit2Proxy } from "lifi/Periphery/Permit2Proxy.sol"; +import { stdJson } from "forge-std/Script.sol"; + +contract DeployScript is DeployScriptBase { + using stdJson for string; + + constructor() DeployScriptBase("Permit2Proxy") {} + + function run() + public + returns (Permit2Proxy deployed, bytes memory constructorArgs) + { + constructorArgs = getConstructorArgs(); + + deployed = Permit2Proxy(deploy(type(Permit2Proxy).creationCode)); + } + + function getConstructorArgs() internal override returns (bytes memory) { + // get the address of the LiFiDiamond for the given network + string memory deployments = string.concat( + root, + "/deployments/", + network, + ".", + fileSuffix, + "json" + ); + string memory deploymentsJSON = vm.readFile(deployments); + + address diamond = deploymentsJSON.readAddress(".LiFiDiamond"); + + // get the Permit2 contract address for the given network + string memory permit2ProxyConfig = string.concat( + root, + "/config/permit2Proxy.json" + ); + + string memory permit2ProxyConfigJSON = vm.readFile(permit2ProxyConfig); + + address permit2Address = permit2ProxyConfigJSON.readAddress( + string.concat(".", network) + ); + + // get the multisig SAFE address for the given network + string memory networksConfig = string.concat( + root, + "/config/networks.json" + ); + + string memory networksConfigJSON = vm.readFile(networksConfig); + + address safeAddress = networksConfigJSON.readAddress( + string.concat(".", network, ".safeAddress") + ); + + return abi.encode(diamond, permit2Address, safeAddress); + } +} diff --git a/script/deploy/facets/UpdateGasZipFacet.s.sol b/script/deploy/facets/UpdateGasZipFacet.s.sol new file mode 100644 index 000000000..8433024ee --- /dev/null +++ b/script/deploy/facets/UpdateGasZipFacet.s.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import { UpdateScriptBase } from "./utils/UpdateScriptBase.sol"; + +contract DeployScript is UpdateScriptBase { + function run() + public + returns (address[] memory facets, bytes memory cutData) + { + return update("GasZipFacet"); + } +} diff --git a/script/deploy/healthCheck.mts b/script/deploy/healthCheck.ts similarity index 82% rename from script/deploy/healthCheck.mts rename to script/deploy/healthCheck.ts index 35b87c820..77dbd1c7d 100644 --- a/script/deploy/healthCheck.mts +++ b/script/deploy/healthCheck.ts @@ -3,6 +3,8 @@ import { consola } from 'consola' import { $, spinner } from 'zx' import { defineCommand, runMain } from 'citty' import * as chains from 'viem/chains' +import * as path from 'path' +import * as fs from 'fs' import { Address, Chain, @@ -14,31 +16,12 @@ import { http, parseAbi, } from 'viem' - -const chainNameMappings: Record = { - zksync: 'zkSync', - polygonzkevm: 'polygonZkEvm', - immutablezkevm: 'immutableZkEvm', -} - -const chainMap: Record = {} -for (const [k, v] of Object.entries(chains)) { - // @ts-ignore - chainMap[k] = v -} - -// TODO: remove this and import from ./utils/viemScriptHelpers.ts instead (did not work when I tried it) -export const getViemChainForNetworkName = (networkName: string): Chain => { - const chainName = chainNameMappings[networkName] || networkName - const chain: Chain = chainMap[chainName] - - if (!chain) - throw new Error( - `Chain ${networkName} (aka '${chainName}', if a mapping exists) not supported by viem or requires name mapping. Check if you can find your chain here: https://github.com/wevm/viem/tree/main/src/chains/definitions` - ) - - return chain -} +import { + Network, + networks, + getViemChainForNetworkName, + type NetworksObject, +} from '../utils/viemScriptHelpers' const SAFE_THRESHOLD = 3 @@ -193,8 +176,6 @@ const main = defineCommand({ consola.box('Checking facets registered in diamond...') $.quiet = true - const string = `${louperCmd} inspect diamond -a ${diamondAddress} -n ${network} --json` - console.log(`string: ${string}`) const facetsResult = await $`${louperCmd} inspect diamond -a ${diamondAddress} -n ${network} --json` @@ -261,6 +242,7 @@ const main = defineCommand({ address: deployedContracts['LiFiDiamond'], abi: parseAbi([ 'function approvedDexs() external view returns (address[])', + 'function isFunctionApproved(bytes4) external returns (bool)', ]), client: publicClient, }) @@ -297,6 +279,53 @@ const main = defineCommand({ `Found ${numMissing} missing dex${numMissing === 1 ? '' : 's'}` ) + // ╭─────────────────────────────────────────────────────────╮ + // │ Check approved sigs │ + // ╰─────────────────────────────────────────────────────────╯ + + consola.box('Checking DEX signatures approved in diamond...') + // Check if function signatures are approved + const { sigs } = await import(`../../config/sigs.json`) + + // Function to split array into chunks + const chunkArray = (array: T[], chunkSize: number): T[][] => { + const chunks: T[][] = [] + for (let i = 0; i < array.length; i += chunkSize) { + chunks.push(array.slice(i, i + chunkSize)) + } + return chunks + } + + const batchSize = 20 + const sigBatches = chunkArray(sigs, batchSize) + + const sigsToApprove: Hex[] = [] + + for (const batch of sigBatches) { + const calls = batch.map((sig: string) => { + return { + ...dexManager, + functionName: 'isFunctionApproved', + args: [sig], + } + }) + + const results = await publicClient.multicall({ contracts: calls }) + + for (let i = 0; i < results.length; i++) { + if (results[i].status !== 'success' || !results[i].result) { + console.log('Function not approved:', batch[i]) + sigsToApprove.push(batch[i] as Hex) + } + } + } + + if (sigsToApprove.length > 0) { + logError(`Missing ${sigsToApprove.length} DEX signatures`) + } else { + consola.success('No missing signatures.') + } + // ╭─────────────────────────────────────────────────────────╮ // │ Check contract ownership │ // ╰─────────────────────────────────────────────────────────╯ @@ -341,6 +370,33 @@ const main = defineCommand({ publicClient ) + // ╭─────────────────────────────────────────────────────────╮ + // │ Check emergency pause config │ + // ╰─────────────────────────────────────────────────────────╯ + consola.box('Checking emergency pause config...') + const filePath: string = path.join( + '.github', + 'workflows', + 'diamondEmergencyPause.yml' + ) + + try { + const fileContent: string = fs.readFileSync(filePath, 'utf8') + + const networkUpper: string = network.toUpperCase() + const pattern = new RegExp( + `ETH_NODE_URI_${networkUpper}\\s*:\\s*\\$\\{\\{\\s*secrets\\.ETH_NODE_URI_${networkUpper}\\s*\\}\\}` + ) + + const exists: boolean = pattern.test(fileContent) + + if (!exists) { + logError(`Missing ETH_NODE_URI config for ${network} in ${filePath}`) + } + } catch (error: any) { + logError(`Error checking workflow file: ${error.message}`) + } + // ╭─────────────────────────────────────────────────────────╮ // │ Check access permissions │ // ╰─────────────────────────────────────────────────────────╯ @@ -404,15 +460,13 @@ const main = defineCommand({ // │ SAFE Configuration │ // ╰─────────────────────────────────────────────────────────╯ consola.box('Checking SAFE configuration...') - if ( - !globalConfig.safeAddresses[network.toLowerCase()] || - !globalConfig.safeApiUrls[network.toLowerCase()] - ) { + const networkConfig: Network = networks[network.toLowerCase()] + if (!networkConfig.safeAddress || !networkConfig.safeApiUrl) { consola.warn('SAFE address not configured') } else { const safeOwners = globalConfig.safeOwners - const safeAddress = globalConfig.safeAddresses[network.toLowerCase()] - const safeApiUrl = globalConfig.safeApiUrls[network.toLowerCase()] + const safeAddress = networkConfig.safeAddress + const safeApiUrl = networkConfig.safeApiUrl const configUrl = `${safeApiUrl}/v1/safes/${safeAddress}` const res = await fetch(configUrl) const safeConfig = await res.json() @@ -442,9 +496,9 @@ const main = defineCommand({ }, }) -const logError = (string: string) => { - consola.error(string) - errors.push(string) +const logError = (msg: string) => { + consola.error(msg) + errors.push(msg) } const getOwnableContract = (address: Address, client: PublicClient) => { diff --git a/script/deploy/resources/deployRequirements.json b/script/deploy/resources/deployRequirements.json index dc022377f..d1deafe1a 100644 --- a/script/deploy/resources/deployRequirements.json +++ b/script/deploy/resources/deployRequirements.json @@ -534,6 +534,38 @@ "_relaySolver": { "configFileName": "relay.json", "keyInConfigFile": "..relaySolver", + "allowToDeployWithZeroAddress": "false" + } + } + }, + "Permit2Proxy": { + "configData": { + "permit2Address": { + "configFileName": "permit2Proxy.json", + "keyInConfigFile": ".", + "allowToDeployWithZeroAddress": "false" + } + } + }, + "GasZipFacet": { + "configData": { + "_gasZipRouter": { + "configFileName": "gaszip.json", + "keyInConfigFile": ".gasZipRouters.", + "allowToDeployWithZeroAddress": "false" + } + } + }, + "GasZipPeriphery": { + "configData": { + "_gasZipRouter": { + "configFileName": "gaszip.json", + "keyInConfigFile": ".gasZipRouters.", + "allowToDeployWithZeroAddress": "false" + } + }, + "contractAddresses": { + "LiFiDEXAggregator": { "allowToDeployWithZeroAddress": "false" } } diff --git a/script/deploy/safe/add-owners-to-safe.ts b/script/deploy/safe/add-owners-to-safe.ts index ee6eb1729..903c13156 100644 --- a/script/deploy/safe/add-owners-to-safe.ts +++ b/script/deploy/safe/add-owners-to-safe.ts @@ -5,7 +5,12 @@ import Safe, { EthersAdapter } from '@safe-global/protocol-kit' import SafeApiKit from '@safe-global/api-kit' import { ethers } from 'ethers6' import { getSafeUtilityContracts, safeAddresses, safeApiUrls } from './config' -import { getViemChainForNetworkName } from '../../utils/viemScriptHelpers' +import { + NetworksObject, + getViemChainForNetworkName, +} from '../../utils/viemScriptHelpers' +import data from '../../../config/networks.json' +const networks: NetworksObject = data as NetworksObject const main = defineCommand({ meta: { @@ -40,12 +45,12 @@ const main = defineCommand({ const config: SafeApiKitConfig = { chainId: BigInt(chain.id), - txServiceUrl: safeApiUrls[network], + txServiceUrl: networks[network].safeApiUrl, } const safeService = new SafeApiKit(config) - const safeAddress = getAddress(safeAddresses[network]) + const safeAddress = getAddress(networks[network].safeAddress) const rpcUrl = args.rpcUrl || chain.rpcUrls.default.http[0] const provider = new ethers.JsonRpcProvider(rpcUrl) diff --git a/script/deploy/safe/config.ts b/script/deploy/safe/config.ts index a1b22de4f..4cd557907 100644 --- a/script/deploy/safe/config.ts +++ b/script/deploy/safe/config.ts @@ -1,5 +1,4 @@ import { ContractNetworksConfig } from '@safe-global/protocol-kit' -import { immutableZkEvm } from 'viem/chains' export const safeApiUrls: Record = { mainnet: 'https://safe-transaction-mainnet.safe.global/api', @@ -7,7 +6,7 @@ export const safeApiUrls: Record = { aurora: 'https://safe-transaction-aurora.safe.global/api', avalanche: 'https://safe-transaction-avalanche.safe.global/api', base: 'https://safe-transaction-base.safe.global/api', - blast: 'https://transaction.blast-safe.io/api', + blast: 'https://safe-transaction-blast.safe.global/api', boba: 'https://safe-transaction.mainnet.boba.network/api', bsc: 'https://safe-transaction-bsc.safe.global/api', celo: 'https://safe-transaction-celo.safe.global/api', diff --git a/script/deploy/safe/confirm-safe-tx.ts b/script/deploy/safe/confirm-safe-tx.ts index 2a3e7eb8d..7018c20fe 100644 --- a/script/deploy/safe/confirm-safe-tx.ts +++ b/script/deploy/safe/confirm-safe-tx.ts @@ -9,6 +9,7 @@ import * as chains from 'viem/chains' import { getSafeUtilityContracts } from './config' import { NetworksObject, + getAllActiveNetworks, getViemChainForNetworkName, } from '../../utils/viemScriptHelpers' import * as dotenv from 'dotenv' @@ -20,7 +21,8 @@ const networks: NetworksObject = networksConfig const ABI_LOOKUP_URL = `https://api.openchain.xyz/signature-database/v1/lookup?function=%SELECTOR%&filter=true` -const allNetworks = Object.keys(networks) +const allNetworks = Object.keys(networksConfig) + // In order to skip specific networks simple comment them in const skipNetworks: string[] = [ // 'mainnet', @@ -32,6 +34,7 @@ const skipNetworks: string[] = [ // 'boba', // 'bsc', // 'celo', + // 'cronos', // 'fantom', // 'fraxtal', // 'fuse', @@ -46,6 +49,7 @@ const skipNetworks: string[] = [ // 'moonbeam', // 'moonriver', // 'optimism', + // 'opbnb', // 'polygon', // 'polygonzkevm', // 'rootstock', @@ -56,7 +60,10 @@ const skipNetworks: string[] = [ // 'zksync', ] const defaultNetworks = allNetworks.filter( - (network) => !skipNetworks.includes(network) && network !== 'localanvil' + (network) => + !skipNetworks.includes(network) && + network !== 'localanvil' && + networks[network.toLowerCase()].status === 'active' // <<< deactivate this to operate on non-active networks ) const storedResponses: Record = {} @@ -87,6 +94,11 @@ for (const [k, v] of Object.entries(chains)) { } const func = async (network: string, privateKey: string, rpcUrl?: string) => { + console.info(' ') + consola.info('-'.repeat(80)) + + const safeWebUrl = networks[network.toLowerCase()].safeWebUrl + const chain = getViemChainForNetworkName(network) const config: SafeApiKitConfig = { @@ -94,7 +106,18 @@ const func = async (network: string, privateKey: string, rpcUrl?: string) => { txServiceUrl: networks[network.toLowerCase()].safeApiUrl, } - const safeService = new SafeApiKit(config) + let safeService + try { + safeService = new SafeApiKit(config) + } catch (err) { + consola.error(`error encountered while setting up SAFE service: ${err}`) + consola.error(`skipping network ${network}`) + consola.error( + `Please check this SAFE NOW to make sure no pending transactions are missed:` + ) + console.log(`${safeWebUrl}`) + return + } const safeAddress = networks[network.toLowerCase()].safeAddress @@ -104,7 +127,6 @@ const func = async (network: string, privateKey: string, rpcUrl?: string) => { const signerAddress = await signer.getAddress() - consola.info('-'.repeat(80)) consola.info('Chain:', chain.name) consola.info('Signer:', signerAddress) @@ -113,39 +135,80 @@ const func = async (network: string, privateKey: string, rpcUrl?: string) => { signerOrProvider: signer, }) - const protocolKit = await Safe.create({ - ethAdapter, - safeAddress: safeAddress, - contractNetworks: getSafeUtilityContracts(chain.id), - }) + let protocolKit: Safe + try { + protocolKit = await Safe.create({ + ethAdapter, + safeAddress: safeAddress, + contractNetworks: getSafeUtilityContracts(chain.id), + }) + } catch (err) { + consola.error(`error encountered while setting up protocolKit: ${err}`) + consola.error(`skipping network ${network}`) + consola.error( + `Please check this network's SAFE manually NOW to make sure no pending transactions are missed` + ) + return + } - const allTx = await retry(() => - safeService.getPendingTransactions(safeAddress) - ) + let allTx + try { + allTx = await retry(() => safeService.getPendingTransactions(safeAddress)) + } catch (err) { + consola.error( + `error encountered while getting pending transactions for network ${network}` + ) + consola.error(`skipping network ${network}`) + consola.error( + `Please check this network's SAFE manually NOW to make sure no pending transactions are missed` + ) + return + } // Function to sign a transaction const signTransaction = async ( - txToConfirm: SafeMultisigTransactionResponse + txToConfirm: SafeMultisigTransactionResponse, + safeWebUrl: string ) => { consola.info('Signing transaction', txToConfirm.safeTxHash) const signedTx = await protocolKit.signTransaction(txToConfirm) const dataToBeSigned = signedTx.getSignature(signerAddress)?.data if (!dataToBeSigned) throw Error(`error while preparing data to be signed`) - await retry(() => - safeService.confirmTransaction(txToConfirm.safeTxHash, dataToBeSigned) - ) + try { + await retry(() => + safeService.confirmTransaction(txToConfirm.safeTxHash, dataToBeSigned) + ) + } catch (err) { + consola.error('Error while trying to sign the transaction') + consola.error( + `Try to re-run this script again or check the SAFE web URL: ${safeWebUrl}` + ) + throw Error(`Transaction could not be signed`) + } consola.success('Transaction signed', txToConfirm.safeTxHash) } // Function to execute a transaction async function executeTransaction( - txToConfirm: SafeMultisigTransactionResponse + txToConfirm: SafeMultisigTransactionResponse, + safeWebUrl: string ) { consola.info('Executing transaction', txToConfirm.safeTxHash) - const exec = await protocolKit.executeTransaction(txToConfirm) - await exec.transactionResponse?.wait() + try { + const exec = await protocolKit.executeTransaction(txToConfirm) + await exec.transactionResponse?.wait() + } catch (err) { + consola.error('Error while trying to execute the transaction') + consola.error( + `Try to re-run this script again or check the SAFE web URL: ${safeWebUrl}` + ) + throw Error(`Transaction could not be executed`) + } + consola.success('Transaction executed', txToConfirm.safeTxHash) + console.info(' ') + console.info(' ') } // only show transaction Signer has not confirmed yet @@ -237,16 +300,22 @@ const func = async (network: string, privateKey: string, rpcUrl?: string) => { } if (action === 'Sign') { - await signTransaction(txToConfirm) + try { + await signTransaction(txToConfirm, safeWebUrl) + } catch {} } if (action === 'Sign & Execute Now') { - await signTransaction(txToConfirm) - await executeTransaction(txToConfirm) + try { + await signTransaction(txToConfirm, safeWebUrl) + await executeTransaction(txToConfirm, safeWebUrl) + } catch {} } if (action === 'Execute Now') { - await executeTransaction(txToConfirm) + try { + await executeTransaction(txToConfirm, safeWebUrl) + } catch {} } } } diff --git a/script/deploy/safe/propose-to-safe.ts b/script/deploy/safe/propose-to-safe.ts index 58def0d61..e6331a02d 100644 --- a/script/deploy/safe/propose-to-safe.ts +++ b/script/deploy/safe/propose-to-safe.ts @@ -10,7 +10,27 @@ import { } from '@safe-global/safe-core-sdk-types' import * as chains from 'viem/chains' import { getSafeUtilityContracts, safeAddresses, safeApiUrls } from './config' -import { getViemChainForNetworkName } from '../../utils/viemScriptHelpers' +import { + NetworksObject, + getViemChainForNetworkName, +} from '../../utils/viemScriptHelpers' +import data from '../../../config/networks.json' +const networks: NetworksObject = data as NetworksObject +import consola from 'consola' + +const retry = async (func: () => Promise, retries = 3): Promise => { + try { + const result = await func() + return result + } catch (e) { + if (retries > 0) { + consola.error('Retry after error:', e) + return retry(func, retries - 1) + } + + throw e + } +} const chainMap: Record = {} for (const [k, v] of Object.entries(chains)) { @@ -54,12 +74,12 @@ const main = defineCommand({ const config: SafeApiKitConfig = { chainId: BigInt(chain.id), - txServiceUrl: safeApiUrls[args.network.toLowerCase()], + txServiceUrl: networks[args.network.toLowerCase()].safeApiUrl, } const safeService = new SafeApiKit(config) - const safeAddress = safeAddresses[args.network.toLowerCase()] + const safeAddress = networks[args.network.toLowerCase()].safeAddress const rpcUrl = args.rpcUrl || chain.rpcUrls.default.http[0] const provider = new ethers.JsonRpcProvider(rpcUrl) @@ -99,12 +119,14 @@ const main = defineCommand({ console.info('Proposing transaction to', args.to) // Propose transaction to the service - await safeService.proposeTransaction({ - safeAddress: await protocolKit.getAddress(), - safeTransactionData: safeTransaction.data, - safeTxHash, - senderAddress, - senderSignature: signature.data, + await retry(async () => { + safeService.proposeTransaction({ + safeAddress: await protocolKit.getAddress(), + safeTransactionData: safeTransaction.data, + safeTxHash, + senderAddress, + senderSignature: signature.data, + }) }) console.info('Transaction proposed') diff --git a/script/deploy/zksync/DeployGasZipFacet.s.sol b/script/deploy/zksync/DeployGasZipFacet.s.sol new file mode 100644 index 000000000..627bb265f --- /dev/null +++ b/script/deploy/zksync/DeployGasZipFacet.s.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import { DeployScriptBase } from "./utils/DeployScriptBase.sol"; +import { GasZipFacet } from "lifi/Facets/GasZipFacet.sol"; +import { stdJson } from "forge-std/Script.sol"; + +contract DeployScript is DeployScriptBase { + using stdJson for string; + + constructor() DeployScriptBase("GasZipFacet") {} + + function run() + public + returns (GasZipFacet deployed, bytes memory constructorArgs) + { + constructorArgs = getConstructorArgs(); + + deployed = GasZipFacet(deploy(type(GasZipFacet).creationCode)); + } + + function getConstructorArgs() internal override returns (bytes memory) { + string memory gasZipConfig = string.concat( + root, + "/config/gaszip.json" + ); + + string memory gasZipConfigJson = vm.readFile(gasZipConfig); + + address gasZipRouter = gasZipConfigJson.readAddress( + string.concat(".gasZipRouters.", network) + ); + + return abi.encode(gasZipRouter); + } +} diff --git a/script/deploy/zksync/DeployGasZipPeriphery.s.sol b/script/deploy/zksync/DeployGasZipPeriphery.s.sol new file mode 100644 index 000000000..0bef977e4 --- /dev/null +++ b/script/deploy/zksync/DeployGasZipPeriphery.s.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import { DeployScriptBase } from "./utils/DeployScriptBase.sol"; +import { GasZipPeriphery } from "lifi/Periphery/GasZipPeriphery.sol"; +import { stdJson } from "forge-std/Script.sol"; + +contract DeployScript is DeployScriptBase { + using stdJson for string; + + constructor() DeployScriptBase("GasZipPeriphery") {} + + function run() + public + returns (GasZipPeriphery deployed, bytes memory constructorArgs) + { + constructorArgs = getConstructorArgs(); + + deployed = GasZipPeriphery(deploy(type(GasZipPeriphery).creationCode)); + } + + function getConstructorArgs() internal override returns (bytes memory) { + // get gasZipRouter address + string memory gasZipConfig = string.concat( + root, + "/config/gaszip.json" + ); + + string memory gasZipConfigJson = vm.readFile(gasZipConfig); + + address gasZipRouter = gasZipConfigJson.readAddress( + string.concat(".gasZipRouters.", network) + ); + + // get LiFiDEXAggregator address + string memory deployLog = string.concat( + root, + "/deployments/", + network, + ".", + fileSuffix, + "json" + ); + string memory json = vm.readFile(deployLog); + + address liFiDEXAggregator = json.readAddress(".LiFiDEXAggregator"); + + // get network's SAFE address to become contract owner for potential fund withdrawals + string memory networks = string.concat(root, "/config/networks.json"); + + string memory networksJson = vm.readFile(networks); + + address safeAddress = networksJson.readAddress( + string.concat(".", network, ".safeAddress") + ); + + return abi.encode(gasZipRouter, liFiDEXAggregator, safeAddress); + } +} diff --git a/script/deploy/zksync/DeployPermit2Proxy.s.sol b/script/deploy/zksync/DeployPermit2Proxy.s.sol new file mode 100644 index 000000000..d1553cd3e --- /dev/null +++ b/script/deploy/zksync/DeployPermit2Proxy.s.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import { DeployScriptBase } from "./utils/DeployScriptBase.sol"; +import { Permit2Proxy } from "lifi/Periphery/Permit2Proxy.sol"; +import { stdJson } from "forge-std/Script.sol"; + +contract DeployScript is DeployScriptBase { + using stdJson for string; + + constructor() DeployScriptBase("Permit2Proxy") {} + + function run() + public + returns (Permit2Proxy deployed, bytes memory constructorArgs) + { + constructorArgs = getConstructorArgs(); + + deployed = Permit2Proxy(deploy(type(Permit2Proxy).creationCode)); + } + + function getConstructorArgs() internal override returns (bytes memory) { + // get the address of the LiFiDiamond for the given network + string memory deployments = string.concat( + root, + "/deployments/", + network, + ".", + fileSuffix, + "json" + ); + string memory deploymentsJSON = vm.readFile(deployments); + + address diamond = deploymentsJSON.readAddress(".LiFiDiamond"); + + // get the Permit2 contract address for the given network + string memory permit2ProxyConfig = string.concat( + root, + "/config/permit2Proxy.json" + ); + + string memory permit2ProxyConfigJSON = vm.readFile(permit2ProxyConfig); + + address permit2Address = permit2ProxyConfigJSON.readAddress( + string.concat(".", network) + ); + + // get the multisig SAFE address for the given network + string memory networksConfig = string.concat( + root, + "/config/networks.json" + ); + + string memory networksConfigJSON = vm.readFile(networksConfig); + + address safeAddress = networksConfigJSON.readAddress( + string.concat(".", network, ".safeAddress") + ); + + return abi.encode(diamond, permit2Address, safeAddress); + } +} diff --git a/script/helperFunctions.sh b/script/helperFunctions.sh index 81b3bad43..cf04eb762 100755 --- a/script/helperFunctions.sh +++ b/script/helperFunctions.sh @@ -1427,8 +1427,8 @@ function verifyContract() { # only show output if DEBUG flag is activated if [[ "$DEBUG" == *"true"* ]]; then if [[ $NETWORK == "zksync" ]]; then - # Verify using foundry-zksync from docker image - docker run --rm -it -v .:/foundry -u $(id -u):$(id -g) -e FOUNDRY_PROFILE=zksync foundry-zksync forge verify-contract --zksync --watch --chain 324 "$ADDRESS" "$FULL_PATH" --skip-is-verified-check -e "${!API_KEY}" + # Verify using foundry-zksync + FOUNDRY_PROFILE=zksync ./foundry-zksync/forge verify-contract --zksync --watch --chain 324 "$ADDRESS" "$FULL_PATH" --skip-is-verified-check -e "${!API_KEY}" else forge verify-contract --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --skip-is-verified-check -e "${!API_KEY}" fi @@ -1436,8 +1436,8 @@ function verifyContract() { # TODO: add code that automatically identifies blockscout verification else if [[ $NETWORK == "zksync" ]]; then - # Verify using foundry-zksync from docker image - docker run --rm -it -v .:/foundry -u $(id -u):$(id -g) -e FOUNDRY_PROFILE=zksync foundry-zksync forge verify-contract --zksync --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 + # Verify using foundry-zksync + FOUNDRY_PROFILE=zksync ./foundry-zksync/forge verify-contract --zksync --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 else forge verify-contract --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 fi @@ -1446,17 +1446,17 @@ function verifyContract() { # only show output if DEBUG flag is activated if [[ "$DEBUG" == *"true"* ]]; then if [[ $NETWORK == "zksync" ]]; then - # Verify using foundry-zksync from docker image - docker run --rm -it -v .:/foundry -u $(id -u):$(id -g) -e FOUNDRY_PROFILE=zksync foundry-zksync forge verify-contract --zksync --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --constructor-args $ARGS --skip-is-verified-check -e "${!API_KEY}" + # Verify using foundry-zksync + FOUNDRY_PROFILE=zksync ./foundry-zksync/forge verify-contract --zksync --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --constructor-args $ARGS --skip-is-verified-check -e "${!API_KEY}" else forge verify-contract --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --constructor-args $ARGS --skip-is-verified-check -e "${!API_KEY}" fi else if [[ $NETWORK == "zksync" ]]; then - # Verify using foundry-zksync from docker image - docker run --rm -it -v .:/foundry -u $(id -u):$(id -g) -e FOUNDRY_PROFILE=zksync foundry-zksync forge verify-contract --zksync --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --constructor-args $ARGS --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 + # Verify using foundry-zksync + FOUNDRY_PROFILE=zksync ./foundry-zksync/forge verify-contract --zksync --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --constructor-args $ARGS --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 else - forge verify-contract --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --constructor-ar --zksyncgs $ARGS --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 + forge verify-contract --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --constructor-args $ARGS --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 fi fi fi @@ -3677,6 +3677,146 @@ function updateDiamondLogs() { done playNotificationSound } + +# Function: install_foundry_zksync +# Description: Downloads and installs the zkSync version of foundry tools (forge and cast) +# Arguments: +# $1 - Installation directory (optional, defaults to ./foundry-zksync) +# FOUNDRY_ZKSYNC_VERSION - Environment variable to specify version +# Example Versions: +# FOUNDRY_ZKSYNC_VERSION="nightly-082b6a3610be972dd34aff9439257f4d85ddbf15" +# Returns: +# 0 - Success +# 1 - Failure (with error message) +install_foundry_zksync() { + # Foundry ZKSync version + local FOUNDRY_ZKSYNC_VERSION="nightly-082b6a3610be972dd34aff9439257f4d85ddbf15" + # Allow custom installation directory or use default + local install_dir="${1:-./foundry-zksync}" + + # Verify that FOUNDRY_ZKSYNC_VERSION is set + if [ -z "${FOUNDRY_ZKSYNC_VERSION}" ]; then + echo "Error: FOUNDRY_ZKSYNC_VERSION is not set" + return 1 + fi + + echo "Using Foundry zkSync version: ${FOUNDRY_ZKSYNC_VERSION}" + + # Check if binaries already exist and are executable + # -x tests if a file exists and has execute permissions + if [ -x "${install_dir}/forge" ] && [ -x "${install_dir}/cast" ]; then + echo "forge and cast binaries already exist in ${install_dir} and are executable" + echo "Skipping download and installation" + return 0 + fi + + # Detect operating system + # $OSTYPE is a bash variable that contains the operating system type + local os + if [[ "$OSTYPE" == "darwin"* ]]; then + os="darwin" + elif [[ "$OSTYPE" == "linux-gnu"* ]]; then + os="linux" + else + echo "Unsupported operating system" + return 1 + fi + + # Detect CPU architecture + # uname -m returns the machine hardware name + local arch + case $(uname -m) in + x86_64) # Intel/AMD 64-bit + arch="amd64" + ;; + arm64|aarch64) # ARM 64-bit (e.g., Apple Silicon, AWS Graviton) + arch="arm64" + ;; + *) + echo "Unsupported architecture: $(uname -m)" + return 1 + ;; + esac + + # Construct download URL using the specified version + local base_url="https://github.com/matter-labs/foundry-zksync/releases/download/${FOUNDRY_ZKSYNC_VERSION}" + local filename="foundry_nightly_${os}_${arch}.tar.gz" + local download_url="${base_url}/${filename}" + + # Create installation directory if it doesn't exist + # -p flag creates parent directories if needed + mkdir -p "$install_dir" + + # Print detection results + echo "Detected OS: $os" + echo "Detected Architecture: $arch" + echo "Downloading from: $download_url" + echo "Installing to: $install_dir" + + # Download the file using curl or wget, whichever is available + # command -v checks if a command exists + # &> /dev/null redirects both stdout and stderr to null + if command -v curl &> /dev/null; then + # -L flag follows redirects, -o specifies output file + curl -L -o "${install_dir}/${filename}" "$download_url" + elif command -v wget &> /dev/null; then + # -O specifies output file + wget -O "${install_dir}/${filename}" "$download_url" + else + echo "Neither curl nor wget is installed" + return 1 + fi + + # Check if download was successful + # $? contains the return status of the last command + if [ $? -ne 0 ]; then + echo "Download failed" + return 1 + fi + + echo "Download completed successfully" + + # Extract the archive + # -x extract, -z gzip, -f file + echo "Extracting files..." + tar -xzf "${install_dir}/${filename}" -C "$install_dir" + + if [ $? -ne 0 ]; then + echo "Extraction failed" + return 1 + fi + + # Make binaries executable + # +x adds execute permission + echo "Setting executable permissions..." + chmod +x "${install_dir}/forge" "${install_dir}/cast" + + if [ $? -ne 0 ]; then + echo "Failed to set executable permissions" + return 1 + fi + + # Clean up by removing the downloaded archive + echo "Cleaning up..." + rm "${install_dir}/${filename}" + + if [ $? -ne 0 ]; then + echo "Cleanup failed" + return 1 + fi + + # Verify that binaries are executable + # This is a final check to ensure everything worked + if [ ! -x "${install_dir}/forge" ] || [ ! -x "${install_dir}/cast" ]; then + echo "Installation completed but binaries are not executable. Please check permissions." + return 1 + fi + + echo "Installation completed successfully" + echo "Binaries are executable and ready to use" + return 0 +} + # <<<<<< helpers to set/update deployment files/logs/etc # test cases for helper functions diff --git a/script/scriptMaster.sh b/script/scriptMaster.sh index bb35525d1..5e7e32773 100755 --- a/script/scriptMaster.sh +++ b/script/scriptMaster.sh @@ -134,15 +134,8 @@ scriptMaster() { if [[ $NETWORK == "zksync" ]]; then # Use zksync specific scripts DEPLOY_SCRIPT_DIRECTORY="script/deploy/zksync/" - # Check if the foundry-zksync docker image exists - if docker images --format '{{.Repository}}:{{.Tag}}' | grep -q '^foundry-zksync:latest$'; then - echo "The 'foundry-zksync' image already exists. Skipping build." - else - # If it doesn't exist we need to build it - echo "The 'foundry-zksync' image does not exist. Building it now..." - docker build -t foundry-zksync ./foundry-zksync - echo "The 'foundry-zksync' image has been built successfully." - fi + # Check if the foundry-zksync binaries exist, if not fetch them + install_foundry_zksync fi # get user-selected deploy script and contract from list diff --git a/script/tasks/diamondSyncDEXs.sh b/script/tasks/diamondSyncDEXs.sh index 55cca535e..3ee3d9623 100755 --- a/script/tasks/diamondSyncDEXs.sh +++ b/script/tasks/diamondSyncDEXs.sh @@ -49,6 +49,16 @@ function diamondSyncDEXs { # go through all networks and execute the script for NETWORK in "${NETWORKS[@]}"; do + + # Skip for localanvil or any testnet + if [[ "$NETWORK" == "localanvil" || \ + "$NETWORK" == "bsc-testnet" || \ + "$NETWORK" == "lineatest" || \ + "$NETWORK" == "mumbai" || \ + "$NETWORK" == "sepolia" ]]; then + continue + fi + # get diamond address from deployments script DIAMOND_ADDRESS=$(getContractAddressFromDeploymentLogs "$NETWORK" "$ENVIRONMENT" "$DIAMOND_CONTRACT_NAME") @@ -104,7 +114,7 @@ function diamondSyncDEXs { CHECKSUMMED=$(cast --to-checksum-address "$DEX_ADDRESS") CODE=$(cast code $CHECKSUMMED --rpc-url "$RPC_URL") if [[ "$CODE" == "0x" ]]; then - echo "[warning] DEX $CHECKSUMMED is not deployed on network $NETWORK - skipping" + error "DEX $CHECKSUMMED is not deployed on network $NETWORK - skipping" echo "$NETWORK - $CHECKSUMMED" >>.invalid-dexs continue fi diff --git a/script/tasks/diamondSyncSigs.sh b/script/tasks/diamondSyncSigs.sh index 71fbdd442..a5810d389 100755 --- a/script/tasks/diamondSyncSigs.sh +++ b/script/tasks/diamondSyncSigs.sh @@ -63,19 +63,29 @@ function diamondSyncSigs { # go through all networks and execute the script for NETWORK in "${NETWORKS[@]}"; do + # Skip for localanvil or any testnet + if [[ "$NETWORK" == "localanvil" || \ + "$NETWORK" == "bsc-testnet" || \ + "$NETWORK" == "lineatest" || \ + "$NETWORK" == "mumbai" || \ + "$NETWORK" == "sepolia" ]]; then + continue + fi + # get RPC URL for given network RPC_URL=$(getRPCUrl "$NETWORK") # call batchSetFunctionApprovalBySignature function in diamond to add function selectors local ATTEMPTS=1 while [ $ATTEMPTS -le "$MAX_ATTEMPTS_PER_SCRIPT_EXECUTION" ]; do + echo "----------------------------------------------------------------------------------------" echo "[info] trying to add function selectors now - attempt ${ATTEMPTS} (max attempts: $MAX_ATTEMPTS_PER_SCRIPT_EXECUTION) " # ensure that gas price is below maximum threshold (for mainnet only) doNotContinueUnlessGasIsBelowThreshold "$NETWORK" # try to run the typescript script (will fail if the network is not yet supported by viem) - ts-node ./script/tasks/diamondSyncSigs.ts --network "$NETWORK" --rpcUrl "$RPC_URL" --privateKey "$PRIVATE_KEY" --environment "$ENVIRONMENT" + ts-node ./script/tasks/diamondSyncSigs.ts --network "$NETWORK" --rpcUrl "$RPC_URL" --privateKey "$(getPrivateKey "$NETWORK" "$ENVIRONMENT")" --environment "$ENVIRONMENT" RETURN_CODE=$? # check the typescript script failed diff --git a/script/tasks/diamondSyncSigs.ts b/script/tasks/diamondSyncSigs.ts index b055cd7e7..814e93b1b 100644 --- a/script/tasks/diamondSyncSigs.ts +++ b/script/tasks/diamondSyncSigs.ts @@ -12,6 +12,7 @@ import { ethers } from 'ethers6' import * as chains from 'viem/chains' import { privateKeyToAccount } from 'viem/accounts' import { getViemChainForNetworkName } from '../utils/viemScriptHelpers' +import consola from 'consola' export const chainNameMappings: Record = { zksync: 'zkSync', @@ -95,11 +96,23 @@ const main = defineCommand({ // Get list of function signatures to approve const sigsToApprove: Hex[] = [] + let multicallSuccess = true for (let i = 0; i < results.length; i++) { - if (!results[i].result) { - console.log('Function not approved:', sigs[i]) - sigsToApprove.push(sigs[i] as Hex) - } + if (results[i].status == 'success') { + if (!results[i].result) { + console.log('Function not approved:', sigs[i]) + sigsToApprove.push(sigs[i] as Hex) + } + } else multicallSuccess = false + } + + if (!multicallSuccess) { + consola.error( + `The multicall failed, could not check all currently registered signatures. Please use a different RPC for this network and try to run the script again.` + ) + // returning a success code here cause otherwise the wrapping bash script will always run the "old approach" + // and we still end up re-approving all signatures again and again + process.exit(0) } // Instantiate wallet (write enabled) client @@ -113,19 +126,29 @@ const main = defineCommand({ if (sigsToApprove.length > 0) { // Approve function signatures console.log('Approving function signatures...') - const tx = await walletClient.writeContract({ - address: deployedContracts['LiFiDiamond'], - abi: parseAbi([ - 'function batchSetFunctionApprovalBySignature(bytes4[],bool) external', - ]), - functionName: 'batchSetFunctionApprovalBySignature', - args: [sigsToApprove, true], - account, - }) + let tx + try { + tx = await walletClient.writeContract({ + address: deployedContracts['LiFiDiamond'], + abi: parseAbi([ + 'function batchSetFunctionApprovalBySignature(bytes4[],bool) external', + ]), + functionName: 'batchSetFunctionApprovalBySignature', + args: [sigsToApprove, true], + account, + }) + + await publicClient.waitForTransactionReceipt({ hash: tx }) + } catch (err) { + consola.error(JSON.stringify(err, null, 2)) + process.exit(1) + } console.log('Transaction:', tx) + process.exit(0) } else { console.log('All Signatures are already approved.') + process.exit(0) } }, }) diff --git a/script/tasks/diamondUpdatePeriphery.sh b/script/tasks/diamondUpdatePeriphery.sh index 56391f034..728a7aafd 100755 --- a/script/tasks/diamondUpdatePeriphery.sh +++ b/script/tasks/diamondUpdatePeriphery.sh @@ -126,7 +126,7 @@ function diamondUpdatePeriphery() { LAST_CALL=1 fi else - echo "[info] contract $CONTRACT not found in target state file > no action required" + warning "contract $CONTRACT not found in target state file. ACTION REQUIRED: Update target state file and try again if this contract should be included." fi done diff --git a/script/tasks/solidity/AddTokenApprovalsToCBridgeFacetPacked.s.sol b/script/tasks/solidity/AddTokenApprovalsToCBridgeFacetPacked.s.sol index 33fb34cec..79775a27f 100644 --- a/script/tasks/solidity/AddTokenApprovalsToCBridgeFacetPacked.s.sol +++ b/script/tasks/solidity/AddTokenApprovalsToCBridgeFacetPacked.s.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.17; +import "forge-std/console.sol"; import { UpdateScriptBase } from "../../deploy/facets/utils/UpdateScriptBase.sol"; import { stdJson } from "forge-std/StdJson.sol"; import { DiamondCutFacet, IDiamondCut } from "lifi/Facets/DiamondCutFacet.sol"; @@ -12,6 +13,20 @@ contract DeployScript is UpdateScriptBase { function run() public returns (address[] memory facets) { address facet = json.readAddress(".CBridgeFacetPacked"); + // The CBridgeFacetPacked owner is the refund wallet because we need access to trigger refunds + // As there is only one owner, that address also needs to execute the approvals. + uint256 refundPrivateKey = uint256( + vm.envOr("PRIVATE_KEY_REFUND_WALLET", bytes32(0)) + ); + require( + refundPrivateKey != 0, + "Refund wallet private key not set or invalid" + ); + console.log( + "Refund wallet address used in script:", + vm.addr(refundPrivateKey) + ); + // load config path = string.concat(root, "/config/cbridge.json"); json = vm.readFile(path); @@ -20,7 +35,7 @@ contract DeployScript is UpdateScriptBase { ); address[] memory tokensToApprove = abi.decode(rawConfig, (address[])); - vm.startBroadcast(deployerPrivateKey); + vm.startBroadcast(refundPrivateKey); CBridgeFacetPacked(payable(facet)).setApprovalForBridge( tokensToApprove diff --git a/script/utils/fetch-missing-deployments.ts b/script/utils/fetch-missing-deployments.ts new file mode 100644 index 000000000..3e8ed5243 --- /dev/null +++ b/script/utils/fetch-missing-deployments.ts @@ -0,0 +1,120 @@ +import fs from 'fs' +import path from 'path' +import dotenv from 'dotenv' + +dotenv.config() + +async function updateDeploymentLogs(network: string) { + try { + // Read network configuration + const networksConfig = JSON.parse( + fs.readFileSync('config/networks.json', 'utf8') + ) + const networkConfig = networksConfig[network] + + if (!networkConfig) { + throw new Error(`Network ${network} not found in config`) + } + + // Read deployment file + const deploymentPath = path.join('deployments', `${network}.json`) + const deployments = JSON.parse(fs.readFileSync(deploymentPath, 'utf8')) + + // Read master deployment log + const masterLogPath = 'deployments/_deployments_log_file.json' + const masterLog = JSON.parse(fs.readFileSync(masterLogPath, 'utf8')) + + // Get API key from environment variables + const apiKeyEnvVar = `${network.toUpperCase()}_ETHERSCAN_API_KEY` + const apiKey = process.env[apiKeyEnvVar] + + if (!apiKey) { + throw new Error(`API key not found for ${network}`) + } + + console.log(`Fetching details for deployed contracts on ${network}...`) + // Process each contract + for (const [contractName, contractAddress] of Object.entries(deployments)) { + try { + // Call explorer API + const url = new URL(networkConfig.explorerApiUrl) + url.searchParams.append('module', 'contract') + url.searchParams.append('action', 'getsourcecode') + url.searchParams.append('address', contractAddress as string) + url.searchParams.append('apiKey', apiKey) + + const response = await fetch(url.toString()) + const data = await response.json() + + if (!data.result[0].SourceCode) { + console.log(`Skipping ${contractName}: No source code found`) + continue + } + + // Extract version from source code + const sourceCode = data.result[0].SourceCode + const versionMatch = sourceCode.match( + /\/\/\/\s*@custom:version\s*([\d.]+)/ + ) + const version = versionMatch ? versionMatch[1] : null + + if (!version) { + console.log(`Skipping ${contractName}: No version found`) + continue + } + + // Update master log + console.log(`Updating ${contractName} - ${contractAddress}...`) + if (!masterLog[contractName]) { + masterLog[contractName] = {} + } + if (!masterLog[contractName][network]) { + masterLog[contractName][network] = {} + } + if (!masterLog[contractName][network].production) { + masterLog[contractName][network].production = {} + } + if (!masterLog[contractName][network].production[version]) { + masterLog[contractName][network].production[version] = [ + { + ADDRESS: contractAddress, + OPTIMIZER_RUNS: data.result[0].Runs || 0, + TIMESTAMP: new Date().toISOString(), + CONSTRUCTOR_ARGS: data.result[0].ConstructorArguments + ? normalizeBytes(data.result[0].ConstructorArguments) + : '0x', + SALT: '', + VERIFIED: true, + }, + ] + console.log('Updated') + } else { + console.log('Entry already exists') + } + } catch (error) { + console.error(`Error processing ${contractName}:`, error) + } + } + + // Write updated master log + fs.writeFileSync(masterLogPath, JSON.stringify(masterLog, null, 2)) + console.log(`Successfully updated deployment logs for ${network}`) + } catch (error) { + console.error('Error:', error) + process.exit(1) + } +} + +const normalizeBytes = (bytes: string): string => { + if (bytes.startsWith('0x')) return bytes + return `0x${bytes}` +} + +// Get network from command line arguments +const network = process.argv[2] +if (!network) { + console.error('Please provide a network name') + process.exit(1) +} + +updateDeploymentLogs(network) diff --git a/script/utils/viemScriptHelpers.ts b/script/utils/viemScriptHelpers.ts index 705a90658..3057c812e 100644 --- a/script/utils/viemScriptHelpers.ts +++ b/script/utils/viemScriptHelpers.ts @@ -20,11 +20,18 @@ export type Network = { multicallAddress: string safeApiUrl: string safeAddress: string + safeWebUrl: string gasZipChainId: number id: string } -const networks: NetworksObject = networksConfig +const colors = { + reset: '\x1b[0m', + red: '\x1b[31m', + green: '\x1b[32m', +} + +export const networks: NetworksObject = networksConfig export const getViemChainForNetworkName = (networkName: string): Chain => { const network = networks[networkName] @@ -76,3 +83,8 @@ export const getAllActiveNetworks = (): Network[] => { return activeNetworks } + +export const printSuccess = (message: string): void => { + if (!message?.trim()) return + console.log(`${colors.green}${message}${colors.reset}`) +} diff --git a/src/Facets/GasZipFacet.sol b/src/Facets/GasZipFacet.sol new file mode 100644 index 000000000..7af03cd92 --- /dev/null +++ b/src/Facets/GasZipFacet.sol @@ -0,0 +1,142 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { ILiFi } from "../Interfaces/ILiFi.sol"; +import { IGasZip } from "../Interfaces/IGasZip.sol"; +import { LibSwap } from "../Libraries/LibSwap.sol"; +import { LibAsset } from "../Libraries/LibAsset.sol"; +import { ReentrancyGuard } from "../Helpers/ReentrancyGuard.sol"; +import { SwapperV2 } from "../Helpers/SwapperV2.sol"; +import { Validatable } from "../Helpers/Validatable.sol"; +import { SafeTransferLib } from "solady/utils/SafeTransferLib.sol"; +import { InvalidCallData, CannotBridgeToSameNetwork, InvalidAmount } from "lifi/Errors/GenericErrors.sol"; + +/// @title GasZipFacet +/// @author LI.FI (https://li.fi) +/// @notice Provides functionality to swap ERC20 tokens to native and deposit them to the gas.zip protocol (https://www.gas.zip/) +/// @custom:version 2.0.0 +contract GasZipFacet is ILiFi, ReentrancyGuard, SwapperV2, Validatable { + using SafeTransferLib for address; + + error OnlyNativeAllowed(); + error TooManyChainIds(); + + /// State /// + address public constant NON_EVM_RECEIVER_IDENTIFIER = + 0x11f111f111f111F111f111f111F111f111f111F1; + IGasZip public immutable gasZipRouter; + + /// Constructor /// + constructor(address _gasZipRouter) { + gasZipRouter = IGasZip(_gasZipRouter); + } + + /// @notice Bridges tokens using the gas.zip protocol + /// @dev this function only supports native flow. For ERC20 flows this facet should be used as a protocol step instead + /// @param _bridgeData The core information needed for bridging + /// @param _gasZipData contains information which chains and address gas should be sent to + function startBridgeTokensViaGasZip( + ILiFi.BridgeData memory _bridgeData, + IGasZip.GasZipData calldata _gasZipData + ) + external + payable + nonReentrant + doesNotContainSourceSwaps(_bridgeData) + doesNotContainDestinationCalls(_bridgeData) + { + // this function / path shall only be used for native assets + if (!LibAsset.isNativeAsset(_bridgeData.sendingAssetId)) + revert OnlyNativeAllowed(); + + // make sure that msg.value matches the to-be-deposited amount + if (msg.value != _bridgeData.minAmount) revert InvalidAmount(); + + // deposit native to Gas.zip + _startBridge(_bridgeData, _gasZipData); + } + + /// @notice Performs one or multiple actions (e.g. fee collection, swapping) that must end with the native token before depositing to the gas.zip protocol + /// @param _bridgeData The core information needed for depositing + /// @param _swapData An array of swap related data for performing swaps before bridging + /// @param _gasZipData contains information which chains and address gas should be sent to + function swapAndStartBridgeTokensViaGasZip( + ILiFi.BridgeData memory _bridgeData, + LibSwap.SwapData[] calldata _swapData, + IGasZip.GasZipData calldata _gasZipData + ) + external + payable + nonReentrant + refundExcessNative(payable(msg.sender)) + containsSourceSwaps(_bridgeData) + doesNotContainDestinationCalls(_bridgeData) + { + // make sure that the output of the last swap step is native + if ( + !LibAsset.isNativeAsset( + _swapData[_swapData.length - 1].receivingAssetId + ) + ) revert InvalidCallData(); + + // deposit and swap ERC20 tokens to native + _bridgeData.minAmount = _depositAndSwap( + _bridgeData.transactionId, + _bridgeData.minAmount, + _swapData, + payable(msg.sender) + ); + + // deposit native to Gas.zip + _startBridge(_bridgeData, _gasZipData); + } + + /// @dev Contains the business logic for depositing to GasZip protocol + /// @param _bridgeData The core information needed for bridging + /// @param _gasZipData contains information which chains and address gas should be sent to + function _startBridge( + ILiFi.BridgeData memory _bridgeData, + IGasZip.GasZipData calldata _gasZipData + ) internal { + // make sure receiver address has a value to prevent potential loss of funds + if (_gasZipData.receiverAddress == bytes32(0)) + revert InvalidCallData(); + + // validate that receiverAddress matches with bridgeData in case of EVM target chain + if ( + _bridgeData.receiver != NON_EVM_RECEIVER_IDENTIFIER && + _gasZipData.receiverAddress != + bytes32(uint256(uint160(_bridgeData.receiver))) + ) revert InvalidCallData(); + + // validate bridgeData + // make sure destinationChainId is of a different network + if (_bridgeData.destinationChainId == block.chainid) + revert CannotBridgeToSameNetwork(); + + // We are depositing to a new contract that supports deposits for EVM chains + Solana (therefore 'receiver' address is bytes32) + gasZipRouter.deposit{ value: _bridgeData.minAmount }( + _gasZipData.destinationChains, + _gasZipData.receiverAddress + ); + + emit LiFiTransferStarted(_bridgeData); + } + + /// @dev Returns a value that signals to Gas.zip to which chains gas should be sent in equal parts + /// @param _chainIds a list of Gas.zip-specific chainIds (not the original chainIds), see https://dev.gas.zip/gas/chain-support/outbound + function getDestinationChainsValue( + uint8[] calldata _chainIds + ) external pure returns (uint256 destinationChains) { + uint256 length = _chainIds.length; + + if (length > 32) revert TooManyChainIds(); + + for (uint256 i; i < length; ++i) { + // Shift destinationChains left by 8 bits and add the next chainID + destinationChains = + (destinationChains << 8) | + uint256(_chainIds[i]); + } + } +} diff --git a/src/Interfaces/IGasZip.sol b/src/Interfaces/IGasZip.sol new file mode 100644 index 000000000..5a92a65ea --- /dev/null +++ b/src/Interfaces/IGasZip.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 +pragma solidity ^0.8.17; + +/// @title Interface for GasZip +/// @author LI.FI (https://li.fi) +interface IGasZip { + /// @dev GasZip-specific bridge data + /// @param receiverAddress the address on destination chain(s) where gas should be sent to + /// @param destinationChains a value that represents a list of chains to which gas should be distributed (see https://dev.gas.zip/gas/code-examples/deposit for more details) + struct GasZipData { + bytes32 receiverAddress; + // EVM addresses need to be padded with trailing 0s, e.g.: + // 0x391E7C679D29BD940D63BE94AD22A25D25B5A604000000000000000000000000 (correct) + // 0x000000000000000000000000391E7C679D29BD940D63BE94AD22A25D25B5A604 (incorrect) + uint256 destinationChains; + } + + function deposit(uint256 destinationChains, bytes32 to) external payable; +} diff --git a/src/Periphery/GasZipPeriphery.sol b/src/Periphery/GasZipPeriphery.sol new file mode 100644 index 000000000..1c4617597 --- /dev/null +++ b/src/Periphery/GasZipPeriphery.sol @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { ILiFi } from "../Interfaces/ILiFi.sol"; +import { IGasZip } from "../Interfaces/IGasZip.sol"; +import { LibSwap } from "../Libraries/LibSwap.sol"; +import { LibAsset, IERC20 } from "../Libraries/LibAsset.sol"; +import { LibUtil } from "../Libraries/LibUtil.sol"; +import { ReentrancyGuard } from "../Helpers/ReentrancyGuard.sol"; +import { SwapperV2 } from "../Helpers/SwapperV2.sol"; +import { WithdrawablePeriphery } from "../Helpers/WithdrawablePeriphery.sol"; +import { Validatable } from "../Helpers/Validatable.sol"; +import { SafeTransferLib } from "solady/utils/SafeTransferLib.sol"; +import { InvalidCallData } from "../Errors/GenericErrors.sol"; + +/// @title GasZipPeriphery +/// @author LI.FI (https://li.fi) +/// @notice Provides functionality to swap ERC20 tokens to use the gas.zip protocol as a pre-bridge step (https://www.gas.zip/) +/// @custom:version 1.0.0 +contract GasZipPeriphery is + ILiFi, + ReentrancyGuard, + SwapperV2, + Validatable, + WithdrawablePeriphery +{ + using SafeTransferLib for address; + + /// State /// + IGasZip public immutable gasZipRouter; + address public immutable liFiDEXAggregator; + + /// Errors /// + error TooManyChainIds(); + + /// Constructor /// + constructor( + address _gasZipRouter, + address _liFiDEXAggregator, + address _owner + ) WithdrawablePeriphery(_owner) { + gasZipRouter = IGasZip(_gasZipRouter); + liFiDEXAggregator = _liFiDEXAggregator; + } + + /// @notice Swaps ERC20 tokens to native and deposits these native tokens in the GasZip router contract + /// Swaps are only allowed via the LiFiDEXAggregator + /// @dev this function can be used as a LibSwap.SwapData protocol step to combine it with any other bridge + /// @param _swapData The swap data that executes the swap from ERC20 to native + /// @param _gasZipData contains information about which chains gas should be sent to + function depositToGasZipERC20( + LibSwap.SwapData calldata _swapData, + IGasZip.GasZipData calldata _gasZipData + ) public { + // deposit ERC20 asset from diamond + LibAsset.depositAsset(_swapData.sendingAssetId, _swapData.fromAmount); + + // max approve to DEX, if not already done + LibAsset.maxApproveERC20( + IERC20(_swapData.sendingAssetId), + liFiDEXAggregator, + type(uint256).max + ); + + // execute swap using LiFiDEXAggregator + // solhint-disable-next-line avoid-low-level-calls + (bool success, bytes memory res) = liFiDEXAggregator.call( + _swapData.callData + ); + if (!success) { + LibUtil.revertWith(res); + } + // extract the swap output amount from the call return value + uint256 swapOutputAmount = abi.decode(res, (uint256)); + + // deposit native tokens to Gas.zip protocol + depositToGasZipNative(_gasZipData, swapOutputAmount); + } + + /// @notice Deposits native tokens to the GasZip router contract + /// @dev this function can be used as a LibSwap.SwapData protocol step to combine it with any other bridge + /// @param _gasZipData contains information which chains and address gas should be sent to + /// @param _amount the total amount to be deposited (will be split equally across all chains) + function depositToGasZipNative( + IGasZip.GasZipData calldata _gasZipData, + uint256 _amount + ) public payable { + // make sure that receiverAddress is not 0 + if (_gasZipData.receiverAddress == bytes32(0)) + revert InvalidCallData(); + + // We are depositing to a new contract that supports deposits for EVM chains + Solana (therefore 'receiver' address is bytes32) + gasZipRouter.deposit{ value: _amount }( + _gasZipData.destinationChains, + _gasZipData.receiverAddress + ); + + // return unused native value to msg.sender, if any + // this is required due to LI.FI backend-internal requirements (money flow) + uint256 remainingNativeBalance = address(this).balance; + if (remainingNativeBalance > 0) { + msg.sender.safeTransferETH(remainingNativeBalance); + } + } + + /// @dev Returns a value that signals to Gas.zip to which chains gas should be sent in equal parts + /// @param _chainIds a list of Gas.zip-specific chainIds (not the original chainIds), see https://dev.gas.zip/gas/chain-support/outbound + function getDestinationChainsValue( + uint8[] calldata _chainIds + ) external pure returns (uint256 destinationChains) { + uint256 length = _chainIds.length; + + if (length > 32) revert TooManyChainIds(); + + for (uint256 i; i < length; ++i) { + // Shift destinationChains left by 8 bits and add the next chainID + destinationChains = + (destinationChains << 8) | + uint256(_chainIds[i]); + } + } + + // Required to receive ETH from ERC20-to-Native swaps + receive() external payable {} +} diff --git a/src/Periphery/LiFiDEXAggregator.sol b/src/Periphery/LiFiDEXAggregator.sol index a61f38245..da3dd3541 100644 --- a/src/Periphery/LiFiDEXAggregator.sol +++ b/src/Periphery/LiFiDEXAggregator.sol @@ -22,7 +22,7 @@ uint160 constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970 /// @title LiFi DEX Aggregator /// @author Ilya Lyalin (contract copied from: https://github.com/sushiswap/sushiswap/blob/c8c80dec821003eb72eb77c7e0446ddde8ca9e1e/protocols/route-processor/contracts/RouteProcessor4.sol) /// @notice Processes calldata to swap using various DEXs -/// @custom:version 1.0.0 +/// @custom:version 1.5.0 contract LiFiDEXAggregator is Ownable { using SafeERC20 for IERC20; using Approve for IERC20; @@ -575,6 +575,126 @@ contract LiFiDEXAggregator is Ownable { uniswapV3SwapCallback(amount0Delta, amount1Delta, data); } + /// @notice Called to `msg.sender` after executing a swap via RaExchangeV3#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. + /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. + /// @param data Any data passed through by the caller via the RaExchangeV3#swap call + function ramsesV2SwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external { + uniswapV3SwapCallback(amount0Delta, amount1Delta, data); + } + + /// @notice Called to `msg.sender` after executing a swap via XeiV3#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. + /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. + /// @param data Any data passed through by the caller via the XeiV3#swap call + function xeiV3SwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external { + uniswapV3SwapCallback(amount0Delta, amount1Delta, data); + } + + /// @notice Called to `msg.sender` after executing a swap via DragonSwapV2#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. + /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. + /// @param data Any data passed through by the caller via the DragonSwapV2#swap call + function dragonswapV2SwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external { + uniswapV3SwapCallback(amount0Delta, amount1Delta, data); + } + + /// @notice Called to `msg.sender` after executing a swap via AgniV3#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. + /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. + /// @param data Any data passed through by the caller via the AgniV3#swap call + function agniSwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external { + uniswapV3SwapCallback(amount0Delta, amount1Delta, data); + } + + /// @notice Called to `msg.sender` after executing a swap via FusionXV3#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. + /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. + /// @param data Any data passed through by the caller via the FusionXV3#swap call + function fusionXV3SwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external { + uniswapV3SwapCallback(amount0Delta, amount1Delta, data); + } + + /// @notice Called to `msg.sender` after executing a swap via VVS FinanceV3#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. + /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. + /// @param data Any data passed through by the caller via the VVS Finance V3#swap call + function vvsV3SwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external { + uniswapV3SwapCallback(amount0Delta, amount1Delta, data); + } + + /// @notice Called to `msg.sender` after executing a swap via SupSwapV3#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. + /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. + /// @param data Any data passed through by the caller via the SupSwapV3#swap call + function supV3SwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external { + uniswapV3SwapCallback(amount0Delta, amount1Delta, data); + } + + /// @notice Called to `msg.sender` after executing a swap via ZebraV3#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. + /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. + /// @param data Any data passed through by the caller via the ZebraV3#swap call + function zebraV3SwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external { + uniswapV3SwapCallback(amount0Delta, amount1Delta, data); + } + /// @notice Curve pool swap. Legacy pools that don't return amountOut and have native coins are not supported /// @param stream [pool, poolType, fromIndex, toIndex, recipient, output token] /// @param from Where to take liquidity for swap diff --git a/src/Periphery/Permit2Proxy.sol b/src/Periphery/Permit2Proxy.sol new file mode 100644 index 000000000..ca82ae5bc --- /dev/null +++ b/src/Periphery/Permit2Proxy.sol @@ -0,0 +1,365 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.17; + +import { ISignatureTransfer } from "permit2/interfaces/ISignatureTransfer.sol"; +import { LibAsset, IERC20 } from "lifi/Libraries/LibAsset.sol"; +import { PermitHash } from "permit2/libraries/PermitHash.sol"; +import { ERC20Permit } from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; +import { WithdrawablePeriphery } from "lifi/Helpers/WithdrawablePeriphery.sol"; + +/// @title Permit2Proxy +/// @author LI.FI (https://li.fi) +/// @notice Proxy contract allowing gasless calls via Permit2 as well as making +/// token approvals via ERC20 Permit (EIP-2612) to our diamond contract +/// @custom:version 1.0.0 +contract Permit2Proxy is WithdrawablePeriphery { + /// Storage /// + + address public immutable LIFI_DIAMOND; + ISignatureTransfer public immutable PERMIT2; + + string public constant WITNESS_TYPE_STRING = + "LiFiCall witness)LiFiCall(address diamondAddress,bytes32 diamondCalldataHash)TokenPermissions(address token,uint256 amount)"; + bytes32 public constant WITNESS_TYPEHASH = + keccak256( + "LiFiCall(address diamondAddress,bytes32 diamondCalldataHash)" + ); + bytes32 public immutable PERMIT_WITH_WITNESS_TYPEHASH; + + /// Types /// + + // @dev LIFI Specific Witness which verifies the correct calldata and + // diamond address + struct LiFiCall { + address diamondAddress; + bytes32 diamondCalldataHash; + } + + /// Errors /// + + error CallToDiamondFailed(bytes); + + /// Constructor /// + + constructor( + address _lifiDiamond, + ISignatureTransfer _permit2, + address _owner + ) WithdrawablePeriphery(_owner) { + LIFI_DIAMOND = _lifiDiamond; + PERMIT2 = _permit2; + + PERMIT_WITH_WITNESS_TYPEHASH = keccak256( + abi.encodePacked( + PermitHash._PERMIT_TRANSFER_FROM_WITNESS_TYPEHASH_STUB, + WITNESS_TYPE_STRING + ) + ); + } + + /// External Functions /// + + /// @notice Allows to bridge tokens through a LI.FI diamond contract using + /// an EIP2612 gasless permit (only works with tokenAddresses that + /// implement EIP2612) + /// The permit signer must be the caller to prevent front-running and ensure + /// the calldata cannot be replaced by others. + /// Can only be called by the permit signer to prevent front-running. + /// @param tokenAddress Address of the token to be bridged + /// @param amount Amount of tokens to be bridged + /// @param deadline Transaction must be completed before this timestamp + /// @param v User signature (recovery ID) + /// @param r User signature (ECDSA output) + /// @param s User signature (ECDSA output) + /// @param diamondCalldata calldata to execute + function callDiamondWithEIP2612Signature( + address tokenAddress, + uint256 amount, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s, + bytes calldata diamondCalldata + ) public payable returns (bytes memory) { + // call permit on token contract to register approval using signature + ERC20Permit(tokenAddress).permit( + msg.sender, // Ensure msg.sender is same wallet that signed permit + address(this), + amount, + deadline, + v, + r, + s + ); + + // deposit assets + LibAsset.transferFromERC20( + tokenAddress, + msg.sender, + address(this), + amount + ); + + // maxApprove token to diamond if current allowance is insufficient + LibAsset.maxApproveERC20(IERC20(tokenAddress), LIFI_DIAMOND, amount); + + // call our diamond to execute calldata + return _executeCalldata(diamondCalldata); + } + + /// @notice Allows to bridge tokens of one type through a LI.FI diamond + /// contract using Uniswap's Permit2 contract and a user signature + /// that verifies allowance. The permit signer must be the caller to prevent front-running and + /// ensure the calldata cannot be replaced by others. Can only be called by the permit signer to prevent + /// front-running. + /// @param _diamondCalldata the calldata to execute + /// @param _permit the Uniswap Permit2 parameters + /// @param _signature the signature giving approval to transfer tokens + function callDiamondWithPermit2( + bytes calldata _diamondCalldata, + ISignatureTransfer.PermitTransferFrom calldata _permit, + bytes calldata _signature + ) external payable returns (bytes memory) { + PERMIT2.permitTransferFrom( + _permit, + ISignatureTransfer.SignatureTransferDetails({ + to: address(this), + requestedAmount: _permit.permitted.amount + }), + msg.sender, // Ensure msg.sender is same wallet that signed permit + _signature + ); + + // maxApprove token to diamond if current allowance is insufficient + LibAsset.maxApproveERC20( + IERC20(_permit.permitted.token), + LIFI_DIAMOND, + _permit.permitted.amount + ); + + return _executeCalldata(_diamondCalldata); + } + + /// @notice Allows to bridge tokens of one type through a LI.FI diamond + /// contract using Uniswap's Permit2 contract and a user signature + /// that verifies allowance, diamondAddress and diamondCalldata + /// @param _diamondCalldata the calldata to execute + /// @param _signer the signer giving permission to transfer tokens + /// @param _permit the Uniswap Permit2 parameters + /// @param _signature the signature giving approval to transfer tokens + function callDiamondWithPermit2Witness( + bytes calldata _diamondCalldata, + address _signer, + ISignatureTransfer.PermitTransferFrom calldata _permit, + bytes calldata _signature + ) external payable returns (bytes memory) { + LiFiCall memory lifiCall = LiFiCall( + LIFI_DIAMOND, + keccak256(_diamondCalldata) + ); + + bytes32 witness = keccak256(abi.encode(WITNESS_TYPEHASH, lifiCall)); + + PERMIT2.permitWitnessTransferFrom( + _permit, + ISignatureTransfer.SignatureTransferDetails({ + to: address(this), + requestedAmount: _permit.permitted.amount + }), + _signer, + witness, + WITNESS_TYPE_STRING, + _signature + ); + + // maxApprove token to diamond if current allowance is insufficient + LibAsset.maxApproveERC20( + IERC20(_permit.permitted.token), + LIFI_DIAMOND, + _permit.permitted.amount + ); + + return _executeCalldata(_diamondCalldata); + } + + /// @notice utitlity method for constructing a valid Permit2 message hash + /// @param _diamondCalldata the calldata to execute + /// @param _assetId the address of the token to approve + /// @param _amount amount of tokens to approve + /// @param _nonce the nonce to use + /// @param _deadline the expiration deadline + function getPermit2MsgHash( + bytes calldata _diamondCalldata, + address _assetId, + uint256 _amount, + uint256 _nonce, + uint256 _deadline + ) external view returns (bytes32 msgHash) { + // Token Permissions + ISignatureTransfer.TokenPermissions + memory tokenPermissions = ISignatureTransfer.TokenPermissions( + _assetId, + _amount + ); + bytes32 permit = _getTokenPermissionsHash(tokenPermissions); + + // Witness + Permit2Proxy.LiFiCall memory lifiCall = LiFiCall( + LIFI_DIAMOND, + keccak256(_diamondCalldata) + ); + bytes32 witness = _getWitnessHash(lifiCall); + + // PermitTransferWithWitness + msgHash = _getPermitWitnessTransferFromHash( + PERMIT2.DOMAIN_SEPARATOR(), + permit, + address(this), + _nonce, + _deadline, + witness + ); + } + + /// Internal Functions /// + + function _getTokenPermissionsHash( + ISignatureTransfer.TokenPermissions memory tokenPermissions + ) internal pure returns (bytes32) { + return + keccak256( + abi.encode( + PermitHash._TOKEN_PERMISSIONS_TYPEHASH, + tokenPermissions.token, + tokenPermissions.amount + ) + ); + } + + function _getWitnessHash( + Permit2Proxy.LiFiCall memory lifiCall + ) internal pure returns (bytes32) { + return keccak256(abi.encode(WITNESS_TYPEHASH, lifiCall)); + } + + function _getPermitWitnessTransferFromHash( + bytes32 domainSeparator, + bytes32 permit, + address spender, + uint256 nonce, + uint256 deadline, + bytes32 witness + ) internal view returns (bytes32) { + bytes32 dataHash = keccak256( + abi.encode( + PERMIT_WITH_WITNESS_TYPEHASH, + permit, + spender, + nonce, + deadline, + witness + ) + ); + + return + keccak256(abi.encodePacked("\x19\x01", domainSeparator, dataHash)); + } + + function _executeCalldata( + bytes memory diamondCalldata + ) internal returns (bytes memory) { + // call diamond with provided calldata + // solhint-disable-next-line avoid-low-level-calls + (bool success, bytes memory data) = LIFI_DIAMOND.call{ + value: msg.value + }(diamondCalldata); + // throw error to make sure tx reverts if low-level call was + // unsuccessful + if (!success) { + revert CallToDiamondFailed(data); + } + return data; + } + + /// The following code was adapted from https://github.com/flood-protocol/permit2-nonce-finder/blob/7a4ac8a58d0b499308000b75ddb2384834f31fac/src/Permit2NonceFinder.sol + /// Provides utility functions for determining the next valid Permit2 nonce + + /// @notice Finds the next valid nonce for a user, starting from 0. + /// @param owner The owner of the nonces + /// @return nonce The first valid nonce starting from 0 + function nextNonce(address owner) external view returns (uint256 nonce) { + nonce = _nextNonce(owner, 0, 0); + } + + /// @notice Finds the next valid nonce for a user, after from a given nonce. + /// @dev This can be helpful if you're signing multiple nonces in a row and need the next nonce to sign but the start one is still valid. + /// @param owner The owner of the nonces + /// @param start The nonce to start from + /// @return nonce The first valid nonce after the given nonce + function nextNonceAfter( + address owner, + uint256 start + ) external view returns (uint256 nonce) { + uint248 word = uint248(start >> 8); + uint8 pos = uint8(start); + if (pos == type(uint8).max) { + // If the position is 255, we need to move to the next word + word++; + pos = 0; + } else { + // Otherwise, we just move to the next position + pos++; + } + nonce = _nextNonce(owner, word, pos); + } + + /// @notice Finds the next valid nonce for a user, starting from a given word and position. + /// @param owner The owner of the nonces + /// @param word Word to start looking from + /// @param pos Position inside the word to start looking from + function _nextNonce( + address owner, + uint248 word, + uint8 pos + ) internal view returns (uint256 nonce) { + while (true) { + uint256 bitmap = PERMIT2.nonceBitmap(owner, word); + + // Check if the bitmap is completely full + if (bitmap == type(uint256).max) { + // If so, move to the next word + ++word; + pos = 0; + continue; + } + if (pos != 0) { + // If the position is not 0, we need to shift the bitmap to ignore the bits before position + bitmap = bitmap >> pos; + } + // Find the first zero bit in the bitmap + while (bitmap & 1 == 1) { + bitmap = bitmap >> 1; + ++pos; + } + + return _nonceFromWordAndPos(word, pos); + } + } + + /// @notice Constructs a nonce from a word and a position inside the word + /// @param word The word containing the nonce + /// @param pos The position of the nonce inside the word + /// @return nonce The nonce constructed from the word and position + function _nonceFromWordAndPos( + uint248 word, + uint8 pos + ) internal pure returns (uint256 nonce) { + // The last 248 bits of the word are the nonce bits + nonce = uint256(word) << 8; + // The first 8 bits of the word are the position inside the word + nonce |= pos; + } + + // required to be able to receive native token refunds from the diamond + receive() external payable {} +} diff --git a/test/solidity/Facets/CalldataVerificationFacet.t.sol b/test/solidity/Facets/CalldataVerificationFacet.t.sol index 44a942edb..12785d5a6 100644 --- a/test/solidity/Facets/CalldataVerificationFacet.t.sol +++ b/test/solidity/Facets/CalldataVerificationFacet.t.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.17; import { CalldataVerificationFacet } from "lifi/Facets/CalldataVerificationFacet.sol"; -import { HyphenFacet } from "lifi/Facets/HyphenFacet.sol"; import { AmarokFacet } from "lifi/Facets/AmarokFacet.sol"; import { MayanFacet } from "lifi/Facets/MayanFacet.sol"; import { StargateFacet } from "lifi/Facets/StargateFacet.sol"; @@ -49,7 +48,7 @@ contract CalldataVerificationFacetTest is TestBase { function test_IgnoresExtraBytes() public view { bytes memory callData = abi.encodeWithSelector( - HyphenFacet.swapAndStartBridgeTokensViaHyphen.selector, + AcrossFacetV3.swapAndStartBridgeTokensViaAcrossV3.selector, bridgeData, swapData ); @@ -74,7 +73,7 @@ contract CalldataVerificationFacetTest is TestBase { function test_CanExtractBridgeData() public { bytes memory callData = abi.encodeWithSelector( - HyphenFacet.startBridgeTokensViaHyphen.selector, + AcrossFacetV3.startBridgeTokensViaAcrossV3.selector, bridgeData ); @@ -86,7 +85,7 @@ contract CalldataVerificationFacetTest is TestBase { function test_CanExtractSwapData() public { bytes memory callData = abi.encodeWithSelector( - HyphenFacet.swapAndStartBridgeTokensViaHyphen.selector, + AcrossFacetV3.swapAndStartBridgeTokensViaAcrossV3.selector, bridgeData, swapData ); @@ -112,7 +111,7 @@ contract CalldataVerificationFacetTest is TestBase { function test_CanExtractBridgeAndSwapData() public { bridgeData.hasSourceSwaps = true; bytes memory callData = abi.encodeWithSelector( - HyphenFacet.swapAndStartBridgeTokensViaHyphen.selector, + AcrossFacetV3.swapAndStartBridgeTokensViaAcrossV3.selector, bridgeData, swapData ); @@ -139,7 +138,7 @@ contract CalldataVerificationFacetTest is TestBase { function test_CanExtractBridgeAndSwapDataNoSwaps() public { bytes memory callData = abi.encodeWithSelector( - HyphenFacet.startBridgeTokensViaHyphen.selector, + AcrossFacetV3.startBridgeTokensViaAcrossV3.selector, bridgeData ); @@ -230,7 +229,7 @@ contract CalldataVerificationFacetTest is TestBase { function test_CanExtractMainParameters() public { bytes memory callData = abi.encodeWithSelector( - HyphenFacet.startBridgeTokensViaHyphen.selector, + AcrossFacetV3.startBridgeTokensViaAcrossV3.selector, bridgeData ); @@ -335,7 +334,7 @@ contract CalldataVerificationFacetTest is TestBase { function test_CanExtractMainParametersWithSwap() public { bridgeData.hasSourceSwaps = true; bytes memory callData = abi.encodeWithSelector( - HyphenFacet.swapAndStartBridgeTokensViaHyphen.selector, + AcrossFacetV3.swapAndStartBridgeTokensViaAcrossV3.selector, bridgeData, swapData ); @@ -386,7 +385,7 @@ contract CalldataVerificationFacetTest is TestBase { function test_CanValidateCalldata() public { bytes memory callData = abi.encodeWithSelector( - HyphenFacet.startBridgeTokensViaHyphen.selector, + AcrossFacetV3.startBridgeTokensViaAcrossV3.selector, bridgeData ); diff --git a/test/solidity/Facets/GasZipFacet.t.sol b/test/solidity/Facets/GasZipFacet.t.sol new file mode 100644 index 000000000..5973e6787 --- /dev/null +++ b/test/solidity/Facets/GasZipFacet.t.sol @@ -0,0 +1,494 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity 0.8.17; +import { GasZipFacet } from "lifi/Facets/GasZipFacet.sol"; +import { IGasZip } from "lifi/Interfaces/IGasZip.sol"; +import { ILiFi, LibSwap, LibAllowList, TestBaseFacet, console, ERC20 } from "../utils/TestBaseFacet.sol"; +import { InvalidCallData, CannotBridgeToSameNetwork, InvalidAmount, InvalidReceiver } from "lifi/Errors/GenericErrors.sol"; + +// Stub GenericSwapFacet Contract +contract TestGasZipFacet is GasZipFacet { + constructor(address gasZipRouter) GasZipFacet(gasZipRouter) {} + + function addDex(address _dex) external { + LibAllowList.addAllowedContract(_dex); + } + + function removeDex(address _dex) external { + LibAllowList.removeAllowedContract(_dex); + } + + function setFunctionApprovalBySignature(bytes4 _signature) external { + LibAllowList.addAllowedSelector(_signature); + } +} + +contract GasZipFacetTest is TestBaseFacet { + address public constant GAS_ZIP_ROUTER_MAINNET = + 0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762; + address public constant NON_EVM_RECEIVER_IDENTIFIER = + 0x11f111f111f111F111f111f111F111f111f111F1; + + TestGasZipFacet internal gasZipFacet; + IGasZip.GasZipData internal gasZipData; + + uint256 public defaultDestinationChains = 96; + uint256 internal defaultNativeDepositAmount = 1e16; + uint256 internal defaultERC20DepositAmount = 1e8; + address public defaultRecipientAddress = address(12345); + address public defaultRefundAddress = address(56789); + bytes32 internal defaultReceiverBytes32 = + bytes32(uint256(uint160(USER_RECEIVER))); + + event Deposit(address from, uint256 chains, uint256 amount, bytes32 to); + + error OnlyNativeAllowed(); + error TooManyChainIds(); + + function setUp() public { + // set custom block no for mainnet forking + customBlockNumberForForking = 20828620; + + initTestBase(); + + // deploy contracts + gasZipFacet = new TestGasZipFacet(GAS_ZIP_ROUTER_MAINNET); + + // add gasZipFacet to diamond + bytes4[] memory functionSelectors = new bytes4[](6); + functionSelectors[0] = gasZipFacet.startBridgeTokensViaGasZip.selector; + functionSelectors[1] = gasZipFacet + .swapAndStartBridgeTokensViaGasZip + .selector; + functionSelectors[2] = gasZipFacet.getDestinationChainsValue.selector; + + functionSelectors[3] = gasZipFacet.addDex.selector; + functionSelectors[4] = gasZipFacet.removeDex.selector; + functionSelectors[5] = gasZipFacet + .setFunctionApprovalBySignature + .selector; + addFacet(diamond, address(gasZipFacet), functionSelectors); + + gasZipFacet = TestGasZipFacet(payable(address(diamond))); + + // whitelist uniswap dex with function selectors + gasZipFacet.addDex(address(uniswap)); + gasZipFacet.addDex(address(gasZipFacet)); + gasZipFacet.setFunctionApprovalBySignature( + uniswap.swapExactTokensForTokens.selector + ); + gasZipFacet.setFunctionApprovalBySignature( + uniswap.swapTokensForExactETH.selector + ); + gasZipFacet.setFunctionApprovalBySignature( + uniswap.swapExactTokensForETH.selector + ); + gasZipFacet.setFunctionApprovalBySignature( + uniswap.swapETHForExactTokens.selector + ); + + setFacetAddressInTestBase(address(gasZipFacet), "GasZipFacet"); + + // produce valid GasZipData + uint8[] memory chainIds = new uint8[](1); + chainIds[0] = 17; // polygon + gasZipData = IGasZip.GasZipData({ + receiverAddress: bytes32(uint256(uint160(USER_RECEIVER))), + destinationChains: defaultDestinationChains + }); + + bridgeData.bridge = "GasZip"; + + vm.label(address(gasZipFacet), "LiFiDiamond"); + vm.label(ADDRESS_WRAPPED_NATIVE, "WRAPPED_NATIVE_TOKEN"); + vm.label(ADDRESS_USDC, "USDC_TOKEN"); + vm.label(ADDRESS_UNISWAP, "UNISWAP_V2_ROUTER"); + } + + function initiateBridgeTxWithFacet(bool isNative) internal override { + if (isNative) { + gasZipFacet.startBridgeTokensViaGasZip{ + value: bridgeData.minAmount + }(bridgeData, gasZipData); + } else { + gasZipFacet.startBridgeTokensViaGasZip(bridgeData, gasZipData); + } + } + + function initiateSwapAndBridgeTxWithFacet( + bool isNative + ) internal override { + if (isNative) { + gasZipFacet.swapAndStartBridgeTokensViaGasZip{ + value: swapData[0].fromAmount + }(bridgeData, swapData, gasZipData); + } else { + gasZipFacet.swapAndStartBridgeTokensViaGasZip( + bridgeData, + swapData, + gasZipData + ); + } + } + + function test_WillStoreConstructorParametersCorrectly() public { + gasZipFacet = new TestGasZipFacet(GAS_ZIP_ROUTER_MAINNET); + + assertEq(address(gasZipFacet.gasZipRouter()), GAS_ZIP_ROUTER_MAINNET); + } + + function testBase_CanBridgeTokens_fuzzed(uint256 amount) public override { + // deactivated for this facet since we would have to update the calldata that swaps from ERC20 to native for every amount + } + + function testBase_CanBridgeTokens() public override { + // the startBridgeTokensViaGasZip can only be used for native tokens, therefore we need to adapt this test case + vm.startPrank(USER_SENDER); + + // update bridgeData to use native + bridgeData.sendingAssetId = address(0); + bridgeData.minAmount = defaultNativeDepositAmount; + + //prepare check for events + vm.expectEmit(true, true, true, true, GAS_ZIP_ROUTER_MAINNET); + emit Deposit( + address(gasZipFacet), + defaultDestinationChains, + defaultNativeDepositAmount, + defaultReceiverBytes32 + ); + vm.expectEmit(true, true, true, true, _facetTestContractAddress); + emit LiFiTransferStarted(bridgeData); + + initiateBridgeTxWithFacet(true); + vm.stopPrank(); + } + + function testBase_CanBridgeNativeTokens() public override { + // defaultNativeAmount is too high, therefore we need to override this test + vm.startPrank(USER_SENDER); + // customize bridgeData + bridgeData.sendingAssetId = address(0); + bridgeData.minAmount = defaultNativeDepositAmount; // ~2 USD + + //prepare check for events + vm.expectEmit(true, true, true, true, GAS_ZIP_ROUTER_MAINNET); + emit Deposit( + address(gasZipFacet), + defaultDestinationChains, + defaultNativeDepositAmount, + defaultReceiverBytes32 + ); + vm.expectEmit(true, true, true, true, _facetTestContractAddress); + emit LiFiTransferStarted(bridgeData); + + initiateBridgeTxWithFacet(true); + vm.stopPrank(); + } + + function testBase_Revert_CallerHasInsufficientFunds() public override { + // the startBridgeTokensViaGasZip can only be used for native tokens, therefore this test case is not applicable + } + + function testRevert_WillFailWhenTryingToBridgeERC20() public { + vm.startPrank(USER_SENDER); + + // approval + usdc.approve(_facetTestContractAddress, bridgeData.minAmount); + + // expect the call to revert + vm.expectRevert(OnlyNativeAllowed.selector); + + initiateBridgeTxWithFacet(false); + vm.stopPrank(); + } + + function testBase_Revert_SwapAndBridgeWithInvalidSwapData() + public + override + { + // since the facets accesses the swapData parameter already before trying to execute the swap, we need to override the expected error message + vm.startPrank(USER_SENDER); + + // prepare bridgeData + bridgeData.hasSourceSwaps = true; + + // reset swap data + delete swapData; + + vm.expectRevert(); + + // execute call in child contract + initiateSwapAndBridgeTxWithFacet(false); + } + + function testBase_CanSwapAndBridgeTokens() public override { + vm.startPrank(USER_SENDER); + + // prepare bridgeData + bridgeData.hasSourceSwaps = true; + + // reset create swapData (5 DAI to native) + uint256 daiAmount = 5 * 10 ** dai.decimals(); + + // Swap DAI -> ETH + address[] memory path = new address[](2); + path[0] = ADDRESS_DAI; + path[1] = ADDRESS_WRAPPED_NATIVE; + + // Calculate DAI amount + uint256[] memory amounts = uniswap.getAmountsOut(daiAmount, path); + uint256 amountOut = amounts[1]; + bridgeData.minAmount = amountOut; + + delete swapData; + swapData.push( + LibSwap.SwapData({ + callTo: address(uniswap), + approveTo: address(uniswap), + sendingAssetId: ADDRESS_DAI, + receivingAssetId: address(0), + fromAmount: daiAmount, + callData: abi.encodeWithSelector( + uniswap.swapExactTokensForETH.selector, + daiAmount, + amountOut, + path, + _facetTestContractAddress, + block.timestamp + 20 minutes + ), + requiresDeposit: true + }) + ); + + // approval + dai.approve(_facetTestContractAddress, daiAmount); + + //prepare check for events + vm.expectEmit(true, true, true, true, _facetTestContractAddress); + emit AssetSwapped( + bridgeData.transactionId, + ADDRESS_UNISWAP, + ADDRESS_DAI, + address(0), + daiAmount, + bridgeData.minAmount, + block.timestamp + ); + + vm.expectEmit(true, true, true, true, _facetTestContractAddress); + emit LiFiTransferStarted(bridgeData); + + // execute call in child contract + initiateSwapAndBridgeTxWithFacet(false); + } + + function testBase_Revert_BridgeAndSwapWithInvalidReceiverAddress() + public + override + { + // since the 'validateBridgeData' modifier is not used, a different error is thrown here + + vm.startPrank(USER_SENDER); + // prepare bridgeData + bridgeData.receiver = address(0); + bridgeData.hasSourceSwaps = true; + + setDefaultSwapDataSingleDAItoUSDC(); + + vm.expectRevert(InvalidCallData.selector); + + initiateSwapAndBridgeTxWithFacet(false); + vm.stopPrank(); + } + + function testBase_Revert_SwapAndBridgeWithInvalidAmount() public override { + // since the '' modifier is not used, a different error is thrown here + + vm.startPrank(USER_SENDER); + // prepare bridgeData + bridgeData.hasSourceSwaps = true; + bridgeData.minAmount = 0; + + setDefaultSwapDataSingleDAItoUSDC(); + + vm.expectRevert(InvalidCallData.selector); + + initiateSwapAndBridgeTxWithFacet(false); + vm.stopPrank(); + } + + function testBase_Revert_BridgeToSameChainId() public override { + // we need to test this with native instead of ERC20 for this facet, therefore override + + vm.startPrank(USER_SENDER); + // customize bridgeData + bridgeData.sendingAssetId = address(0); + bridgeData.minAmount = defaultNativeDepositAmount; // ~2 USD + bridgeData.destinationChainId = block.chainid; + + vm.expectRevert(CannotBridgeToSameNetwork.selector); + + initiateBridgeTxWithFacet(true); + vm.stopPrank(); + } + + function testBase_Revert_BridgeWithInvalidAmount() public override { + // we need to test this with native instead of ERC20 for this facet, therefore override + + vm.startPrank(USER_SENDER); + // customize bridgeData + bridgeData.sendingAssetId = address(0); + bridgeData.minAmount = 0; + + // will fail when trying to send value that it doesnt have + vm.expectRevert(); + + initiateBridgeTxWithFacet(true); + vm.stopPrank(); + } + + function testBase_Revert_BridgeWithInvalidReceiverAddress() + public + override + { + // we need to test this with native instead of ERC20 for this facet, therefore override + + vm.startPrank(USER_SENDER); + // prepare bridgeData + bridgeData.sendingAssetId = address(0); + bridgeData.minAmount = defaultNativeDepositAmount; // ~2 USD + gasZipData.receiverAddress = bytes32(0); + + vm.expectRevert(InvalidCallData.selector); + + initiateBridgeTxWithFacet(true); + vm.stopPrank(); + } + + function testBase_Revert_SwapAndBridgeToSameChainId() public override { + // we need to test this with native swap output instead of ERC20 for this facet, therefore override + + vm.startPrank(USER_SENDER); + // prepare bridgeData + bridgeData.destinationChainId = block.chainid; + bridgeData.hasSourceSwaps = true; + + setDefaultSwapDataSingleDAItoETH(); // changed to native output calldata + dai.approve(_facetTestContractAddress, swapData[0].fromAmount); + + vm.expectRevert(CannotBridgeToSameNetwork.selector); + + initiateSwapAndBridgeTxWithFacet(false); + vm.stopPrank(); + } + + function test_getDestinationChainsValueReturnsCorrectValues() public { + // case 1 + uint8[] memory chainIds = new uint8[](1); + chainIds[0] = 17; // Polygon + + assertEq(gasZipFacet.getDestinationChainsValue(chainIds), 17); + + // case 2 + chainIds = new uint8[](2); + chainIds[0] = 51; + chainIds[1] = 52; + + assertEq(gasZipFacet.getDestinationChainsValue(chainIds), 13108); + + // case 3 + chainIds = new uint8[](5); + chainIds[0] = 15; // Avalanche + chainIds[1] = 54; // Base + chainIds[2] = 96; // Blast + chainIds[3] = 14; // BSC + chainIds[4] = 59; // Linea + + assertEq(gasZipFacet.getDestinationChainsValue(chainIds), 65336774203); + + chainIds = new uint8[](28); + chainIds[0] = 255; // Chain ID 255 + chainIds[1] = 57; // Chain ID 57 + chainIds[2] = 62; // Chain ID 62 + chainIds[3] = 15; // Chain ID 15 + chainIds[4] = 54; // Chain ID 54 + chainIds[5] = 96; // Chain ID 96 + chainIds[6] = 140; // Chain ID 140 + chainIds[7] = 148; // Chain ID 148 + chainIds[8] = 21; // Chain ID 21 + chainIds[9] = 20; // Chain ID 20 + chainIds[10] = 10; // Chain ID 10 + chainIds[11] = 31; // Chain ID 31 + chainIds[12] = 16; // Chain ID 16 + chainIds[13] = 59; // Chain ID 59 + chainIds[14] = 13; // Chain ID 13 + chainIds[15] = 30; // Chain ID 30 + chainIds[16] = 73; // Chain ID 73 + chainIds[17] = 28; // Chain ID 28 + chainIds[18] = 29; // Chain ID 29 + chainIds[19] = 55; // Chain ID 55 + chainIds[20] = 17; // Chain ID 17 + chainIds[21] = 52; // Chain ID 52 + chainIds[22] = 254; // Chain ID 254 + chainIds[23] = 41; // Chain ID 41 + chainIds[24] = 246; // Chain ID 246 + chainIds[25] = 249; // Chain ID 249 + chainIds[26] = 146; // Chain ID 146 + chainIds[27] = 51; // Chain ID 51 + + assertEq( + gasZipFacet.getDestinationChainsValue(chainIds), + 26878182541072503599461683703464409408182428609391216984945776497203 + ); + } + + function testRevert_WillFailIfMsgValueDoesNotMatchBridgeDataAmount() + public + { + vm.startPrank(USER_SENDER); + + // update bridgeData to use native + bridgeData.sendingAssetId = address(0); + bridgeData.minAmount = defaultERC20DepositAmount; + + vm.expectRevert(InvalidAmount.selector); + + gasZipFacet.startBridgeTokensViaGasZip{ + value: bridgeData.minAmount - 1 + }(bridgeData, gasZipData); + } + + function testRevert_WillFailIfMoreThan32ChainIds() public { + vm.startPrank(USER_SENDER); + + uint8[] memory chainIds = new uint8[](33); + + vm.expectRevert(TooManyChainIds.selector); + + gasZipFacet.getDestinationChainsValue(chainIds); + } + + function testRevert_WillFailIfEVMReceiverAddressesDontMatch() public { + vm.startPrank(USER_SENDER); + // customize bridgeData + bridgeData.sendingAssetId = address(0); + bridgeData.minAmount = defaultNativeDepositAmount; // ~2 USD + bridgeData.receiver = USER_PAUSER; + + vm.expectRevert(InvalidCallData.selector); + + initiateBridgeTxWithFacet(true); + vm.stopPrank(); + } + + function test_WillNotFailIfNonEVMReceiverAddressesDontMatch() public { + vm.startPrank(USER_SENDER); + // customize bridgeData + bridgeData.sendingAssetId = address(0); + bridgeData.minAmount = defaultNativeDepositAmount; // ~2 USD + bridgeData.receiver = NON_EVM_RECEIVER_IDENTIFIER; + + initiateBridgeTxWithFacet(true); + vm.stopPrank(); + } +} diff --git a/test/solidity/Facets/MayanFacet.t.sol b/test/solidity/Facets/MayanFacet.t.sol index 802c502c8..e30d67897 100644 --- a/test/solidity/Facets/MayanFacet.t.sol +++ b/test/solidity/Facets/MayanFacet.t.sol @@ -291,7 +291,6 @@ contract MayanFacetTest is TestBaseFacet { validMayanData = invalidMayanDataEVM2Solana; vm.startPrank(USER_SENDER); - console.log(USER_RECEIVER); usdc.approve(_facetTestContractAddress, type(uint256).max); vm.expectRevert( diff --git a/test/solidity/Periphery/GasZipPeriphery.t.sol b/test/solidity/Periphery/GasZipPeriphery.t.sol new file mode 100644 index 000000000..2de0cfb02 --- /dev/null +++ b/test/solidity/Periphery/GasZipPeriphery.t.sol @@ -0,0 +1,531 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity 0.8.17; + +import { GasZipPeriphery } from "lifi/Periphery/GasZipPeriphery.sol"; +import { LibSwap } from "lifi/Libraries/LibSwap.sol"; +import { LibAllowList } from "lifi/Libraries/LibAllowList.sol"; +import { FeeCollector } from "lifi/Periphery/FeeCollector.sol"; +import { GnosisBridgeFacet } from "lifi/Facets/GnosisBridgeFacet.sol"; +import { TestGnosisBridgeFacet } from "test/solidity/Facets/GnosisBridgeFacet.t.sol"; +import { TestBase, console, ILiFi, ERC20 } from "../utils/TestBase.sol"; +import { IXDaiBridge } from "lifi/Interfaces/IXDaiBridge.sol"; +import { IGasZip } from "lifi/Interfaces/IGasZip.sol"; +import { NonETHReceiver } from "../utils/TestHelpers.sol"; +import { NativeAssetTransferFailed, InvalidCallData } from "lifi/Errors/GenericErrors.sol"; + +// Stub GenericSwapFacet Contract +contract TestGasZipPeriphery is GasZipPeriphery { + constructor( + address gasZipRouter, + address liFiDEXAggregator, + address owner + ) GasZipPeriphery(gasZipRouter, liFiDEXAggregator, owner) {} + + function addDex(address _dex) external { + LibAllowList.addAllowedContract(_dex); + } + + function removeDex(address _dex) external { + LibAllowList.removeAllowedContract(_dex); + } + + function setFunctionApprovalBySignature(bytes4 _signature) external { + LibAllowList.addAllowedSelector(_signature); + } +} + +contract GasZipPeripheryTest is TestBase { + address public constant GAS_ZIP_ROUTER_MAINNET = + 0x2a37D63EAdFe4b4682a3c28C1c2cD4F109Cc2762; + address public constant LIFI_DEX_AGGREGATOR_MAINNET = + 0xe43ca1Dee3F0fc1e2df73A0745674545F11A59F5; + address internal constant XDAI_BRIDGE = + 0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016; + + TestGnosisBridgeFacet internal gnosisBridgeFacet; + TestGasZipPeriphery internal gasZipPeriphery; + IGasZip.GasZipData internal defaultGasZipData; + address internal liFiDEXAggregator = LIFI_DEX_AGGREGATOR_MAINNET; + bytes32 internal defaultReceiverBytes32 = + bytes32(uint256(uint160(USER_RECEIVER))); + uint256 internal defaultNativeDepositAmount = 1e16; + + uint256 public defaultDestinationChains = 96; + + event Deposit(address from, uint256 chains, uint256 amount, bytes32 to); + + error TooManyChainIds(); + error ETHTransferFailed(); + + function setUp() public { + customBlockNumberForForking = 20931877; + initTestBase(); + + // deploy contracts + gasZipPeriphery = new TestGasZipPeriphery( + GAS_ZIP_ROUTER_MAINNET, + LIFI_DEX_AGGREGATOR_MAINNET, + USER_DIAMOND_OWNER + ); + defaultUSDCAmount = 10 * 10 ** usdc.decimals(); // 10 USDC + + // set up diamond with GnosisBridgeFacet so we have a bridge to test with + gnosisBridgeFacet = _getGnosisBridgeFacet(); + + defaultGasZipData = IGasZip.GasZipData({ + receiverAddress: defaultReceiverBytes32, + destinationChains: defaultDestinationChains + }); + + bridgeData.bridge = "gnosis"; + bridgeData.sendingAssetId = ADDRESS_DAI; + bridgeData.minAmount = defaultDAIAmount; + bridgeData.destinationChainId = 100; + + vm.label(address(gasZipPeriphery), "GasZipPeriphery"); + vm.label(LIFI_DEX_AGGREGATOR_MAINNET, "LiFiDEXAggregator"); + } + + function test_WillStoreConstructorParametersCorrectly() public { + gasZipPeriphery = new TestGasZipPeriphery( + GAS_ZIP_ROUTER_MAINNET, + LIFI_DEX_AGGREGATOR_MAINNET, + USER_DIAMOND_OWNER + ); + + assertEq( + address(gasZipPeriphery.gasZipRouter()), + GAS_ZIP_ROUTER_MAINNET + ); + assertEq( + gasZipPeriphery.liFiDEXAggregator(), + LIFI_DEX_AGGREGATOR_MAINNET + ); + } + + function test_CanDepositNative() public { + // set up expected event + vm.expectEmit(true, true, true, true, GAS_ZIP_ROUTER_MAINNET); + emit Deposit( + address(gasZipPeriphery), + defaultDestinationChains, + defaultNativeDepositAmount, + defaultReceiverBytes32 + ); + + // deposit via GasZip periphery contract + gasZipPeriphery.depositToGasZipNative{ + value: defaultNativeDepositAmount + }(defaultGasZipData, defaultNativeDepositAmount); + } + + function test_WillReturnAnyExcessNativeValueAfterDeposit() public { + vm.startPrank(USER_SENDER); + uint256 balanceBefore = USER_SENDER.balance; + // set up expected event + vm.expectEmit(true, true, true, true, GAS_ZIP_ROUTER_MAINNET); + emit Deposit( + address(gasZipPeriphery), + defaultDestinationChains, + defaultNativeDepositAmount, + defaultReceiverBytes32 + ); + + // deposit via GasZip periphery contract + gasZipPeriphery.depositToGasZipNative{ + value: defaultNativeDepositAmount * 5 + }(defaultGasZipData, defaultNativeDepositAmount); // sending 5 times the amount, expecting 4 times to be refunded + uint256 balanceAfter = USER_SENDER.balance; + assertEq(balanceBefore - defaultNativeDepositAmount, balanceAfter); + } + + function testRevert_WillFailIfRemainingNativeCannotBeReturned() public { + // deploy contract that cannot receive ETH + NonETHReceiver nonETHReceiver = new NonETHReceiver(); + + deal(address(nonETHReceiver), 1 ether); + + vm.startPrank(address(nonETHReceiver)); + + // set up expected event + vm.expectRevert(ETHTransferFailed.selector); + + // deposit via GasZip periphery contract + gasZipPeriphery.depositToGasZipNative{ + value: defaultNativeDepositAmount * 2 + }(defaultGasZipData, defaultNativeDepositAmount); // send twice the nativeAmount that is being deposited to trigger a refund + } + + function test_canCollectERC20FeesThenSwapToERC20ThenDepositThenBridge() + public + { + // Testcase: + // 1. pay 1 USDC fee to FeeCollector in USDC + // 2. swap remaining (9) USDC to DAI + // 3. deposit 2 DAI to gasZip + // 4. bridge remaining DAI to Gnosis using GnosisBridgeFacet + + deal(ADDRESS_USDC, address(this), defaultUSDCAmount); + + // get swapData for feeCollection + LibSwap.SwapData[] memory swapData = new LibSwap.SwapData[](3); + uint256 feeCollectionAmount = 1 * 10 ** usdc.decimals(); // 1 USD + + swapData[0] = LibSwap.SwapData( + address(feeCollector), + address(feeCollector), + ADDRESS_USDC, + ADDRESS_USDC, + defaultUSDCAmount, + abi.encodeWithSelector( + feeCollector.collectTokenFees.selector, + ADDRESS_USDC, + feeCollectionAmount, + 0, + address(this) + ), + true + ); + + // get swapData for USDC to DAI swap + uint256 swapInputAmount = defaultUSDCAmount - feeCollectionAmount; + // prepare swap data + address[] memory path = new address[](2); + path[0] = ADDRESS_USDC; + path[1] = ADDRESS_DAI; + + // Calculate USDC input amount + uint256[] memory amounts = uniswap.getAmountsOut( + swapInputAmount, + path + ); + uint256 swapOutputAmount = amounts[1]; + + swapData[1] = LibSwap.SwapData( + address(uniswap), + address(uniswap), + ADDRESS_USDC, + ADDRESS_DAI, + swapInputAmount, + abi.encodeWithSelector( + uniswap.swapExactTokensForTokens.selector, + swapInputAmount, + swapOutputAmount, + path, + address(diamond), + block.timestamp + 20 minutes + ), + false // not required since tokens are already in diamond + ); + + // // get swapData for gas zip + uint256 gasZipERC20Amount = 2 * 10 ** dai.decimals(); + ( + LibSwap.SwapData memory gasZipSwapData, + + ) = _getLiFiDEXAggregatorCalldataForERC20ToNativeSwap( + ADDRESS_DAI, + gasZipERC20Amount + ); + + swapData[2] = LibSwap.SwapData( + address(gasZipPeriphery), + address(gasZipPeriphery), + ADDRESS_DAI, + ADDRESS_DAI, + gasZipERC20Amount, + abi.encodeWithSelector( + gasZipPeriphery.depositToGasZipERC20.selector, + gasZipSwapData, + defaultGasZipData + ), + false // not required since tokens are already in the diamond + ); + + // get BridgeData + ILiFi.BridgeData memory bridgeData = ILiFi.BridgeData({ + transactionId: "", + bridge: "GnosisBridge", + integrator: "", + referrer: address(0), + sendingAssetId: ADDRESS_DAI, + receiver: USER_RECEIVER, + minAmount: swapOutputAmount - gasZipERC20Amount, + destinationChainId: 100, + hasSourceSwaps: true, + hasDestinationCall: false + }); + + // whitelist gasZipPeriphery and FeeCollector + gasZipPeriphery.addDex(address(gasZipPeriphery)); + gasZipPeriphery.setFunctionApprovalBySignature( + gasZipPeriphery.depositToGasZipERC20.selector + ); + gasZipPeriphery.addDex(address(feeCollector)); + gasZipPeriphery.setFunctionApprovalBySignature( + feeCollector.collectTokenFees.selector + ); + + // set approval for bridging + usdc.approve(address(gnosisBridgeFacet), defaultUSDCAmount); + + gnosisBridgeFacet.swapAndStartBridgeTokensViaXDaiBridge( + bridgeData, + swapData + ); + } + + function test_canDepositNativeThenSwapThenBridge() public { + // Testcase: + // 1. deposit small native amount to gasZip + // 2. swap remaining native to DAI + // 3. bridge remaining DAI to Gnosis using GnosisBridgeFacet + + uint256 nativeFromAmount = 1 ether; + + vm.deal(address(this), nativeFromAmount); + + uint256 nativeZipAmount = 1e14; + + // get swapData for gas zip + LibSwap.SwapData[] memory swapData = new LibSwap.SwapData[](2); + swapData[0] = LibSwap.SwapData( + address(gasZipPeriphery), + address(gasZipPeriphery), + address(0), + address(0), + nativeZipAmount, + abi.encodeWithSelector( + gasZipPeriphery.depositToGasZipNative.selector, + defaultGasZipData, + nativeZipAmount + ), + false + ); + + // get swapData for swap + uint256 swapInputAmount = nativeFromAmount - nativeZipAmount; + + // prepare swap data + address[] memory path = new address[](2); + path[0] = ADDRESS_WRAPPED_NATIVE; + path[1] = ADDRESS_DAI; + + // Calculate expected amountOut + uint256[] memory amounts = uniswap.getAmountsOut( + swapInputAmount, + path + ); + uint256 swapOutputAmount = amounts[1]; + + swapData[1] = LibSwap.SwapData( + address(uniswap), + address(uniswap), + address(0), + ADDRESS_DAI, + swapInputAmount, + abi.encodeWithSelector( + uniswap.swapExactETHForTokens.selector, + swapOutputAmount, + path, + address(diamond), + block.timestamp + 20 minutes + ), + false // not required since tokens are already in diamond + ); + + // get BridgeData + ILiFi.BridgeData memory bridgeData = ILiFi.BridgeData({ + transactionId: "", + bridge: "GnosisBridge", + integrator: "", + referrer: address(0), + sendingAssetId: ADDRESS_DAI, + receiver: USER_RECEIVER, + minAmount: swapOutputAmount, + destinationChainId: 100, + hasSourceSwaps: true, + hasDestinationCall: false + }); + + // whitelist gasZipPeriphery and FeeCollector + gasZipPeriphery.addDex(address(gasZipPeriphery)); + gasZipPeriphery.setFunctionApprovalBySignature( + gasZipPeriphery.depositToGasZipNative.selector + ); + + gnosisBridgeFacet.swapAndStartBridgeTokensViaXDaiBridge{ + value: nativeFromAmount + }(bridgeData, swapData); + } + + function test_getDestinationChainsValueReturnsCorrectValues() public { + // case 1 + uint8[] memory chainIds = new uint8[](1); + chainIds[0] = 17; // Polygon + + assertEq(gasZipPeriphery.getDestinationChainsValue(chainIds), 17); + + // case 2 + chainIds = new uint8[](2); + chainIds[0] = 51; + chainIds[1] = 52; + + assertEq(gasZipPeriphery.getDestinationChainsValue(chainIds), 13108); + + // case 3 + chainIds = new uint8[](5); + chainIds[0] = 15; // Avalanche + chainIds[1] = 54; // Base + chainIds[2] = 96; // Blast + chainIds[3] = 14; // BSC + chainIds[4] = 59; // Linea + + assertEq( + gasZipPeriphery.getDestinationChainsValue(chainIds), + 65336774203 + ); + } + + function testRevert_WillFailIfSwapViaLiFiDEXAggregatorIsUnsuccessful() + public + { + vm.startPrank(USER_SENDER); + + // set DAI approval for GasZipPeriphery + dai.approve(address(gasZipPeriphery), type(uint256).max); + + // // get swapData for gas zip + uint256 gasZipERC20Amount = 2 * 10 ** dai.decimals(); + ( + LibSwap.SwapData memory gasZipSwapData, + + ) = _getLiFiDEXAggregatorCalldataForERC20ToNativeSwap( + ADDRESS_DAI, + gasZipERC20Amount + ); + + // use an invalid function selector to force the call to LiFiDEXAggregator to fail + gasZipSwapData.callData = hex"3a3f7332"; + + // expect the following call to fail without an error reason + vm.expectRevert(); + + // execute the call + gasZipPeriphery.depositToGasZipERC20( + gasZipSwapData, + defaultGasZipData + ); + } + + function testRevert_WillFailIfMoreThan32ChainIds() public { + vm.startPrank(USER_SENDER); + + uint8[] memory chainIds = new uint8[](33); + + vm.expectRevert(TooManyChainIds.selector); + + gasZipPeriphery.getDestinationChainsValue(chainIds); + } + + function testRevert_WillFailIfCalledWithInvalidReceiverAddress() public { + vm.startPrank(USER_SENDER); + + defaultGasZipData.receiverAddress = bytes32(0); + + vm.expectRevert(InvalidCallData.selector); + + // deposit via GasZip periphery contract + gasZipPeriphery.depositToGasZipNative{ + value: defaultNativeDepositAmount + }(defaultGasZipData, defaultNativeDepositAmount); + } + + function _getGnosisBridgeFacet() + internal + returns (TestGnosisBridgeFacet _gnosisBridgeFacet) + { + _gnosisBridgeFacet = new TestGnosisBridgeFacet( + IXDaiBridge(XDAI_BRIDGE) + ); + + bytes4[] memory functionSelectors = new bytes4[](4); + functionSelectors[0] = _gnosisBridgeFacet + .startBridgeTokensViaXDaiBridge + .selector; + functionSelectors[1] = _gnosisBridgeFacet + .swapAndStartBridgeTokensViaXDaiBridge + .selector; + functionSelectors[2] = _gnosisBridgeFacet.addDex.selector; + functionSelectors[3] = _gnosisBridgeFacet + .setFunctionApprovalBySignature + .selector; + + addFacet(diamond, address(_gnosisBridgeFacet), functionSelectors); + + _gnosisBridgeFacet = TestGnosisBridgeFacet(address(diamond)); + + // whitelist DEXs / Periphery contracts + _gnosisBridgeFacet.addDex(address(uniswap)); + _gnosisBridgeFacet.addDex(address(gasZipPeriphery)); + _gnosisBridgeFacet.addDex(address(feeCollector)); + + // add function selectors for GasZipPeriphery + _gnosisBridgeFacet.setFunctionApprovalBySignature( + gasZipPeriphery.depositToGasZipERC20.selector + ); + _gnosisBridgeFacet.setFunctionApprovalBySignature( + gasZipPeriphery.depositToGasZipNative.selector + ); + + // add function selectors for FeeCollector + _gnosisBridgeFacet.setFunctionApprovalBySignature( + feeCollector.collectTokenFees.selector + ); + + // add function selectors for Uniswap + _gnosisBridgeFacet.setFunctionApprovalBySignature( + uniswap.swapExactTokensForTokens.selector + ); + _gnosisBridgeFacet.setFunctionApprovalBySignature( + uniswap.swapExactTokensForETH.selector + ); + _gnosisBridgeFacet.setFunctionApprovalBySignature( + uniswap.swapETHForExactTokens.selector + ); + _gnosisBridgeFacet.setFunctionApprovalBySignature( + uniswap.swapExactETHForTokens.selector + ); + + setFacetAddressInTestBase(address(gnosisBridgeFacet), "GnosisFacet"); + } + + function _getLiFiDEXAggregatorCalldataForERC20ToNativeSwap( + address sendingAssetId, + uint256 fromAmount + ) + internal + view + returns (LibSwap.SwapData memory swapData, uint256 amountOutMin) + { + // prepare swap data + address[] memory path = new address[](2); + path[0] = sendingAssetId; + path[1] = ADDRESS_WRAPPED_NATIVE; + + // Calculate USDC input amount + uint256[] memory amounts = uniswap.getAmountsOut(fromAmount, path); + amountOutMin = amounts[1]; + + swapData = LibSwap.SwapData( + liFiDEXAggregator, + liFiDEXAggregator, + sendingAssetId, + address(0), + fromAmount, + // this is calldata for the DEXAggregator to swap 2 DAI to native + hex"2646478b0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000000000002f70244563dc70000000000000000000000007f2922c09dd671055c5abbc4f5657f874c18062900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000073026B175474E89094C44Da98b954EedeAC495271d0F01ffff00A478c2975Ab1Ea89e8196811F51A7B7Ade33eB1101e43ca1Dee3F0fc1e2df73A0745674545F11A59F5000bb801C02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc201ffff02007F2922c09DD671055C5aBBC4F5657f874c18062900000000000000000000000000", + true + ); + } +} diff --git a/test/solidity/Periphery/Permit2Proxy.t.sol b/test/solidity/Periphery/Permit2Proxy.t.sol new file mode 100644 index 000000000..7719f2f98 --- /dev/null +++ b/test/solidity/Periphery/Permit2Proxy.t.sol @@ -0,0 +1,719 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.17; + +import { TestBase, ILiFi, console, ERC20 } from "../utils/TestBase.sol"; +import { Permit2Proxy } from "lifi/Periphery/Permit2Proxy.sol"; +import { ISignatureTransfer } from "permit2/interfaces/ISignatureTransfer.sol"; +import { PermitHash } from "permit2/libraries/PermitHash.sol"; +import { PolygonBridgeFacet } from "lifi/Facets/PolygonBridgeFacet.sol"; +import { ERC20Permit } from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; + +contract Permit2ProxyTest is TestBase { + using PermitHash for ISignatureTransfer.PermitTransferFrom; + + /// Constants /// + + address internal constant PERMIT2_ADDRESS = + 0x000000000022D473030F116dDEE9F6B43aC78BA3; + uint256 internal PRIVATE_KEY = 0x1234567890; + address internal DIAMOND_ADDRESS = + 0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE; + + /// Storage /// + + bytes32 internal PERMIT_WITH_WITNESS_TYPEHASH; + Permit2Proxy internal permit2Proxy; + ISignatureTransfer internal uniPermit2; + address internal PERMIT2_USER; + + /// Types /// + + struct TestDataEIP2612 { + address tokenAddress; + address userWallet; + uint256 nonce; + uint256 deadline; + bytes diamondCalldata; + uint8 v; + bytes32 r; + bytes32 s; + } + + /// Errors /// + + error InvalidSigner(); + error InvalidNonce(); + error DiamondAddressNotWhitelisted(); + error CallToDiamondFailed(bytes); + + function setUp() public { + customBlockNumberForForking = 20261175; + initTestBase(); + + uniPermit2 = ISignatureTransfer(PERMIT2_ADDRESS); + permit2Proxy = new Permit2Proxy( + DIAMOND_ADDRESS, + uniPermit2, + USER_DIAMOND_OWNER + ); + PERMIT_WITH_WITNESS_TYPEHASH = keccak256( + abi.encodePacked( + PermitHash._PERMIT_TRANSFER_FROM_WITNESS_TYPEHASH_STUB, + permit2Proxy.WITNESS_TYPE_STRING() + ) + ); + + PERMIT2_USER = vm.addr(PRIVATE_KEY); + vm.label(PERMIT2_USER, "Permit2 User"); + deal(ADDRESS_USDC, PERMIT2_USER, 10000 ether); + + // Infinite approve to Permit2 + vm.prank(PERMIT2_USER); + ERC20(ADDRESS_USDC).approve(PERMIT2_ADDRESS, type(uint256).max); + } + + /// Tests /// + + /// EIP2612 (native permit) related test cases /// + + function test_can_execute_calldata_using_eip2612_signature_usdc() + public + assertBalanceChange( + ADDRESS_USDC, + PERMIT2_USER, + -int256(defaultUSDCAmount) + ) + returns (TestDataEIP2612 memory) + { + vm.startPrank(PERMIT2_USER); + + // get token-specific domainSeparator + bytes32 domainSeparator = ERC20Permit(ADDRESS_USDC).DOMAIN_SEPARATOR(); + + // // using USDC on ETH for testing (implements EIP2612) + TestDataEIP2612 + memory testdata = _getTestDataEIP2612SignedByPERMIT2_USER( + ADDRESS_USDC, + domainSeparator, + block.timestamp + 1000 + ); + + // expect LifiTransferStarted event to be emitted by our diamond contract + vm.expectEmit(true, true, true, true, DIAMOND_ADDRESS); + emit LiFiTransferStarted(bridgeData); + + // call Permit2Proxy with signature + permit2Proxy.callDiamondWithEIP2612Signature( + ADDRESS_USDC, + defaultUSDCAmount, + testdata.deadline, + testdata.v, + testdata.r, + testdata.s, + testdata.diamondCalldata + ); + vm.stopPrank(); + return testdata; + } + + function testRevert_when_called_with_invalid_calldata() public { + vm.startPrank(PERMIT2_USER); + + // get token-specific domainSeparator + bytes32 domainSeparator = ERC20Permit(ADDRESS_USDC).DOMAIN_SEPARATOR(); + + // // using USDC on ETH for testing (implements EIP2612) + TestDataEIP2612 + memory testdata = _getTestDataEIP2612SignedByPERMIT2_USER( + ADDRESS_USDC, + domainSeparator, + block.timestamp + 1000 + ); + + // call Permit2Proxy with signature + vm.expectRevert( + abi.encodeWithSignature( + "CallToDiamondFailed(bytes)", + hex"a9ad62f8" // Function does not exist + ) + ); + permit2Proxy.callDiamondWithEIP2612Signature( + ADDRESS_USDC, + defaultUSDCAmount, + testdata.deadline, + testdata.v, + testdata.r, + testdata.s, + hex"1337c0d3" // This should revert as the method does not exist + ); + } + + function testRevert_cannot_use_eip2612_signature_twice() public { + TestDataEIP2612 + memory testdata = test_can_execute_calldata_using_eip2612_signature_usdc(); + + vm.startPrank(PERMIT2_USER); + + // // expect call to revert if same signature is used twice + vm.expectRevert("EIP2612: invalid signature"); + permit2Proxy.callDiamondWithEIP2612Signature( + ADDRESS_USDC, + defaultUSDCAmount, + testdata.deadline, + testdata.v, + testdata.r, + testdata.s, + testdata.diamondCalldata + ); + + vm.stopPrank(); + } + + function testRevert_cannot_use_expired_eip2612_signature() public { + vm.startPrank(PERMIT2_USER); + + // get token-specific domainSeparator + bytes32 domainSeparator = ERC20Permit(ADDRESS_USDC).DOMAIN_SEPARATOR(); + + // // using USDC on ETH for testing (implements EIP2612) + TestDataEIP2612 + memory testdata = _getTestDataEIP2612SignedByPERMIT2_USER( + ADDRESS_USDC, + domainSeparator, + block.timestamp - 1 // deadline in the past + ); + + // expect call to revert since signature deadline is in the past + vm.expectRevert("FiatTokenV2: permit is expired"); + + // call Permit2Proxy with signature + permit2Proxy.callDiamondWithEIP2612Signature( + ADDRESS_USDC, + defaultUSDCAmount, + testdata.deadline, + testdata.v, + testdata.r, + testdata.s, + testdata.diamondCalldata + ); + + vm.stopPrank(); + } + + function testRevert_cannot_use_invalid_eip2612_signature() public { + vm.startPrank(PERMIT2_USER); + + // get token-specific domainSeparator + bytes32 domainSeparator = ERC20Permit(ADDRESS_USDC).DOMAIN_SEPARATOR(); + + // // using USDC on ETH for testing (implements EIP2612) + TestDataEIP2612 + memory testdata = _getTestDataEIP2612SignedByPERMIT2_USER( + ADDRESS_USDC, + domainSeparator, + block.timestamp + ); + + // expect call to revert since signature is invalid + vm.expectRevert("ECRecover: invalid signature 'v' value"); + + // call Permit2Proxy with signature + permit2Proxy.callDiamondWithEIP2612Signature( + ADDRESS_USDC, + defaultUSDCAmount, + testdata.deadline, + testdata.v + 1, // invalid v value + testdata.r, + testdata.s, + testdata.diamondCalldata + ); + + vm.stopPrank(); + } + + function testRevert_sign_and_call_using_different_addresses() public { + vm.startPrank(USER_SENDER); + + // get token-specific domainSeparator + bytes32 domainSeparator = ERC20Permit(ADDRESS_USDC).DOMAIN_SEPARATOR(); + + // // using USDC on ETH for testing (implements EIP2612) + TestDataEIP2612 + memory testdata = _getTestDataEIP2612SignedByPERMIT2_USER( + ADDRESS_USDC, + domainSeparator, + block.timestamp + ); + + // expect call to revert since signature was created by a different address + vm.expectRevert("EIP2612: invalid signature"); + // call Permit2Proxy with signature + permit2Proxy.callDiamondWithEIP2612Signature( + ADDRESS_USDC, + defaultUSDCAmount, + testdata.deadline, + testdata.v, + testdata.r, + testdata.s, + testdata.diamondCalldata + ); + + vm.stopPrank(); + } + + /// Permit2 specific tests /// + + function test_user_can_call_diamond_with_own_permit2_signature() public { + bytes memory diamondCalldata; + ISignatureTransfer.PermitTransferFrom memory permitTransferFrom; + bytes memory signature; + ( + diamondCalldata, + permitTransferFrom, + , + signature + ) = _getPermit2TransferFromParamsSignedByPERMIT2_USER(); + + // Execute + vm.prank(PERMIT2_USER); + permit2Proxy.callDiamondWithPermit2( + diamondCalldata, + permitTransferFrom, + signature + ); + } + + function testRevert_cannot_call_diamond_with_permit2_using_different_wallet_address() + public + { + bytes memory diamondCalldata; + ISignatureTransfer.PermitTransferFrom memory permitTransferFrom; + bytes memory signature; + ( + diamondCalldata, + permitTransferFrom, + , + signature + ) = _getPermit2TransferFromParamsSignedByPERMIT2_USER(); + + // Execute + vm.prank(USER_SENDER); // Not the original signer + vm.expectRevert(InvalidSigner.selector); + permit2Proxy.callDiamondWithPermit2( + diamondCalldata, + permitTransferFrom, + signature + ); + } + + function test_can_call_diamond_with_permit2_plus_witness() public { + bytes memory diamondCalldata; + ISignatureTransfer.PermitTransferFrom memory permitTransferFrom; + bytes memory signature; + ( + diamondCalldata, + permitTransferFrom, + , + signature + ) = _getPermit2WitnessTransferFromParamsSignedByPERMIT2_USER(); + + // Execute + vm.prank(USER_SENDER); // Can be executed by anyone + permit2Proxy.callDiamondWithPermit2Witness( + diamondCalldata, + PERMIT2_USER, + permitTransferFrom, + signature + ); + } + + function test_can_generate_a_valid_msg_hash_for_signing() public { + bytes32 msgHash; + bytes32 generatedMsgHash; + ( + , + , + msgHash, + + ) = _getPermit2WitnessTransferFromParamsSignedByPERMIT2_USER(); + + generatedMsgHash = permit2Proxy.getPermit2MsgHash( + _getCalldataForBridging(), + ADDRESS_USDC, + defaultUSDCAmount, + 0, + block.timestamp + 1000 + ); + + assertEq(msgHash, generatedMsgHash); + } + + function testRevert_cannot_call_diamond_single_with_same_signature_more_than_once() + public + { + deal(ADDRESS_USDC, PERMIT2_USER, 10000 ether); + bytes memory diamondCalldata; + ISignatureTransfer.PermitTransferFrom memory permitTransferFrom; + bytes memory signature; + ( + diamondCalldata, + permitTransferFrom, + , + signature + ) = _getPermit2WitnessTransferFromParamsSignedByPERMIT2_USER(); + + // Execute x2 + permit2Proxy.callDiamondWithPermit2Witness( + diamondCalldata, + PERMIT2_USER, + permitTransferFrom, + signature + ); + vm.expectRevert(InvalidNonce.selector); + permit2Proxy.callDiamondWithPermit2Witness( + diamondCalldata, + PERMIT2_USER, + permitTransferFrom, + signature + ); + } + + function testRevert_cannot_set_different_calldata_than_intended() public { + deal(ADDRESS_USDC, PERMIT2_USER, 10000 ether); + bytes memory diamondCalldata; + ISignatureTransfer.PermitTransferFrom memory permitTransferFrom; + bytes memory signature; + ( + diamondCalldata, + permitTransferFrom, + , + signature + ) = _getPermit2WitnessTransferFromParamsSignedByPERMIT2_USER(); + + bytes memory MALICIOUS_CALLDATA = hex"1337c0d3"; + + // Execute + vm.expectRevert(InvalidSigner.selector); + permit2Proxy.callDiamondWithPermit2Witness( + MALICIOUS_CALLDATA, + PERMIT2_USER, + permitTransferFrom, + signature + ); + } + + function testRevert_cannot_use_permit2_signature_from_another_wallet() + public + { + deal(ADDRESS_USDC, PERMIT2_USER, 10000 ether); + bytes memory diamondCalldata; + ISignatureTransfer.PermitTransferFrom memory permitTransferFrom; + bytes32 msgHash; + ( + diamondCalldata, + permitTransferFrom, + msgHash, + + ) = _getPermit2WitnessTransferFromParamsSignedByPERMIT2_USER(); + + // Sign with a random key + bytes memory signature = _signMsgHash(msgHash, 987654321); + + // Execute + vm.expectRevert(InvalidSigner.selector); + permit2Proxy.callDiamondWithPermit2Witness( + diamondCalldata, + PERMIT2_USER, + permitTransferFrom, + signature + ); + } + + function testRevert_cannot_transfer_more_tokens_than_intended() public { + deal(ADDRESS_USDC, PERMIT2_USER, 10000 ether); + bytes memory diamondCalldata; + ISignatureTransfer.PermitTransferFrom memory permitTransferFrom; + bytes32 msgHash; + bytes memory signature; + ( + diamondCalldata, + permitTransferFrom, + msgHash, + signature + ) = _getPermit2WitnessTransferFromParamsSignedByPERMIT2_USER(); + + permitTransferFrom.permitted.amount += 1; + + // Execute + vm.expectRevert(InvalidSigner.selector); + permit2Proxy.callDiamondWithPermit2Witness( + diamondCalldata, + PERMIT2_USER, + permitTransferFrom, + signature + ); + } + + /// The following test code was adapted from https://github.com/flood-protocol/permit2-nonce-finder/blob/7a4ac8a58d0b499308000b75ddb2384834f31fac/test/Permit2NonceFinder.t.sol + + function test_can_find_nonce() public { + // We invalidate the first nonce to make sure it's not returned. + // We pass a mask of 0...0011 to invalidate nonce 0 and 1. + uniPermit2.invalidateUnorderedNonces(0, 3); + assertEq(permit2Proxy.nextNonce(address(this)), 2); + + // Invalidate the first word minus 1 nonce + uniPermit2.invalidateUnorderedNonces(0, type(uint256).max >> 1); + // We should find the last nonce in the first word + assertEq(permit2Proxy.nextNonce(address(this)), 255); + } + + function test_can_find_nonce_after() public { + // We want to start from the second word + uint256 start = 256; + // We invalidate the whole next word to make sure it's not returned. + uniPermit2.invalidateUnorderedNonces(1, type(uint256).max); + assertEq(permit2Proxy.nextNonceAfter(address(this), start), 512); + + // Invalidate the next word minus 1 nonce + uniPermit2.invalidateUnorderedNonces(2, type(uint256).max >> 1); + // We should find the first nonce in the third word + assertEq(permit2Proxy.nextNonceAfter(address(this), 767), 768); + + // The first word is still accessible if we start from a lower nonce + assertEq(permit2Proxy.nextNonceAfter(address(this), 1), 2); + } + + /// Helper Functions /// + + function _getPermit2TransferFromParamsSignedByPERMIT2_USER() + internal + view + returns ( + bytes memory diamondCalldata, + ISignatureTransfer.PermitTransferFrom memory permitTransferFrom, + bytes32 msgHash, + bytes memory signature + ) + { + // Calldata + diamondCalldata = _getCalldataForBridging(); + + // Token Permissions + ISignatureTransfer.TokenPermissions + memory tokenPermissions = ISignatureTransfer.TokenPermissions( + ADDRESS_USDC, + defaultUSDCAmount + ); + bytes32 permit = _getTokenPermissionsHash(tokenPermissions); + + // Nonce + uint256 nonce = permit2Proxy.nextNonce(PERMIT2_USER); + + // PermitTransferFrom + msgHash = _getPermitTransferFromHash( + uniPermit2.DOMAIN_SEPARATOR(), + permit, + address(permit2Proxy), + nonce, + block.timestamp + 1000 + ); + + signature = _signMsgHash(msgHash, PRIVATE_KEY); + + permitTransferFrom = ISignatureTransfer.PermitTransferFrom( + tokenPermissions, + nonce, + block.timestamp + 1000 + ); + } + + function _getPermit2WitnessTransferFromParamsSignedByPERMIT2_USER() + internal + view + returns ( + bytes memory diamondCalldata, + ISignatureTransfer.PermitTransferFrom memory permitTransferFrom, + bytes32 msgHash, + bytes memory signature + ) + { + // Token Permissions + ISignatureTransfer.TokenPermissions + memory tokenPermissions = ISignatureTransfer.TokenPermissions( + ADDRESS_USDC, + defaultUSDCAmount + ); + bytes32 permit = _getTokenPermissionsHash(tokenPermissions); + + // Witness + diamondCalldata = _getCalldataForBridging(); + Permit2Proxy.LiFiCall memory lifiCall = Permit2Proxy.LiFiCall( + DIAMOND_ADDRESS, + keccak256(diamondCalldata) + ); + bytes32 witness = _getWitnessHash(lifiCall); + + // Nonce + uint256 nonce = permit2Proxy.nextNonce(PERMIT2_USER); + + // PermitTransferWithWitness + msgHash = _getPermitWitnessTransferFromHash( + uniPermit2.DOMAIN_SEPARATOR(), + permit, + address(permit2Proxy), + nonce, + block.timestamp + 1000, + witness + ); + + signature = _signMsgHash(msgHash, PRIVATE_KEY); + + permitTransferFrom = ISignatureTransfer.PermitTransferFrom( + tokenPermissions, + nonce, + block.timestamp + 1000 + ); + } + + function _signMsgHash( + bytes32 msgHash, + uint256 privateKey + ) internal pure returns (bytes memory signature) { + (uint8 v, bytes32 r, bytes32 s) = vm.sign(privateKey, msgHash); + signature = bytes.concat(r, s, bytes1(v)); + } + + function _getCalldataForBridging() + private + view + returns (bytes memory diamondCalldata) + { + bytes4 selector = PolygonBridgeFacet + .startBridgeTokensViaPolygonBridge + .selector; + + diamondCalldata = abi.encodeWithSelector(selector, bridgeData); + } + + function _getTokenPermissionsHash( + ISignatureTransfer.TokenPermissions memory tokenPermissions + ) internal pure returns (bytes32) { + return + keccak256( + abi.encode( + PermitHash._TOKEN_PERMISSIONS_TYPEHASH, + tokenPermissions.token, + tokenPermissions.amount + ) + ); + } + + function _getWitnessHash( + Permit2Proxy.LiFiCall memory lifiCall + ) internal view returns (bytes32) { + return + keccak256(abi.encode(permit2Proxy.WITNESS_TYPEHASH(), lifiCall)); + } + + function _getPermitTransferFromHash( + bytes32 domainSeparator, + bytes32 permit, + address spender, + uint256 nonce, + uint256 deadline + ) internal pure returns (bytes32) { + bytes32 dataHash = keccak256( + abi.encode( + PermitHash._PERMIT_TRANSFER_FROM_TYPEHASH, + permit, + spender, + nonce, + deadline + ) + ); + + return + keccak256(abi.encodePacked("\x19\x01", domainSeparator, dataHash)); + } + + function _getPermitWitnessTransferFromHash( + bytes32 domainSeparator, + bytes32 permit, + address spender, + uint256 nonce, + uint256 deadline, + bytes32 witness + ) internal view returns (bytes32) { + bytes32 dataHash = keccak256( + abi.encode( + PERMIT_WITH_WITNESS_TYPEHASH, + permit, + spender, + nonce, + deadline, + witness + ) + ); + + return + keccak256(abi.encodePacked("\x19\x01", domainSeparator, dataHash)); + } + + function _getTestDataEIP2612SignedByPERMIT2_USER( + address tokenAddress, + bytes32 domainSeparator, + uint256 deadline + ) internal view returns (TestDataEIP2612 memory testdata) { + testdata.tokenAddress = tokenAddress; + testdata.userWallet = PERMIT2_USER; + testdata.nonce = ERC20Permit(tokenAddress).nonces(testdata.userWallet); + testdata.deadline = deadline; + + // generate approval data to be signed by user + bytes32 digest = _generateEIP2612MsgHash( + testdata.userWallet, + address(permit2Proxy), + defaultUSDCAmount, + testdata.nonce, + testdata.deadline, + domainSeparator + ); + + // sign digest and return signature + (testdata.v, testdata.r, testdata.s) = vm.sign(PRIVATE_KEY, digest); + + // get calldata for bridging (simple USDC bridging via PolygonBridge) + testdata.diamondCalldata = _getCalldataForBridging(); + } + + function _generateEIP2612MsgHash( + address owner, + address spender, + uint256 amount, + uint256 nonce, + uint256 deadline, + bytes32 domainSeparator + ) internal pure returns (bytes32 digest) { + digest = keccak256( + abi.encodePacked( + "\x19\x01", + // Domain separator + domainSeparator, + // Permit struct + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + amount, + nonce, + deadline + ) + ) + ) + ); + } +} diff --git a/test/solidity/utils/TestBase.sol b/test/solidity/utils/TestBase.sol index 386f7821b..14813f95d 100644 --- a/test/solidity/utils/TestBase.sol +++ b/test/solidity/utils/TestBase.sol @@ -412,7 +412,7 @@ abstract contract TestBase is Test, DiamondTest, ILiFi { //@dev: be careful that _facetTestContractAddress is set before calling this function function setDefaultSwapDataSingleDAItoETH() internal virtual { delete swapData; - // Swap DAI -> USDC + // Swap DAI -> ETH address[] memory path = new address[](2); path[0] = ADDRESS_DAI; path[1] = ADDRESS_WRAPPED_NATIVE; diff --git a/tsconfig.json b/tsconfig.json index 9481593ca..537531a02 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es2020", "module": "commonjs", "strict": true, "esModuleInterop": true, @@ -8,7 +8,7 @@ "forceConsistentCasingInFileNames": true, "outDir": "dist", "resolveJsonModule": true, - "lib": ["es2015", "DOM"], + "lib": ["es2020", "DOM"], "types": ["node"] }, "include": [ diff --git a/yarn.lock b/yarn.lock index d66b1d16d..ad11c3f94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,11 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== +"@adraffy/ens-normalize@^1.10.1": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" + integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg== + "@arbitrum/sdk@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-3.0.0.tgz#a5dc48a00cb8c6e230a2c696c0e880a7f80c637d" @@ -112,120 +117,125 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== +"@esbuild/aix-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" + integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== + +"@esbuild/android-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" + integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== + +"@esbuild/android-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" + integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== + +"@esbuild/android-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" + integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== + +"@esbuild/darwin-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" + integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== + +"@esbuild/darwin-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" + integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== + +"@esbuild/freebsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" + integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== + +"@esbuild/freebsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" + integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== + +"@esbuild/linux-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" + integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== + +"@esbuild/linux-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" + integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== + +"@esbuild/linux-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" + integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== + +"@esbuild/linux-loong64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" + integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== + +"@esbuild/linux-mips64el@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" + integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== + +"@esbuild/linux-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" + integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== + +"@esbuild/linux-riscv64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" + integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== + +"@esbuild/linux-s390x@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" + integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== + +"@esbuild/linux-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" + integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== + +"@esbuild/netbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" + integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== + +"@esbuild/openbsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" + integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== + +"@esbuild/openbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" + integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== + +"@esbuild/sunos-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" + integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== + +"@esbuild/win32-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" + integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== + +"@esbuild/win32-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" + integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== + +"@esbuild/win32-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" + integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== "@eslint/eslintrc@^1.4.0": version "1.4.0" @@ -763,6 +773,18 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" @@ -879,21 +901,14 @@ dependencies: "@noble/hashes" "1.3.3" -"@noble/curves@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" - integrity sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg== - dependencies: - "@noble/hashes" "1.4.0" - -"@noble/curves@^1.4.0": +"@noble/curves@1.6.0", "@noble/curves@^1.4.0", "@noble/curves@^1.6.0", "@noble/curves@~1.6.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.6.0.tgz#be5296ebcd5a1730fccea4786d420f87abfeb40b" integrity sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ== dependencies: "@noble/hashes" "1.5.0" -"@noble/curves@^1.4.2", "@noble/curves@~1.4.0": +"@noble/curves@^1.4.2": version "1.4.2" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== @@ -915,12 +930,12 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== -"@noble/hashes@1.4.0", "@noble/hashes@^1.3.3", "@noble/hashes@~1.4.0": +"@noble/hashes@1.4.0", "@noble/hashes@^1.3.3": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== -"@noble/hashes@1.5.0", "@noble/hashes@^1.4.0", "@noble/hashes@~1.5.0": +"@noble/hashes@1.5.0", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== @@ -1198,6 +1213,24 @@ resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.5.tgz#97c217f1db795395c04404291937edb528f3f218" integrity sha512-U1RH9OQ1mWYQfb+moX5aTgGjpVVlOcpiFI47wwnaGG4kLhcTy90cNiapoqZenxcRAITVbr0/+QSduINL5EsUIQ== +"@npmcli/agent@^2.0.0": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" + integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.3" + +"@npmcli/fs@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" + integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== + dependencies: + semver "^7.3.5" + "@octokit/auth-token@^5.0.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-5.1.1.tgz#3bbfe905111332a17f72d80bd0b51a3e2fa2cf07" @@ -1291,6 +1324,11 @@ dependencies: "@octokit/openapi-types" "^22.2.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -1408,7 +1446,12 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== -"@scure/base@~1.1.6", "@scure/base@~1.1.8": +"@scure/base@~1.1.7": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== + +"@scure/base@~1.1.8": version "1.1.8" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.8.tgz#8f23646c352f020c83bca750a82789e246d42b50" integrity sha512-6CyAclxj3Nb0XT7GHK6K4zK6k2xJm6E4Ft0Ohjt4WgegiFUHEtFb2CGzmPmGBwoIhrLsqNLYfLr04Y1GePrzZg== @@ -1440,14 +1483,14 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.4" -"@scure/bip32@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" - integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== +"@scure/bip32@1.5.0", "@scure/bip32@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.5.0.tgz#dd4a2e1b8a9da60e012e776d954c4186db6328e6" + integrity sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw== dependencies: - "@noble/curves" "~1.4.0" - "@noble/hashes" "~1.4.0" - "@scure/base" "~1.1.6" + "@noble/curves" "~1.6.0" + "@noble/hashes" "~1.5.0" + "@scure/base" "~1.1.7" "@scure/bip39@1.1.0": version "1.1.0" @@ -1473,7 +1516,7 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.4" -"@scure/bip39@1.4.0": +"@scure/bip39@1.4.0", "@scure/bip39@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.4.0.tgz#664d4f851564e2e1d4bffa0339f9546ea55960a6" integrity sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw== @@ -1759,7 +1802,7 @@ resolved "https://registry.yarnpkg.com/@types/fined/-/fined-1.1.3.tgz#83f03e8f0a8d3673dfcafb18fce3571f6250e1bc" integrity sha512-CWYnSRnun3CGbt6taXeVo2lCbuaj4mchVJ4UF/BdU5TSuIn3AmS13pGMwCsBUoehGbhZrBrpNJZSZI5EVilXww== -"@types/fs-extra@^11.0.4": +"@types/fs-extra@>=11": version "11.0.4" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-11.0.4.tgz#e16a863bb8843fba8c5004362b5a73e17becca45" integrity sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ== @@ -1864,12 +1907,12 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== -"@types/node@>=20.12.5": - version "20.14.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.5.tgz#fe35e3022ebe58b8f201580eb24e1fcfc0f2487d" - integrity sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA== +"@types/node@>=20": + version "22.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.0.tgz#b7f16e5c3384788542c72dc3d561a7ceae2c0365" + integrity sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ== dependencies: - undici-types "~5.26.4" + undici-types "~6.19.8" "@types/node@^12.12.54", "@types/node@^12.12.6": version "12.20.55" @@ -2110,6 +2153,14 @@ immer "^9.0.7" lodash-es "^4.17.21" +"@uniswap/permit2-sdk@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@uniswap/permit2-sdk/-/permit2-sdk-1.3.0.tgz#b54124e570f0adbaca9d39b2de3054fd7d3798a1" + integrity sha512-LstYQWP47dwpQrgqBJ+ysFstne9LgI5FGiKHc2ewjj91MTY8Mq1reocu6U/VDncdR5ef30TUOcZ7gPExRY8r6Q== + dependencies: + ethers "^5.7.0" + tiny-invariant "^1.1.0" + "@uniswap/sdk@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@uniswap/sdk/-/sdk-3.0.3.tgz#8201c7c72215d0030cb99acc7e661eff895c18a9" @@ -2159,15 +2210,20 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + abitype@0.9.8: version "0.9.8" resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.8.tgz#1f120b6b717459deafd213dfbf3a3dd1bf10ae8c" integrity sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ== -abitype@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.5.tgz#29d0daa3eea867ca90f7e4123144c1d1270774b6" - integrity sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw== +abitype@1.0.6, abitype@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.6.tgz#76410903e1d88e34f1362746e2d407513c38565b" + integrity sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A== abort-controller@^3.0.0: version "3.0.0" @@ -2263,6 +2319,13 @@ agent-base@6: dependencies: debug "4" +agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + agentkeepalive@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" @@ -2370,7 +2433,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^6.0.0: +ansi-styles@^6.0.0, ansi-styles@^6.1.0: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== @@ -2967,6 +3030,24 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +cacache@^18.0.0: + version "18.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" + integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cacheable-lookup@^5.0.3: version "5.0.4" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" @@ -3167,6 +3248,11 @@ chownr@^1.0.1, chownr@^1.1.1, chownr@^1.1.4: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -3574,7 +3660,7 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4002,6 +4088,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -4029,6 +4122,11 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + errno@~0.1.1: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -4128,34 +4226,35 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: d "^1.0.1" ext "^1.1.2" -esbuild@~0.19.10: - version "0.19.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== +esbuild@~0.23.0: + version "0.23.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" + integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" + "@esbuild/aix-ppc64" "0.23.1" + "@esbuild/android-arm" "0.23.1" + "@esbuild/android-arm64" "0.23.1" + "@esbuild/android-x64" "0.23.1" + "@esbuild/darwin-arm64" "0.23.1" + "@esbuild/darwin-x64" "0.23.1" + "@esbuild/freebsd-arm64" "0.23.1" + "@esbuild/freebsd-x64" "0.23.1" + "@esbuild/linux-arm" "0.23.1" + "@esbuild/linux-arm64" "0.23.1" + "@esbuild/linux-ia32" "0.23.1" + "@esbuild/linux-loong64" "0.23.1" + "@esbuild/linux-mips64el" "0.23.1" + "@esbuild/linux-ppc64" "0.23.1" + "@esbuild/linux-riscv64" "0.23.1" + "@esbuild/linux-s390x" "0.23.1" + "@esbuild/linux-x64" "0.23.1" + "@esbuild/netbsd-x64" "0.23.1" + "@esbuild/openbsd-arm64" "0.23.1" + "@esbuild/openbsd-x64" "0.23.1" + "@esbuild/sunos-x64" "0.23.1" + "@esbuild/win32-arm64" "0.23.1" + "@esbuild/win32-ia32" "0.23.1" + "@esbuild/win32-x64" "0.23.1" escalade@^3.1.1: version "3.1.1" @@ -4701,16 +4800,16 @@ eventemitter3@4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== +eventemitter3@5.0.1, eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -4746,6 +4845,11 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + express@^4.14.0: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -5058,6 +5162,14 @@ for-own@^1.0.0: dependencies: for-in "^1.0.1" +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -5175,6 +5287,20 @@ fs-minipass@^1.2.7: dependencies: minipass "^2.6.0" +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -5280,10 +5406,10 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -get-tsconfig@^4.7.2: - version "4.7.3" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83" - integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg== +get-tsconfig@^4.7.5: + version "4.8.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" + integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== dependencies: resolve-pkg-maps "^1.0.0" @@ -5340,6 +5466,18 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^10.2.2, glob@^10.3.10: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -5562,7 +5700,7 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.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== @@ -5814,6 +5952,11 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +http-cache-semantics@^4.1.1: + 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" @@ -5830,6 +5973,14 @@ http-https@^1.0.0: resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -5863,6 +6014,14 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" + integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^4.3.0: version "4.3.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" @@ -5887,6 +6046,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + 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" @@ -6039,6 +6205,14 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -6182,6 +6356,11 @@ is-interactive@^2.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -6347,6 +6526,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" @@ -6378,16 +6562,25 @@ isows@1.0.3: resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== -isows@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061" - integrity sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ== +isows@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" + integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== 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== +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jayson@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.0.tgz#60dc946a85197317f2b1439d672a8b0a99cea2f9" @@ -6469,6 +6662,11 @@ jsbi@^3.1.1: resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6" integrity sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ== +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -6884,6 +7082,11 @@ lowercase-keys@^3.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== +lru-cache@^10.0.1, lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -6918,6 +7121,24 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +make-fetch-happen@^13.0.0: + version "13.0.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" + integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== + dependencies: + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" + is-lambda "^1.0.1" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + proc-log "^4.2.0" + promise-retry "^2.0.1" + ssri "^10.0.0" + make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" @@ -7131,6 +7352,45 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + +minipass-fetch@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" + integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -7139,6 +7399,23 @@ minipass@^2.6.0, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -7146,6 +7423,14 @@ minizlib@^1.3.3: dependencies: minipass "^2.9.0" +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + mkdirp-classic@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" @@ -7158,7 +7443,7 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@^1.0.4: +mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -7323,7 +7608,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@0.6.3: +negotiator@0.6.3, 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== @@ -7387,6 +7672,22 @@ node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== +node-gyp@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.2.0.tgz#80101c4aa4f7ab225f13fcc8daaaac4eb1a8dd86" + integrity sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^10.3.10" + graceful-fs "^4.2.6" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^4.1.0" + semver "^7.3.5" + tar "^6.2.1" + which "^4.0.0" + node-plop@^0.31.1: version "0.31.1" resolved "https://registry.yarnpkg.com/node-plop/-/node-plop-0.31.1.tgz#20dd03e6ffe6d5c56bc38fc0b04df3475c33c7d5" @@ -7418,6 +7719,13 @@ nopt@3.x: dependencies: abbrev "1" +nopt@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" + integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== + dependencies: + abbrev "^2.0.0" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -7656,6 +7964,19 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +ox@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.1.2.tgz#0f791be2ccabeaf4928e6d423498fe1c8094e560" + integrity sha512-ak/8K0Rtphg9vnRJlbOdaX9R7cmxD2MiSthjWGaQdMk3D7hrAlDoM+6Lxn7hN52Za3vrXfZ7enfke/5WjolDww== + dependencies: + "@adraffy/ens-normalize" "^1.10.1" + "@noble/curves" "^1.6.0" + "@noble/hashes" "^1.5.0" + "@scure/bip32" "^1.5.0" + "@scure/bip39" "^1.4.0" + abitype "^1.0.6" + eventemitter3 "5.0.1" + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -7711,6 +8032,11 @@ p-try@^1.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== +package-json-from-dist@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" + integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -7857,6 +8183,14 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + 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" @@ -8031,6 +8365,11 @@ prettier@^2.3.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +proc-log@^4.1.0, proc-log@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" + integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -8056,6 +8395,14 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + proto3-json-serializer@^0.1.8: version "0.1.9" resolved "https://registry.yarnpkg.com/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz#705ddb41b009dd3e6fcd8123edd72926abf65a34" @@ -8522,6 +8869,11 @@ retry@0.13.1: resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -8665,7 +9017,7 @@ safe-stable-stringify@^2.1.0, safe-stable-stringify@^2.3.1: resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz#34694bd8a30575b7f94792aa51527551bd733d61" integrity sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA== -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", 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== @@ -8731,6 +9083,11 @@ semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: dependencies: lru-cache "^6.0.0" +semver@^7.3.5: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + semver@^7.5.4, semver@^7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" @@ -8869,6 +9226,11 @@ signal-exit@^3.0.2, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -8933,6 +9295,11 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snake-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" @@ -8941,6 +9308,23 @@ snake-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" +socks-proxy-agent@^8.0.3: + version "8.0.4" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c" + integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw== + dependencies: + agent-base "^7.1.1" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -9070,6 +9454,11 @@ split2@^4.0.0: resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -9101,6 +9490,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssri@^10.0.0: + version "10.0.6" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" + integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== + dependencies: + minipass "^7.0.3" + stacktrace-parser@^0.1.10: version "0.1.10" resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" @@ -9157,6 +9553,15 @@ string-format@^2.0.0: resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -9174,16 +9579,7 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: +string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -9229,6 +9625,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" @@ -9243,13 +9646,6 @@ strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -9437,6 +9833,18 @@ tar@^4.0.2: safe-buffer "^5.2.1" yallist "^3.1.1" +tar@^6.1.11, tar@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + text-encoding-utf-8@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" @@ -9651,13 +10059,13 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tsx@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.7.2.tgz#a108b1a6e16876cd4c9a4b4ba263f2a07f9cf562" - integrity sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw== +tsx@^4.19.2: + version "4.19.2" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.2.tgz#2d7814783440e0ae42354d0417d9c2989a2ae92c" + integrity sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g== dependencies: - esbuild "~0.19.10" - get-tsconfig "^4.7.2" + esbuild "~0.23.0" + get-tsconfig "^4.7.5" optionalDependencies: fsevents "~2.3.3" @@ -9803,10 +10211,10 @@ unc-path-regex@^0.1.2: resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.19.8: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== undici@^5.14.0: version "5.22.1" @@ -9820,6 +10228,20 @@ unfetch@^4.2.0: resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + universal-user-agent@^7.0.0, universal-user-agent@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.2.tgz#52e7d0e9b3dc4df06cc33cb2b9fd79041a54827e" @@ -9974,20 +10396,20 @@ viem@^1.6.0: isows "1.0.3" ws "8.13.0" -viem@^2.18.7: - version "2.21.5" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.21.5.tgz#07db65f047f2c24732ccf92bb96933ea8e8048b9" - integrity sha512-MFuoeGA8hRJJ0CknSuKYZjVaxSy5hyzu9MCArOANz3Iq5RITBJNIhM+m6TNvO9I2AxCSF3+PZObjbrLVg7cX2w== +viem@^2.21.48: + version "2.21.48" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.21.48.tgz#f8f1d0bf5381282e22e6a1f8b72ebd6e64426480" + integrity sha512-/hBHyG1gdIIuiQv0z9YmzXl5eWJa0UCZGwkeuQzH2Bmg6FIEwZeEcxgiytXZydip+p2wMBFa1jdr7o5O1+mrIg== dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.4.0" - "@noble/hashes" "1.4.0" - "@scure/bip32" "1.4.0" + "@noble/curves" "1.6.0" + "@noble/hashes" "1.5.0" + "@scure/bip32" "1.5.0" "@scure/bip39" "1.4.0" - abitype "1.0.5" - isows "1.0.4" - webauthn-p256 "0.0.5" - ws "8.17.1" + abitype "1.0.6" + isows "1.0.6" + ox "0.1.2" + webauthn-p256 "0.0.10" + ws "8.18.0" wcwidth@^1.0.1: version "1.0.1" @@ -10684,10 +11106,10 @@ web3@^1.3.5, web3@^1.5.2: web3-shh "1.8.1" web3-utils "1.8.1" -webauthn-p256@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/webauthn-p256/-/webauthn-p256-0.0.5.tgz#0baebd2ba8a414b21cc09c0d40f9dd0be96a06bd" - integrity sha512-drMGNWKdaixZNobeORVIqq7k5DsRC9FnG201K2QjeOoQLmtSDaSsVZdkg6n5jUALJKcAG++zBPJXmv6hy0nWFg== +webauthn-p256@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/webauthn-p256/-/webauthn-p256-0.0.10.tgz#877e75abe8348d3e14485932968edf3325fd2fdd" + integrity sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA== dependencies: "@noble/curves" "^1.4.0" "@noble/hashes" "^1.4.0" @@ -10759,6 +11181,13 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +which@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -10782,6 +11211,15 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -10791,14 +11229,14 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" wrappy@1: version "1.0.2" @@ -10822,10 +11260,10 @@ ws@8.13.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== -ws@8.17.1: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +ws@8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== ws@8.5.0: version "8.5.0" @@ -10988,10 +11426,10 @@ zksync-web3@^0.14.3: resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.3.tgz#64ac2a16d597464c3fc4ae07447a8007631c57c9" integrity sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ== -zx@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/zx/-/zx-8.0.2.tgz#06b3769d814e83789e43a4d4da3790f7fc52b687" - integrity sha512-3g+ePtPYmyrjRuASlJiUhkje1je4a47woML/fzTKBb9PA5BzRQbSswwyJ8nlFWJjA1ORRi6TMyAdhuz/jK+Gaw== +zx@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/zx/-/zx-8.2.2.tgz#ec77551d53ea9979213d6cce963516d20d305e54" + integrity sha512-HSIdpU5P2ONI0nssnhsUZNCH9Sd/Z8LIFk9n8QTbu6JufzJx7qR7ajrMN21s06JqWSApcN012377iWsv8Vs5bg== optionalDependencies: - "@types/fs-extra" "^11.0.4" - "@types/node" ">=20.12.5" + "@types/fs-extra" ">=11" + "@types/node" ">=20"