diff --git a/.env.example b/.env.example index 0e0598db0..fd00fab9d 100644 --- a/.env.example +++ b/.env.example @@ -1,34 +1,35 @@ PRIVATE_KEY=<your private key> -CREATE3_FACTORY_ADDRESS=0x93FEC2C00BfE902F733B57c5a6CeeD7CD1384AE1 # Public CREATE3 factory address - # Mainnet RPCs (the 'pre-commit-checker' comment after the URL is only for our internal tool and not required in your .env file) ETH_NODE_URI_MAINNET=https://1rpc.io/eth #[pre-commit-checker: not a secret] ETH_NODE_URI_ARBITRUM=https://1rpc.io/arb #[pre-commit-checker: not a secret] ETH_NODE_URI_AURORA=https://1rpc.io/aurora #[pre-commit-checker: not a secret] ETH_NODE_URI_AVALANCHE=https://1rpc.io/avax/c #[pre-commit-checker: not a secret] +ETH_NODE_URI_BASE=https://mainnet.base.org #[pre-commit-checker: not a secret] +ETH_NODE_URI_BLAST=https://rpc.blast.io #[pre-commit-checker: not a secret] ETH_NODE_URI_BOBA=https://mainnet.boba.network #[pre-commit-checker: not a secret] ETH_NODE_URI_BSC=https://1rpc.io/bnb #[pre-commit-checker: not a secret] ETH_NODE_URI_CELO=https://1rpc.io/celo #[pre-commit-checker: not a secret] -ETH_NODE_URI_CRONOS=https://evm.cronos.org #[pre-commit-checker: not a secret] -ETH_NODE_URI_EVMOS=https://evmos-json-rpc.stakely.io #[pre-commit-checker: not a secret] ETH_NODE_URI_FANTOM=https://1rpc.io/ftm #[pre-commit-checker: not a secret] +ETH_NODE_URI_FRAXTAL=https://rpc.frax.com #[pre-commit-checker: not a secret] ETH_NODE_URI_FUSE=https://rpc.fuse.io #[pre-commit-checker: not a secret] ETH_NODE_URI_GNOSIS=https://rpc.ankr.com/gnosis #[pre-commit-checker: not a secret] -ETH_NODE_URI_HARMONY=https://api.harmony.one #[pre-commit-checker: not a secret] +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_LINEA=https://rpc.linea.build #[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] ETH_NODE_URI_MOONBEAM=https://1rpc.io/glmr #[pre-commit-checker: not a secret] ETH_NODE_URI_MOONRIVER=https://rpc.moonriver.moonbeam.network #[pre-commit-checker: not a secret] -ETH_NODE_URI_NOVA=https://nova.arbitrum.io/rpc #[pre-commit-checker: not a secret] -ETH_NODE_URI_OKX=https://exchainrpc.okex.org #[pre-commit-checker: not a secret] -ETH_NODE_URI_OPBNB=https://opbnb-mainnet-rpc.bnbchain.org #[pre-commit-checker: not a secret] 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_VELAS=https://explorer.velas.com/rpc #[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_ZKSYNC=https://zksync2-mainnet.zksync #[pre-commit-checker: not a secret].io -ETH_NODE_URI_BASE=https://mainnet.base.org #[pre-commit-checker: not a secret] -ETH_NODE_URI_LINEA=https://rpc.linea.build #[pre-commit-checker: not a secret] -ETH_NODE_URI_MODE=https://mainnet.mode.network #[pre-commit-checker: not a secret] # Testnet RPCs ETH_NODE_URI_GOERLI=https://rpc.ankr.com/eth_goerli #[pre-commit-checker: not a secret] @@ -43,23 +44,30 @@ MAINNET_ETHERSCAN_API_KEY= ARBITRUM_ETHERSCAN_API_KEY= AURORA_ETHERSCAN_API_KEY= AVALANCHE_ETHERSCAN_API_KEY= +BASE_ETHERSCAN_API_KEY= +BLAST_ETHERSCAN_API_KEY= BOBA_ETHERSCAN_API_KEY= BSC_ETHERSCAN_API_KEY= CELO_ETHERSCAN_API_KEY= -CRONOS_ETHERSCAN_API_KEY= FANTOM_ETHERSCAN_API_KEY= +FRAXTAL_ETHERSCAN_API_KEY= FUSE_ETHERSCAN_API_KEY= GNOSIS_ETHERSCAN_API_KEY= +GRAVITY_ETHERSCAN_API_KEY= +IMMUTABLEZKEVM_ETHERSCAN_API_KEY= +LINEA_ETHERSCAN_API_KEY= +MANTLE_ETHERSCAN_API_KEY= +METIS_ETHERSCAN_API_KEY= +MODE_ETHERSCAN_API_KEY= MOONBEAM_ETHERSCAN_API_KEY= MOONRIVER_ETHERSCAN_API_KEY= -NOVA_ETHERSCAN_API_KEY= -OPBNB_ETHERSCAN_API_KEY= OPTIMISM_ETHERSCAN_API_KEY= POLYGON_ETHERSCAN_API_KEY= POLYGONZKEVM_ETHERSCAN_API_KEY= -BASE_ETHERSCAN_API_KEY= -LINEA_ETHERSCAN_API_KEY= -MODE_ETHERSCAN_API_KEY= +SCROLL_ETHERSCAN_API_KEY= +SEI_ETHERSCAN_API_KEY= +TAIKO_ETHERSCAN_API_KEY= + # Testnet Explorer API Keys GOERLI_ETHERSCAN_API_KEY= diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index b4601c4b7..542a47ac2 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -8,7 +8,6 @@ - [ ] This pull request is as small as possible and only tackles one problem - [ ] I have added tests that cover the functionality / test the bug - [ ] I have updated any required documentation -- [ ] If this requires a contract version change, I have updated the version number in the source file # Checklist for reviewer (DO NOT DEPLOY and contracts BEFORE CHECKING THIS!!!) diff --git a/.github/workflows/checkAuditRequired.yml b/.github/workflows/checkAuditRequired.yml new file mode 100644 index 000000000..fd0fce09e --- /dev/null +++ b/.github/workflows/checkAuditRequired.yml @@ -0,0 +1,117 @@ +# Audit Requirement Checker +# - checks if an audit is required for a given PR +# - an audit is required if any .sol file in path 'src/' has been modified or added +# - if audit is required, the action will assign the label "AuditRequired", otherwise it will assign label "AuditNotRequired" +# - it will also make sure that at the end, exactly one of these two labels is indeed assigned + +name: Audit Requirement Check + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + check-audit-required: + if: ${{ github.event.pull_request.draft == false }} # will only run once the PR is in "Ready for Review" state + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 ##### Fetch all history for all branches + + - name: Remove existing 'AuditRequired' and 'AuditNotRequired' labels + uses: actions-ecosystem/action-remove-labels@v1 + with: + github_token: ${{ secrets.GIT_ACTIONS_BOT_PAT_CLASSIC }} + labels: | + AuditRequired + AuditNotRequired + number: ${{ github.event.pull_request.number }} + + - name: Check Git Diff for protected contracts + id: check_eligibility + run: | + + ##### get all files modified by this PR + FILES=$(git diff --name-only origin/main HEAD) + + ##### make sure that there are modified files + if [[ -z $FILES ]]; then + echo -e "\033[31mNo files found. This should not happen. Please check the code of the Github action. Aborting now.\033[0m" + echo "CONTINUE=false" >> $GITHUB_ENV + fi + + ##### Initialize empty variables + PROTECTED_CONTRACTS="" + + ##### go through all modified file names/paths and identify contracts with path 'src/*' + while IFS= read -r FILE; do + if echo "$FILE" | grep -E '^src/.*\.sol$'; then + ##### contract found + PROTECTED_CONTRACTS="${PROTECTED_CONTRACTS}${FILE}"$'\n' + fi + done <<< "$FILES" + + ##### if none found, exit here as there is nothing to do + if [[ -z "$PROTECTED_CONTRACTS" ]]; then + echo -e "\033[32mNo protected contracts found in Git Diff.\033[0m" + echo -e "\033[32mAssigning label 'AuditNotRequired' to this PR.\033[0m" + echo "AUDIT_REQUIRED=false" >> $GITHUB_ENV + exit 0 + else + echo -e "\033[31mProtected contracts found in Git Diff.\033[0m" + echo -e "\033[31mAssigning label 'AuditRequired' to this PR.\033[0m" + echo "AUDIT_REQUIRED=true" >> $GITHUB_ENV + fi + + echo "PROTECTED_CONTRACTS: $PROTECTED_CONTRACTS" + + ##### Write filenames to temporary files (using variables here was causing issues due to the file names) + echo -e "$PROTECTED_CONTRACTS" > protected_contracts.txt + + - name: Assign correct label based on check outcome + uses: actions-ecosystem/action-add-labels@v1 + id: assign_label + with: + github_token: ${{ secrets.GIT_ACTIONS_BOT_PAT_CLASSIC }} # we use the token of the git action user so the label protection check will pass + labels: ${{ env.AUDIT_REQUIRED == 'true' && 'AuditRequired' || 'AuditNotRequired' }} # if the action made it until here and CONTINUE was true then all checks passed. It CONTINUE was false then no audit is required + number: ${{ github.event.pull_request.number }} + + - name: Verify label assignments (make sure exactly one of the two labels is assigned) + env: + GITHUB_TOKEN: ${{ secrets.GIT_ACTIONS_BOT_PAT_CLASSIC }} + run: | + + echo "Fetching currently assigned labels..." + assigned_labels=$(gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels | map(.name) | .[]') + + echo "Assigned labels: $assigned_labels" + + audit_required_assigned=0 + audit_not_required_assigned=0 + + ##### go through all assigned labels and count how many protected labels are found + for label in $assigned_labels; do + if [ "$label" = "AuditRequired" ]; then + audit_required_assigned=$((audit_required_assigned + 1)) + elif [ "$label" = "AuditNotRequired" ]; then + audit_not_required_assigned=$((audit_not_required_assigned + 1)) + fi + done + + total_labels_assigned=$((audit_required_assigned + audit_not_required_assigned)) + echo "Total labels assigned: $total_labels_assigned" + + ##### make sure that exactly (only) one protected label is assigned + if [ "$total_labels_assigned" -ne 1 ]; then + echo -e "\033[31mError: Exactly one of the two labels should be assigned but found $total_labels_assigned assigned labels.\033[0m" + exit 1 + else + echo -e "\033[32mVerified that exactly one label is assigned.\033[0m" + echo -e "\033[32mAll good :)\033[0m" + fi + + echo -e "\033[31mGit Action completed successfully\033[0m" diff --git a/.github/workflows/ensureSCCoreDevApproval.yml b/.github/workflows/ensureSCCoreDevApproval.yml new file mode 100644 index 000000000..47624d512 --- /dev/null +++ b/.github/workflows/ensureSCCoreDevApproval.yml @@ -0,0 +1,119 @@ +# - Smart Contract Core Dev Approval checker +# - makes sure that every pull_request is at least reviewed by one Smart Contract Core Dev +# (member of group https://github.com/orgs/lifinance/teams/smart-contract-core) + +name: SC Core Dev Approval Check + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + core-dev-approval: + if: ${{ github.event.pull_request.draft == false }} # will only run once the PR is in "Ready for Review" state + runs-on: ubuntu-latest + steps: + - name: Get smart-contract-core Team Members + env: + GH_PAT: ${{ secrets.GIT_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + + ##### unset the default git token (does not have sufficient rights to get team members) + unset GITHUB_TOKEN + ##### use the Personal Access Token to log into git CLI + echo $GH_PAT | gh auth login --with-token + + ##### Function that uses github's REST API via CLI to get team members + getTeamMembers() { + local org=$1 + local team=$2 + gh api \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "/orgs/$org/teams/$team/members" | jq -r '.[].login' + } + + ORG_NAME="lifinance" + TEAM_SLUG="smart-contract-core" + + # Get members of each group + echo "Fetching members of $TEAM_SLUG..." + MEMBERS=$(getTeamMembers $ORG_NAME $TEAM_SLUG) + + #### check if any members were returned + if [[ -z $MEMBERS ]]; then + echo -e "\033[31mERROR: Could not retrieve team members of group $TEAM_SLUG\033[0m" + echo "CONTINUE=false" >> "$GITHUB_ENV" + exit 1 + fi + + echo "The following Github users are members of team smart-contract-core: " + echo "$MEMBERS" + + echo -e "$MEMBERS" > sc_core_dev_members.txt + echo "CONTINUE=true" >> "$GITHUB_ENV" + + - name: Check if PR is approved by at least one SC core dev + id: check-core-dev-approval + if: env.CONTINUE == 'true' + uses: actions/github-script@v7 + env: + PR_NUMBER: ${{ github.event.number }} + with: + script: | + const fs = require('fs'); + // ANSI escape codes for colors (used for colored output in Git action console) + const colors = { + reset: "\033[0m", + red: "\033[31m", + green: "\033[32m", + }; + + const coreDevsFile = 'sc_core_dev_members.txt'; + // Read handles from file + const coreDevs = fs.readFileSync(coreDevsFile, 'utf-8').split(/\r?\n/).filter(Boolean); + + // get all reviewers that have approved this PR + const { data: reviews } = await github.rest.pulls.listReviews({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: process.env.PR_NUMBER, + }); + + // make sure that reviews are available + if(!reviews || reviews.length === 0) { + console.log(`${colors.red}Could not get reviewers of this PR from Github. Are there any reviews yet?${colors.reset}`); + console.log(`${colors.red}Check failed.${colors.reset}`); + core.setFailed("Required approval is missing"); + return + } + + // Filter to only include reviews that have "APPROVED" status + const approvedReviews = reviews.filter(review => review.state === 'APPROVED'); + + if(!approvedReviews.length === 0) { + console.log(`${colors.red}Could not find any reviews with approval.${colors.reset}`); + console.log(`${colors.red}Cannot continue. Check failed.${colors.reset}`); + core.setFailed("Required approval is missing"); + return + } + + // extract the git login handles of all reviewers that approved this PR + const reviewerHandles = approvedReviews.map(review => review.user.login); + + if(approvedReviews.length === 0) + console.log(`${colors.red}This PR has no approvals${colors.reset}`); + else + console.log(`This PR has been approved by the following git members: ${reviewerHandles}`); + + // check if at least one of these reviewers is member in smart-contract-core group + if (reviewerHandles.some((handle) => coreDevs.includes(handle))) { + console.log(`${colors.green}The current PR is approved by a member of the smart-contract-core group.${colors.reset}`); + console.log(`${colors.green}Check passed.${colors.reset}`); + core.setOutput('approved', 'true'); + } else { + console.log(`${colors.red}The PR requires a missing approval by a member of the smart-contract-core group (https://github.com/orgs/lifinance/teams/smart-contract-core).${colors.reset}`); + console.log(`${colors.red}Check failed.${colors.reset}`); + core.setFailed("Required approval is missing"); + } diff --git a/.github/workflows/protectAuditLabels.yml b/.github/workflows/protectAuditLabels.yml new file mode 100644 index 000000000..2112246cf --- /dev/null +++ b/.github/workflows/protectAuditLabels.yml @@ -0,0 +1,77 @@ +# Protect Audit Labels +# - Makes sure that the following labels can only be assigned by a GitHub Action: "AuditCompleted", "AuditRequired", and "AuditNotRequired" +# - Will undo any unauthorized change of these labels +# - Will fail if it runs into an error, otherwise pass + +name: Protect Audit Labels + +on: + pull_request: + types: [labeled, unlabeled] + +jobs: + protect_audit_labels: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Check for authorized actor + run: | + + + ##### Only allow the specific bot to manipulate audit labels + if [[ "${{ github.actor }}" == "lifi-action-bot" ]]; then + echo -e "\033[32mAction triggered by lifi-action-bot. No further checks required.\033[0m" + echo "CONTINUE=false" >> $GITHUB_ENV + exit 0 + fi + echo "CONTINUE=true" >> $GITHUB_ENV + echo "This action was triggered by: ${{ github.actor }}" + + - name: Protect Audit Labels + if: env.CONTINUE == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GIT_ACTIONS_BOT_PAT_CLASSIC }} + run: | + + + ##### Define the labels to protect + PROTECTED_LABELS=("AuditCompleted" "AuditRequired" "AuditNotRequired") + TARGET_LABEL="${{ github.event.label.name }}" + EVENT_ACTION="${{ github.event.action }}" + PR_NUMBER="${{ github.event.pull_request.number }}" + + ##### Fetch the current labels before action (to restore if needed) + CURRENT_LABELS=$(gh pr view $PR_NUMBER --json labels --jq '.labels[].name' | tr '\n' ' ') + echo "Current labels before processing: $CURRENT_LABELS" + echo "Event type: $EVENT_ACTION, Target label: $TARGET_LABEL" + + ##### Check if the event involves a protected label + if [[ " ${PROTECTED_LABELS[*]} " =~ " $TARGET_LABEL " ]]; then + echo -e "\033[31mUnauthorized modification of a protected label by ${{ github.actor }}. Reverting changes...\033[0m" + ##### Revert to the previous state of labels + if [[ "$EVENT_ACTION" == "unlabeled" ]]; then + gh pr edit $PR_NUMBER --add-label "$TARGET_LABEL" + elif [[ "$EVENT_ACTION" == "labeled" ]]; then + gh pr edit $PR_NUMBER --remove-label "$TARGET_LABEL" + fi + + ##### Validate if the revert was successful + NEW_LABELS=$(gh pr view $PR_NUMBER --json labels --jq '.labels[].name' | tr '\n' ' ') + echo "Labels after attempted revert: $NEW_LABELS" + + ##### Check if revert was successful + if [[ "$EVENT_ACTION" == "unlabeled" && ! " $NEW_LABELS " =~ " $TARGET_LABEL " ]]; then + echo -e "\033[31mFailed to restore the '$TARGET_LABEL' label.\033[0m" + exit 1 + elif [[ "$EVENT_ACTION" == "labeled" && " $NEW_LABELS " =~ " $TARGET_LABEL " ]]; then + echo -e "\033[31mFailed to remove the unauthorized '$TARGET_LABEL' label.\033[0m" + exit 1 + fi + + 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/protectAuditorsGroup.yml b/.github/workflows/protectAuditorsGroup.yml new file mode 100644 index 000000000..71afd805f --- /dev/null +++ b/.github/workflows/protectAuditorsGroup.yml @@ -0,0 +1,67 @@ +name: Protect Auditors Group + +on: + push: + +jobs: + check_membership: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Compare Group Members + env: + GH_PAT: ${{ secrets.GIT_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + + ##### unset the default git token (does not have sufficient rights to get team members) + unset GITHUB_TOKEN + ##### use the Personal Access Token to log into git CLI + echo $GH_PAT | gh auth login --with-token + + # Function to get team members + getTeamMembers() { + local org=$1 + local team=$2 + gh api \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "/orgs/$org/teams/$team/members" | jq -r '.[].login' + } + + ORG_NAME="lifinance" + SC_ADMINS="smart-contract-admins" + SC_CORE="smart-contract-core" + AUDITORS="auditors" + + ##### Get members of each group + echo "Fetching members of $SC_ADMINS..." + groupAMembers=$(getTeamMembers $ORG_NAME $SC_ADMINS) + + echo "Fetching members of $SC_CORE..." + groupBMembers=$(getTeamMembers $ORG_NAME $SC_CORE) + + echo "Fetching members of $AUDITORS..." + groupCMembers=$(getTeamMembers $ORG_NAME $AUDITORS) + + ##### Check overlap between smart-contract-core and auditors + overlap=$(echo "$groupAMembers" | grep -Fxf - <(echo "$groupCMembers")) + if [ -n "$overlap" ]; then + echo -e "\033[31mERROR: The following members are in both $SC_ADMINS and $AUDITORS: $overlap\033[0m" + echo -e "\033[31mAuditors must be external personnel and cannot be team members or admins\033[0m" + exit 1 + else + echo -e "\033[32mNo overlap found between $SC_ADMINS and $AUDITORS.\033[0m" + fi + + ##### Check overlap between smart-contract-admins and auditors + overlap2=$(echo "$groupBMembers" | grep -Fxf - <(echo "$groupCMembers")) + if [ -n "$overlap2" ]; then + echo -e "\033[31mERROR: The following members are in both $SC_CORE and $AUDITORS: $overlap2\033[0m" + echo -e "\033[31mAuditors must be external personnel and cannot be team members or admins\033[0m" + exit 1 + else + echo -e "\033[32mNo overlap found between $SC_CORE and $AUDITORS.\033[0m" + fi diff --git a/.github/workflows_deactivated/enforceTestCoverage.yml b/.github/workflows_deactivated/enforceTestCoverage.yml new file mode 100644 index 000000000..f9a326f27 --- /dev/null +++ b/.github/workflows_deactivated/enforceTestCoverage.yml @@ -0,0 +1,130 @@ +name: Enforce Test Coverage +on: + push: + +jobs: + enforce-coverage: + runs-on: ubuntu-latest + + permissions: + pull-requests: write + contents: read + env: + ETH_NODE_URI_MAINNET: ${{ secrets.ETH_NODE_URI_MAINNET }} + ETH_NODE_URI_POLYGON: ${{ secrets.ETH_NODE_URI_POLYGON }} + ETH_NODE_URI_GOERLI: ${{ secrets.ETH_NODE_URI_GOERLI }} + 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 }} + GIT_TOKEN: ${{ secrets.GIT_TOKEN }} + MIN_TEST_COVERAGE: 80 # 80 percent for now, will be increased to 100% gradually + steps: + - uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install Dependencies + run: npm install --save-dev ts-node @types/node --legacy-peer-deps + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1.0.10 + with: + version: nightly + + - name: Install Git Submodules + run: | + git config --global url."https://github.com/".insteadOf "git@github.com:" + git submodule update --init --recursive + + - name: Generate Coverage Report + run: | + forge coverage --report lcov --force + echo "Filtering coverage report to only contain coverage info about src/ folder now" + npx ts-node utils/filter_lcov.ts lcov.info lcov-filtered.info 'test/' 'script/' + echo "Coverage report filtered" + + - name: Generate Coverage Summary + run: | + # Path to the lcov info file + LCOV_FILE="lcov-filtered.info" + + # Initialize counters + TOTAL_LINES_FOUND=0 + TOTAL_LINES_HIT=0 + TOTAL_FUNCTIONS_FOUND=0 + TOTAL_FUNCTIONS_HIT=0 + TOTAL_BRANCHES_FOUND=0 + TOTAL_BRANCHES_HIT=0 + + # Read through the lcov file + while IFS= read -r line; do + case $line in + LF:*) + TOTAL_LINES_FOUND=$((TOTAL_LINES_FOUND + ${line#LF:})) + ;; + LH:*) + TOTAL_LINES_HIT=$((TOTAL_LINES_HIT + ${line#LH:})) + ;; + FNF:*) + TOTAL_FUNCTIONS_FOUND=$((TOTAL_FUNCTIONS_FOUND + ${line#FNF:})) + ;; + FNH:*) + TOTAL_FUNCTIONS_HIT=$((TOTAL_FUNCTIONS_HIT + ${line#FNH:})) + ;; + BRF:*) + TOTAL_BRANCHES_FOUND=$((TOTAL_BRANCHES_FOUND + ${line#BRF:})) + ;; + BRH:*) + TOTAL_BRANCHES_HIT=$((TOTAL_BRANCHES_HIT + ${line#BRH:})) + ;; + esac + done < "$LCOV_FILE" + + # Calculate percentages with high precision + LINE_COVERAGE_PERCENTAGE=$(echo "scale=4; $TOTAL_LINES_HIT / $TOTAL_LINES_FOUND * 100" | bc) + FUNCTION_COVERAGE_PERCENTAGE=$(echo "scale=4; $TOTAL_FUNCTIONS_HIT / $TOTAL_FUNCTIONS_FOUND * 100" | bc) + BRANCH_COVERAGE_PERCENTAGE=$(echo "scale=4; $TOTAL_BRANCHES_HIT / $TOTAL_BRANCHES_FOUND * 100" | bc) + + # Format results with two decimal places and alignment + LINE_COVERAGE_PERCENTAGE=$(printf "%.2f" "$LINE_COVERAGE_PERCENTAGE") + FUNCTION_COVERAGE_PERCENTAGE=$(printf "%.2f" "$FUNCTION_COVERAGE_PERCENTAGE") + BRANCH_COVERAGE_PERCENTAGE=$(printf "%.2f" "$BRANCH_COVERAGE_PERCENTAGE") + + # Prepare aligned output + LINE_COVERAGE_REPORT=$(printf "Line Coverage: %6s%% (%4d / %4d lines)" "$LINE_COVERAGE_PERCENTAGE" "$TOTAL_LINES_HIT" "$TOTAL_LINES_FOUND") + FUNCTION_COVERAGE_REPORT=$(printf "Function Coverage: %6s%% (%4d / %4d functions)" "$FUNCTION_COVERAGE_PERCENTAGE" "$TOTAL_FUNCTIONS_HIT" "$TOTAL_FUNCTIONS_FOUND") + BRANCH_COVERAGE_REPORT=$(printf "Branch Coverage: %6s%% (%4d / %4d branches)" "$BRANCH_COVERAGE_PERCENTAGE" "$TOTAL_BRANCHES_HIT" "$TOTAL_BRANCHES_FOUND") + + # Check against minimum threshold + if (( $(echo "$LINE_COVERAGE_PERCENTAGE >= $MIN_TEST_COVERAGE" | bc -l) )); then + RESULT_COVERAGE_REPORT="Test coverage ($LINE_COVERAGE_PERCENTAGE%) is above min threshold ($MIN_TEST_COVERAGE%). Check passed." + else + RESULT_COVERAGE_REPORT="Test coverage ($LINE_COVERAGE_PERCENTAGE%) is below min threshold ($MIN_TEST_COVERAGE%). Check failed." + echo $RESULT_COVERAGE_REPORT + exit 1 + fi + + # Output result_COVERAGE_REPORTs + echo "$LINE_COVERAGE_REPORT" + echo "$FUNCTION_COVERAGE_REPORT" + echo "$BRANCH_COVERAGE_REPORT" + echo "$RESULT_COVERAGE_REPORT" + + # Store in GitHub environment variables + echo "LINE_COVERAGE_REPORT=$LINE_COVERAGE_REPORT" >> $GITHUB_ENV + echo "FUNCTION_COVERAGE_REPORT=$FUNCTION_COVERAGE_REPORT" >> $GITHUB_ENV + echo "BRANCH_COVERAGE_REPORT=$BRANCH_COVERAGE_REPORT" >> $GITHUB_ENV + echo "RESULT_COVERAGE_REPORT=$RESULT_COVERAGE_REPORT" >> $GITHUB_ENV + + - name: Comment with Coverage Summary in PR + uses: mshick/add-pr-comment@v2 + with: + message: | + ## Test Coverage Report + ${{ env.LINE_COVERAGE_REPORT }} + ${{ env.FUNCTION_COVERAGE_REPORT }} + ${{ env.BRANCH_COVERAGE_REPORT }} + ${{ env.RESULT_COVERAGE_REPORT }} diff --git a/.github/workflows_deactivated/ensureDeployProcessIntegrity.yml b/.github/workflows_deactivated/ensureDeployProcessIntegrity.yml new file mode 100644 index 000000000..6ae3bb93a --- /dev/null +++ b/.github/workflows_deactivated/ensureDeployProcessIntegrity.yml @@ -0,0 +1,145 @@ +# - Ensure Deploy Process Integrity +# - ensures that the systems in place to guarantee audits, approvals, versioning, test coverage etc. cannot be easily deactivated +# or altered without approval of the Information Security Manager (or CTO) +# - protects any git actions in folder .github/workflows/* + +name: Ensure Deploy Process Integrity + +on: + pull_request: + +jobs: + protect-security-system: + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 ##### Fetch all history for all branches + + - name: Check Git Diff for protected files + id: check_protected_files + run: | + + ##### get all files modified by this PR + FILES=$(git diff --name-only origin/main HEAD) + + ##### make sure that there are modified files + if [[ -z $FILES ]]; then + echo -e "\033[31mNo files found. This should not happen. Please check the code of the Github action. Aborting now.\033[0m" + echo "CONTINUE=false" >> $GITHUB_ENV + exit 1 + fi + + ##### Initialize empty variables + PROTECTED_FILES="" + + ##### go through all modified file names/paths and identify contracts with path 'src/*' + while IFS= read -r FILE; do + if echo "$FILE" | grep -E '^.github/workflows/'; then + + ##### modified git action found + PROTECTED_FILES="${PROTECTED_FILES}${FILE}"$'\n' + fi + done <<< "$FILES" + + ##### if none found, exit here as there is nothing to do + if [[ -z "$PROTECTED_FILES" ]]; then + echo -e "\033[32mNo protected files found in Git diff.\033[0m" + echo -e "\033[32mNo further checks are required.\033[0m" + # set action output to false + echo "CONTINUE=false" >> $GITHUB_ENV + exit 0 + else + ##### set action output to true + echo -e "\033[31mThe following protected files were found in Git diff:\033[0m" + echo "$PROTECTED_FILES" + echo "CONTINUE=true" >> $GITHUB_ENV + fi + + - name: Get "Information Security Manager" Group Members + if: env.CONTINUE == 'true' + env: + GH_PAT: ${{ secrets.GIT_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + + ##### unset the default git token (does not have sufficient rights to get team members) + unset GITHUB_TOKEN + + ##### use the Personal Access Token to log into git CLI + echo $GH_PAT | gh auth login --with-token + + ##### Function to get team members using github CLI + getTeamMembers() { + local org=$1 + local team=$2 + gh api \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "/orgs/$org/teams/$team/members" | jq -r '.[].login' + } + + ORG_NAME='lifinance' + # GROUP_NAME='information-security-manager' + GROUP_NAME='smart-contract-core' + + ##### get team members + INFORMATION_SECURITY_MEMBERS=$(getTeamMembers $ORG_NAME $GROUP_NAME) + + echo "Team members of 'Information Security Manager' group: $INFORMATION_SECURITY_MEMBERS" + + ##### store members in variable + echo -e "$INFORMATION_SECURITY_MEMBERS" > itSec_git_handles.txt + + - name: Check approval of Information Security Manager + id: check-sec-mgr-approval + uses: actions/github-script@v7 + if: env.CONTINUE == 'true' + with: + script: | + const fs = require('fs'); + // ANSI escape codes for colors (used for colored output in Git action console) + const colors = { + reset: "\033[0m", + red: "\033[31m", + green: "\033[32m", + yellow: "\033[33m", + }; + + // Read git handles from file + const itSecHandlesFile = 'itSec_git_handles.txt'; + const itSecHandles = fs.readFileSync(itSecHandlesFile, 'utf-8').split(/\r?\n/).filter(Boolean); + + if(!(await github.pulls)) { + console.log(`${colors.red}Could not get reviewers of this PR from Github. Are there any reviews yet?${colors.reset}`); + console.log(`${colors.red}Check failed.${colors.reset}`); + core.setFailed("Required approval is missing"); + return + } + + // get all reviewers of the current pr + const { data: reviews } = await github.pulls.listReviews({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number, + }); + + // extract the git login handles of all reviewers + const reviewerHandles = reviews.map(review => review.user.login); + + console.log(`This PR has been reviewed by the following git members: ${reviewerHandles}`) + + // check if at least one of these reviewers is member in information-security-manager group + if (reviewerHandles.some((handle) => itSecHandles.includes(handle))) { + console.log(`${colors.green}The current PR was approved by a member of the information-security-manager group.${colors.reset}`); + console.log(`${colors.green}Check passed.${colors.reset}`); + core.setOutput('approved', 'true'); + } else { + console.log(`${colors.red}The PR requires a missing approval by a member of the information-security-manager group.${colors.reset}`); + console.log(`${colors.red}Find group members here: https://github.com/orgs/lifinance/teams/information-security-manager.${colors.reset}`); + console.log(`${colors.red}Check failed.${colors.reset}`); + core.setFailed("Required approval is missing"); + } diff --git a/.github/workflows_deactivated/protectAuditCompletedLabel.yml b/.github/workflows_deactivated/protectAuditCompletedLabel.yml new file mode 100644 index 000000000..8a2b8e477 --- /dev/null +++ b/.github/workflows_deactivated/protectAuditCompletedLabel.yml @@ -0,0 +1,78 @@ +# - Protect "AuditCompleted" Label +# - makes sure that the label "AuditCompleted" can only be assigned by a Github action and not by a human actor +# - will undo any unauthorized change of this label +# - will fail if it runs into an error, otherwise pass + +name: Protect "AuditCompleted" Label + +on: + pull_request_target: #### << needs to be changed to 'pull_request' to activate it + types: [labeled, unlabeled] + +jobs: + protect_audit_label: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log Event Payload + run: | + if [[ "${{ github.actor }}" == "github-actions" ]]; then + echo "This action was triggered by another GitHub Action." + else + echo "This action was triggered by a user: ${{ github.actor }}." + fi + echo "${{ github.event }}" + + - name: Check if "AuditCompleted" label was modified + env: + GITHUB_TOKEN: ${{ secrets.LIFI_GIT_ACTIONS_TOKEN }} + GH_PAT: ${{ secrets.LIFI_GIT_ACTIONS_TOKEN }} + run: | + # The label being monitored + TARGET_LABEL="AuditCompleted" + + # Check if the event was triggered by any other github action + if [[ "${{ github.actor }}" != "lifiGitActions" ]]; then #### TODO: REPLACE WITH GITHUB_ACTIONS_PAT and USERNAME <<<<<----------- + echo "This event was triggered by ${{ github.actor }}. Checking label..." + + # Determine if the label was added or removed + ACTION_TYPE="none" + if [[ "${{ github.event.action }}" == "labeled" && "${{ github.event.label.name }}" == "$TARGET_LABEL" ]]; then + ACTION_TYPE="added" + elif [[ "${{ github.event.action }}" == "unlabeled" && "${{ github.event.label.name }}" == "$TARGET_LABEL" ]]; then + ACTION_TYPE="removed" + fi + + # Revert the label change if necessary + if [[ "$ACTION_TYPE" != "none" ]]; then + echo -e "\033[31mUnauthorized modification of '$TARGET_LABEL' by ${{ github.actor }}. Reverting change...\033[0m" + + ##### remove or re-add label, depending on the case + if [[ "$ACTION_TYPE" == "added" ]]; then + # Remove the unauthorized label addition + gh pr edit ${{ github.event.pull_request.number }} --remove-label "$TARGET_LABEL" + elif [[ "$ACTION_TYPE" == "removed" ]]; then + # Re-add the unauthorized label removal + gh pr edit ${{ github.event.pull_request.number }} --add-label "$TARGET_LABEL" + fi + + # make sure that the label change was undone + CURRENT_LABELS=$(gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name') + if [[ "$ACTION_TYPE" == "added" && "$CURRENT_LABELS" == *"$TARGET_LABEL"* ]]; then + echo -e "\033[31Failed to remove the unauthorized 'AuditCompleted' label.\033[0m" + exit 1 + elif [[ "$ACTION_TYPE" == "removed" && "$CURRENT_LABELS" != *"$TARGET_LABEL"* ]]; then + echo -e "\033[31Failed to re-add the 'AuditCompleted' label.\033[0m" + exit 1 + fi + + echo -e "\033[32Unauthorized label modification was successfully prevented and undone.\033[0m" + else + echo -e "\033[32mNo unauthorized modifications detected.\033[0m" + fi + else + echo -e "\033[32mLabel change initiated by GitHub Action. No checks required.\033[0m" + fi diff --git a/.github/workflows_deactivated/protectAuditFolder.yml b/.github/workflows_deactivated/protectAuditFolder.yml new file mode 100644 index 000000000..d97390a00 --- /dev/null +++ b/.github/workflows_deactivated/protectAuditFolder.yml @@ -0,0 +1,88 @@ +# - Audit Folder Protection +# - makes sure that only members of team 'auditors' can make changes to 'audit/' folder +# https://github.com/orgs/lifinance/teams/auditors + +name: Audit Folder Protection + +on: + push: + paths: + - 'audit/**' + pull_request: + paths: + - 'audit/**' + +jobs: + protect-audit-folder: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Get 'Auditors' Team Members + env: + GH_PAT: ${{ secrets.GIT_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + + ##### unset the default git token (does not have sufficient rights to get team members) + unset GITHUB_TOKEN + ##### use the Personal Access Token to log into git CLI + echo $GH_PAT | gh auth login --with-token + + ##### Function that uses github's REST API via CLI to get team members + getTeamMembers() { + local org=$1 + local team=$2 + gh api \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "/orgs/$org/teams/$team/members" | jq -r '.[].login' + } + + ORG_NAME="lifinance" + TEAM_SLUG="auditors" + + # Get members of each group + echo "Fetching members of $TEAM_SLUG..." + MEMBERS=$(getTeamMembers $ORG_NAME $TEAM_SLUG) + + #### check if any members were returned + if [[ -z $MEMBERS ]]; then + echo -e "\033[31mERROR: Could not retrieve team members of group $TEAM_SLUG\033[0m" + echo "CONTINUE=false" >> $GITHUB_ENV + exit 1 + fi + + echo "Team members of $TEAM_SLUG: " + echo "$MEMBERS" + + echo -e "$MEMBERS" > members.txt + echo "CONTINUE=true" >> $GITHUB_ENV + + - name: Verify protected folder changes + if: env.CONTINUE == 'true' + run: | + + + echo "Files have been modified in folder 'audit/**' which is a protected folder." + echo "Only members of the group 'auditors' are allowed to make changes in this folder." + echo "Now checking if user '${{ github.actor }}' is a member of the auditors group" + echo "FYI: https://github.com/orgs/lifinance/teams/auditors" + + # load list auditors team members + AUDITORS=$(cat members.txt) + + #### check if user that submitted the change is indeed part of the auditors group + if echo "$AUDITORS" | grep -wq "${{ github.actor }}"; then + echo -e "\033[32mUser ${{ github.actor }} is an auditor and allowed to update the audit folder.\033[0m" + echo -e "\033[32mCheck passed.\033[0m" + exit 0 + else + echo -e "\033[31mUser ${{ github.actor }} is not an auditor and is not allowed to update the audit folder.\033[0m" + echo -e "\033[31mPlease ask an auditor for support:\033[0m" + echo -e "\033[31mhttps://github.com/orgs/lifinance/teams/auditors\033[0m" + echo -e "\033[31mCheck failed.\033[0m" + exit 1 + fi diff --git a/.github/workflows_deactivated/versionCheck.yml b/.github/workflows_deactivated/versionCheck.yml new file mode 100644 index 000000000..bedf016ff --- /dev/null +++ b/.github/workflows_deactivated/versionCheck.yml @@ -0,0 +1,225 @@ +# - Github Version Control Checker +# - Watches changes on contracts in the following paths: +# - src +# - src/Facets/ +# - src/Periphery/ +# - will check all modified or new contracts in watched paths +# - will fail if a new contract was added to watched paths without contract version +# - will fail if an existing contract was modified but version was not updated +# - will update the PR title to contain all contract names and their new versions (watched paths only) +name: Version Check + +on: + pull_request: + types: [opened, edited, synchronize] + +jobs: + check-version: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 ##### Fetch all history for all branches + + - name: Get list of modified files by this PR + id: modified_files + run: | + + + BASE_REF="${{ github.event.pull_request.base.ref }}" + + ##### get all files modified by this PR + FILES=$(git diff --name-only origin/${BASE_REF} HEAD) + + ##### make sure that there are modified files + if [[ -z $FILES ]]; then + echo "No files found. This should not happen. Please check the code of the Github action" + exit 1 + fi + + ##### Initialize empty variables + CONTRACTS="" + + ##### go through all file names and identify facet, periphery & diamond contracts (other contracts dont have versioning) + while IFS= read -r FILE; do + if echo "$FILE" | grep -E '^src/Facets/.*\.sol$'; then + ##### facet found + CONTRACTS="${CONTRACTS}${FILE}"$'\n' + elif echo "$FILE" | grep -E '^src/Periphery/.*\.sol$'; then + ##### periphery found + CONTRACTS="${CONTRACTS}${FILE}"$'\n' + elif echo "$FILE" | grep -E '^src/.*\.sol$'; then + ##### diamond contract found + CONTRACTS="${CONTRACTS}${FILE}"$'\n' + fi + done <<< "$FILES" + + ##### if none found, exit here as there is nothing to do + if [[ -z "$CONTRACTS" ]]; then + echo -e "\033[32mNo version-controlled contracts found in files modified/added by this PR.\033[0m" + echo -e "\033[32mNo further checks are required.\033[0m" + # set action output to false + echo "CONTINUE=false" >> $GITHUB_ENV + exit 0 + else + # set action output to true + echo "CONTINUE=true" >> $GITHUB_ENV + fi + + ##### Write filenames to temporary files (using variables here was causing issues due to the file names) + echo -e "$CONTRACTS" > modified_contracts.txt + + - name: Verify version updates on modified contracts + id: verify_version_changes + if: env.CONTINUE == 'true' + run: | + + ##### Read tmp file into variable + CONTRACTS=$(cat modified_contracts.txt) + + ##### Initialize variables + MISSING_VERSION_TAG=() + MISSING_VERSION_UPDATE=() + UPDATED_CONTRACTS=() + + echo "--------------------" + + ##### Process each file separately + while IFS= read -r FILE; do + echo "Now checking contract: $FILE" + VERSION_TAG=$(grep -E '^/// @custom:version' "$FILE" || true) + VERSION=$(echo "$VERSION_TAG" | sed -E 's/^\/\/\/ @custom:version ([0-9]+\.[0-9]+\.[0-9]+).*$/\1/' || true) + + ##### Extract the filename without extension + FILENAME=$(basename "$FILE" .sol) + + ##### Check if a version tag exists in the contract file + if [[ -z "$VERSION_TAG" ]]; then + echo -e "\033[31mFile does not contain a version tag\033[0m" + MISSING_VERSION_TAG+=("$FILE") + else + echo -e "\033[32mFile contains a custom:version tag\033[0m" + ##### get all changes of the current file/contract + DIFF_OUTPUT=$(git diff origin/${{ github.event.pull_request.base.ref }} HEAD "$FILE") + + ##### Check if the version was updated in this PR (by checking if any of the git diff lines starts with '/// @custom:version') + if echo "$DIFF_OUTPUT" | grep -qE '^\+/// @custom:version'; then + echo -e "\033[32mFile version was updated in this PR to version $VERSION\033[0m" + ##### extract the new version and save it together with the name of the contract in an array + NEW_VERSION=$(echo "$VERSION_TAG" | awk '{print $NF}') + TARGET_STRING="${FILENAME} v${NEW_VERSION}" + UPDATED_CONTRACTS+=("$TARGET_STRING") + else + ##### add to files with missing version updates + echo -e "\033[31mFile's version was not updated in this PR\033[0m" + MISSING_VERSION_UPDATE+=("$FILE") + fi + fi + echo "--------------------" + done <<< "$CONTRACTS" + + + ##### If any contract files are missing a version tag, this must be corrected before continuing + if [[ ${#MISSING_VERSION_TAG[@]} -ne 0 ]]; then + echo "--------------------" + echo ">>>>>>" + echo -e "\033[31mThe following files are missing a custom:version tag in their code:\033[0m" + echo "${MISSING_VERSION_TAG[*]}" + echo -e "\033[31mEvery version-controlled contract needs to have a custom:version tag in its code.\033[0m" + echo -e "\033[31mThis Github action cannot complete until these issues are solved.\033[0m" + exit 1 + fi + + ##### if the version was not updated in any of the changed contracts, store the list of affected files in a tmp file + if [[ ${#MISSING_VERSION_UPDATE[@]} -ne 0 ]]; then + echo "--------------------" + echo ">>>>>>" + echo -e "\033[31mThe following contract(s) have been modified but their version tags were not updated:\033[0m" + echo "${MISSING_VERSION_UPDATE[*]}" + echo -e "\033[31mPlease make sure to update a contract's version whenever there are changes in the file.\033[0m" + echo -e "\033[31mThis Github action cannot complete until these issues are solved.\033[0m" + echo "" + exit 1 + fi + + ##### store any contracts that were correctly updated in a tmp file so we can check the PR title after for each of those + if [[ ${#UPDATED_CONTRACTS[@]} -ne 0 ]]; then + ##### create a string from the array with all contracts + UPDATED_CONTRACTS_STR=$(IFS=,; echo "${UPDATED_CONTRACTS[*]}") + echo "UPDATED_CONTRACTS=$UPDATED_CONTRACTS_STR" >> $GITHUB_ENV + echo -e "${UPDATED_CONTRACTS_STR[*]}" > updated_contracts.txt + else + echo -e "\033[32mDid not find any contracts for which version control is activated (only facets, periphery and diamonds).\033[0m" + echo -e "\033[32mNo further checks are required.\033[0m" + echo "CONTINUE=false" >> $GITHUB_ENV + exit 0 + fi + + - name: Compose updated PR title + if: env.CONTINUE == 'true' + env: + PR_TITLE: ${{github.event.pull_request.title}} + run: | + + + ##### Read tmp files into variables + if [ -f updated_contracts.txt ]; then + UPDATED_CONTRACTS=$(cat updated_contracts.txt) + fi + + echo "UPDATED CONTRACTS: $UPDATED_CONTRACTS" + + ##### Initialize PR title + PR_TITLE_UPDATED="$PR_TITLE [" + + ##### Go through the list of target strings (contract + newVersion) + IFS=',' read -ra UPDATED_ARRAY <<< "$UPDATED_CONTRACTS" + for TARGET_STRING in "${UPDATED_ARRAY[@]}"; do + ##### if current PR title does not contain this contract's name.... + if [[ ! "$PR_TITLE_UPDATED" =~ "$TARGET_STRING" ]]; then + ##### ... then add it to the title + echo "adding '$TARGET_STRING' to title" + PR_TITLE_UPDATED="$PR_TITLE_UPDATED$TARGET_STRING, " + fi + done + + ##### Finalize the PR title + ##### Check if the last two characters are ", " (= contracts were added to title) + if [[ "${PR_TITLE_UPDATED: -2}" == ", " ]]; then + ##### Remove the last two characters and append a closing bracket + PR_TITLE_UPDATED="${PR_TITLE_UPDATED:0:-2}]" + ##### Check if last character is '(' (= no contracts were added to title) + elif [[ "${PR_TITLE_UPDATED: -1}" == "[" ]]; then + ##### Remove the last character (not needed) + PR_TITLE_UPDATED="${PR_TITLE_UPDATED:0:-1}" + else + echo "Error: Unexpected ending in PR_TITLE_UPDATED: '$PR_TITLE_UPDATED'" + exit 1 + fi + + ##### if there are no changes in the title, no need to continue further + if [[ $PR_TITLE == $PR_TITLE_UPDATED ]]; then + echo "No PR title updates are required." + echo "This github action will end here." + exit 0 + fi + + ##### save updated PR title in env variable + echo "PR_TITLE_UPDATED=$PR_TITLE_UPDATED" >> $GITHUB_ENV + + - name: Update the PR title on GitHub + if: env.CONTINUE == 'true' + env: + GH_PAT: ${{ secrets.GIT_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_TITLE_UPDATED: ${{ env.PR_TITLE_UPDATED }} + run: | + + ##### unset the default git token (does not have sufficient rights to perform the update) + unset GITHUB_TOKEN + ##### use the Personal Access Token to log into git CLI + echo $GH_PAT | gh auth login --with-token + ##### update the PR title + gh pr edit ${{ github.event.pull_request.number }} --title "${{ env.PR_TITLE_UPDATED }}" diff --git a/.gitignore b/.gitignore index b4121c5bc..78985120a 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ yarn-error.log .DS_Store* lcov.info +lcov-filtered.info test/logs diff --git a/docs/DeBridgeDlnFacet.md b/archive/docs/DeBridgeDlnFacet.md similarity index 100% rename from docs/DeBridgeDlnFacet.md rename to archive/docs/DeBridgeDlnFacet.md diff --git a/docs/DeBridgeFacet.md b/archive/docs/DeBridgeFacet.md similarity index 100% rename from docs/DeBridgeFacet.md rename to archive/docs/DeBridgeFacet.md diff --git a/docs/MakerTeleportFacet.md b/archive/docs/MakerTeleportFacet.md similarity index 100% rename from docs/MakerTeleportFacet.md rename to archive/docs/MakerTeleportFacet.md diff --git a/docs/MultichainFacet.md b/archive/docs/MultichainFacet.md similarity index 100% rename from docs/MultichainFacet.md rename to archive/docs/MultichainFacet.md diff --git a/docs/SynapseBridgeFacet.md b/archive/docs/SynapseBridgeFacet.md similarity index 100% rename from docs/SynapseBridgeFacet.md rename to archive/docs/SynapseBridgeFacet.md diff --git a/script/tasks/solidity/AddRoutersAndTokenForMultichain.s.sol b/archive/scripts/AddRoutersAndTokenForMultichain.s.sol similarity index 100% rename from script/tasks/solidity/AddRoutersAndTokenForMultichain.s.sol rename to archive/scripts/AddRoutersAndTokenForMultichain.s.sol diff --git a/script/deploy/facets/DeployDeBridgeDlnFacet.s.sol b/archive/scripts/DeployDeBridgeDlnFacet.s.sol similarity index 100% rename from script/deploy/facets/DeployDeBridgeDlnFacet.s.sol rename to archive/scripts/DeployDeBridgeDlnFacet.s.sol diff --git a/script/deploy/facets/DeployDeBridgeFacet.s.sol b/archive/scripts/DeployDeBridgeFacet.s.sol similarity index 100% rename from script/deploy/facets/DeployDeBridgeFacet.s.sol rename to archive/scripts/DeployDeBridgeFacet.s.sol diff --git a/script/deploy/facets/DeployMakerTeleportFacet.s.sol b/archive/scripts/DeployMakerTeleportFacet.s.sol similarity index 100% rename from script/deploy/facets/DeployMakerTeleportFacet.s.sol rename to archive/scripts/DeployMakerTeleportFacet.s.sol diff --git a/script/deploy/facets/DeployMultichainFacet.s.sol b/archive/scripts/DeployMultichainFacet.s.sol similarity index 100% rename from script/deploy/facets/DeployMultichainFacet.s.sol rename to archive/scripts/DeployMultichainFacet.s.sol diff --git a/script/deploy/facets/DeploySynapseBridgeFacet.s.sol b/archive/scripts/DeploySynapseBridgeFacet.s.sol similarity index 100% rename from script/deploy/facets/DeploySynapseBridgeFacet.s.sol rename to archive/scripts/DeploySynapseBridgeFacet.s.sol diff --git a/script/deploy/facets/UpdateDeBridgeDlnFacet.s.sol b/archive/scripts/UpdateDeBridgeDlnFacet.s.sol similarity index 100% rename from script/deploy/facets/UpdateDeBridgeDlnFacet.s.sol rename to archive/scripts/UpdateDeBridgeDlnFacet.s.sol diff --git a/script/deploy/facets/UpdateDeBridgeFacet.s.sol b/archive/scripts/UpdateDeBridgeFacet.s.sol similarity index 100% rename from script/deploy/facets/UpdateDeBridgeFacet.s.sol rename to archive/scripts/UpdateDeBridgeFacet.s.sol diff --git a/script/deploy/facets/UpdateMakerTeleportFacet.s.sol b/archive/scripts/UpdateMakerTeleportFacet.s.sol similarity index 100% rename from script/deploy/facets/UpdateMakerTeleportFacet.s.sol rename to archive/scripts/UpdateMakerTeleportFacet.s.sol diff --git a/script/deploy/facets/UpdateMultichainFacet.s.sol b/archive/scripts/UpdateMultichainFacet.s.sol similarity index 100% rename from script/deploy/facets/UpdateMultichainFacet.s.sol rename to archive/scripts/UpdateMultichainFacet.s.sol diff --git a/script/deploy/facets/UpdateSynapseBridgeFacet.s.sol b/archive/scripts/UpdateSynapseBridgeFacet.s.sol similarity index 100% rename from script/deploy/facets/UpdateSynapseBridgeFacet.s.sol rename to archive/scripts/UpdateSynapseBridgeFacet.s.sol diff --git a/src_archive/AxelarExecutor.sol b/archive/src/AxelarExecutor.sol similarity index 100% rename from src_archive/AxelarExecutor.sol rename to archive/src/AxelarExecutor.sol diff --git a/src_archive/AxelarFacet.sol b/archive/src/AxelarFacet.sol similarity index 100% rename from src_archive/AxelarFacet.sol rename to archive/src/AxelarFacet.sol diff --git a/src/Facets/DeBridgeDlnFacet.sol b/archive/src/DeBridgeDlnFacet.sol similarity index 100% rename from src/Facets/DeBridgeDlnFacet.sol rename to archive/src/DeBridgeDlnFacet.sol diff --git a/src/Facets/DeBridgeFacet.sol b/archive/src/DeBridgeFacet.sol similarity index 100% rename from src/Facets/DeBridgeFacet.sol rename to archive/src/DeBridgeFacet.sol diff --git a/src_archive/FusePoolZap.sol b/archive/src/FusePoolZap.sol similarity index 100% rename from src_archive/FusePoolZap.sol rename to archive/src/FusePoolZap.sol diff --git a/src/Facets/MakerTeleportFacet.sol b/archive/src/MakerTeleportFacet.sol similarity index 100% rename from src/Facets/MakerTeleportFacet.sol rename to archive/src/MakerTeleportFacet.sol diff --git a/src/Facets/MultichainFacet.sol b/archive/src/MultichainFacet.sol similarity index 100% rename from src/Facets/MultichainFacet.sol rename to archive/src/MultichainFacet.sol diff --git a/src_archive/NXTPFacet.sol b/archive/src/NXTPFacet.sol similarity index 100% rename from src_archive/NXTPFacet.sol rename to archive/src/NXTPFacet.sol diff --git a/src/Facets/SynapseBridgeFacet.sol b/archive/src/SynapseBridgeFacet.sol similarity index 100% rename from src/Facets/SynapseBridgeFacet.sol rename to archive/src/SynapseBridgeFacet.sol diff --git a/src_archive/WormholeFacet.sol b/archive/src/WormholeFacet.sol similarity index 100% rename from src_archive/WormholeFacet.sol rename to archive/src/WormholeFacet.sol diff --git a/test/solidity/Facets/DeBridgeDlnFacet.t.sol b/archive/test/DeBridgeDlnFacet.t.sol similarity index 100% rename from test/solidity/Facets/DeBridgeDlnFacet.t.sol rename to archive/test/DeBridgeDlnFacet.t.sol diff --git a/test/solidity/Facets/DeBridgeFacet.t.sol b/archive/test/DeBridgeFacet.t.sol similarity index 100% rename from test/solidity/Facets/DeBridgeFacet.t.sol rename to archive/test/DeBridgeFacet.t.sol diff --git a/test/solidity/Facets/MakerTeleportFacet.t.sol b/archive/test/MakerTeleportFacet.t.sol similarity index 100% rename from test/solidity/Facets/MakerTeleportFacet.t.sol rename to archive/test/MakerTeleportFacet.t.sol diff --git a/test/solidity/Facets/MultiChainFacet.t.sol b/archive/test/MultiChainFacet.t.sol similarity index 100% rename from test/solidity/Facets/MultiChainFacet.t.sol rename to archive/test/MultiChainFacet.t.sol diff --git a/test/solidity/Facets/SynapseBridgeFacet.t.sol b/archive/test/SynapseBridgeFacet.t.sol similarity index 100% rename from test/solidity/Facets/SynapseBridgeFacet.t.sol rename to archive/test/SynapseBridgeFacet.t.sol diff --git a/audit/auditLog.json b/audit/auditLog.json new file mode 100644 index 000000000..af918a2bb --- /dev/null +++ b/audit/auditLog.json @@ -0,0 +1,16 @@ +{ + "audits": { + "audit20240814": { + "auditCompletedOn": "14.08.2024", + "auditedBy": "Sujith Somraaj (individual security researcher)", + "auditorGitHandle": "sujithsomraaj", + "auditReportPath": "./audit/reports/2024.08.14_StargateFacetV2_ReAudit.pdf", + "auditCommitHash": "d622002440317580b5d0fb90ef22b839d84957e2" + } + }, + "auditedContracts": { + "StargateFacetV2": { + "1.0.1": ["audit20240814"] + } + } +} diff --git a/audit/reports/2024.08.14_StargateFacetV2_ReAudit.pdf b/audit/reports/2024.08.14_StargateFacetV2_ReAudit.pdf new file mode 100644 index 000000000..0f1e076a7 Binary files /dev/null and b/audit/reports/2024.08.14_StargateFacetV2_ReAudit.pdf differ diff --git a/config/across.json b/config/across.json index 6505cfed8..81c88b3b7 100644 --- a/config/across.json +++ b/config/across.json @@ -78,6 +78,12 @@ "0x4158734D47Fc9692176B5085E0F52ee0Da5d47F1" ] }, + "blast": { + "chainId": 81457, + "acrossSpokePool": "0x2D509190Ed0172ba588407D4c2df918F955Cc6E1", + "weth": "0x4300000000000000000000000000000000000004", + "tokensToApprove": [] + }, "arbitrum": { "chainId": 42161, "acrossSpokePool": "0xe35e9842fceaca96570b734083f4a58e8f7c5f2a", @@ -104,5 +110,11 @@ "0xA219439258ca9da29E9Cc4cE5596924745e12B93", "0x3aAB2285ddcDdaD8edf438C1bAB47e1a9D05a9b4" ] + }, + "scroll": { + "chainId": 534352, + "acrossSpokePool": "0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96", + "weth": "0x5300000000000000000000000000000000000004", + "tokensToApprove": [] } -} +} \ No newline at end of file diff --git a/config/amarok.json b/config/amarok.json index feb8b0ca6..93b12762d 100644 --- a/config/amarok.json +++ b/config/amarok.json @@ -49,6 +49,12 @@ "domain": "", "tokensToApprove": [] }, + "immutablezkevm": { + "chainId": 13371, + "connextHandler": "0x0000000000000000000000000000000000000000", + "domain": "", + "tokensToApprove": [] + }, "polygon": { "chainId": 137, "connextHandler": "0x11984dc4465481512eb5b777E44061C158CF2259", @@ -101,9 +107,7 @@ "chainId": 34443, "connextHandler": "0x7380511493DD4c2f1dD75E9CCe5bD52C787D4B51", "domain": "1836016741", - "tokensToApprove": [ - "0x4200000000000000000000000000000000000006" - ] + "tokensToApprove": ["0x4200000000000000000000000000000000000006"] }, "arbitrum": { "chainId": 42161, @@ -274,5 +278,11 @@ "connextHandler": "0x0000000000000000000000000000000000000000", "domain": "", "tokensToApprove": [] + }, + "taiko": { + "chainId": 167000, + "connextHandler": "0x0000000000000000000000000000000000000000", + "domain": "", + "tokensToApprove": [] } -} \ No newline at end of file +} diff --git a/config/dexs.json b/config/dexs.json index d506fac89..fb97c57e2 100644 --- a/config/dexs.json +++ b/config/dexs.json @@ -326,6 +326,12 @@ "0x7fA60f4A59Dd8285C5Fcd8fd2A92A2Ca45ef8a0C", "0x134f525AC05E4724e55C363A9C4FA35ceB13F88d" ], + "immutablezkevm": [ + "0xAcD913Ad6936Bb662395ac9a66D75bFc77c165fF", + "0x5C6Dd0170348666A3e07fD033C12D9D15c83e360", + "0x677Fa29FFe6c8f03D6bbE789090Dceb498b7aaA4", + "0x1a4E99aB56BBac95810C0A957F173054f6FA8fDc" + ], "fraxtal": [ "0x7956280Ec4B4d651C4083Ca737a1fa808b5319D8", "0x9870F0C91D722B3393383722968269496d919bD8", @@ -622,7 +628,9 @@ "0xf91bb752490473b8342a3e964e855b9f9a2a668e" ], "avalancheFujiTestnet": [], - "bscTestnet": ["0x1b02da8cb0d097eb8d57a175b88c7d8b47997506"], + "bscTestnet": [ + "0x1b02da8cb0d097eb8d57a175b88c7d8b47997506" + ], "localanvil": [], "linea": [ "0xf6C9605c6E231C1547b7a6545d93e7233f97322a", @@ -654,5 +662,11 @@ "0xF2ee649caB7a0edEdED7a27821B0aCDF77778aeD", "0x0263180888007D45340F86eC0b610d250BbDcB23", "0x6131b5fae19ea4f9d964eac0408e4408b66337b5" + ], + "taiko": [ + "0xDd8A081efC90DFFD79940948a1528C51793C4B03", + "0xff2F39692A90262b8Ed4DFD92799bB450425773F", + "0xD989E929517B0e5eD0c8EfE7607Fa167B697cBa8", + "0xcaA342e4f781d63EF41E220D7622B97E66BAEcF3" ] } diff --git a/config/global.json b/config/global.json index 223033a67..39d4c3e09 100644 --- a/config/global.json +++ b/config/global.json @@ -2,12 +2,15 @@ "create3Factory": { "default": "0x93FEC2C00BfE902F733B57c5a6CeeD7CD1384AE1", "linea": "0x8437A5fE47A4Df14700c96DF1870824e72FA8499", - "metis": "0x763f212f355433C59d734C71247d16fCE74D8785" + "metis": "0x763f212f355433C59d734C71247d16fCE74D8785", + "taiko": "0x8437A5fE47A4Df14700c96DF1870824e72FA8499" }, "refundWallet": "0x156CeBba59DEB2cB23742F70dCb0a11cC775591F", "withdrawWallet": "0x08647cc950813966142A416D40C382e2c5DB73bB", + "pauserWallet": "0x3b6211981d47Fb6375E0125A6a401830616f7906", "lifuelRebalanceWallet": "0xC71284231A726A18ac85c94D75f9fe17A185BeAF", "deployerWallet": "0x11F1022cA6AdEF6400e5677528a80d49a069C00c", + "pauserWallet": "0x29DaCdF7cCaDf4eE67c923b4C22255A4B2494eD7", "approvedSigsForRefundWallet": [ { "sig": "0x0d19e519", @@ -47,6 +50,7 @@ "fuse": "0x5336e97bA7332FAC20281Bda8B790c8892245Ded", "gnosis": "0x2bC523875b59A1Ddd03CEB1F1b28c5B0e8e6654A", "gravity": "0x245B16CaCE8730b009c5352186DcE7d73c3037A1", + "immutablezkevm": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", "linea": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", "mantle": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", "metis": "0x925cD8289Ac2d617F52974da8338867f3bB62d56", @@ -59,14 +63,15 @@ "rootstock": "0xDF61270FdC1a892874Fd3C0143A0a4CBa74F4EF1", "scroll": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", "sei": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1", + "taiko": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772", "zksync": "0x02f1272aEaCaf7BD8b30278bc2AA381Cc623A744" }, "safeOwners": [ + "0x11F1022cA6AdEF6400e5677528a80d49a069C00c", "0xb78FbE12d9C09d98ce7271Fa089c2fe437B7B4D5", "0x65f6F29D3eb871254d71A79CC4F74dB3AAF3b86e", "0x24767E3A1cb07ee500BA9A5621F2B608440Ca270", "0x81Dbb716aA13869323974A1766120D0854188e3e", - "0x11F1022cA6AdEF6400e5677528a80d49a069C00c", "0x498E8fF83B503aDe5e905719D27b2f11B605b45A" ], "safeApiUrls": { @@ -84,6 +89,7 @@ "fuse": "https://transaction-fuse.safe.fuse.io/api", "gnosis": "https://safe-transaction-gnosis-chain.safe.global/api", "gravity": "https://safe.gravity.xyz/txs/api", + "immutablezkevm": "https://transaction.safe.immutable.com/api", "linea": "https://transaction.safe.linea.build/api", "mantle": "https://transaction.multisig.mantle.xyz/api", "metis": "https://metissafe.tech/txs/api", @@ -96,6 +102,7 @@ "rootstock": "https://transaction.safe.rootstock.io/api", "scroll": "https://safe-transaction-scroll.safe.global/api", "sei": "https://transaction.sei-safe.protofire.io/api", + "taiko": "https://transaction.safe.taiko.xyz/api", "zksync": "https://safe-transaction-zksync.safe.global/api" }, "nativeAddress": { @@ -113,6 +120,7 @@ "fuse": "0x0000000000000000000000000000000000000000", "gnosis": "0x0000000000000000000000000000000000000000", "gravity": "0x0000000000000000000000000000000000000000", + "immutablezkevm": "0x0000000000000000000000000000000000000000", "linea": "0x0000000000000000000000000000000000000000", "mantle": "0x0000000000000000000000000000000000000000", "metis": "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", @@ -125,6 +133,13 @@ "rootstock": "0x0000000000000000000000000000000000000000", "scroll": "0x0000000000000000000000000000000000000000", "sei": "0x0000000000000000000000000000000000000000", + "taiko": "0x0000000000000000000000000000000000000000", "zksync": "0x0000000000000000000000000000000000000000" - } -} \ No newline at end of file + }, + "autoWhitelistPeripheryContracts": [ + "FeeCollector", + "LiFuelFeeCollector", + "TokenWrapper", + "LiFiDEXAggregator" + ] +} diff --git a/config/networks.json b/config/networks.json new file mode 100644 index 000000000..69fddd550 --- /dev/null +++ b/config/networks.json @@ -0,0 +1,299 @@ +{ + "mainnet": { + "name": "Ethereum Mainnet", + "chainId": 1, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "status": "active", + "type": "mainnet" + }, + "arbitrum": { + "name": "Arbitrum One", + "chainId": 42161, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", + "status": "active", + "type": "mainnet" + }, + "aurora": { + "name": "Aurora", + "chainId": 1313161554, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB", + "status": "active", + "type": "mainnet" + }, + "avalanche": { + "name": "Avalanche C-Chain", + "chainId": 43114, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "AVAX", + "wrappedNativeAddress": "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7", + "status": "active", + "type": "mainnet" + }, + "base": { + "name": "Base", + "chainId": 8453, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", + "status": "active", + "type": "mainnet" + }, + "blast": { + "name": "Blast", + "chainId": 81457, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x4300000000000000000000000000000000000004", + "status": "active", + "type": "mainnet" + }, + "boba": { + "name": "Boba Network", + "chainId": 288, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000", + "status": "active", + "type": "mainnet" + }, + "bsc": { + "name": "BNB Smart Chain", + "chainId": 56, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "BNB", + "wrappedNativeAddress": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + "status": "active", + "type": "mainnet" + }, + "celo": { + "name": "Celo", + "chainId": 42220, + "nativeAddress": "0x471EcE3750Da237f93B8E339c536989b8978a438", + "nativeCurrency": "CELO", + "wrappedNativeAddress": "0x471EcE3750Da237f93B8E339c536989b8978a438", + "status": "active", + "type": "mainnet" + }, + "fantom": { + "name": "Fantom", + "chainId": 250, + "nativeCurrency": "FTM", + "nativeAddress": "0x0000000000000000000000000000000000000000", + "wrappedNativeAddress": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", + "status": "active", + "type": "mainnet" + }, + "fraxtal": { + "name": "Fraxtal", + "chainId": 252, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "frxETH", + "wrappedNativeAddress": "0xfc00000000000000000000000000000000000006", + "status": "active", + "type": "mainnet" + }, + "fuse": { + "name": "Fuse", + "chainId": 122, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "FUSE", + "wrappedNativeAddress": "0x0BE9e53fd7EDaC9F859882AfdDa116645287C629", + "status": "active", + "type": "mainnet" + }, + "gnosis": { + "name": "Gnosis Chain", + "chainId": 100, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "XDAI", + "wrappedNativeAddress": "0xe91d153e0b41518a2ce8dd3d7944fa863463a97d", + "status": "active", + "type": "mainnet" + }, + "gravity": { + "name": "Gravity Alpha Mainnet", + "chainId": 1625, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "G", + "wrappedNativeAddress": "0xBB859E225ac8Fb6BE1C7e38D87b767e95Fef0EbD", + "status": "inactive", + "type": "mainnet" + }, + "immutablezkevm": { + "name": "Immutable zkEVM", + "chainId": 13371, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "IMX", + "wrappedNativeAddress": "0x3a0c2ba54d6cbd3121f01b96dfd20e99d1696c9d", + "status": "inactive", + "type": "mainnet" + }, + "linea": { + "name": "Linea", + "chainId": 59144, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "status": "active", + "type": "mainnet" + }, + "mantle": { + "name": "Mantle", + "chainId": 5000, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "MNT", + "wrappedNativeAddress": "0x78c1b0c915c4faa5fffa6cabf0219da63d7f4cb8", + "status": "active", + "type": "mainnet" + }, + "metis": { + "name": "Metis Andromeda Mainnet", + "chainId": 1088, + "nativeAddress": "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", + "nativeCurrency": "METIS", + "wrappedNativeAddress": "0x75cb093E4D61d2A2e65D8e0BBb01DE8d89b53481", + "status": "active", + "type": "mainnet" + }, + "mode": { + "name": "Mode", + "chainId": 34443, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", + "status": "active", + "type": "mainnet" + }, + "moonbeam": { + "name": "Moonbeam", + "chainId": 1284, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "GLMR", + "wrappedNativeAddress": "0xacc15dc74880c9944775448304b263d191c6077f", + "status": "active", + "type": "mainnet" + }, + "moonriver": { + "name": "Moonriver", + "chainId": 1285, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "MOVR", + "wrappedNativeAddress": "0x98878b06940ae243284ca214f92bb71a2b032b8a", + "status": "active", + "type": "mainnet" + }, + "optimism": { + "name": "Optimism", + "chainId": 10, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", + "status": "active", + "type": "mainnet" + }, + "polygon": { + "name": "Polygon", + "chainId": 137, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "MATIC", + "wrappedNativeAddress": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", + "status": "active", + "type": "mainnet" + }, + "polygonzkevm": { + "name": "Polygon zkEVM", + "chainId": 1101, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9", + "status": "active", + "type": "mainnet" + }, + "rootstock": { + "name": "Rootstock", + "chainId": 30, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "RBTC", + "wrappedNativeAddress": "0x542FDA317318eBf1d3DeAF76E0B632741a7e677d", + "status": "active", + "type": "mainnet" + }, + "scroll": { + "name": "Scroll", + "chainId": 534352, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x5300000000000000000000000000000000000004", + "status": "active", + "type": "mainnet" + }, + "sei": { + "name": "Sei Network", + "chainId": 1329, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "SEI", + "wrappedNativeAddress": "0xe30fedd158a2e3b13e9badaeabafc5516e95e8c7", + "status": "active", + "type": "mainnet" + }, + "zksync": { + "name": "zkSync Era Mainnet", + "chainId": 324, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x5aea5775959fbc2557cc8789bc1bf90a239d9a91", + "status": "active", + "type": "mainnet" + }, + "bsc-testnet": { + "name": "Binance Smart Chain Testnet", + "chainId": 97, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "BNB", + "wrappedNativeAddress": "", + "status": "active", + "type": "testnet" + }, + "lineatest": { + "name": "Linea Testnet", + "chainId": 59140, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "", + "status": "active", + "type": "testnet" + }, + "mumbai": { + "name": "Mumbai", + "chainId": 80001, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "MATIC", + "wrappedNativeAddress": "", + "status": "active", + "type": "testnet" + }, + "sepolia": { + "name": "Sepolia", + "chainId": 11155111, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "", + "status": "active", + "type": "testnet" + }, + "localanvil": { + "name": "Local Anvil (temporary Foundry test network)", + "chainId": 31337, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x0000000000000000000000000000000000000000", + "status": "active", + "type": "testnet" + } +} diff --git a/config/squid.json b/config/squid.json index c80182423..46db34f80 100644 --- a/config/squid.json +++ b/config/squid.json @@ -43,5 +43,8 @@ }, "fraxtal": { "router": "0xDC3D8e1Abe590BCa428a8a2FC4CfDbD1AcF57Bd9" + }, + "immutablezkevm": { + "router": "0xce16F69375520ab01377ce7B88f5BA8C48F8D666" } } diff --git a/config/stargate.json b/config/stargate.json index 27683bcba..0b37c97d0 100644 --- a/config/stargate.json +++ b/config/stargate.json @@ -33,6 +33,7 @@ "mode": "0x1a44076050125825900e736c501f859c50fE728c", "mantle": "0x1a44076050125825900e736c501f859c50fE728c", "scroll": "0x1a44076050125825900e736c501f859c50fE728c", + "taiko": "0x1a44076050125825900e736c501f859c50fE728c", "zksync": "0xd07C30aF3Ff30D96BDc9c6044958230Eb797DDBF", "sei": "0x1a44076050125825900e736c501f859c50fE728c", "localanvil": "0x0000000000000000000000000000000000000000", @@ -56,6 +57,7 @@ "fantom": "----FantomIsNotSupportedByStargateV2----", "gravity": "0x9c2dc7377717603eB92b2655c5f2E7997a4945BD", "sei": "0x1502FA4be69d526124D453619276FacCab275d3D", + "taiko": "0x45d417612e177672958dC0537C45a8f8d754Ac2E", "zksync": "---comingSoon---" }, "endpointIds": [ @@ -114,6 +116,10 @@ { "chainId": 1329, "endpointId": 30280 + }, + { + "chainId": 167000, + "endpointId": 30290 } ], "----------- anything from here is LEGACY (for StargateFacet.sol (v1)) ----------------------------------------------------------------": {}, @@ -197,6 +203,7 @@ "heco": "0x0000000000000000000000000000000000000000", "gnosis": "0x0000000000000000000000000000000000000000", "gravity": "0x0000000000000000000000000000000000000000", + "immutablezkevm": "0x0000000000000000000000000000000000000000", "moonbeam": "0x0000000000000000000000000000000000000000", "moonriver": "0x0000000000000000000000000000000000000000", "nova": "0x0000000000000000000000000000000000000000", @@ -214,6 +221,7 @@ "mode": "0x0000000000000000000000000000000000000000", "mantle": "0x296F55F8Fb28E498B858d0BcDA06D955B2Cb3f97", "scroll": "0x0000000000000000000000000000000000000000", + "taiko": "0x0000000000000000000000000000000000000000", "localanvil": "0x0000000000000000000000000000000000000000", "mumbai": "0x0000000000000000000000000000000000000000", "sepolia": "0x0000000000000000000000000000000000000000" @@ -252,8 +260,9 @@ "mantle": "0x2F6F07CDcf3588944Bf4C42aC74ff24bF56e7590", "metis": "0x2F6F07CDcf3588944Bf4C42aC74ff24bF56e7590", "scroll": "0x36d4686e19c052787D7f24E6913cEbC025714895", + "taiko": "0x0000000000000000000000000000000000000000", "localanvil": "0x0000000000000000000000000000000000000000", "mumbai": "0x817436a076060D158204d955E5403b6Ed0A5fac0", "sepolia": "0x0000000000000000000000000000000000000000" } -} \ No newline at end of file +} diff --git a/config/symbiosis.json b/config/symbiosis.json index 3ae67f5b5..23c15d507 100644 --- a/config/symbiosis.json +++ b/config/symbiosis.json @@ -74,5 +74,9 @@ "sei": { "metaRouter": "0xcE8f24A58D85eD5c5A6824f7be1F8d4711A0eb4C", "gateway": "0xAdB2d3b711Bb8d8Ea92ff70292c466140432c278" + }, + "taiko": { + "metaRouter": "0x7057aB3fB2BeE9c18e0cDe4240DE4ff7f159E365", + "gateway": "0xa0079829B9F1Edc5DD0DE3eC104f281745C4bD81" } } diff --git a/config/tokenwrapper.json b/config/tokenwrapper.json index 40cb3deb8..c2eb4b2c6 100644 --- a/config/tokenwrapper.json +++ b/config/tokenwrapper.json @@ -38,5 +38,7 @@ "mantle": "0x78c1b0C915c4FAA5FffA6CAbf0219DA63d7f4cb8", "blast": "0x4300000000000000000000000000000000000004", "rootstock": "0x542fda317318ebf1d3deaf76e0b632741a7e677d", - "sei": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7" -} \ No newline at end of file + "sei": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7", + "taiko": "0xA51894664A773981C6C112C43ce576f315d5b1B6", + "immutablezkevm": "0x3a0c2ba54d6cbd3121f01b96dfd20e99d1696c9d" +} diff --git a/deployments/_deployments_log_file.json b/deployments/_deployments_log_file.json index b2df44336..e5141b66d 100644 --- a/deployments/_deployments_log_file.json +++ b/deployments/_deployments_log_file.json @@ -446,10 +446,11 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0x93D06bf131a1bBB9c8EAE78F4eF05e302308Ce37", + "ADDRESS": "0x4305713927B95917C009b7ef30F069A910781593", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-06-07 13:19:25", + "TIMESTAMP": "2024-08-09 10:16:31", "CONSTRUCTOR_ARGS": "0x", + "SALT": "", "VERIFIED": "false" } ] @@ -640,6 +641,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xC9E3d116262E93c14f87032fBE0C43791e0fAfCB", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:21:24", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x429Da7043882C2A962bC4EA7b33440C3B9a033D7", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:16:31", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "DiamondLoupeFacet": { @@ -1076,10 +1105,11 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0xE2FF9605Ec86bbB75042331250e27e1B9aA81783", + "ADDRESS": "0xA73AB25328Ff50072e5e9A4a97bdf2796C9B7caE", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-06-07 13:19:30", + "TIMESTAMP": "2024-08-09 10:16:37", "CONSTRUCTOR_ARGS": "0x", + "SALT": "", "VERIFIED": "false" } ] @@ -1295,6 +1325,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xa521DD4f0e6df9d56d740D0fa4f7fA2F0BC88bA7", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:21:53", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x01ABD3Dec5268802272af46FE6Ac4c2fCF0Eff10", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:16:40", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "OwnershipFacet": { @@ -1730,11 +1788,11 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0x2942c143463A591Ba88B4241491796Fcb14306f0", + "ADDRESS": "0x59EfE38BE819457509Adba939780c4CfD1d2dA84", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-06-27 09:58:20", + "TIMESTAMP": "2024-08-09 10:16:42", "CONSTRUCTOR_ARGS": "0x", - "SALT": "26062027", + "SALT": "", "VERIFIED": "false" } ] @@ -1950,6 +2008,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xf09eF957165a5265613c5a57bDe781d363d519f0", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:22:22", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x815e97BE9122Fa64259277b1509E316Fc45D4b34", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:16:51", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "DexManagerFacet": { @@ -2559,6 +2645,16 @@ "SALT": "26062027", "VERIFIED": "false" } + ], + "1.0.1": [ + { + "ADDRESS": "0xD84484f7B346b7521905c40370535b54E909BC06", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 10:16:47", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "false" + } ] }, "production": { @@ -2841,6 +2937,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x38aDe624ebAF11ee35190046fbdF2d42e03e869a", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:22:52", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0xD1DB5abDA5918ca4aFb8982a49378D4A2Dfe5D5c", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:17:10", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "AccessManagerFacet": { @@ -3263,10 +3387,11 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0x685C70986d2F90CafF61EB15Ab1BE7502bBa007D", + "ADDRESS": "0xa836CE919F37421B4e0990911769dE04410cd1A3", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-06-07 13:19:45", + "TIMESTAMP": "2024-08-09 10:16:52", "CONSTRUCTOR_ARGS": "0x", + "SALT": "", "VERIFIED": "false" } ] @@ -3464,6 +3589,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xdD6CEa60F2Bb19fA5a03F0856054E2803221c3E4", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:23:20", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xa09f97e14C8351D16558b18891938aC873787652", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:17:22", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "WithdrawFacet": { @@ -3885,11 +4038,11 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0x434a5E2660eea82e5f57d70f7655033f9D8257F3", + "ADDRESS": "0x2157031AE43C8045abfB4405E6453B48FD901B74", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-06-27 09:58:37", + "TIMESTAMP": "2024-08-09 10:16:57", "CONSTRUCTOR_ARGS": "0x", - "SALT": "26062027", + "SALT": "", "VERIFIED": "false" } ] @@ -4074,6 +4227,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xddb090dD35ad8642DC5c79137147A6B34485B126", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:23:50", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x8A779ed5c6838e236f934Eb392D5aBdbF22404dD", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:17:40", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "PeripheryRegistryFacet": { @@ -4495,11 +4676,11 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0x70aAcD515727E7057C317A4177E030f7240DF4D0", + "ADDRESS": "0xD51Bbb06C1234F7Eead4721915E7c6aeb99A330d", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-06-07 13:19:55", + "TIMESTAMP": "2024-08-09 10:17:01", "CONSTRUCTOR_ARGS": "0x", - "SALT": "26062027", + "SALT": "", "VERIFIED": "false" } ] @@ -4711,6 +4892,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xdd400e751B3A9D2bF02CF1EEc245c1BDFb8e0E56", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:24:20", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x0C710c59f1a656333B5AfBAC64A8f60B52C30af4", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:17:52", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "LiFiDiamond": { @@ -5279,12 +5488,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0x2dea447e7dc6cd2f10b31bF10dCB30F87E838417", + "ADDRESS": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", "OPTIMIZER_RUNS": "1000000", "TIMESTAMP": "2024-05-24 16:13:16", "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c000000000000000000000000ad50118509eb4c8e3e39a370151b0fd5d5957013", "SALT": "", - "VERIFIED": "true" + "VERIFIED": "false" } ] } @@ -5330,6 +5539,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:28:15", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f11121df7256c40339393b0fb045321022ce44000000000000000000000000c9e3d116262e93c14f87032fbe0c43791e0fafcb", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x3A9A5dBa8FE1C4Da98187cE4755701BCA182f63b", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:19:32", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c000000000000000000000000429da7043882c2a962bc4ea7b33440c3b9a033d7", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "LiFiDiamondImmutable": { @@ -5665,6 +5902,20 @@ } ] } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x8c582F8d09BeBAFbDdb2668dC7F7E3283d05ebA3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:06:08", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c000000000000000000000000429da7043882c2a962bc4ea7b33440c3b9a033d7", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "AcrossFacet": { @@ -5918,6 +6169,34 @@ } ] } + }, + "blast": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0x9535A1AFd986FA9a2D324657116F02C364edebFf", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-19 17:33:50", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002d509190ed0172ba588407d4c2df918f955cc6e10000000000000000000000004300000000000000000000000000000000000004", + "SALT": "09072024", + "VERIFIED": "true" + } + ] + } + }, + "scroll": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0x9535A1AFd986FA9a2D324657116F02C364edebFf", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-19 17:48:39", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000003bad7ad0728f9917d1bf08af5782dcbd516cdd960000000000000000000000005300000000000000000000000000000000000004", + "SALT": "09072024", + "VERIFIED": "true" + } + ] + } } }, "CBridgeFacet": { @@ -6726,11 +7005,11 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0xAf97f8070d9823a4a6f224C2638feB6CcE44a73d", + "ADDRESS": "0x93d003b988c7c8976Ef41D207F4b166e35b6a1ed", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-06-27 09:59:27", + "TIMESTAMP": "2024-08-09 10:17:11", "CONSTRUCTOR_ARGS": "0x", - "SALT": "26062027", + "SALT": "", "VERIFIED": "false" } ] @@ -6915,6 +7194,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xa27992F9ef326527F85898E645AFF1d99E9609E3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:25:19", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x5B73eFA1929c80D92C85512153392B799B022D18", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:18:18", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "HopFacetOptimized": { @@ -8040,11 +8347,21 @@ "SALT": "26062027", "VERIFIED": "false" } - ] - }, - "production": { - "1.0.0": [ - { + ], + "1.0.1": [ + { + "ADDRESS": "0xb03Ed64dfB284F50fc71F358492e932bbB3A99Fd", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 10:17:06", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "false" + } + ] + }, + "production": { + "1.0.0": [ + { "ADDRESS": "0x7d2b7aea9E451BcD5Fb08454C885e52945686aDb", "OPTIMIZER_RUNS": "1000000", "TIMESTAMP": "2023-07-05 14:53:40", @@ -8285,6 +8602,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x75F9eaC5c368Ed9277b8952C83A063e435051332", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:24:49", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x42C1418917AE5505b5B3C79bdc1d1ba30177Ea06", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:18:05", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "MultichainFacet": { @@ -10095,6 +10440,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xB59Cb9E4087c841577ACE23B0168CCDdf9450290", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:34:58", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f11121df7256c40339393b0fb045321022ce44", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6bC43F95C5234aA749D18403753d60B91f972d3c", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:28:43", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "Executor": { @@ -10893,6 +11266,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xdC55d8b59441f75e32FDD2356139DC8402e52048", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:36:27", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000b59cb9e4087c841577ace23b0168ccddf9450290", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "2.0.0": [ + { + "ADDRESS": "0xeCBa38d0bAc1cA1CD5A30347370e4D539d44FAA1", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:29:29", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000006bc43f95c5234aa749d18403753d60b91f972d3c", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "FeeCollector": { @@ -11302,11 +11703,11 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0x9a0D4c65a7C52A22fe67CCb6FC44504E82d2B9Af", + "ADDRESS": "0xF008fd48fFBE6d364f3d267412BBfC7dBc0c5A5B", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2023-06-27 10:17:34", - "CONSTRUCTOR_ARGS": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", - "SALT": "26062028", + "TIMESTAMP": "2024-08-07 14:28:40", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000008647cc950813966142a416d40c382e2c5db73bb", + "SALT": "", "VERIFIED": "false" } ] @@ -11492,6 +11893,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x1a4E99aB56BBac95810C0A957F173054f6FA8fDc", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:38:02", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000008647cc950813966142a416d40c382e2c5db73bb", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xDd8A081efC90DFFD79940948a1528C51793C4B03", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:30:44", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000008647cc950813966142a416d40c382e2c5db73bb", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "Receiver": { @@ -12626,6 +13055,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "2.0.2": [ + { + "ADDRESS": "0xCfDfbAa460EFAd6F58D4459d82863CfA137e4993", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:48:04", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dc55d8b59441f75e32fdd2356139dc8402e5204800000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "2.0.2": [ + { + "ADDRESS": "0xe38326Ae727e3fA6669249063Ce7b8ea1754e756", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 14:22:52", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ecba38d0bac1ca1cd5a30347370e4d539d44faa100000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "ServiceFeeCollector": { @@ -17108,6 +17565,20 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xB6faa3155683d6856ae196c4f3847D68D478E5eA", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:32:34", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000ce16f69375520ab01377ce7b88f5ba8c48f8d666", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "SynapseBridgeFacet": { @@ -18052,6 +18523,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.1.0": [ + { + "ADDRESS": "0x4CA4226Ea534F2Ece75A4FcDAD0bBe5AbaEA9820", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:27:18", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.1.0": [ + { + "ADDRESS": "0x386bbbE35DF5E7bec5fff8aC4E74A6D7c5fDa482", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:18:39", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "CalldataVerificationFacet": { @@ -18676,6 +19175,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.1.1": [ + { + "ADDRESS": "0x93b22CF8C50f87C394837DdE0fD84E8add3100e9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:27:48", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.1.1": [ + { + "ADDRESS": "0xFf0dDC136bD881F3B8Eea805654Dd0D0d3bd800C", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:18:50", + "CONSTRUCTOR_ARGS": "0x", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "LiFuelFeeCollector": { @@ -19467,6 +19994,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x677Fa29FFe6c8f03D6bbE789090Dceb498b7aaA4", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:39:30", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000c71284231a726a18ac85c94d75f9fe17a185beaf", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0xff2F39692A90262b8Ed4DFD92799bB450425773F", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:32:16", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000c71284231a726a18ac85c94d75f9fe17a185beaf", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "AcrossFacetPacked": { @@ -19603,6 +20158,34 @@ } ] } + }, + "blast": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xFd796bf7Ff74d414b99CacF6F216eAC24bF3aC8E", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-19 17:50:49", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002d509190ed0172ba588407d4c2df918f955cc6e1000000000000000000000000430000000000000000000000000000000000000400000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "09072024", + "VERIFIED": "true" + } + ] + } + }, + "scroll": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xFd796bf7Ff74d414b99CacF6F216eAC24bF3aC8E", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-19 17:52:23", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000003bad7ad0728f9917d1bf08af5782dcbd516cdd96000000000000000000000000530000000000000000000000000000000000000400000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "09072024", + "VERIFIED": "true" + } + ] + } } }, "DeBridgeDlnFacet": { @@ -20126,6 +20709,20 @@ } ] } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xD59F68bBdECA334A05db2BCe5B6711d22f92fE7a", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:26:43", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000007057ab3fb2bee9c18e0cde4240de4ff7f159e365000000000000000000000000a0079829b9f1edc5dd0de3ec104f281745c4bd81", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "MayanBridgeFacet": { @@ -20585,6 +21182,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x5C6Dd0170348666A3e07fD033C12D9D15c83e360", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:42:39", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000003a0c2ba54d6cbd3121f01b96dfd20e99d1696c9d", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xD989E929517B0e5eD0c8EfE7607Fa167B697cBa8", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:35:17", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000a51894664a773981c6c112c43ce576f315d5b1b6", + "SALT": "", + "VERIFIED": "true" + } + ] + } } }, "GasRebateDistributor": { @@ -21169,6 +21794,34 @@ } ] } + }, + "immutablezkevm": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x51504500fBFB459684E020154Dc9B2DE912d0B92", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 10:25:49", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000000000000000000000000000000000000000000000", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x147e65652FDaC507d24DE522a02C76c006A24aB9", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:18:29", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000000000000000000000000000000000000000000000", + "SALT": "", + "VERIFIED": "false" + } + ] + } } }, "StargateFacetV2": { @@ -21195,6 +21848,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 18:28:47", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000006ce9bf8cdab780416ad1fd87b318a077d2f50eac", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -21209,6 +21872,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 15:57:42", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000006d6620efa72948c5f68a3c8646d58c00d3f4a980", + "SALT": "", + "VERIFIED": "false" + } ] } }, @@ -21223,6 +21896,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 19:36:54", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000019cfce47ed54a88614648dc3f19a5980097007dd", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -21237,6 +21920,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 17:23:47", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000005f688f563dc16590e570f97b542fa87931af2fed", + "SALT": "", + "VERIFIED": "false" + } ] } }, @@ -21251,6 +21944,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 17:37:54", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000005634c4a5fed09819e3c46d86a965dd9447d86e47", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -21265,6 +21968,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 19:05:03", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000041b491285a4f888f9f636cec8a363ab9770a0aef", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -21279,6 +21992,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 19:32:01", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000004e422b0acb2bd7e3ac70b5c0e5eb806e86a94038", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -21293,6 +22016,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 18:33:12", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000f1fcb4cbd57b67d683972a59b6a7b1e2e8bf27e6", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -21307,6 +22040,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x113E97921874646413572F2C43562463c378b6f5", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-15 12:35:13", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000005f688f563dc16590e570f97b542fa87931af2fed", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -21321,6 +22064,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0xCb667deA2894ab64e8e75EACB0d5d027AC672e25", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 19:01:23", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000cbe78230cca58b9ef4c3c5d1bc0d7e4b3206588a", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -21335,6 +22088,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 16:51:24", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000017e450be3ba9557f2378e20d64ad417e59ef9a34", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -21349,6 +22112,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 19:07:11", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000001502fa4be69d526124d453619276faccab275d3d", + "SALT": "", + "VERIFIED": "false" + } ] } }, @@ -21363,6 +22136,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 17:44:55", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000006e3d884c96d640526f273c61dfcf08915ebd7e2b", + "SALT": "", + "VERIFIED": "true" + } ] }, "staging": { @@ -21389,6 +22172,30 @@ "SALT": "09072024", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-14 17:45:53", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000009c2dc7377717603eb92b2655c5f2e7997a4945bd", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.1": [ + { + "ADDRESS": "0x113E97921874646413572F2C43562463c378b6f5", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:24:45", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000045d417612e177672958dc0537c45a8f8d754ac2e", + "SALT": "", + "VERIFIED": "true" + } ] } } @@ -21601,6 +22408,50 @@ } ] } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:34:30", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f000000000000000000000000ecba38d0bac1ca1cd5a30347370e4d539d44faa100000000000000000000000045d417612e177672958dc0537c45a8f8d754ac2e0000000000000000000000001a44076050125825900e736c501f859c50fe728c00000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "false" + } + ] + } + } + }, + "LiFiDEXAggregator": { + "bsc": { + "staging": { + "1.0.0": [ + { + "ADDRESS": "0xD6f02718B9df9FAd2665c7304BC5b26D5bbD8642", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-01 16:22:40", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000029dacdf7ccadf4ee67c923b4c22255a4b2494ed7", + "SALT": "", + "VERIFIED": "true" + } + ] + } + }, + "taiko": { + "production": { + "1.0.0": [ + { + "ADDRESS": "0xcaA342e4f781d63EF41E220D7622B97E66BAEcF3", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-08-09 13:31:17", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000029dacdf7ccadf4ee67c923b4c22255a4b2494ed7", + "SALT": "", + "VERIFIED": "false" + } + ] + } } } } diff --git a/deployments/arbitrum.json b/deployments/arbitrum.json index 6dadad0c0..e4f00ccfa 100644 --- a/deployments/arbitrum.json +++ b/deployments/arbitrum.json @@ -45,6 +45,6 @@ "SquidFacet": "0x5C2C3F56e33F45389aa4e1DA4D3a807A532a910c", "MayanFacet": "0x4682d79DD4D0e7555415841b5151933AF50594A8", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4", + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A" -} +} \ No newline at end of file diff --git a/deployments/aurora.json b/deployments/aurora.json index d3ef265a7..053d62caf 100644 --- a/deployments/aurora.json +++ b/deployments/aurora.json @@ -28,6 +28,6 @@ "LiFuelFeeCollector": "0x8E92e662573CBC66B0AB6A93B5FE291925508085", "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4", + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A" } \ No newline at end of file diff --git a/deployments/avalanche.json b/deployments/avalanche.json index 5597016e4..a3eaf45a4 100644 --- a/deployments/avalanche.json +++ b/deployments/avalanche.json @@ -42,6 +42,6 @@ "SquidFacet": "0x5C2C3F56e33F45389aa4e1DA4D3a807A532a910c", "MayanFacet": "0x4682d79DD4D0e7555415841b5151933AF50594A8", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4", + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A" } \ No newline at end of file diff --git a/deployments/base.json b/deployments/base.json index 718382545..c7bc7ba43 100644 --- a/deployments/base.json +++ b/deployments/base.json @@ -35,6 +35,6 @@ "SquidFacet": "0x5C2C3F56e33F45389aa4e1DA4D3a807A532a910c", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", "MayanFacet": "0x4682d79DD4D0e7555415841b5151933AF50594A8", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4", + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A" -} +} \ No newline at end of file diff --git a/deployments/blast.json b/deployments/blast.json index cbf39ad7b..4c184875f 100644 --- a/deployments/blast.json +++ b/deployments/blast.json @@ -21,5 +21,7 @@ "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "ServiceFeeCollector": "0xf3552b98BB4234B47674700A99a0308D74B40F51", "TokenWrapper": "0xF2ee649caB7a0edEdED7a27821B0aCDF77778aeD", - "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F" + "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", + "AcrossFacet": "0x9535A1AFd986FA9a2D324657116F02C364edebFf", + "AcrossFacetPacked": "0xFd796bf7Ff74d414b99CacF6F216eAC24bF3aC8E" } \ No newline at end of file diff --git a/deployments/bsc.diamond.staging.json b/deployments/bsc.diamond.staging.json index 2347fefbc..7cb553c0f 100644 --- a/deployments/bsc.diamond.staging.json +++ b/deployments/bsc.diamond.staging.json @@ -79,16 +79,17 @@ } }, "Periphery": { - "ERC20Proxy": "0xf90a432dD1D0541470BC9C440d9dEc3659755238", - "Executor": "0x4f3B1b1075cC19daA15b7cc681b28e2fB82145eD", - "FeeCollector": "0x7f98D45c7902f079fDb65811B633522e2d227BB6", + "ERC20Proxy": "", + "Executor": "", + "FeeCollector": "", "GasRebateDistributor": "", - "LiFuelFeeCollector": "0xc4f7A34b8d283f66925eF0f5CCdFC2AF3030DeaE", - "Receiver": "0x76EE0F8fb09047284B6ea89881595Fc6F5B09E12", + "LiFuelFeeCollector": "", + "Receiver": "", "ReceiverStargateV2": "", "RelayerCelerIM": "", - "ServiceFeeCollector": "0xdF4257A2f61E5D432Dedbc9c65917C268323421d", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" + "ServiceFeeCollector": "", + "TokenWrapper": "", + "LiFiDEXAggregator": "" } } } \ No newline at end of file diff --git a/deployments/bsc.json b/deployments/bsc.json index 73205f2b7..17d09cbc0 100644 --- a/deployments/bsc.json +++ b/deployments/bsc.json @@ -44,5 +44,5 @@ "MayanFacet": "0x4682d79DD4D0e7555415841b5151933AF50594A8", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4" + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61" } \ No newline at end of file diff --git a/deployments/bsc.staging.json b/deployments/bsc.staging.json index 17ddfcce7..0392a4291 100644 --- a/deployments/bsc.staging.json +++ b/deployments/bsc.staging.json @@ -28,5 +28,6 @@ "MayanBridgeFacet": "0x5Ba4FeD1DAd2fD057A9f687B399B8e4cF2368214", "MayanFacet": "0xd596C903d78870786c5DB0E448ce7F87A65A0daD", "GenericSwapFacetV3": "0xE871874D8AC30E8aCD0eC67529b4a5dDD73Bf0d6", - "StargateFacetV2": "0x089153117bffd37CBbE0c604dAE8e493D4743fA8" -} \ No newline at end of file + "StargateFacetV2": "0x089153117bffd37CBbE0c604dAE8e493D4743fA8", + "LiFiDEXAggregator": "0xD6f02718B9df9FAd2665c7304BC5b26D5bbD8642" +} diff --git a/deployments/gravity.diamond.json b/deployments/gravity.diamond.json index 8f5ae4cee..b11a12f21 100644 --- a/deployments/gravity.diamond.json +++ b/deployments/gravity.diamond.json @@ -45,9 +45,13 @@ "Name": "CalldataVerificationFacet", "Version": "1.1.1" }, - "0xad09520Af186Ae931b668c2B9620A087fBfE127c": { + "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61": { "Name": "StargateFacetV2", - "Version": "1.0.0" + "Version": "1.0.1" + }, + "0x83037e2fF2B3Ea09fED5A6e8150bf9899673f33A": { + "Name": "GenericSwapFacetV3", + "Version": "1.0.1" } }, "Periphery": { @@ -55,6 +59,7 @@ "Executor": "0xCdE9376F284d5CA9aaec69dD4D0761278b4ae034", "FeeCollector": "0x79540403cdE176Ca5f1fb95bE84A7ec91fFDEF76", "GasRebateDistributor": "", + "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0x134f525AC05E4724e55C363A9C4FA35ceB13F88d", "Receiver": "0x2DeB3bFa2b19024A0c1Ba299b6b79276f1F77b14", "ReceiverStargateV2": "0x6A3d6652fb7be72200a47313C092342218aAeb72", diff --git a/deployments/gravity.json b/deployments/gravity.json index fadc17393..ea83d9c91 100644 --- a/deployments/gravity.json +++ b/deployments/gravity.json @@ -17,7 +17,7 @@ "FeeCollector": "0x79540403cdE176Ca5f1fb95bE84A7ec91fFDEF76", "LiFuelFeeCollector": "0x134f525AC05E4724e55C363A9C4FA35ceB13F88d", "TokenWrapper": "0x7fA60f4A59Dd8285C5Fcd8fd2A92A2Ca45ef8a0C", - "StargateFacetV2": "0xad09520Af186Ae931b668c2B9620A087fBfE127c", + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x6A3d6652fb7be72200a47313C092342218aAeb72", "Receiver": "0x2DeB3bFa2b19024A0c1Ba299b6b79276f1F77b14" } \ No newline at end of file diff --git a/deployments/immutablezkevm.diamond.json b/deployments/immutablezkevm.diamond.json new file mode 100644 index 000000000..fc1276281 --- /dev/null +++ b/deployments/immutablezkevm.diamond.json @@ -0,0 +1,71 @@ +{ + "LiFiDiamond": { + "Facets": { + "0xC9E3d116262E93c14f87032fBE0C43791e0fAfCB": { + "Name": "DiamondCutFacet", + "Version": "1.0.0" + }, + "0xa521DD4f0e6df9d56d740D0fa4f7fA2F0BC88bA7": { + "Name": "DiamondLoupeFacet", + "Version": "1.0.0" + }, + "0xf09eF957165a5265613c5a57bDe781d363d519f0": { + "Name": "OwnershipFacet", + "Version": "1.0.0" + }, + "0xddb090dD35ad8642DC5c79137147A6B34485B126": { + "Name": "WithdrawFacet", + "Version": "1.0.0" + }, + "0x38aDe624ebAF11ee35190046fbdF2d42e03e869a": { + "Name": "DexManagerFacet", + "Version": "1.0.1" + }, + "0xdD6CEa60F2Bb19fA5a03F0856054E2803221c3E4": { + "Name": "AccessManagerFacet", + "Version": "1.0.0" + }, + "0xdd400e751B3A9D2bF02CF1EEc245c1BDFb8e0E56": { + "Name": "PeripheryRegistryFacet", + "Version": "1.0.0" + }, + "0x75F9eaC5c368Ed9277b8952C83A063e435051332": { + "Name": "LIFuelFacet", + "Version": "1.0.1" + }, + "0xa27992F9ef326527F85898E645AFF1d99E9609E3": { + "Name": "GenericSwapFacet", + "Version": "1.0.0" + }, + "0x51504500fBFB459684E020154Dc9B2DE912d0B92": { + "Name": "GenericSwapFacetV3", + "Version": "1.0.1" + }, + "0x4CA4226Ea534F2Ece75A4FcDAD0bBe5AbaEA9820": { + "Name": "StandardizedCallFacet", + "Version": "1.1.0" + }, + "0x93b22CF8C50f87C394837DdE0fD84E8add3100e9": { + "Name": "CalldataVerificationFacet", + "Version": "1.1.1" + }, + "0xB6faa3155683d6856ae196c4f3847D68D478E5eA": { + "Name": "SquidFacet", + "Version": "1.0.0" + } + }, + "Periphery": { + "ERC20Proxy": "0xB59Cb9E4087c841577ACE23B0168CCDdf9450290", + "Executor": "0xdC55d8b59441f75e32FDD2356139DC8402e52048", + "FeeCollector": "0x1a4E99aB56BBac95810C0A957F173054f6FA8fDc", + "GasRebateDistributor": "", + "LiFuelFeeCollector": "0x677Fa29FFe6c8f03D6bbE789090Dceb498b7aaA4", + "Receiver": "0xCfDfbAa460EFAd6F58D4459d82863CfA137e4993", + "ReceiverStargateV2": "", + "RelayerCelerIM": "", + "ServiceFeeCollector": "", + "TokenWrapper": "0x5C6Dd0170348666A3e07fD033C12D9D15c83e360", + "LiFiDEXAggregator": "0xAcD913Ad6936Bb662395ac9a66D75bFc77c165fF" + } + } +} \ No newline at end of file diff --git a/deployments/immutablezkevm.json b/deployments/immutablezkevm.json new file mode 100644 index 000000000..7a3ce9e52 --- /dev/null +++ b/deployments/immutablezkevm.json @@ -0,0 +1,23 @@ +{ + "DiamondCutFacet": "0xC9E3d116262E93c14f87032fBE0C43791e0fAfCB", + "DiamondLoupeFacet": "0xa521DD4f0e6df9d56d740D0fa4f7fA2F0BC88bA7", + "OwnershipFacet": "0xf09eF957165a5265613c5a57bDe781d363d519f0", + "DexManagerFacet": "0x38aDe624ebAF11ee35190046fbdF2d42e03e869a", + "AccessManagerFacet": "0xdD6CEa60F2Bb19fA5a03F0856054E2803221c3E4", + "WithdrawFacet": "0xddb090dD35ad8642DC5c79137147A6B34485B126", + "PeripheryRegistryFacet": "0xdd400e751B3A9D2bF02CF1EEc245c1BDFb8e0E56", + "LIFuelFacet": "0x75F9eaC5c368Ed9277b8952C83A063e435051332", + "GenericSwapFacet": "0xa27992F9ef326527F85898E645AFF1d99E9609E3", + "GenericSwapFacetV3": "0x51504500fBFB459684E020154Dc9B2DE912d0B92", + "StandardizedCallFacet": "0x4CA4226Ea534F2Ece75A4FcDAD0bBe5AbaEA9820", + "CalldataVerificationFacet": "0x93b22CF8C50f87C394837DdE0fD84E8add3100e9", + "LiFiDiamond": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + "SquidFacet": "0xB6faa3155683d6856ae196c4f3847D68D478E5eA", + "ERC20Proxy": "0xB59Cb9E4087c841577ACE23B0168CCDdf9450290", + "Executor": "0xdC55d8b59441f75e32FDD2356139DC8402e52048", + "FeeCollector": "0x1a4E99aB56BBac95810C0A957F173054f6FA8fDc", + "LiFuelFeeCollector": "0x677Fa29FFe6c8f03D6bbE789090Dceb498b7aaA4", + "TokenWrapper": "0x5C6Dd0170348666A3e07fD033C12D9D15c83e360", + "Receiver": "0xCfDfbAa460EFAd6F58D4459d82863CfA137e4993", + "LiFiDEXAggregator": "0xAcD913Ad6936Bb662395ac9a66D75bFc77c165fF" +} \ No newline at end of file diff --git a/deployments/linea.diamond.json b/deployments/linea.diamond.json index 15d079b8d..17e316527 100644 --- a/deployments/linea.diamond.json +++ b/deployments/linea.diamond.json @@ -29,7 +29,7 @@ "Name": "PeripheryRegistryFacet", "Version": "1.0.0" }, - "0x9b686e79F7CBDe1C440dEe1766F05c99B60b8076": { + "0x1e2a304AE9fE9757DD0b1faab2Cf8cC3AB573EB9": { "Name": "LIFuelFacet", "Version": "1.0.1" }, @@ -45,11 +45,11 @@ "Name": "CBridgeFacetPacked", "Version": "1.0.3" }, - "0xC543CEdA9362748Be1EEC5c82B4d91845F725a7b": { + "0x091F6c1722a25AC789F725eA61c9220C9032f524": { "Name": "StandardizedCallFacet", - "Version": "1.0.0" + "Version": "1.1.0" }, - "0xEDB61cDace9733f9F2dD18eb414dEa613cc0226d": { + "0x5654381ec2107D418B71B8c3B4FA08746CDB39ec": { "Name": "StargateFacet", "Version": "2.2.0" }, @@ -101,9 +101,9 @@ "Name": "GenericSwapFacetV3", "Version": "1.0.0" }, - "0x8C4A1847ABF1FbC1D41c8754E3A7b88028C67784": { + "0x113E97921874646413572F2C43562463c378b6f5": { "Name": "StargateFacetV2", - "Version": "1.0.0" + "Version": "1.0.1" } }, "Periphery": { @@ -111,8 +111,10 @@ "Executor": "0x2a202Ed587F0BC7dfa80ea1DD943d8470492Dd0F", "FeeCollector": "0xA4A24BdD4608D7dFC496950850f9763B674F0DB2", "GasRebateDistributor": "", + "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0x68B21d21509446Bf5449B6F5F8aBD4b3cfcbc3f8", "Receiver": "0xdcBEcDE898c067cA58ABD01a7de51660bBD5A897", + "ReceiverStargateV2": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6", "RelayerCelerIM": "", "ServiceFeeCollector": "0xA8Fe73F7b3a825fF51f2200af12c16B3BA95394d", "TokenWrapper": "0xf6C9605c6E231C1547b7a6545d93e7233f97322a" diff --git a/deployments/linea.json b/deployments/linea.json index dcc0b95f0..934a4826d 100644 --- a/deployments/linea.json +++ b/deployments/linea.json @@ -32,6 +32,6 @@ "AcrossFacetPacked": "0x29f9a4741EC691AE54068De461Ca291794aa1D05", "SquidFacet": "0xEa8EF3E532db49915FDbDdB29244a83E76768111", "GenericSwapFacetV3": "0xf4E73E2A9cDF1F94579cda3da07aD04031359CB5", - "StargateFacetV2": "0x8C4A1847ABF1FbC1D41c8754E3A7b88028C67784", + "StargateFacetV2": "0x113E97921874646413572F2C43562463c378b6f5", "ReceiverStargateV2": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6" } \ No newline at end of file diff --git a/deployments/mainnet.diamond.immutable.json b/deployments/mainnet.diamond.immutable.json index dbc970fad..046278afc 100644 --- a/deployments/mainnet.diamond.immutable.json +++ b/deployments/mainnet.diamond.immutable.json @@ -2,96 +2,96 @@ "LiFiDiamondImmutable": { "Facets": { "0xF1d67E1dddc87E2858C87EBd5b19f99a4E297541": { - "Name": "DiamondCutFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x49d195D3138D4E0E2b4ea88484C54AEE45B04B9F": { - "Name": "DiamondLoupeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x44beA2Ab010d1CedC4E60E97DA8F88b8840951B0": { - "Name": "OwnershipFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x428C4abf8BB3ECc893bD3E0Be12b0f363c6e81aA": { - "Name": "WithdrawFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x64D41a7B52CA910f4995b1df33ea68471138374b": { - "Name": "DexManagerFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0xfaA5f885a54D22C8571806fC001E53F0191f5Aff": { - "Name": "AccessManagerFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x2EfC66F1ff37fc5277De5526Ab5CB7650f2DD518": { - "Name": "PeripheryRegistryFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0xa4eB2EF4064197De6517A53d36263e4591cD0B34": { - "Name": "CBridgeFacetPacked", - "Version": "1.0.3" + "Name": "", + "Version": "" }, "0xbd8D369470169f9976c5bCc60318955836843a71": { "Name": "AmarokFacet", "Version": "1.0.1" }, "0xA1Edc2eD671Dfa77eD2dCD2ee012F82e4807A75a": { - "Name": "CBridgeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x2A7568Fd6dffA6F7578cdF010398BffAa53cc7c0": { - "Name": "AcrossFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0x987f67811Ef841da0466746E10B4139Daff95053": { - "Name": "ArbitrumBridgeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x55c51beF79d16F5f0875E11207B17E885c21c13d": { "Name": "AxelarFacet", "Version": "1.0.0" }, "0xf72169Fb511739CeFea9eBEffc5d39Dba1b33cD3": { - "Name": "CelerCircleBridgeFacet", - "Version": "1.0.1" + "Name": "", + "Version": "" }, "0x0d26d248D4e80377f1d794AB88090e76B0903EDE": { "Name": "CelerIMFacetImmutable", "Version": "2.0.0" }, "0x2fF4484bcaEf13e4a1Db84E6af882c9d66c97e3F": { - "Name": "GenericSwapFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x5fda594b67d38E05fb4C9A1a4Cf3B22f48c8de4E": { - "Name": "GnosisBridgeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0xc673c3df4fff2C499009E5fCa94bc446f5B07772": { - "Name": "HopFacetOptimized", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0x4Dc509f0BB4db1faeba81f5F13583Ff3d95F938D": { - "Name": "HopFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0x6e118Db5ab7018FcF195e1310074688B8A1912B3": { - "Name": "LIFuelFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x4cf6c406F004b7B588ec8638fBd2cC2215D87C90": { - "Name": "MultichainFacet", + "Name": "", "Version": "" }, "0xE8Ff7BFEF5DacB57E87bC2d0B6CCFefBE5f546BC": { - "Name": "OptimismBridgeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x0D062790F26947074B27da07346E4FF9FDf946EE": { - "Name": "PolygonBridgeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x7E4A13BFe1200Fdc5E0FFa7eC65eFaBd8B17bc26": { "Name": "StargateFacet", @@ -102,33 +102,38 @@ "Version": "1.0.0" }, "0xed662c027c985B73A732975E3B4CeadC97AAF145": { - "Name": "HopFacetPacked", - "Version": "1.0.6" + "Name": "", + "Version": "" }, "0x416E2d3E39dF69bBc30244eC90477fD042812E6B": { - "Name": "HyphenFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0xC1E20466AD79BAe875568eb08ABaaEA1F0E25b7E": { - "Name": "OmniBridgeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x8446a365f3F2eF6a050E5f9a568cf5A5Ca110886": { - "Name": "AmarokFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0xe7072402217EfF9b73cf457731cEE2A3824360dc": { - "Name": "AllBridgeFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" } }, "Periphery": { "ERC20Proxy": "0x0654EbA982ec082036A3D0f59964D302f1ba5cdA", - "Executor": "0x2120c7A5CCf73d6Fb5C7e9B2A0d4B3A4f587E7a4", + "Executor": "0xBe27F03C8e6a61E2a4B1EE7940dbcb9204744d1c", "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", + "GasRebateDistributor": "", + "LiFiDEXAggregator": "", + "LiFuelFeeCollector": "", "Receiver": "0xC850013FC01A264018D58D112000E32835D15fBC", + "ReceiverStargateV2": "", "RelayerCelerIM": "0x7b6d852f58C783BA3b1138C535ff57dDa4c826E0", - "ServiceFeeCollector": "0x894b3e1e30Be0727eb138d2cceb0A99d2Fc4C55D" + "ServiceFeeCollector": "0x894b3e1e30Be0727eb138d2cceb0A99d2Fc4C55D", + "TokenWrapper": "" } } } \ No newline at end of file diff --git a/deployments/mainnet.diamond.json b/deployments/mainnet.diamond.json index 6ae616b3a..af698d53e 100644 --- a/deployments/mainnet.diamond.json +++ b/deployments/mainnet.diamond.json @@ -1,12 +1,20 @@ { "LiFiDiamond": { "Facets": { + "0xf7993A8df974AD022647E63402d6315137c58ABf": { + "Name": "", + "Version": "" + }, + "0xF5ba8Db6fEA7aF820De35C8D0c294e17DBC1b9D2": { + "Name": "", + "Version": "" + }, "0x6faA6906b9e4A59020e673910105567e809789E0": { "Name": "OwnershipFacet", "Version": "1.0.0" }, - "0x711e80A9c1eB906d9Ae9d37E5432E6E7aCeEdA0B": { - "Name": "WithdrawFacet", + "0xE397c4883ec89ed4Fc9D258F00C689708b2799c9": { + "Name": "AcrossFacetPacked", "Version": "1.0.0" }, "0x22B31a1a81d5e594315c866616db793E799556c5": { @@ -17,6 +25,10 @@ "Name": "AccessManagerFacet", "Version": "1.0.0" }, + "0x0b5726b7348efBdA8620D5C374F85Cbe8f040B6a": { + "Name": "", + "Version": "" + }, "0x3F95b05a77FDC6D82162D86A72b156b55030627f": { "Name": "AmarokFacet", "Version": "3.0.0" @@ -49,11 +61,15 @@ "Name": "OmniBridgeFacet", "Version": "1.0.0" }, + "0x87C10910DA7258E55dA2C5d43739fB68B12E6a4b": { + "Name": "", + "Version": "" + }, "0xF609fdBA8f7A020975a7c82C82f6A1f526F9A8fC": { "Name": "PolygonBridgeFacet", "Version": "1.0.0" }, - "0x31e3b5611FBb1a90d35039fCC9656649e7Fd482b": { + "0x7D1940fDfF0B37c137B105ce7967B3B86DB42648": { "Name": "StargateFacet", "Version": "2.2.0" }, @@ -61,7 +77,7 @@ "Name": "PeripheryRegistryFacet", "Version": "1.0.0" }, - "0x41bDcf7A9695ba3994cCA53d529DE23f54881D7F": { + "0x2b7D2C78bd801Cc06DDCF91DeE2e8fAE22814f7e": { "Name": "GenericSwapFacet", "Version": "2.0.0" }, @@ -73,9 +89,9 @@ "Name": "HopFacetOptimized", "Version": "2.0.0" }, - "0x51709aF40dE8feEbD9d694F26826F29ce915DcbF": { + "0x66861f292099cAF644F4A8b6091De49BEC5E8a15": { "Name": "LIFuelFacet", - "Version": "1.0.0" + "Version": "1.0.1" }, "0xE7Bf43C55551B1036e796E7Fd3b125d1F9903e2E": { "Name": "CBridgeFacetPacked", @@ -95,22 +111,30 @@ }, "0xF70A1Ed85EcC454a562A4B69ee40CBc6a4eB0b64": { "Name": "CelerIMFacetMutable", - "Version": "" + "Version": "2.0.0" }, - "0x2E61751366B7e006f8D53becB4b697890B30144F": { + "0x175E7799DA0CD40E641352EaB90D8e39e02a4Ca9": { "Name": "StandardizedCallFacet", - "Version": "1.0.0" + "Version": "1.1.0" }, "0x7A5c119ec5dDbF9631cf40f6e5DB28f31d4332a0": { "Name": "CalldataVerificationFacet", "Version": "1.1.1" }, + "0xF965f52046D7095d5080bD31459601F4Eb24f72D": { + "Name": "", + "Version": "" + }, "0x376f99f7EADE8A17f036fCff9eBA978E66e5fd28": { "Name": "ThorSwapFacet", "Version": "1.2.0" }, - "0xE397c4883ec89ed4Fc9D258F00C689708b2799c9": { - "Name": "AcrossFacetPacked", + "0x711e80A9c1eB906d9Ae9d37E5432E6E7aCeEdA0B": { + "Name": "WithdrawFacet", + "Version": "1.0.0" + }, + "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F": { + "Name": "GenericSwapFacetV3", "Version": "1.0.0" }, "0xF18A285f4e6f720Eb9b4e05df71f88b9552E6ADB": { @@ -129,24 +153,23 @@ "Name": "MayanFacet", "Version": "1.0.0" }, - "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F": { - "Name": "GenericSwapFacetV3", - "Version": "1.0.0" - }, - "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4": { + "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61": { "Name": "StargateFacetV2", - "Version": "1.0.0" + "Version": "1.0.1" } }, "Periphery": { "ERC20Proxy": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", "Executor": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", + "GasRebateDistributor": "", + "LiFiDEXAggregator": "", + "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", + "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", "ServiceFeeCollector": "0x894b3e1e30Be0727eb138d2cceb0A99d2Fc4C55D", - "LiFuelFeeCollector": "0xc4f7A34b8d283f66925eF0f5CCdFC2AF3030DeaE", "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" } } -} \ No newline at end of file +} diff --git a/deployments/mainnet.diamond.staging.json b/deployments/mainnet.diamond.staging.json index 0bf3c729c..a9e65624b 100644 --- a/deployments/mainnet.diamond.staging.json +++ b/deployments/mainnet.diamond.staging.json @@ -63,7 +63,7 @@ }, "0xe7072402217EfF9b73cf457731cEE2A3824360dc": { "Name": "AllBridgeFacet", - "Version": "2.0.0" + "Version": "" }, "0x987f67811Ef841da0466746E10B4139Daff95053": { "Name": "ArbitrumBridgeFacet", @@ -92,15 +92,24 @@ "0xE8Ff7BFEF5DacB57E87bC2d0B6CCFefBE5f546BC": { "Name": "OptimismBridgeFacet", "Version": "1.0.0" + }, + "0x9BE903AB2ad61dfC71f7E2171A3dBf0884a4cdBF": { + "Name": "", + "Version": "" } }, "Periphery": { "ERC20Proxy": "0x0654EbA982ec082036A3D0f59964D302f1ba5cdA", "Executor": "0xBe27F03C8e6a61E2a4B1EE7940dbcb9204744d1c", "FeeCollector": "0x9ca271A532392230EAe919Fb5460aEa9D9718424", + "GasRebateDistributor": "", + "LiFiDEXAggregator": "", + "LiFuelFeeCollector": "0xc4f7A34b8d283f66925eF0f5CCdFC2AF3030DeaE", "Receiver": "0xC850013FC01A264018D58D112000E32835D15fBC", + "ReceiverStargateV2": "", "RelayerCelerIM": "", - "ServiceFeeCollector": "0xf068cc770f32042Ff4a8fD196045641234dFaa47" + "ServiceFeeCollector": "0xf068cc770f32042Ff4a8fD196045641234dFaa47", + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" } } } \ No newline at end of file diff --git a/deployments/mainnet.json b/deployments/mainnet.json index 24e514b10..15d33e56e 100644 --- a/deployments/mainnet.json +++ b/deployments/mainnet.json @@ -53,6 +53,6 @@ "SquidFacet": "0x5C2C3F56e33F45389aa4e1DA4D3a807A532a910c", "MayanFacet": "0x4682d79DD4D0e7555415841b5151933AF50594A8", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4", + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A" } \ No newline at end of file diff --git a/deployments/mantle.diamond.json b/deployments/mantle.diamond.json index e1df82db2..a149ebd54 100644 --- a/deployments/mantle.diamond.json +++ b/deployments/mantle.diamond.json @@ -61,9 +61,9 @@ "Name": "SquidFacet", "Version": "1.0.0" }, - "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4": { + "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61": { "Name": "StargateFacetV2", - "Version": "1.0.0" + "Version": "1.0.1" } }, "Periphery": { @@ -71,9 +71,10 @@ "Executor": "0x7078d1DE45C7D3e87f71D5DA663db2a8Ee1dfEbe", "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", "GasRebateDistributor": "", + "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Receiver": "0x2fA14922ABc117c4737260032C8fD6D9Ab35395A", - "ReceiverStargateV2": "", + "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "", "ServiceFeeCollector": "0xf3552b98BB4234B47674700A99a0308D74B40F51", "TokenWrapper": "0x0263180888007D45340F86eC0b610d250BbDcB23" diff --git a/deployments/mantle.json b/deployments/mantle.json index 63b9b54be..f652fb7fe 100644 --- a/deployments/mantle.json +++ b/deployments/mantle.json @@ -22,6 +22,6 @@ "StargateFacet": "0xA4A8818D8d4e2EE27e960535D0a15299C5504605", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", "SquidFacet": "0xc23ae3A8d74C0a428FA59E4AD3EB6aa4b2330530", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4", + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A" } \ No newline at end of file diff --git a/deployments/metis.diamond.json b/deployments/metis.diamond.json index fab2004fd..584b356d7 100644 --- a/deployments/metis.diamond.json +++ b/deployments/metis.diamond.json @@ -62,12 +62,12 @@ "Version": "1.0.1" }, "0x7865919678265435472756b59D5141D0F76312E1": { - "Name": "", - "Version": "" + "Name": "CalldataVerificationFacet", + "Version": "1.1.1" }, - "0x8a0e4Ffcc4B847A452011213cFb5cA9636fF228A": { + "0xCb667deA2894ab64e8e75EACB0d5d027AC672e25": { "Name": "StargateFacetV2", - "Version": "1.0.0" + "Version": "1.0.1" } }, "Periphery": { @@ -75,9 +75,10 @@ "Executor": "0x6696F031C099dE6089427ceBFb38258feA6fdaFE", "FeeCollector": "0x27f0e36dE6B1BA8232f6c2e87E00A50731048C6B", "GasRebateDistributor": "", + "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0x851450e3b624ea4b068c3E8cFBcf79cD03D31C54", "Receiver": "0x0a4D7f27e8d24625eCb8d29d6445934a440A05E0", - "ReceiverStargateV2": "", + "ReceiverStargateV2": "0xe7392Fc0f61503dB53C70789c6F2c34C0675C929", "RelayerCelerIM": "", "ServiceFeeCollector": "0x0000000000000000000000000000000000001234", "TokenWrapper": "0x01bDf46A673FC3c081ddBD21cb51fBA4972d00aC" diff --git a/deployments/metis.json b/deployments/metis.json index e3d085c68..d0bf3b5eb 100644 --- a/deployments/metis.json +++ b/deployments/metis.json @@ -22,6 +22,6 @@ "TokenWrapper": "0x01bDf46A673FC3c081ddBD21cb51fBA4972d00aC", "SymbiosisFacet": "0xA66abf226CC230eDBDeFf85C1874Ac7A9A637072", "GenericSwapFacetV3": "0xECb6035CD0393ebE016821EAE28bA9c57efBd5c6", - "StargateFacetV2": "0x8a0e4Ffcc4B847A452011213cFb5cA9636fF228A", + "StargateFacetV2": "0xCb667deA2894ab64e8e75EACB0d5d027AC672e25", "ReceiverStargateV2": "0xe7392Fc0f61503dB53C70789c6F2c34C0675C929" } \ No newline at end of file diff --git a/deployments/optimism.diamond.immutable.json b/deployments/optimism.diamond.immutable.json index eff59e53e..48952311c 100644 --- a/deployments/optimism.diamond.immutable.json +++ b/deployments/optimism.diamond.immutable.json @@ -2,32 +2,32 @@ "LiFiDiamondImmutable": { "Facets": { "0xF1d67E1dddc87E2858C87EBd5b19f99a4E297541": { - "Name": "DiamondCutFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x49d195D3138D4E0E2b4ea88484C54AEE45B04B9F": { - "Name": "DiamondLoupeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x44beA2Ab010d1CedC4E60E97DA8F88b8840951B0": { - "Name": "OwnershipFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x428C4abf8BB3ECc893bD3E0Be12b0f363c6e81aA": { - "Name": "WithdrawFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x64D41a7B52CA910f4995b1df33ea68471138374b": { - "Name": "DexManagerFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0xfaA5f885a54D22C8571806fC001E53F0191f5Aff": { - "Name": "AccessManagerFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x2EfC66F1ff37fc5277De5526Ab5CB7650f2DD518": { - "Name": "PeripheryRegistryFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0xCd063F35ed6f6d9B036284475B7779FdCf1Dd76C": { "Name": "AcrossFacet", @@ -38,32 +38,32 @@ "Version": "1.0.1" }, "0xA1Edc2eD671Dfa77eD2dCD2ee012F82e4807A75a": { - "Name": "CBridgeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x2fF4484bcaEf13e4a1Db84E6af882c9d66c97e3F": { - "Name": "GenericSwapFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0xc673c3df4fff2C499009E5fCa94bc446f5B07772": { - "Name": "HopFacetOptimized", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0x4Dc509f0BB4db1faeba81f5F13583Ff3d95F938D": { - "Name": "HopFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0x416E2d3E39dF69bBc30244eC90477fD042812E6B": { - "Name": "HyphenFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x6e118Db5ab7018FcF195e1310074688B8A1912B3": { - "Name": "LIFuelFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x4cf6c406F004b7B588ec8638fBd2cC2215D87C90": { - "Name": "MultichainFacet", - "Version": "1.0.1" + "Name": "", + "Version": "" }, "0x238502aDc8ca550723CBE78543c8B757599A21cC": { "Name": "NXTPFacet", @@ -74,33 +74,38 @@ "Version": "1.0.0" }, "0xed662c027c985B73A732975E3B4CeadC97AAF145": { - "Name": "HopFacetPacked", - "Version": "1.0.6" + "Name": "", + "Version": "" }, "0x2A7568Fd6dffA6F7578cdF010398BffAa53cc7c0": { - "Name": "AcrossFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0xa4eB2EF4064197De6517A53d36263e4591cD0B34": { - "Name": "CBridgeFacetPacked", - "Version": "1.0.3" + "Name": "", + "Version": "" }, "0x0d26d248D4e80377f1d794AB88090e76B0903EDE": { "Name": "CelerIMFacetImmutable", "Version": "2.0.0" }, "0x8446a365f3F2eF6a050E5f9a568cf5A5Ca110886": { - "Name": "AmarokFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" } }, "Periphery": { "ERC20Proxy": "0x0654EbA982ec082036A3D0f59964D302f1ba5cdA", "Executor": "0xBe27F03C8e6a61E2a4B1EE7940dbcb9204744d1c", "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", + "GasRebateDistributor": "", + "LiFiDEXAggregator": "", + "LiFuelFeeCollector": "", "Receiver": "0xC850013FC01A264018D58D112000E32835D15fBC", + "ReceiverStargateV2": "", "RelayerCelerIM": "0x7b6d852f58C783BA3b1138C535ff57dDa4c826E0", - "ServiceFeeCollector": "0x894b3e1e30Be0727eb138d2cceb0A99d2Fc4C55D" + "ServiceFeeCollector": "0x894b3e1e30Be0727eb138d2cceb0A99d2Fc4C55D", + "TokenWrapper": "" } } } \ No newline at end of file diff --git a/deployments/optimism.diamond.json b/deployments/optimism.diamond.json index 5c70366a9..f1ae60a66 100644 --- a/deployments/optimism.diamond.json +++ b/deployments/optimism.diamond.json @@ -1,12 +1,20 @@ { "LiFiDiamond": { "Facets": { + "0xf7993A8df974AD022647E63402d6315137c58ABf": { + "Name": "", + "Version": "" + }, + "0xF5ba8Db6fEA7aF820De35C8D0c294e17DBC1b9D2": { + "Name": "", + "Version": "" + }, "0x6faA6906b9e4A59020e673910105567e809789E0": { "Name": "OwnershipFacet", "Version": "1.0.0" }, - "0x711e80A9c1eB906d9Ae9d37E5432E6E7aCeEdA0B": { - "Name": "WithdrawFacet", + "0xE397c4883ec89ed4Fc9D258F00C689708b2799c9": { + "Name": "AcrossFacetPacked", "Version": "1.0.0" }, "0x22B31a1a81d5e594315c866616db793E799556c5": { @@ -45,7 +53,7 @@ "Name": "HopFacetOptimized", "Version": "2.0.0" }, - "0x31e3b5611FBb1a90d35039fCC9656649e7Fd482b": { + "0x7D1940fDfF0B37c137B105ce7967B3B86DB42648": { "Name": "StargateFacet", "Version": "2.2.0" }, @@ -53,9 +61,9 @@ "Name": "HopFacet", "Version": "2.0.0" }, - "0x51709aF40dE8feEbD9d694F26826F29ce915DcbF": { + "0x66861f292099cAF644F4A8b6091De49BEC5E8a15": { "Name": "LIFuelFacet", - "Version": "1.0.0" + "Version": "1.0.1" }, "0xBeE13d99dD633fEAa2a0935f00CbC859F8305FA7": { "Name": "AcrossFacet", @@ -71,19 +79,23 @@ }, "0xF70A1Ed85EcC454a562A4B69ee40CBc6a4eB0b64": { "Name": "CelerIMFacetMutable", - "Version": "" + "Version": "2.0.0" }, - "0xA57862295BdF8A680fda893B9bd3b935236d18bA": { - "Name": "HopFacetPacked", - "Version": "1.0.1" + "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F": { + "Name": "GenericSwapFacetV3", + "Version": "1.0.0" + }, + "0x4682d79DD4D0e7555415841b5151933AF50594A8": { + "Name": "MayanFacet", + "Version": "1.0.0" }, "0xE7Bf43C55551B1036e796E7Fd3b125d1F9903e2E": { "Name": "CBridgeFacetPacked", "Version": "1.0.3" }, - "0x2E61751366B7e006f8D53becB4b697890B30144F": { + "0x175E7799DA0CD40E641352EaB90D8e39e02a4Ca9": { "Name": "StandardizedCallFacet", - "Version": "1.0.0" + "Version": "1.1.0" }, "0x7A5c119ec5dDbF9631cf40f6e5DB28f31d4332a0": { "Name": "CalldataVerificationFacet", @@ -93,12 +105,16 @@ "Name": "CelerCircleBridgeFacet", "Version": "1.0.1" }, + "0xF965f52046D7095d5080bD31459601F4Eb24f72D": { + "Name": "", + "Version": "" + }, "0x71205D77043848B57243A3F7eA133E11A3dd346b": { "Name": "AllBridgeFacet", "Version": "2.0.0" }, - "0xE397c4883ec89ed4Fc9D258F00C689708b2799c9": { - "Name": "AcrossFacetPacked", + "0x711e80A9c1eB906d9Ae9d37E5432E6E7aCeEdA0B": { + "Name": "WithdrawFacet", "Version": "1.0.0" }, "0xF18A285f4e6f720Eb9b4e05df71f88b9552E6ADB": { @@ -113,28 +129,23 @@ "Name": "SquidFacet", "Version": "1.0.0" }, - "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F": { - "Name": "GenericSwapFacetV3", - "Version": "1.0.0" - }, - "0x4682d79DD4D0e7555415841b5151933AF50594A8": { - "Name": "MayanFacet", - "Version": "1.0.0" - }, - "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4": { + "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61": { "Name": "StargateFacetV2", - "Version": "1.0.0" + "Version": "1.0.1" } }, "Periphery": { "ERC20Proxy": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", "Executor": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", + "GasRebateDistributor": "", + "LiFiDEXAggregator": "", + "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", + "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", "ServiceFeeCollector": "0x894b3e1e30Be0727eb138d2cceb0A99d2Fc4C55D", - "LiFuelFeeCollector": "0xc4f7A34b8d283f66925eF0f5CCdFC2AF3030DeaE", "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" } } -} +} \ No newline at end of file diff --git a/deployments/optimism.diamond.staging.json b/deployments/optimism.diamond.staging.json index 1673e11b2..e5edf9575 100644 --- a/deployments/optimism.diamond.staging.json +++ b/deployments/optimism.diamond.staging.json @@ -108,6 +108,10 @@ "0x21571D628B0bCBeb954D5933A604eCac35bAF2c7": { "Name": "SymbiosisFacet", "Version": "1.0.0" + }, + "0xa137Fe4C41A2E04ca34578DC9023ad45cC194389": { + "Name": "", + "Version": "" } }, "Periphery": { @@ -115,6 +119,7 @@ "Executor": "0x23f882bA2fa54A358d8599465EB471f58Cc26751", "FeeCollector": "0x7F8E9bEBd1Dea263A36a6916B99bd84405B9654a", "GasRebateDistributor": "", + "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0x94EA56D8049e93E0308B9c7d1418Baf6A7C68280", "Receiver": "0x36E9B2E8A627474683eF3b1E9Df26D2bF04396f3", "ReceiverStargateV2": "", diff --git a/deployments/optimism.json b/deployments/optimism.json index 90c508e1e..a167685fe 100644 --- a/deployments/optimism.json +++ b/deployments/optimism.json @@ -44,6 +44,6 @@ "SquidFacet": "0x5C2C3F56e33F45389aa4e1DA4D3a807A532a910c", "MayanFacet": "0x4682d79DD4D0e7555415841b5151933AF50594A8", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4", + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A" -} +} \ No newline at end of file diff --git a/deployments/polygon.diamond.immutable.json b/deployments/polygon.diamond.immutable.json index 5688a44a4..1a3d563f9 100644 --- a/deployments/polygon.diamond.immutable.json +++ b/deployments/polygon.diamond.immutable.json @@ -2,36 +2,36 @@ "LiFiDiamondImmutable": { "Facets": { "0xF1d67E1dddc87E2858C87EBd5b19f99a4E297541": { - "Name": "DiamondCutFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x49d195D3138D4E0E2b4ea88484C54AEE45B04B9F": { - "Name": "DiamondLoupeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x44beA2Ab010d1CedC4E60E97DA8F88b8840951B0": { - "Name": "OwnershipFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x428C4abf8BB3ECc893bD3E0Be12b0f363c6e81aA": { - "Name": "WithdrawFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x64D41a7B52CA910f4995b1df33ea68471138374b": { - "Name": "DexManagerFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0xfaA5f885a54D22C8571806fC001E53F0191f5Aff": { - "Name": "AccessManagerFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x2EfC66F1ff37fc5277De5526Ab5CB7650f2DD518": { - "Name": "PeripheryRegistryFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x2A7568Fd6dffA6F7578cdF010398BffAa53cc7c0": { - "Name": "AcrossFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0xbd8D369470169f9976c5bCc60318955836843a71": { "Name": "AmarokFacet", @@ -42,28 +42,28 @@ "Version": "1.0.0" }, "0xA1Edc2eD671Dfa77eD2dCD2ee012F82e4807A75a": { - "Name": "CBridgeFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x2fF4484bcaEf13e4a1Db84E6af882c9d66c97e3F": { - "Name": "GenericSwapFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x4Dc509f0BB4db1faeba81f5F13583Ff3d95F938D": { - "Name": "HopFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0x416E2d3E39dF69bBc30244eC90477fD042812E6B": { - "Name": "HyphenFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x6e118Db5ab7018FcF195e1310074688B8A1912B3": { - "Name": "LIFuelFacet", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x4cf6c406F004b7B588ec8638fBd2cC2215D87C90": { - "Name": "MultichainFacet", - "Version": "1.0.1" + "Name": "", + "Version": "" }, "0x238502aDc8ca550723CBE78543c8B757599A21cC": { "Name": "NXTPFacet", @@ -78,37 +78,42 @@ "Version": "1.0.0" }, "0xed662c027c985B73A732975E3B4CeadC97AAF145": { - "Name": "HopFacetPacked", - "Version": "1.0.6" + "Name": "", + "Version": "" }, "0xc673c3df4fff2C499009E5fCa94bc446f5B07772": { - "Name": "HopFacetOptimized", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0xa4eB2EF4064197De6517A53d36263e4591cD0B34": { - "Name": "CBridgeFacetPacked", - "Version": "1.0.3" + "Name": "", + "Version": "" }, "0x0d26d248D4e80377f1d794AB88090e76B0903EDE": { "Name": "CelerIMFacetImmutable", "Version": "2.0.0" }, "0x8446a365f3F2eF6a050E5f9a568cf5A5Ca110886": { - "Name": "AmarokFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" }, "0xe7072402217EfF9b73cf457731cEE2A3824360dc": { - "Name": "AllBridgeFacet", - "Version": "2.0.0" + "Name": "", + "Version": "" } }, "Periphery": { "ERC20Proxy": "0x0654EbA982ec082036A3D0f59964D302f1ba5cdA", "Executor": "0xBe27F03C8e6a61E2a4B1EE7940dbcb9204744d1c", "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", + "GasRebateDistributor": "", + "LiFiDEXAggregator": "", + "LiFuelFeeCollector": "", "Receiver": "0xC850013FC01A264018D58D112000E32835D15fBC", + "ReceiverStargateV2": "", "RelayerCelerIM": "0x7b6d852f58C783BA3b1138C535ff57dDa4c826E0", - "ServiceFeeCollector": "0x894b3e1e30Be0727eb138d2cceb0A99d2Fc4C55D" + "ServiceFeeCollector": "0x894b3e1e30Be0727eb138d2cceb0A99d2Fc4C55D", + "TokenWrapper": "" } } } \ No newline at end of file diff --git a/deployments/polygon.diamond.json b/deployments/polygon.diamond.json index e0bffed03..65772b508 100644 --- a/deployments/polygon.diamond.json +++ b/deployments/polygon.diamond.json @@ -1,12 +1,20 @@ { "LiFiDiamond": { "Facets": { + "0xf7993A8df974AD022647E63402d6315137c58ABf": { + "Name": "", + "Version": "" + }, + "0xF5ba8Db6fEA7aF820De35C8D0c294e17DBC1b9D2": { + "Name": "", + "Version": "" + }, "0x6faA6906b9e4A59020e673910105567e809789E0": { "Name": "OwnershipFacet", "Version": "1.0.0" }, - "0x711e80A9c1eB906d9Ae9d37E5432E6E7aCeEdA0B": { - "Name": "WithdrawFacet", + "0xE397c4883ec89ed4Fc9D258F00C689708b2799c9": { + "Name": "AcrossFacetPacked", "Version": "1.0.0" }, "0x22B31a1a81d5e594315c866616db793E799556c5": { @@ -33,6 +41,10 @@ "Name": "GenericSwapFacet", "Version": "1.0.0" }, + "0x3a60730cbcD91715E31830f125bB3eF1FA0a2c66": { + "Name": "", + "Version": "" + }, "0xF2c63815eBD0c4E048eF216C77E2c80aa4ecD59c": { "Name": "HyphenFacet", "Version": "1.0.0" @@ -63,34 +75,38 @@ }, "0xF70A1Ed85EcC454a562A4B69ee40CBc6a4eB0b64": { "Name": "CelerIMFacetMutable", - "Version": "" + "Version": "2.0.0" }, "0x7D507e6E89C52aE610b8D0151c8cb24c24e43bdb": { "Name": "HopFacetOptimized", "Version": "2.0.0" }, - "0x51709aF40dE8feEbD9d694F26826F29ce915DcbF": { + "0x66861f292099cAF644F4A8b6091De49BEC5E8a15": { "Name": "LIFuelFacet", - "Version": "1.0.0" + "Version": "1.0.1" }, "0xBeE13d99dD633fEAa2a0935f00CbC859F8305FA7": { "Name": "AcrossFacet", "Version": "2.0.0" }, - "0x2E61751366B7e006f8D53becB4b697890B30144F": { + "0x175E7799DA0CD40E641352EaB90D8e39e02a4Ca9": { "Name": "StandardizedCallFacet", - "Version": "1.0.0" + "Version": "1.1.0" }, - "0x31e3b5611FBb1a90d35039fCC9656649e7Fd482b": { + "0x7D1940fDfF0B37c137B105ce7967B3B86DB42648": { "Name": "StargateFacet", "Version": "2.2.0" }, + "0x9558CacEAC173Bdf32fb4cd7067e9e3c3b4c155e": { + "Name": "", + "Version": "" + }, "0x6731C946747bA54c78e7a65d416Cde39E478ECeb": { "Name": "CelerCircleBridgeFacet", "Version": "1.0.1" }, - "0xE397c4883ec89ed4Fc9D258F00C689708b2799c9": { - "Name": "AcrossFacetPacked", + "0x711e80A9c1eB906d9Ae9d37E5432E6E7aCeEdA0B": { + "Name": "WithdrawFacet", "Version": "1.0.0" }, "0xF18A285f4e6f720Eb9b4e05df71f88b9552E6ADB": { @@ -113,19 +129,22 @@ "Name": "GenericSwapFacetV3", "Version": "1.0.0" }, - "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4": { + "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61": { "Name": "StargateFacetV2", - "Version": "1.0.0" + "Version": "1.0.1" } }, "Periphery": { "ERC20Proxy": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", "Executor": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", + "GasRebateDistributor": "", + "LiFiDEXAggregator": "", + "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", + "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", "ServiceFeeCollector": "0x894b3e1e30Be0727eb138d2cceb0A99d2Fc4C55D", - "LiFuelFeeCollector": "0xc4f7A34b8d283f66925eF0f5CCdFC2AF3030DeaE", "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" } } diff --git a/deployments/polygon.diamond.staging.json b/deployments/polygon.diamond.staging.json index 3c539d997..282f1dad8 100644 --- a/deployments/polygon.diamond.staging.json +++ b/deployments/polygon.diamond.staging.json @@ -119,6 +119,7 @@ "Executor": "0x23f882bA2fa54A358d8599465EB471f58Cc26751", "FeeCollector": "0x7F8E9bEBd1Dea263A36a6916B99bd84405B9654a", "GasRebateDistributor": "", + "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0x94EA56D8049e93E0308B9c7d1418Baf6A7C68280", "Receiver": "0x36E9B2E8A627474683eF3b1E9Df26D2bF04396f3", "ReceiverStargateV2": "", diff --git a/deployments/polygon.json b/deployments/polygon.json index 4c4d70b71..7fb5590fa 100644 --- a/deployments/polygon.json +++ b/deployments/polygon.json @@ -48,6 +48,6 @@ "SquidFacet": "0x5C2C3F56e33F45389aa4e1DA4D3a807A532a910c", "MayanFacet": "0x4682d79DD4D0e7555415841b5151933AF50594A8", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4", + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A" -} +} \ No newline at end of file diff --git a/deployments/scroll.diamond.json b/deployments/scroll.diamond.json index e9fe13ecb..a8865f701 100644 --- a/deployments/scroll.diamond.json +++ b/deployments/scroll.diamond.json @@ -33,9 +33,9 @@ "Name": "GenericSwapFacet", "Version": "1.0.0" }, - "0x9D4B9784fC46496926ee4784e490F14d106D83a8": { + "0x175E7799DA0CD40E641352EaB90D8e39e02a4Ca9": { "Name": "StandardizedCallFacet", - "Version": "1.0.0" + "Version": "1.1.0" }, "0x9157b6550D1C3209C20aCAd12A2dC57Df34Ca48b": { "Name": "CalldataVerificationFacet", @@ -69,9 +69,9 @@ "Name": "GenericSwapFacetV3", "Version": "1.0.0" }, - "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4": { + "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61": { "Name": "StargateFacetV2", - "Version": "1.0.0" + "Version": "1.0.1" } }, "Periphery": { @@ -79,8 +79,10 @@ "Executor": "0x7078d1DE45C7D3e87f71D5DA663db2a8Ee1dfEbe", "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", "GasRebateDistributor": "", + "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", + "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "", "ServiceFeeCollector": "0x346b1F1896f2772ffee205e34246ac7adc55B43D", "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" diff --git a/deployments/scroll.json b/deployments/scroll.json index 84529ac6f..e67abeb50 100644 --- a/deployments/scroll.json +++ b/deployments/scroll.json @@ -24,6 +24,8 @@ "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", "SquidFacet": "0x5C2C3F56e33F45389aa4e1DA4D3a807A532a910c", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4", - "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A" + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61", + "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", + "AcrossFacet": "0x9535A1AFd986FA9a2D324657116F02C364edebFf", + "AcrossFacetPacked": "0xFd796bf7Ff74d414b99CacF6F216eAC24bF3aC8E" } \ No newline at end of file diff --git a/deployments/sei.diamond.json b/deployments/sei.diamond.json index 9e9cc1fd8..819c252f8 100644 --- a/deployments/sei.diamond.json +++ b/deployments/sei.diamond.json @@ -37,10 +37,6 @@ "Name": "GenericSwapFacet", "Version": "2.0.0" }, - "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F": { - "Name": "GenericSwapFacetV3", - "Version": "1.0.0" - }, "0xeB98530f99e1c4406d24FdE4b590C96Ac7143aEe": { "Name": "StandardizedCallFacet", "Version": "1.1.0" @@ -53,9 +49,13 @@ "Name": "SymbiosisFacet", "Version": "1.0.0" }, - "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4": { - "Name": "StargateFacetV2", + "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F": { + "Name": "GenericSwapFacetV3", "Version": "1.0.0" + }, + "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61": { + "Name": "StargateFacetV2", + "Version": "1.0.1" } }, "Periphery": { @@ -63,8 +63,10 @@ "Executor": "0x6d425eAb1Eb6e002Bf40c44e5d9Ff7fC6a38824a", "FeeCollector": "0x7956280Ec4B4d651C4083Ca737a1fa808b5319D8", "GasRebateDistributor": "", + "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0x9870F0C91D722B3393383722968269496d919bD8", "Receiver": "0xf22c55c50fF14d9AB1fa4D9DCA832085D143E854", + "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "", "ServiceFeeCollector": "0x45d69A8a07F79DE2364F0B80F78af86e99015162", "TokenWrapper": "0xC82fd49be3F3D851b9E10589C50784cEAC7114a5" diff --git a/deployments/sei.json b/deployments/sei.json index 1a17ec7c4..01e14395d 100644 --- a/deployments/sei.json +++ b/deployments/sei.json @@ -21,5 +21,5 @@ "TokenWrapper": "0xC82fd49be3F3D851b9E10589C50784cEAC7114a5", "GenericSwapFacetV3": "0x31a9b1835864706Af10103b31Ea2b79bdb995F5F", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", - "StargateFacetV2": "0x139e0a9c4C90cC40D562859e8D6d3246C1915FD4" + "StargateFacetV2": "0x6e378C84e657C57b2a8d183CFf30ee5CC8989b61" } \ No newline at end of file diff --git a/deployments/taiko.diamond.json b/deployments/taiko.diamond.json new file mode 100644 index 000000000..a52bb8d2f --- /dev/null +++ b/deployments/taiko.diamond.json @@ -0,0 +1,75 @@ +{ + "LiFiDiamond": { + "Facets": { + "0x429Da7043882C2A962bC4EA7b33440C3B9a033D7": { + "Name": "DiamondCutFacet", + "Version": "1.0.0" + }, + "0x01ABD3Dec5268802272af46FE6Ac4c2fCF0Eff10": { + "Name": "DiamondLoupeFacet", + "Version": "1.0.0" + }, + "0x815e97BE9122Fa64259277b1509E316Fc45D4b34": { + "Name": "OwnershipFacet", + "Version": "1.0.0" + }, + "0x8A779ed5c6838e236f934Eb392D5aBdbF22404dD": { + "Name": "WithdrawFacet", + "Version": "1.0.0" + }, + "0xD1DB5abDA5918ca4aFb8982a49378D4A2Dfe5D5c": { + "Name": "DexManagerFacet", + "Version": "1.0.1" + }, + "0xa09f97e14C8351D16558b18891938aC873787652": { + "Name": "AccessManagerFacet", + "Version": "1.0.0" + }, + "0x0C710c59f1a656333B5AfBAC64A8f60B52C30af4": { + "Name": "PeripheryRegistryFacet", + "Version": "1.0.0" + }, + "0x42C1418917AE5505b5B3C79bdc1d1ba30177Ea06": { + "Name": "LIFuelFacet", + "Version": "1.0.1" + }, + "0x5B73eFA1929c80D92C85512153392B799B022D18": { + "Name": "GenericSwapFacet", + "Version": "1.0.0" + }, + "0x147e65652FDaC507d24DE522a02C76c006A24aB9": { + "Name": "GenericSwapFacetV3", + "Version": "1.0.1" + }, + "0x386bbbE35DF5E7bec5fff8aC4E74A6D7c5fDa482": { + "Name": "StandardizedCallFacet", + "Version": "1.1.0" + }, + "0xFf0dDC136bD881F3B8Eea805654Dd0D0d3bd800C": { + "Name": "CalldataVerificationFacet", + "Version": "1.1.1" + }, + "0x113E97921874646413572F2C43562463c378b6f5": { + "Name": "StargateFacetV2", + "Version": "1.0.1" + }, + "0xD59F68bBdECA334A05db2BCe5B6711d22f92fE7a": { + "Name": "SymbiosisFacet", + "Version": "1.0.0" + } + }, + "Periphery": { + "ERC20Proxy": "0x6bC43F95C5234aA749D18403753d60B91f972d3c", + "Executor": "0xeCBa38d0bAc1cA1CD5A30347370e4D539d44FAA1", + "FeeCollector": "0xDd8A081efC90DFFD79940948a1528C51793C4B03", + "GasRebateDistributor": "", + "LiFiDEXAggregator": "0xcaA342e4f781d63EF41E220D7622B97E66BAEcF3", + "LiFuelFeeCollector": "0xff2F39692A90262b8Ed4DFD92799bB450425773F", + "Receiver": "0xe38326Ae727e3fA6669249063Ce7b8ea1754e756", + "ReceiverStargateV2": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6", + "RelayerCelerIM": "", + "ServiceFeeCollector": "", + "TokenWrapper": "0xD989E929517B0e5eD0c8EfE7607Fa167B697cBa8" + } + } +} \ No newline at end of file diff --git a/deployments/taiko.json b/deployments/taiko.json new file mode 100644 index 000000000..762a45b67 --- /dev/null +++ b/deployments/taiko.json @@ -0,0 +1,25 @@ +{ + "DiamondCutFacet": "0x429Da7043882C2A962bC4EA7b33440C3B9a033D7", + "DiamondLoupeFacet": "0x01ABD3Dec5268802272af46FE6Ac4c2fCF0Eff10", + "OwnershipFacet": "0x815e97BE9122Fa64259277b1509E316Fc45D4b34", + "DexManagerFacet": "0xD1DB5abDA5918ca4aFb8982a49378D4A2Dfe5D5c", + "AccessManagerFacet": "0xa09f97e14C8351D16558b18891938aC873787652", + "WithdrawFacet": "0x8A779ed5c6838e236f934Eb392D5aBdbF22404dD", + "PeripheryRegistryFacet": "0x0C710c59f1a656333B5AfBAC64A8f60B52C30af4", + "LIFuelFacet": "0x42C1418917AE5505b5B3C79bdc1d1ba30177Ea06", + "GenericSwapFacet": "0x5B73eFA1929c80D92C85512153392B799B022D18", + "GenericSwapFacetV3": "0x147e65652FDaC507d24DE522a02C76c006A24aB9", + "StandardizedCallFacet": "0x386bbbE35DF5E7bec5fff8aC4E74A6D7c5fDa482", + "CalldataVerificationFacet": "0xFf0dDC136bD881F3B8Eea805654Dd0D0d3bd800C", + "LiFiDiamond": "0x3A9A5dBa8FE1C4Da98187cE4755701BCA182f63b", + "StargateFacetV2": "0x113E97921874646413572F2C43562463c378b6f5", + "SymbiosisFacet": "0xD59F68bBdECA334A05db2BCe5B6711d22f92fE7a", + "ERC20Proxy": "0x6bC43F95C5234aA749D18403753d60B91f972d3c", + "Executor": "0xeCBa38d0bAc1cA1CD5A30347370e4D539d44FAA1", + "FeeCollector": "0xDd8A081efC90DFFD79940948a1528C51793C4B03", + "LiFiDEXAggregator": "0xcaA342e4f781d63EF41E220D7622B97E66BAEcF3", + "LiFuelFeeCollector": "0xff2F39692A90262b8Ed4DFD92799bB450425773F", + "ReceiverStargateV2": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6", + "TokenWrapper": "0xD989E929517B0e5eD0c8EfE7607Fa167B697cBa8", + "Receiver": "0xe38326Ae727e3fA6669249063Ce7b8ea1754e756" +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 47ea7e68b..f02dacdce 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,7 +1,7 @@ [profile.default] test = 'test/solidity' solc_version = '0.8.17' -evm_version='paris' +evm_version = 'paris' optimizer = true optimizer_runs = 1000000 sender = '0x00a329c0648769a73afac7f9381e08fb43dbea73' @@ -33,23 +33,25 @@ fuse = "${ETH_NODE_URI_FUSE}" harmony = "${ETH_NODE_URI_HARMONY}" gnosis = "${ETH_NODE_URI_GNOSIS}" gravity = "${ETH_NODE_URI_GRAVITY}" +immutablezkevm = "${ETH_NODE_URI_IMMUTABLEZKEVM}" linea = "${ETH_NODE_URI_LINEA}" moonbeam = "${ETH_NODE_URI_MOONBEAM}" moonriver = "${ETH_NODE_URI_MOONRIVER}" nova = "${ETH_NODE_URI_NOVA}" +mantle = "${ETH_NODE_URI_MANTLE}" +metis = "${ETH_NODE_URI_METIS}" +mode = "${ETH_NODE_URI_MODE}" okx = "${ETH_NODE_URI_OKX}" opbnb = "${ETH_NODE_URI_OPBNB}" optimism = "${ETH_NODE_URI_OPTIMISM}" polygon = "${ETH_NODE_URI_POLYGON}" polygonzkevm = "${ETH_NODE_URI_POLYGONZKEVM}" +rootstock = "${ETH_NODE_URI_ROOTSTOCK}" +sei = "${ETH_NODE_URI_SEI}" +taiko = "${ETH_NODE_URI_TAIKO}" velas = "${ETH_NODE_URI_VELAS}" -metis = "${ETH_NODE_URI_METIS}" -mode = "${ETH_NODE_URI_MODE}" zksync = "${ETH_NODE_URI_ZKSYNC}" scroll = "${ETH_NODE_URI_SCROLL}" -mantle = "${ETH_NODE_URI_MANTLE}" -rootstock = "${ETH_NODE_URI_ROOTSTOCK}" -sei = "${ETH_NODE_URI_SEI}" # testnets goerli = "${ETH_NODE_URI_GOERLI}" @@ -62,8 +64,10 @@ base = "${ETH_NODE_URI_BASE}" [etherscan] mainnet = { key = "${MAINNET_ETHERSCAN_API_KEY}", chain = "1" } arbitrum = { key = "${ARBITRUM_ETHERSCAN_API_KEY}", url = "https://api.arbiscan.io/api", chain = "42161" } -aurora = { key = "${AURORA_ETHERSCAN_API_KEY}", url = "https://api.aurorascan.dev/api", chain = "1313161554" } +aurora = { key = "${AURORA_ETHERSCAN_API_KEY}", url = "https://explorer.mainnet.aurora.dev/api", chain = "1313161554", verifier = "blockscout" } avalanche = { key = "${AVALANCHE_ETHERSCAN_API_KEY}", url = "https://api.snowtrace.io/api", chain = "43114" } +base = { key = "${BASE_ETHERSCAN_API_KEY}", url = "https://api.basescan.org/api", chain = "8453" } +blast = { key = "${BLAST_ETHERSCAN_API_KEY}", url = "https://api.blastscan.io/api", chain = "81457" } boba = { key = "${BOBA_ETHERSCAN_API_KEY}", url = "https://api.bobascan.com/api", chain = "288" } bsc = { key = "${BSC_ETHERSCAN_API_KEY}", url = "https://api.bscscan.com/api", chain = "56" } celo = { key = "${CELO_ETHERSCAN_API_KEY}", url = "https://api.celoscan.io/api", chain = "42220" } @@ -72,20 +76,20 @@ fantom = { key = "${FANTOM_ETHERSCAN_API_KEY}", url = "https://api.ftmscan.com/a fraxtal = { key = "${FRAXTAL_ETHERSCAN_API_KEY}", url = "https://api.fraxscan.com/api", chain = "252" } fuse = { key = "${FUSE_ETHERSCAN_API_KEY}", url = "https://explorer.fuse.io/api", chain = "122" } gnosis = { key = "${GNOSIS_ETHERSCAN_API_KEY}", url = "https://api.gnosisscan.io/api", chain = "100" } -gravity = { key = "${GRAVITY_ETHERSCAN_API_KEY}", url = "https://explorer.gravity.xyz/api", chain = "1625", verifier = "blockscout"} +gravity = { key = "${GRAVITY_ETHERSCAN_API_KEY}", url = "https://explorer.gravity.xyz/api", chain = "1625", verifier = "blockscout" } +immutablezkevm = { key = "${IMMUTABLEZKEVM_ETHERSCAN_API_KEY}", url = "https://explorer.immutable.com/api", chain = "13371", verifier = "blockscout" } +linea = { key = "${LINEA_ETHERSCAN_API_KEY}", url = "https://api.lineascan.build/api", chain = "59144" } +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" } 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" } -base = { key = "${BASE_ETHERSCAN_API_KEY}", url = "https://api.basescan.org/api", chain = "8453" } -linea = { key = "${LINEA_ETHERSCAN_API_KEY}", url = "https://api.lineascan.build/api", chain = "59144" } -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" } scroll = { key = "${SCROLL_ETHERSCAN_API_KEY}", url = "https://api.scrollscan.com/api", chain = "534352" } -mantle = { key = "${MANTLE_ETHERSCAN_API_KEY}", url = "https://api.routescan.io/v2/network/mainnet/evm/5000/etherscan", chain = "5000" } -blast = { key = "${BLAST_ETHERSCAN_API_KEY}", url = "https://api.blastscan.io/api", chain = "81457" } 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" } #testnets goerli = { key = "${MAINNET_ETHERSCAN_API_KEY}" } diff --git a/lcov-filtered.info b/lcov-filtered.info deleted file mode 100644 index 85a9a75de..000000000 --- a/lcov-filtered.info +++ /dev/null @@ -1,3784 +0,0 @@ -TN: -SF:src/Facets/AccessManagerFacet.sol -FN:24,AccessManagerFacet.setCanExecute -FNDA:3,AccessManagerFacet.setCanExecute -DA:29,3 -BRDA:29,0,0,- -DA:30,0 -DA:32,3 -DA:33,3 -DA:36,3 -BRDA:36,1,0,2 -BRDA:36,1,1,1 -DA:37,2 -DA:39,1 -FN:46,AccessManagerFacet.addressCanExecuteMethod -FNDA:0,AccessManagerFacet.addressCanExecuteMethod -DA:50,0 -FNF:2 -FNH:1 -LF:8 -LH:6 -BRF:3 -BRH:2 -end_of_record -TN: -SF:src/Facets/AcrossFacet.sol -FN:44,AcrossFacet. -FNDA:0,AcrossFacet. -DA:45,0 -DA:46,0 -FN:54,AcrossFacet.startBridgeTokensViaAcross -FNDA:265,AcrossFacet.startBridgeTokensViaAcross -DA:66,260 -DA:70,258 -FN:77,AcrossFacet.swapAndStartBridgeTokensViaAcross -FNDA:6,AcrossFacet.swapAndStartBridgeTokensViaAcross -DA:90,3 -DA:96,2 -FN:104,AcrossFacet._startBridge -FNDA:260,AcrossFacet._startBridge -DA:108,260 -BRDA:108,0,0,- -BRDA:108,0,1,258 -DA:109,2 -DA:120,258 -DA:125,258 -DA:137,260 -FNF:4 -FNH:3 -LF:11 -LH:9 -BRF:2 -BRH:1 -end_of_record -TN: -SF:src/Facets/AcrossFacetPacked.sol -FN:47,AcrossFacetPacked. -FNDA:0,AcrossFacetPacked. -DA:52,0 -DA:53,0 -FN:61,AcrossFacetPacked.setApprovalForBridge -FNDA:19,AcrossFacetPacked.setApprovalForBridge -DA:64,19 -DA:66,38 -FN:76,AcrossFacetPacked.startBridgeTokensViaAcrossNativePacked -FNDA:2,AcrossFacetPacked.startBridgeTokensViaAcrossNativePacked -DA:78,2 -DA:81,2 -DA:92,2 -FN:103,AcrossFacetPacked.startBridgeTokensViaAcrossNativeMin -FNDA:2,AcrossFacetPacked.startBridgeTokensViaAcrossNativeMin -DA:113,2 -DA:124,2 -FN:129,AcrossFacetPacked.startBridgeTokensViaAcrossERC20Packed -FNDA:4,AcrossFacetPacked.startBridgeTokensViaAcrossERC20Packed -DA:130,4 -DA:131,4 -DA:134,4 -DA:141,4 -DA:144,4 -DA:155,4 -FN:168,AcrossFacetPacked.startBridgeTokensViaAcrossERC20Min -FNDA:4,AcrossFacetPacked.startBridgeTokensViaAcrossERC20Min -DA:180,4 -DA:187,4 -DA:198,4 -FN:209,AcrossFacetPacked.encode_startBridgeTokensViaAcrossNativePacked -FNDA:20,AcrossFacetPacked.encode_startBridgeTokensViaAcrossNativePacked -DA:220,20 -BRDA:220,0,0,1 -BRDA:220,0,1,19 -DA:225,19 -DA:226,19 -FN:250,AcrossFacetPacked.encode_startBridgeTokensViaAcrossERC20Packed -FNDA:40,AcrossFacetPacked.encode_startBridgeTokensViaAcrossERC20Packed -DA:263,40 -BRDA:263,1,0,1 -BRDA:263,1,1,39 -DA:268,39 -BRDA:268,2,0,1 -BRDA:268,2,1,38 -DA:273,38 -DA:274,38 -FN:292,AcrossFacetPacked.decode_startBridgeTokensViaAcrossNativePacked -FNDA:1,AcrossFacetPacked.decode_startBridgeTokensViaAcrossNativePacked -DA:302,1 -BRDA:302,3,0,- -BRDA:302,3,1,1 -DA:308,1 -DA:311,1 -DA:312,1 -DA:313,1 -DA:316,1 -DA:317,1 -DA:318,1 -DA:319,1 -DA:321,1 -FN:326,AcrossFacetPacked.decode_startBridgeTokensViaAcrossERC20Packed -FNDA:1,AcrossFacetPacked.decode_startBridgeTokensViaAcrossERC20Packed -DA:336,1 -BRDA:336,4,0,- -BRDA:336,4,1,1 -DA:342,1 -DA:344,1 -DA:345,1 -DA:346,1 -DA:347,1 -DA:348,1 -DA:351,1 -DA:352,1 -DA:353,1 -DA:354,1 -DA:356,1 -FN:365,AcrossFacetPacked.executeCallAndWithdraw -FNDA:2,AcrossFacetPacked.executeCallAndWithdraw -DA:374,1 -DA:377,1 -BRDA:377,5,0,1 -BRDA:377,5,1,- -DA:379,1 -DA:380,1 -DA:383,0 -FNF:11 -FNH:10 -LF:52 -LH:49 -BRF:12 -BRH:9 -end_of_record -TN: -SF:src/Facets/AllBridgeFacet.sol -FN:40,AllBridgeFacet. -FNDA:0,AllBridgeFacet. -DA:41,0 -FN:46,AllBridgeFacet.startBridgeTokensViaAllBridge -FNDA:8,AllBridgeFacet.startBridgeTokensViaAllBridge -DA:58,3 -DA:62,2 -FN:69,AllBridgeFacet.swapAndStartBridgeTokensViaAllBridge -FNDA:6,AllBridgeFacet.swapAndStartBridgeTokensViaAllBridge -DA:82,3 -DA:88,2 -FN:94,AllBridgeFacet._startBridge -FNDA:4,AllBridgeFacet._startBridge -DA:98,4 -DA:104,4 -BRDA:104,0,0,- -BRDA:104,0,1,2 -DA:105,2 -DA:116,2 -DA:128,4 -FNF:4 -FNH:3 -LF:10 -LH:9 -BRF:2 -BRH:1 -end_of_record -TN: -SF:src/Facets/AmarokFacet.sol -FN:43,AmarokFacet. -FNDA:0,AmarokFacet. -DA:44,0 -FN:52,AmarokFacet.startBridgeTokensViaAmarok -FNDA:265,AmarokFacet.startBridgeTokensViaAmarok -DA:64,261 -DA:66,260 -DA:71,259 -FN:78,AmarokFacet.swapAndStartBridgeTokensViaAmarok -FNDA:6,AmarokFacet.swapAndStartBridgeTokensViaAmarok -DA:91,3 -DA:93,3 -DA:101,2 -FN:109,AmarokFacet._startBridge -FNDA:261,AmarokFacet._startBridge -DA:115,261 -DA:120,260 -DA:127,260 -BRDA:127,1,0,- -BRDA:127,1,1,258 -DA:128,2 -DA:139,258 -DA:150,260 -FN:153,AmarokFacet.validateDestinationCallFlag -FNDA:264,AmarokFacet.validateDestinationCallFlag -DA:158,264 -DA:159,1 -BRDA:159,2,0,1 -DA:160,1 -FNF:5 -FNH:4 -LF:16 -LH:15 -BRF:3 -BRH:2 -end_of_record -TN: -SF:src/Facets/AmarokFacetPacked.sol -FN:33,AmarokFacetPacked. -FNDA:0,AmarokFacetPacked. -DA:37,0 -FN:45,AmarokFacetPacked.setApprovalForBridge -FNDA:13,AmarokFacetPacked.setApprovalForBridge -DA:48,13 -DA:50,13 -DA:52,26 -FN:62,AmarokFacetPacked.startBridgeTokensViaAmarokERC20PackedPayFeeWithAsset -FNDA:2,AmarokFacetPacked.startBridgeTokensViaAmarokERC20PackedPayFeeWithAsset -DA:64,2 -DA:65,2 -DA:66,2 -DA:67,2 -DA:70,2 -DA:77,2 -DA:88,2 -FN:91,AmarokFacetPacked.startBridgeTokensViaAmarokERC20PackedPayFeeWithNative -FNDA:2,AmarokFacetPacked.startBridgeTokensViaAmarokERC20PackedPayFeeWithNative -DA:96,2 -DA:97,2 -DA:98,2 -DA:101,2 -DA:108,2 -DA:118,2 -FN:129,AmarokFacetPacked.startBridgeTokensViaAmarokERC20MinPayFeeWithAsset -FNDA:2,AmarokFacetPacked.startBridgeTokensViaAmarokERC20MinPayFeeWithAsset -DA:139,2 -DA:146,2 -DA:157,2 -FN:167,AmarokFacetPacked.startBridgeTokensViaAmarokERC20MinPayFeeWithNative -FNDA:2,AmarokFacetPacked.startBridgeTokensViaAmarokERC20MinPayFeeWithNative -DA:176,2 -DA:183,2 -DA:193,2 -FN:204,AmarokFacetPacked.encode_startBridgeTokensViaAmarokERC20PackedPayFeeWithAsset -FNDA:16,AmarokFacetPacked.encode_startBridgeTokensViaAmarokERC20PackedPayFeeWithAsset -DA:213,16 -BRDA:213,0,0,1 -BRDA:213,0,1,15 -DA:217,15 -BRDA:217,1,0,1 -BRDA:217,1,1,14 -DA:221,14 -BRDA:221,2,0,1 -BRDA:221,2,1,13 -DA:226,13 -DA:227,13 -FN:248,AmarokFacetPacked.encode_startBridgeTokensViaAmarokERC20PackedPayFeeWithNative -FNDA:15,AmarokFacetPacked.encode_startBridgeTokensViaAmarokERC20PackedPayFeeWithNative -DA:256,15 -BRDA:256,3,0,1 -BRDA:256,3,1,14 -DA:260,14 -BRDA:260,4,0,1 -BRDA:260,4,1,13 -DA:265,13 -DA:266,13 -FN:281,AmarokFacetPacked.decode_startBridgeTokensViaAmarokERC20PackedPayFeeWithAsset -FNDA:1,AmarokFacetPacked.decode_startBridgeTokensViaAmarokERC20PackedPayFeeWithAsset -DA:288,1 -BRDA:288,5,0,- -BRDA:288,5,1,1 -DA:293,1 -DA:294,1 -DA:296,1 -DA:298,1 -DA:299,1 -DA:300,1 -DA:301,1 -DA:302,1 -DA:304,1 -DA:305,1 -DA:306,1 -DA:307,1 -DA:308,1 -DA:309,1 -DA:310,1 -DA:312,1 -FN:317,AmarokFacetPacked.decode_startBridgeTokensViaAmarokERC20PackedPayFeeWithNative -FNDA:1,AmarokFacetPacked.decode_startBridgeTokensViaAmarokERC20PackedPayFeeWithNative -DA:324,1 -BRDA:324,6,0,- -BRDA:324,6,1,1 -DA:329,1 -DA:330,1 -DA:332,1 -DA:334,1 -DA:335,1 -DA:336,1 -DA:337,1 -DA:338,1 -DA:340,1 -DA:341,1 -DA:342,1 -DA:343,1 -DA:346,1 -DA:347,1 -DA:349,1 -FN:352,AmarokFacetPacked.getChainIdForDomain -FNDA:0,AmarokFacetPacked.getChainIdForDomain -DA:355,2 -FNF:11 -FNH:9 -LF:66 -LH:65 -BRF:14 -BRH:12 -end_of_record -TN: -SF:src/Facets/ArbitrumBridgeFacet.sol -FN:46,ArbitrumBridgeFacet. -FNDA:0,ArbitrumBridgeFacet. -DA:47,0 -DA:48,0 -FN:56,ArbitrumBridgeFacet.startBridgeTokensViaArbitrumBridge -FNDA:264,ArbitrumBridgeFacet.startBridgeTokensViaArbitrumBridge -DA:68,259 -DA:69,259 -DA:72,259 -DA:77,258 -FN:84,ArbitrumBridgeFacet.swapAndStartBridgeTokensViaArbitrumBridge -FNDA:6,ArbitrumBridgeFacet.swapAndStartBridgeTokensViaArbitrumBridge -DA:97,3 -DA:98,3 -DA:101,3 -DA:109,2 -FN:118,ArbitrumBridgeFacet._startBridge -FNDA:260,ArbitrumBridgeFacet._startBridge -DA:123,260 -BRDA:123,0,0,- -BRDA:123,0,1,258 -DA:124,2 -DA:137,258 -DA:142,258 -DA:152,260 -FNF:4 -FNH:3 -LF:15 -LH:13 -BRF:2 -BRH:1 -end_of_record -TN: -SF:src/Facets/CBridgeFacet.sol -FN:47,CBridgeFacet. -FNDA:0,CBridgeFacet. -DA:48,0 -FN:56,CBridgeFacet.startBridgeTokensViaCBridge -FNDA:267,CBridgeFacet.startBridgeTokensViaCBridge -DA:68,262 -DA:72,260 -FN:79,CBridgeFacet.swapAndStartBridgeTokensViaCBridge -FNDA:14,CBridgeFacet.swapAndStartBridgeTokensViaCBridge -DA:92,10 -DA:98,9 -FN:107,CBridgeFacet.triggerRefund -FNDA:0,CBridgeFacet.triggerRefund -DA:114,0 -BRDA:114,0,0,- -DA:115,0 -DA:119,0 -BRDA:119,1,0,- -DA:120,0 -DA:124,0 -DA:125,0 -DA:126,0 -BRDA:126,2,0,- -DA:127,0 -DA:131,0 -DA:132,0 -DA:133,0 -FN:141,CBridgeFacet._startBridge -FNDA:269,CBridgeFacet._startBridge -DA:145,269 -BRDA:145,3,0,- -BRDA:145,3,1,265 -DA:146,4 -DA:155,265 -DA:161,265 -DA:171,269 -FNF:5 -FNH:3 -LF:21 -LH:9 -BRF:5 -BRH:1 -end_of_record -TN: -SF:src/Facets/CBridgeFacetPacked.sol -FN:40,CBridgeFacetPacked. -FNDA:0,CBridgeFacetPacked. -DA:44,0 -FN:52,CBridgeFacetPacked.setApprovalForBridge -FNDA:28,CBridgeFacetPacked.setApprovalForBridge -DA:55,28 -DA:57,42 -FN:74,CBridgeFacetPacked.triggerRefund -FNDA:1,CBridgeFacetPacked.triggerRefund -DA:82,1 -BRDA:82,0,0,- -DA:83,0 -DA:87,1 -DA:88,1 -DA:89,1 -BRDA:89,1,0,- -DA:90,0 -DA:94,1 -DA:95,1 -DA:96,1 -FN:101,CBridgeFacetPacked.startBridgeTokensViaCBridgeNativePacked -FNDA:6,CBridgeFacetPacked.startBridgeTokensViaCBridgeNativePacked -DA:102,6 -DA:110,6 -FN:119,CBridgeFacetPacked.startBridgeTokensViaCBridgeNativeMin -FNDA:3,CBridgeFacetPacked.startBridgeTokensViaCBridgeNativeMin -DA:126,3 -DA:134,3 -FN:139,CBridgeFacetPacked.startBridgeTokensViaCBridgeERC20Packed -FNDA:8,CBridgeFacetPacked.startBridgeTokensViaCBridgeERC20Packed -DA:140,8 -DA:141,8 -DA:144,8 -DA:152,8 -DA:161,8 -FN:172,CBridgeFacetPacked.startBridgeTokensViaCBridgeERC20Min -FNDA:4,CBridgeFacetPacked.startBridgeTokensViaCBridgeERC20Min -DA:182,4 -DA:190,4 -DA:199,4 -FN:210,CBridgeFacetPacked.encode_startBridgeTokensViaCBridgeNativePacked -FNDA:33,CBridgeFacetPacked.encode_startBridgeTokensViaCBridgeNativePacked -DA:217,33 -BRDA:217,2,0,1 -BRDA:217,2,1,32 -DA:221,32 -BRDA:221,3,0,1 -BRDA:221,3,1,31 -DA:226,31 -DA:227,31 -FN:241,CBridgeFacetPacked.decode_startBridgeTokensViaCBridgeNativePacked -FNDA:1,CBridgeFacetPacked.decode_startBridgeTokensViaCBridgeNativePacked -DA:248,1 -BRDA:248,4,0,- -BRDA:248,4,1,1 -DA:253,1 -DA:254,1 -DA:256,1 -DA:257,1 -DA:258,1 -DA:259,1 -DA:260,1 -DA:262,1 -FN:273,CBridgeFacetPacked.encode_startBridgeTokensViaCBridgeERC20Packed -FNDA:49,CBridgeFacetPacked.encode_startBridgeTokensViaCBridgeERC20Packed -DA:282,49 -BRDA:282,5,0,1 -BRDA:282,5,1,48 -DA:286,48 -BRDA:286,6,0,1 -BRDA:286,6,1,47 -DA:290,47 -BRDA:290,7,0,1 -BRDA:290,7,1,46 -DA:295,46 -DA:296,46 -FN:310,CBridgeFacetPacked.decode_startBridgeTokensViaCBridgeERC20Packed -FNDA:1,CBridgeFacetPacked.decode_startBridgeTokensViaCBridgeERC20Packed -DA:317,1 -BRDA:317,8,0,- -BRDA:317,8,1,1 -DA:319,1 -DA:320,1 -DA:322,1 -DA:323,1 -DA:324,1 -DA:325,1 -DA:326,1 -DA:327,1 -DA:328,1 -DA:330,1 -FNF:11 -FNH:10 -LF:53 -LH:50 -BRF:16 -BRH:12 -end_of_record -TN: -SF:src/Facets/CalldataVerificationFacet.sol -FN:22,CalldataVerificationFacet.extractBridgeData -FNDA:3,CalldataVerificationFacet.extractBridgeData -DA:25,3 -FN:31,CalldataVerificationFacet.extractSwapData -FNDA:4,CalldataVerificationFacet.extractSwapData -DA:34,4 -FN:41,CalldataVerificationFacet.extractData -FNDA:6,CalldataVerificationFacet.extractData -DA:51,6 -DA:52,2 -BRDA:52,0,0,2 -DA:53,2 -FN:66,CalldataVerificationFacet.extractMainParameters -FNDA:6,CalldataVerificationFacet.extractMainParameters -DA:81,10 -DA:83,10 -BRDA:83,1,0,- -BRDA:83,1,1,2 -DA:84,2 -DA:85,2 -DA:86,2 -DA:88,8 -DA:89,8 -DA:92,10 -FN:106,CalldataVerificationFacet.extractNonEVMAddress -FNDA:4,CalldataVerificationFacet.extractNonEVMAddress -DA:109,4 -DA:110,4 -DA:113,4 -DA:114,2 -BRDA:114,2,0,2 -DA:116,2 -DA:120,4 -BRDA:120,3,0,2 -BRDA:120,3,1,2 -DA:122,2 -DA:123,2 -DA:127,2 -DA:128,2 -FN:140,CalldataVerificationFacet.extractGenericSwapParameters -FNDA:2,CalldataVerificationFacet.extractGenericSwapParameters -DA:153,2 -DA:154,2 -DA:157,2 -DA:158,1 -BRDA:158,4,0,1 -DA:160,1 -DA:162,2 -DA:167,2 -DA:168,2 -DA:169,2 -DA:170,2 -FN:192,CalldataVerificationFacet.validateCalldata -FNDA:4,CalldataVerificationFacet.validateCalldata -DA:202,4 -DA:203,4 -DA:212,4 -DA:214,4 -DA:230,2 -DA:232,2 -FN:240,CalldataVerificationFacet.validateDestinationCalldata -FNDA:18,CalldataVerificationFacet.validateDestinationCalldata -DA:245,18 -DA:249,18 -DA:250,9 -BRDA:250,5,0,9 -DA:251,9 -DA:254,18 -DA:257,18 -BRDA:257,6,0,4 -DA:258,4 -DA:263,4 -DA:264,4 -DA:265,2 -DA:268,14 -DA:269,2 -BRDA:269,7,0,2 -DA:270,2 -DA:274,2 -DA:275,2 -DA:276,2 -DA:280,12 -BRDA:280,8,0,4 -DA:281,4 -DA:285,4 -DA:286,4 -DA:287,2 -DA:290,8 -DA:292,2 -BRDA:292,9,0,2 -DA:293,2 -DA:301,2 -DA:302,2 -DA:303,2 -DA:307,6 -DA:308,5 -BRDA:308,10,0,5 -DA:309,5 -DA:313,5 -DA:314,5 -DA:315,3 -DA:318,1 -DA:320,1 -BRDA:320,11,0,1 -DA:321,1 -DA:325,1 -DA:326,1 -DA:327,1 -DA:331,0 -FN:339,CalldataVerificationFacet._extractBridgeData -FNDA:23,CalldataVerificationFacet._extractBridgeData -DA:343,23 -DA:344,11 -BRDA:344,12,0,11 -DA:346,11 -DA:347,11 -DA:351,11 -DA:354,12 -FN:360,CalldataVerificationFacet._extractSwapData -FNDA:8,CalldataVerificationFacet._extractSwapData -DA:364,8 -DA:365,4 -BRDA:365,13,0,4 -DA:367,4 -DA:368,4 -DA:372,4 -DA:375,4 -FNF:10 -FNH:10 -LF:91 -LH:90 -BRF:16 -BRH:15 -end_of_record -TN: -SF:src/Facets/CelerCircleBridgeFacet.sol -FN:34,CelerCircleBridgeFacet. -FNDA:0,CelerCircleBridgeFacet. -DA:35,0 -DA:36,0 -FN:43,CelerCircleBridgeFacet.startBridgeTokensViaCelerCircleBridge -FNDA:264,CelerCircleBridgeFacet.startBridgeTokensViaCelerCircleBridge -DA:53,259 -DA:54,258 -FN:60,CelerCircleBridgeFacet.swapAndStartBridgeTokensViaCelerCircleBridge -FNDA:5,CelerCircleBridgeFacet.swapAndStartBridgeTokensViaCelerCircleBridge -DA:73,2 -DA:79,1 -FN:86,CelerCircleBridgeFacet._startBridge -FNDA:259,CelerCircleBridgeFacet._startBridge -DA:87,259 -BRDA:87,0,0,1 -BRDA:87,0,1,258 -DA:93,258 -DA:100,258 -DA:107,258 -FNF:4 -FNH:3 -LF:10 -LH:8 -BRF:2 -BRH:2 -end_of_record -TN: -SF:src/Facets/CelerIMFacetImmutable.sol -FN:19,CelerIMFacetImmutable. -FNDA:0,CelerIMFacetImmutable. -FNF:1 -FNH:0 -LF:0 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/CelerIMFacetMutable.sol -FN:19,CelerIMFacetMutable. -FNDA:0,CelerIMFacetMutable. -FNF:1 -FNH:0 -LF:0 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/CircleBridgeFacet.sol -FN:34,CircleBridgeFacet. -FNDA:0,CircleBridgeFacet. -DA:35,0 -DA:36,0 -FN:44,CircleBridgeFacet.startBridgeTokensViaCircleBridge -FNDA:263,CircleBridgeFacet.startBridgeTokensViaCircleBridge -DA:55,258 -DA:56,257 -FN:63,CircleBridgeFacet.swapAndStartBridgeTokensViaCircleBridge -FNDA:5,CircleBridgeFacet.swapAndStartBridgeTokensViaCircleBridge -DA:77,2 -DA:83,1 -FN:91,CircleBridgeFacet._startBridge -FNDA:258,CircleBridgeFacet._startBridge -DA:96,258 -DA:103,258 -DA:110,258 -FNF:4 -FNH:3 -LF:9 -LH:7 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/DeBridgeDlnFacet.sol -FN:49,DeBridgeDlnFacet. -FNDA:0,DeBridgeDlnFacet. -DA:50,0 -FN:58,DeBridgeDlnFacet.startBridgeTokensViaDeBridgeDln -FNDA:264,DeBridgeDlnFacet.startBridgeTokensViaDeBridgeDln -DA:70,259 -DA:74,258 -FN:85,DeBridgeDlnFacet.swapAndStartBridgeTokensViaDeBridgeDln -FNDA:7,DeBridgeDlnFacet.swapAndStartBridgeTokensViaDeBridgeDln -DA:98,4 -DA:99,4 -DA:100,4 -DA:107,3 -FN:115,DeBridgeDlnFacet._startBridge -FNDA:261,DeBridgeDlnFacet._startBridge -DA:120,261 -DA:135,261 -DA:136,261 -BRDA:136,0,0,- -BRDA:136,0,1,2 -DA:138,259 -DA:144,259 -DA:151,2 -DA:152,2 -DA:160,261 -DA:162,261 -BRDA:162,1,0,- -DA:163,0 -DA:170,261 -FNF:4 -FNH:3 -LF:18 -LH:16 -BRF:3 -BRH:1 -end_of_record -TN: -SF:src/Facets/DeBridgeFacet.sol -FN:51,DeBridgeFacet. -FNDA:0,DeBridgeFacet. -DA:52,0 -FN:60,DeBridgeFacet.startBridgeTokensViaDeBridge -FNDA:265,DeBridgeFacet.startBridgeTokensViaDeBridge -DA:71,261 -DA:73,260 -DA:77,258 -FN:84,DeBridgeFacet.swapAndStartBridgeTokensViaDeBridge -FNDA:6,DeBridgeFacet.swapAndStartBridgeTokensViaDeBridge -DA:96,3 -DA:98,3 -DA:106,2 -FN:114,DeBridgeFacet._startBridge -FNDA:260,DeBridgeFacet._startBridge -DA:118,260 -DA:120,260 -DA:124,260 -BRDA:124,0,0,- -DA:125,0 -DA:128,260 -DA:129,260 -DA:131,260 -BRDA:131,1,0,2 -BRDA:131,1,1,258 -DA:132,2 -DA:134,258 -DA:142,260 -DA:153,260 -FN:156,DeBridgeFacet.validateDestinationCallFlag -FNDA:264,DeBridgeFacet.validateDestinationCallFlag -DA:161,264 -DA:163,1 -BRDA:163,2,0,1 -DA:164,1 -FNF:5 -FNH:4 -LF:21 -LH:19 -BRF:4 -BRH:3 -end_of_record -TN: -SF:src/Facets/DexManagerFacet.sol -FN:27,DexManagerFacet.addDex -FNDA:4,DexManagerFacet.addDex -DA:28,4 -BRDA:28,0,0,- -DA:29,0 -DA:32,4 -DA:34,2 -FN:39,DexManagerFacet.batchAddDex -FNDA:4,DexManagerFacet.batchAddDex -DA:40,4 -BRDA:40,1,0,- -DA:41,0 -DA:43,4 -DA:45,4 -DA:46,12 -DA:47,12 -BRDA:47,2,0,- -DA:48,0 -DA:50,12 -DA:51,12 -DA:52,10 -DA:54,10 -FN:61,DexManagerFacet.removeDex -FNDA:1,DexManagerFacet.removeDex -DA:62,1 -BRDA:62,4,0,- -DA:63,0 -DA:65,1 -DA:66,1 -FN:71,DexManagerFacet.batchRemoveDex -FNDA:1,DexManagerFacet.batchRemoveDex -DA:72,1 -BRDA:72,5,0,- -DA:73,0 -DA:75,1 -DA:76,1 -DA:77,2 -DA:78,2 -DA:80,2 -FN:88,DexManagerFacet.setFunctionApprovalBySignature -FNDA:1,DexManagerFacet.setFunctionApprovalBySignature -DA:92,1 -BRDA:92,6,0,- -DA:93,0 -DA:96,1 -BRDA:96,7,0,1 -BRDA:96,7,1,- -DA:97,1 -DA:99,0 -DA:102,1 -FN:108,DexManagerFacet.batchSetFunctionApprovalBySignature -FNDA:1,DexManagerFacet.batchSetFunctionApprovalBySignature -DA:112,1 -BRDA:112,8,0,- -DA:113,0 -DA:115,1 -DA:116,1 -DA:117,5 -DA:118,5 -BRDA:118,9,0,5 -BRDA:118,9,1,- -DA:119,5 -DA:121,0 -DA:123,5 -DA:125,5 -FN:133,DexManagerFacet.isFunctionApproved -FNDA:6,DexManagerFacet.isFunctionApproved -DA:136,6 -FN:141,DexManagerFacet.approvedDexs -FNDA:4,DexManagerFacet.approvedDexs -DA:146,4 -FNF:8 -FNH:8 -LF:44 -LH:35 -BRF:11 -BRH:2 -end_of_record -TN: -SF:src/Facets/DiamondCutFacet.sol -FN:18,DiamondCutFacet.diamondCut -FNDA:1597,DiamondCutFacet.diamondCut -DA:23,1597 -DA:24,1596 -FNF:1 -FNH:1 -LF:2 -LH:2 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/DiamondLoupeFacet.sol -FN:24,DiamondLoupeFacet.facets -FNDA:0,DiamondLoupeFacet.facets -DA:25,0 -DA:26,0 -DA:27,0 -DA:28,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:35,0 -FN:43,DiamondLoupeFacet.facetFunctionSelectors -FNDA:0,DiamondLoupeFacet.facetFunctionSelectors -DA:51,0 -DA:52,0 -FN:59,DiamondLoupeFacet.facetAddresses -FNDA:0,DiamondLoupeFacet.facetAddresses -DA:65,0 -DA:66,0 -FN:73,DiamondLoupeFacet.facetAddress -FNDA:0,DiamondLoupeFacet.facetAddress -DA:76,0 -DA:77,0 -FN:83,DiamondLoupeFacet.supportsInterface -FNDA:0,DiamondLoupeFacet.supportsInterface -DA:86,0 -DA:87,0 -FNF:5 -FNH:0 -LF:16 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/GenericSwapFacet.sol -FN:27,GenericSwapFacet.swapTokensGeneric -FNDA:19,GenericSwapFacet.swapTokensGeneric -DA:35,19 -BRDA:35,0,0,- -DA:36,0 -DA:39,19 -DA:45,19 -DA:47,19 -DA:49,19 -FNF:1 -FNH:1 -LF:6 -LH:5 -BRF:1 -BRH:0 -end_of_record -TN: -SF:src/Facets/GenericSwapFacetV3.sol -FN:25,GenericSwapFacetV3. -FNDA:0,GenericSwapFacetV3. -DA:26,0 -FN:40,GenericSwapFacetV3.swapTokensSingleV3ERC20ToERC20 -FNDA:7,GenericSwapFacetV3.swapTokensSingleV3ERC20ToERC20 -DA:48,7 -DA:50,6 -DA:51,6 -DA:54,6 -DA:59,6 -DA:63,5 -DA:66,5 -DA:67,5 -DA:77,5 -FN:96,GenericSwapFacetV3.swapTokensSingleV3ERC20ToNative -FNDA:6,GenericSwapFacetV3.swapTokensSingleV3ERC20ToNative -DA:104,6 -DA:107,4 -DA:110,4 -DA:115,3 -DA:116,3 -DA:119,2 -DA:120,2 -DA:121,2 -DA:131,2 -FN:150,GenericSwapFacetV3.swapTokensSingleV3NativeToERC20 -FNDA:7,GenericSwapFacetV3.swapTokensSingleV3NativeToERC20 -DA:158,7 -DA:161,7 -DA:167,6 -DA:170,6 -BRDA:170,4,0,1 -DA:171,1 -DA:174,5 -DA:177,4 -DA:178,4 -DA:183,4 -DA:187,3 -DA:190,3 -DA:191,3 -DA:201,3 -FN:222,GenericSwapFacetV3.swapTokensMultipleV3ERC20ToNative -FNDA:5,GenericSwapFacetV3.swapTokensMultipleV3ERC20ToNative -DA:230,5 -DA:231,5 -DA:232,5 -FN:249,GenericSwapFacetV3.swapTokensMultipleV3ERC20ToERC20 -FNDA:10,GenericSwapFacetV3.swapTokensMultipleV3ERC20ToERC20 -DA:257,10 -DA:258,10 -DA:259,6 -FN:276,GenericSwapFacetV3.swapTokensMultipleV3NativeToERC20 -FNDA:5,GenericSwapFacetV3.swapTokensMultipleV3NativeToERC20 -DA:284,5 -DA:285,4 -FN:296,GenericSwapFacetV3._depositMultipleERC20Tokens -FNDA:15,GenericSwapFacetV3._depositMultipleERC20Tokens -DA:300,15 -DA:301,15 -DA:304,15 -DA:305,30 -DA:306,15 -BRDA:306,6,0,15 -DA:309,15 -DA:316,30 -FN:321,GenericSwapFacetV3._depositAndSwapERC20Single -FNDA:13,GenericSwapFacetV3._depositAndSwapERC20Single -DA:325,13 -DA:326,13 -DA:328,13 -DA:331,13 -DA:332,13 -DA:333,13 -DA:335,13 -DA:340,12 -DA:344,11 -DA:350,11 -BRDA:350,9,0,8 -DA:352,8 -DA:354,8 -DA:359,11 -DA:360,11 -BRDA:360,11,0,1 -DA:361,1 -DA:364,10 -FN:371,GenericSwapFacetV3._executeSwaps -FNDA:20,GenericSwapFacetV3._executeSwaps -DA:377,20 -DA:378,20 -DA:379,20 -DA:380,20 -DA:381,20 -DA:382,20 -DA:383,20 -DA:384,20 -DA:387,20 -DA:388,37 -DA:389,37 -DA:390,37 -DA:391,37 -DA:395,37 -DA:396,35 -DA:399,2 -BRDA:399,12,0,2 -DA:400,2 -DA:405,35 -DA:406,1 -DA:407,1 -BRDA:407,13,0,1 -DA:408,1 -DA:411,34 -BRDA:411,14,0,4 -BRDA:411,14,1,26 -DA:414,7 -DA:417,7 -BRDA:417,15,0,1 -DA:418,1 -DA:423,6 -DA:428,27 -DA:432,27 -BRDA:432,17,0,25 -DA:433,25 -DA:434,25 -DA:441,27 -DA:444,27 -BRDA:444,18,0,1 -DA:445,1 -DA:450,26 -DA:458,32 -DA:471,32 -FN:476,GenericSwapFacetV3._transferERC20TokensAndEmitEvent -FNDA:10,GenericSwapFacetV3._transferERC20TokensAndEmitEvent -DA:485,10 -DA:487,10 -DA:490,10 -DA:494,9 -DA:497,9 -FN:509,GenericSwapFacetV3._transferNativeTokensAndEmitEvent -FNDA:5,GenericSwapFacetV3._transferNativeTokensAndEmitEvent -DA:517,5 -DA:520,5 -DA:525,4 -DA:526,4 -BRDA:526,22,0,1 -DA:527,1 -DA:531,3 -FN:544,GenericSwapFacetV3._returnPositiveSlippageERC20 -FNDA:29,GenericSwapFacetV3._returnPositiveSlippageERC20 -DA:549,29 -BRDA:549,23,0,29 -DA:550,29 -DA:554,29 -BRDA:554,24,0,5 -DA:555,5 -FN:561,GenericSwapFacetV3._returnPositiveSlippageNative -FNDA:9,GenericSwapFacetV3._returnPositiveSlippageNative -DA:563,9 -DA:565,9 -BRDA:565,25,0,2 -DA:567,2 -DA:568,2 -FNF:14 -FNH:13 -LF:118 -LH:117 -BRF:15 -BRH:15 -end_of_record -TN: -SF:src/Facets/GnosisBridgeFacet.sol -FN:32,GnosisBridgeFacet. -FNDA:0,GnosisBridgeFacet. -DA:33,0 -FN:40,GnosisBridgeFacet.startBridgeTokensViaXDaiBridge -FNDA:264,GnosisBridgeFacet.startBridgeTokensViaXDaiBridge -DA:51,259 -DA:52,258 -FN:58,GnosisBridgeFacet.swapAndStartBridgeTokensViaXDaiBridge -FNDA:5,GnosisBridgeFacet.swapAndStartBridgeTokensViaXDaiBridge -DA:72,2 -DA:79,1 -FN:86,GnosisBridgeFacet._startBridge -FNDA:259,GnosisBridgeFacet._startBridge -DA:87,259 -DA:92,259 -DA:93,258 -FNF:4 -FNH:3 -LF:8 -LH:7 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/GnosisBridgeL2Facet.sol -FN:37,GnosisBridgeL2Facet. -FNDA:0,GnosisBridgeL2Facet. -DA:38,0 -FN:45,GnosisBridgeL2Facet.startBridgeTokensViaXDaiBridge -FNDA:6,GnosisBridgeL2Facet.startBridgeTokensViaXDaiBridge -DA:58,1 -FN:64,GnosisBridgeL2Facet.swapAndStartBridgeTokensViaXDaiBridge -FNDA:5,GnosisBridgeL2Facet.swapAndStartBridgeTokensViaXDaiBridge -DA:78,2 -DA:85,1 -FN:92,GnosisBridgeL2Facet._startBridge -FNDA:2,GnosisBridgeL2Facet._startBridge -DA:93,2 -DA:96,2 -FNF:4 -FNH:3 -LF:6 -LH:5 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/HopFacet.sol -FN:54,HopFacet.initHop -FNDA:27,HopFacet.initHop -DA:55,27 -DA:57,27 -DA:59,27 -DA:60,75 -BRDA:60,0,0,- -DA:61,0 -DA:63,75 -DA:66,27 -FN:74,HopFacet.registerBridge -FNDA:3,HopFacet.registerBridge -DA:75,3 -DA:77,2 -DA:79,2 -BRDA:79,1,0,1 -DA:80,1 -DA:83,1 -DA:85,1 -FN:91,HopFacet.startBridgeTokensViaHop -FNDA:269,HopFacet.startBridgeTokensViaHop -DA:103,263 -DA:107,261 -FN:114,HopFacet.swapAndStartBridgeTokensViaHop -FNDA:8,HopFacet.swapAndStartBridgeTokensViaHop -DA:127,4 -DA:134,3 -FN:142,HopFacet._startBridge -FNDA:264,HopFacet._startBridge -DA:146,264 -DA:147,264 -DA:148,264 -DA:151,264 -DA:157,264 -DA:161,264 -BRDA:161,2,0,- -BRDA:161,2,1,1 -DA:163,263 -DA:175,1 -DA:186,264 -FN:190,HopFacet.getStorage -FNDA:293,HopFacet.getStorage -DA:191,293 -DA:194,293 -FNF:6 -FNH:6 -LF:28 -LH:27 -BRF:4 -BRH:2 -end_of_record -TN: -SF:src/Facets/HopFacetOptimized.sol -FN:34,HopFacetOptimized.setApprovalForBridges -FNDA:72,HopFacetOptimized.setApprovalForBridges -DA:38,72 -DA:39,72 -DA:41,232 -FN:52,HopFacetOptimized.startBridgeTokensViaHopL1ERC20 -FNDA:260,HopFacetOptimized.startBridgeTokensViaHopL1ERC20 -DA:57,260 -DA:64,259 -DA:73,257 -FN:79,HopFacetOptimized.startBridgeTokensViaHopL1Native -FNDA:1,HopFacetOptimized.startBridgeTokensViaHopL1Native -DA:84,1 -DA:95,1 -FN:102,HopFacetOptimized.swapAndStartBridgeTokensViaHopL1ERC20 -FNDA:4,HopFacetOptimized.swapAndStartBridgeTokensViaHopL1ERC20 -DA:108,4 -DA:117,3 -DA:126,2 -FN:133,HopFacetOptimized.swapAndStartBridgeTokensViaHopL1Native -FNDA:1,HopFacetOptimized.swapAndStartBridgeTokensViaHopL1Native -DA:139,1 -DA:148,1 -DA:160,1 -FN:166,HopFacetOptimized.startBridgeTokensViaHopL2ERC20 -FNDA:260,HopFacetOptimized.startBridgeTokensViaHopL2ERC20 -DA:171,260 -DA:178,259 -DA:188,257 -FN:194,HopFacetOptimized.startBridgeTokensViaHopL2Native -FNDA:1,HopFacetOptimized.startBridgeTokensViaHopL2Native -DA:199,1 -DA:209,1 -FN:216,HopFacetOptimized.swapAndStartBridgeTokensViaHopL2ERC20 -FNDA:5,HopFacetOptimized.swapAndStartBridgeTokensViaHopL2ERC20 -DA:222,5 -DA:229,4 -DA:239,2 -FN:246,HopFacetOptimized.swapAndStartBridgeTokensViaHopL2Native -FNDA:1,HopFacetOptimized.swapAndStartBridgeTokensViaHopL2Native -DA:252,1 -DA:259,1 -DA:269,1 -FNF:9 -FNH:9 -LF:25 -LH:25 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/HopFacetPacked.sol -FN:39,HopFacetPacked. -FNDA:0,HopFacetPacked. -DA:43,0 -DA:45,0 -BRDA:45,0,0,- -DA:46,0 -DA:49,0 -DA:52,0 -DA:55,0 -DA:58,0 -FN:69,HopFacetPacked.setApprovalForHopBridges -FNDA:32,HopFacetPacked.setApprovalForHopBridges -DA:73,32 -DA:75,32 -DA:77,160 -FN:87,HopFacetPacked.startBridgeTokensViaHopL2NativePacked -FNDA:3,HopFacetPacked.startBridgeTokensViaHopL2NativePacked -DA:96,3 -DA:97,3 -DA:98,3 -DA:101,3 -DA:104,3 -DA:114,3 -DA:123,3 -FN:137,HopFacetPacked.startBridgeTokensViaHopL2NativeMin -FNDA:2,HopFacetPacked.startBridgeTokensViaHopL2NativeMin -DA:148,2 -DA:159,2 -FN:168,HopFacetPacked.encode_startBridgeTokensViaHopL2NativePacked -FNDA:16,HopFacetPacked.encode_startBridgeTokensViaHopL2NativePacked -DA:175,16 -BRDA:175,1,0,- -BRDA:175,1,1,16 -DA:179,16 -BRDA:179,2,0,- -BRDA:179,2,1,16 -DA:183,16 -BRDA:183,3,0,- -BRDA:183,3,1,16 -DA:188,16 -DA:189,16 -FN:201,HopFacetPacked.decode_startBridgeTokensViaHopL2NativePacked -FNDA:1,HopFacetPacked.decode_startBridgeTokensViaHopL2NativePacked -DA:208,1 -BRDA:208,4,0,- -BRDA:208,4,1,1 -DA:213,1 -DA:214,1 -DA:216,1 -DA:217,1 -DA:218,1 -DA:219,1 -DA:220,1 -DA:222,1 -FN:227,HopFacetPacked.startBridgeTokensViaHopL2ERC20Packed -FNDA:4,HopFacetPacked.startBridgeTokensViaHopL2ERC20Packed -DA:241,4 -DA:242,4 -DA:243,4 -DA:244,4 -DA:246,4 -DA:251,4 -DA:258,4 -DA:268,4 -DA:277,4 -FN:291,HopFacetPacked.startBridgeTokensViaHopL2ERC20Min -FNDA:4,HopFacetPacked.startBridgeTokensViaHopL2ERC20Min -DA:304,4 -DA:311,4 -DA:322,4 -FN:336,HopFacetPacked.encode_startBridgeTokensViaHopL2ERC20Packed -FNDA:32,HopFacetPacked.encode_startBridgeTokensViaHopL2ERC20Packed -DA:348,32 -BRDA:348,5,0,- -BRDA:348,5,1,32 -DA:352,32 -BRDA:352,6,0,- -BRDA:352,6,1,32 -DA:356,32 -BRDA:356,7,0,- -BRDA:356,7,1,32 -DA:360,32 -BRDA:360,8,0,- -BRDA:360,8,1,32 -DA:364,32 -BRDA:364,9,0,- -BRDA:364,9,1,32 -DA:368,32 -BRDA:368,10,0,- -BRDA:368,10,1,32 -DA:373,32 -DA:374,32 -FN:391,HopFacetPacked.decode_startBridgeTokensViaHopL2ERC20Packed -FNDA:2,HopFacetPacked.decode_startBridgeTokensViaHopL2ERC20Packed -DA:398,2 -BRDA:398,11,0,- -BRDA:398,11,1,2 -DA:403,2 -DA:404,2 -DA:406,2 -DA:407,2 -DA:408,2 -DA:409,2 -DA:410,2 -DA:411,2 -DA:412,2 -DA:413,2 -DA:416,2 -DA:417,2 -DA:419,2 -FN:424,HopFacetPacked.startBridgeTokensViaHopL1NativePacked -FNDA:3,HopFacetPacked.startBridgeTokensViaHopL1NativePacked -DA:436,3 -DA:448,3 -FN:459,HopFacetPacked.startBridgeTokensViaHopL1NativeMin -FNDA:2,HopFacetPacked.startBridgeTokensViaHopL1NativeMin -DA:469,2 -DA:479,2 -FN:490,HopFacetPacked.encode_startBridgeTokensViaHopL1NativePacked -FNDA:16,HopFacetPacked.encode_startBridgeTokensViaHopL1NativePacked -DA:499,16 -BRDA:499,12,0,- -BRDA:499,12,1,16 -DA:503,16 -BRDA:503,13,0,- -BRDA:503,13,1,16 -DA:507,16 -BRDA:507,14,0,- -BRDA:507,14,1,16 -DA:512,16 -DA:513,16 -FN:527,HopFacetPacked.decode_startBridgeTokensViaHopL1NativePacked -FNDA:1,HopFacetPacked.decode_startBridgeTokensViaHopL1NativePacked -DA:534,1 -BRDA:534,15,0,- -BRDA:534,15,1,1 -DA:539,1 -DA:540,1 -DA:542,1 -DA:543,1 -DA:544,1 -DA:545,1 -DA:550,1 -DA:552,1 -FN:557,HopFacetPacked.startBridgeTokensViaHopL1ERC20Packed -FNDA:4,HopFacetPacked.startBridgeTokensViaHopL1ERC20Packed -DA:570,4 -DA:573,4 -DA:580,4 -DA:590,4 -FN:603,HopFacetPacked.startBridgeTokensViaHopL1ERC20Min -FNDA:4,HopFacetPacked.startBridgeTokensViaHopL1ERC20Min -DA:615,4 -DA:622,4 -DA:632,4 -FN:645,HopFacetPacked.encode_startBridgeTokensViaHopL1ERC20Packed -FNDA:32,HopFacetPacked.encode_startBridgeTokensViaHopL1ERC20Packed -DA:656,32 -BRDA:656,16,0,- -BRDA:656,16,1,32 -DA:660,32 -BRDA:660,17,0,- -BRDA:660,17,1,32 -DA:664,32 -BRDA:664,18,0,- -BRDA:664,18,1,32 -DA:668,32 -BRDA:668,19,0,- -BRDA:668,19,1,32 -DA:673,32 -DA:674,32 -FN:690,HopFacetPacked.decode_startBridgeTokensViaHopL1ERC20Packed -FNDA:2,HopFacetPacked.decode_startBridgeTokensViaHopL1ERC20Packed -DA:697,2 -BRDA:697,20,0,- -BRDA:697,20,1,2 -DA:702,2 -DA:703,2 -DA:705,2 -DA:706,2 -DA:707,2 -DA:708,2 -DA:709,2 -DA:710,2 -DA:715,2 -DA:717,2 -FNF:18 -FNH:17 -LF:109 -LH:102 -BRF:41 -BRH:20 -end_of_record -TN: -SF:src/Facets/HyphenFacet.sol -FN:25,HyphenFacet. -FNDA:0,HyphenFacet. -DA:26,0 -FN:33,HyphenFacet.startBridgeTokensViaHyphen -FNDA:264,HyphenFacet.startBridgeTokensViaHyphen -DA:44,259 -DA:48,258 -FN:54,HyphenFacet.swapAndStartBridgeTokensViaHyphen -FNDA:6,HyphenFacet.swapAndStartBridgeTokensViaHyphen -DA:66,3 -DA:72,2 -FN:79,HyphenFacet._startBridge -FNDA:260,HyphenFacet._startBridge -DA:80,260 -BRDA:80,0,0,- -BRDA:80,0,1,2 -DA:82,258 -DA:88,258 -DA:96,2 -DA:103,260 -FNF:4 -FNH:3 -LF:10 -LH:9 -BRF:2 -BRH:1 -end_of_record -TN: -SF:src/Facets/LIFuelFacet.sol -FN:32,LIFuelFacet.startBridgeTokensViaLIFuel -FNDA:263,LIFuelFacet.startBridgeTokensViaLIFuel -DA:43,259 -DA:47,258 -FN:53,LIFuelFacet.swapAndStartBridgeTokensViaLIFuel -FNDA:6,LIFuelFacet.swapAndStartBridgeTokensViaLIFuel -DA:65,3 -DA:72,2 -FN:79,LIFuelFacet._startBridge -FNDA:260,LIFuelFacet._startBridge -DA:80,260 -DA:84,260 -BRDA:84,0,0,- -BRDA:84,0,1,258 -DA:85,2 -DA:93,258 -DA:99,258 -DA:107,260 -FN:111,LIFuelFacet.getStorage -FNDA:260,LIFuelFacet.getStorage -DA:112,260 -DA:115,260 -FNF:4 -FNH:4 -LF:12 -LH:12 -BRF:2 -BRH:1 -end_of_record -TN: -SF:src/Facets/MakerTeleportFacet.sol -FN:43,MakerTeleportFacet. -FNDA:0,MakerTeleportFacet. -DA:49,0 -DA:50,0 -DA:51,0 -DA:52,0 -FN:59,MakerTeleportFacet.startBridgeTokensViaMakerTeleport -FNDA:263,MakerTeleportFacet.startBridgeTokensViaMakerTeleport -DA:70,258 -DA:71,257 -FN:77,MakerTeleportFacet.swapAndStartBridgeTokensViaMakerTeleport -FNDA:5,MakerTeleportFacet.swapAndStartBridgeTokensViaMakerTeleport -DA:91,2 -DA:98,1 -FN:105,MakerTeleportFacet._startBridge -FNDA:258,MakerTeleportFacet._startBridge -DA:106,258 -DA:112,258 -DA:118,258 -FNF:4 -FNH:3 -LF:11 -LH:7 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/MayanFacet.sol -FN:53,MayanFacet. -FNDA:0,MayanFacet. -DA:54,0 -FN:62,MayanFacet.startBridgeTokensViaMayan -FNDA:265,MayanFacet.startBridgeTokensViaMayan -DA:74,260 -DA:79,259 -BRDA:79,0,0,1 -DA:81,1 -DA:87,259 -FN:94,MayanFacet.swapAndStartBridgeTokensViaMayan -FNDA:9,MayanFacet.swapAndStartBridgeTokensViaMayan -DA:107,6 -DA:114,5 -DA:115,5 -DA:116,5 -DA:121,5 -DA:127,5 -BRDA:127,1,0,3 -DA:129,3 -DA:135,5 -FN:143,MayanFacet._startBridge -FNDA:264,MayanFacet._startBridge -DA:148,264 -BRDA:148,2,0,1 -BRDA:148,2,1,263 -DA:149,1 -BRDA:149,3,0,- -DA:150,0 -DA:155,1 -DA:156,1 -BRDA:156,4,0,1 -DA:157,1 -DA:163,263 -DA:166,263 -BRDA:166,5,0,- -DA:167,0 -DA:171,263 -DA:173,263 -BRDA:173,6,0,- -BRDA:173,6,1,3 -DA:174,260 -DA:180,260 -DA:188,3 -DA:194,263 -BRDA:194,7,0,- -DA:195,0 -DA:202,263 -FN:208,MayanFacet._parseReceiver -FNDA:264,MayanFacet._parseReceiver -DA:211,264 -DA:214,264 -DA:216,264 -DA:219,264 -DA:221,0 -DA:223,264 -DA:225,0 -DA:227,264 -DA:229,259 -DA:231,5 -DA:233,2 -DA:235,3 -DA:237,3 -DA:239,0 -DA:241,0 -DA:243,0 -DA:245,0 -DA:247,0 -DA:248,0 -FN:256,MayanFacet._normalizeAmount -FNDA:6,MayanFacet._normalizeAmount -DA:260,6 -BRDA:260,8,0,4 -DA:261,4 -DA:262,4 -DA:264,6 -FN:271,MayanFacet._replaceInputAmount -FNDA:3,MayanFacet._replaceInputAmount -DA:275,3 -BRDA:275,9,0,- -BRDA:275,9,1,3 -DA:276,3 -DA:277,3 -DA:282,3 -DA:284,3 -DA:285,3 -BRDA:285,10,0,1 -BRDA:285,10,1,2 -DA:286,1 -DA:288,2 -DA:292,3 -DA:293,524 -DA:297,3 -DA:298,3 -DA:299,96 -DA:303,3 -DA:304,992 -DA:307,3 -FNF:7 -FNH:6 -LF:69 -LH:57 -BRF:15 -BRH:10 -end_of_record -TN: -SF:src/Facets/MultichainFacet.sol -FN:60,MultichainFacet.initMultichain -FNDA:26,MultichainFacet.initMultichain -DA:64,26 -DA:66,26 -DA:68,26 -DA:70,26 -DA:71,26 -DA:72,76 -BRDA:72,0,0,- -DA:73,0 -DA:75,76 -DA:77,76 -DA:81,26 -FN:88,MultichainFacet.updateAddressMappings -FNDA:25,MultichainFacet.updateAddressMappings -DA:89,25 -DA:91,24 -DA:93,24 -DA:94,48 -DA:97,48 -DA:101,24 -FN:107,MultichainFacet.registerRouters -FNDA:2,MultichainFacet.registerRouters -DA:111,2 -DA:113,1 -DA:115,1 -DA:116,1 -DA:117,3 -BRDA:117,1,0,- -DA:118,0 -DA:120,3 -DA:123,3 -DA:126,1 -FN:132,MultichainFacet.startBridgeTokensViaMultichain -FNDA:267,MultichainFacet.startBridgeTokensViaMultichain -DA:144,262 -DA:145,262 -BRDA:145,2,0,2 -DA:146,2 -DA:148,260 -DA:154,259 -FN:161,MultichainFacet.swapAndStartBridgeTokensViaMultichain -FNDA:6,MultichainFacet.swapAndStartBridgeTokensViaMultichain -DA:174,3 -DA:176,3 -BRDA:176,4,0,- -DA:177,0 -DA:180,3 -DA:186,2 -FN:194,MultichainFacet._startBridge -FNDA:261,MultichainFacet._startBridge -DA:199,261 -BRDA:199,5,0,- -BRDA:199,5,1,258 -DA:200,1 -DA:205,260 -DA:206,260 -BRDA:206,6,0,- -BRDA:206,6,1,258 -DA:208,2 -DA:217,258 -DA:223,258 -DA:228,258 -DA:239,261 -FN:243,MultichainFacet.getStorage -FNDA:576,MultichainFacet.getStorage -DA:244,576 -DA:247,576 -FNF:7 -FNH:7 -LF:46 -LH:43 -BRF:8 -BRH:3 -end_of_record -TN: -SF:src/Facets/NonStandardSelectorsRegistryFacet.sol -FN:23,NonStandardSelectorsRegistryFacet.setNonStandardSelector -FNDA:2,NonStandardSelectorsRegistryFacet.setNonStandardSelector -DA:27,2 -DA:28,1 -DA:29,1 -FN:35,NonStandardSelectorsRegistryFacet.batchSetNonStandardSelectors -FNDA:2,NonStandardSelectorsRegistryFacet.batchSetNonStandardSelectors -DA:39,2 -DA:40,1 -DA:41,1 -BRDA:41,0,0,- -BRDA:41,0,1,1 -DA:45,1 -DA:46,2 -FN:53,NonStandardSelectorsRegistryFacet.isNonStandardSelector -FNDA:3,NonStandardSelectorsRegistryFacet.isNonStandardSelector -DA:56,3 -FN:62,NonStandardSelectorsRegistryFacet.getStorage -FNDA:5,NonStandardSelectorsRegistryFacet.getStorage -DA:63,5 -DA:65,5 -FNF:4 -FNH:4 -LF:11 -LH:11 -BRF:2 -BRH:1 -end_of_record -TN: -SF:src/Facets/OmniBridgeFacet.sol -FN:29,OmniBridgeFacet. -FNDA:0,OmniBridgeFacet. -DA:30,0 -DA:31,0 -FN:38,OmniBridgeFacet.startBridgeTokensViaOmniBridge -FNDA:527,OmniBridgeFacet.startBridgeTokensViaOmniBridge -DA:49,517 -DA:53,515 -FN:59,OmniBridgeFacet.swapAndStartBridgeTokensViaOmniBridge -FNDA:11,OmniBridgeFacet.swapAndStartBridgeTokensViaOmniBridge -DA:71,5 -DA:77,3 -FN:84,OmniBridgeFacet._startBridge -FNDA:518,OmniBridgeFacet._startBridge -DA:85,518 -BRDA:85,0,0,- -BRDA:85,0,1,516 -DA:86,2 -DA:90,516 -DA:95,516 -DA:102,518 -FNF:4 -FNH:3 -LF:11 -LH:9 -BRF:2 -BRH:1 -end_of_record -TN: -SF:src/Facets/OptimismBridgeFacet.sol -FN:57,OptimismBridgeFacet.initOptimism -FNDA:7,OptimismBridgeFacet.initOptimism -DA:61,7 -DA:63,7 -DA:65,0 -BRDA:65,0,0,- -DA:66,0 -DA:69,7 -DA:70,7 -BRDA:70,1,0,- -DA:71,0 -DA:73,7 -DA:78,7 -DA:79,7 -DA:81,7 -FN:89,OptimismBridgeFacet.registerOptimismBridge -FNDA:0,OptimismBridgeFacet.registerOptimismBridge -DA:90,0 -DA:92,0 -DA:94,0 -DA:96,0 -BRDA:96,3,0,- -DA:97,0 -DA:100,0 -DA:102,0 -FN:108,OptimismBridgeFacet.startBridgeTokensViaOptimismBridge -FNDA:6,OptimismBridgeFacet.startBridgeTokensViaOptimismBridge -DA:120,3 -DA:124,1 -FN:131,OptimismBridgeFacet.swapAndStartBridgeTokensViaOptimismBridge -FNDA:1,OptimismBridgeFacet.swapAndStartBridgeTokensViaOptimismBridge -DA:144,1 -DA:150,1 -FN:158,OptimismBridgeFacet._startBridge -FNDA:2,OptimismBridgeFacet._startBridge -DA:162,2 -DA:163,2 -DA:166,2 -DA:172,2 -BRDA:172,4,0,- -BRDA:172,4,1,2 -DA:173,0 -DA:179,2 -DA:185,2 -BRDA:185,5,0,- -BRDA:185,5,1,2 -DA:186,0 -DA:188,2 -DA:199,2 -FN:203,OptimismBridgeFacet.getStorage -FNDA:9,OptimismBridgeFacet.getStorage -DA:204,9 -DA:207,9 -FNF:6 -FNH:5 -LF:34 -LH:22 -BRF:7 -BRH:2 -end_of_record -TN: -SF:src/Facets/OwnershipFacet.sol -FN:43,OwnershipFacet.transferOwnership -FNDA:5,OwnershipFacet.transferOwnership -DA:44,5 -DA:45,4 -DA:47,4 -DA:49,3 -DA:52,2 -DA:53,2 -FN:57,OwnershipFacet.cancelOwnershipTransfer -FNDA:0,OwnershipFacet.cancelOwnershipTransfer -DA:58,0 -DA:59,0 -DA:61,0 -DA:63,0 -FN:67,OwnershipFacet.confirmOwnershipTransfer -FNDA:2,OwnershipFacet.confirmOwnershipTransfer -DA:68,2 -DA:69,2 -DA:70,2 -DA:71,1 -DA:72,1 -DA:73,1 -FN:78,OwnershipFacet.owner -FNDA:3,OwnershipFacet.owner -DA:79,3 -FN:85,OwnershipFacet.getStorage -FNDA:6,OwnershipFacet.getStorage -DA:86,6 -DA:89,6 -FNF:5 -FNH:4 -LF:19 -LH:15 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/PeripheryRegistryFacet.sol -FN:31,PeripheryRegistryFacet.registerPeripheryContract -FNDA:22,PeripheryRegistryFacet.registerPeripheryContract -DA:35,22 -DA:36,22 -DA:37,22 -DA:38,22 -FN:43,PeripheryRegistryFacet.getPeripheryContract -FNDA:2,PeripheryRegistryFacet.getPeripheryContract -DA:46,2 -FN:50,PeripheryRegistryFacet.getStorage -FNDA:24,PeripheryRegistryFacet.getStorage -DA:51,24 -DA:54,24 -FNF:3 -FNH:3 -LF:7 -LH:7 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Facets/PolygonBridgeFacet.sol -FN:29,PolygonBridgeFacet. -FNDA:0,PolygonBridgeFacet. -DA:30,0 -DA:31,0 -FN:38,PolygonBridgeFacet.startBridgeTokensViaPolygonBridge -FNDA:264,PolygonBridgeFacet.startBridgeTokensViaPolygonBridge -DA:49,259 -DA:53,258 -FN:59,PolygonBridgeFacet.swapAndStartBridgeTokensViaPolygonBridge -FNDA:6,PolygonBridgeFacet.swapAndStartBridgeTokensViaPolygonBridge -DA:71,3 -DA:77,2 -FN:84,PolygonBridgeFacet._startBridge -FNDA:260,PolygonBridgeFacet._startBridge -DA:85,260 -DA:87,260 -BRDA:87,0,0,- -BRDA:87,0,1,258 -DA:88,2 -DA:92,258 -DA:96,258 -DA:102,258 -DA:103,258 -DA:110,260 -FNF:4 -FNH:3 -LF:14 -LH:12 -BRF:2 -BRH:1 -end_of_record -TN: -SF:src/Facets/SquidFacet.sol -FN:67,SquidFacet. -FNDA:0,SquidFacet. -DA:68,0 -FN:76,SquidFacet.startBridgeTokensViaSquid -FNDA:7,SquidFacet.startBridgeTokensViaSquid -DA:87,3 -DA:92,3 -FN:99,SquidFacet.swapAndStartBridgeTokensViaSquid -FNDA:5,SquidFacet.swapAndStartBridgeTokensViaSquid -DA:112,2 -DA:120,1 -FN:128,SquidFacet._startBridge -FNDA:4,SquidFacet._startBridge -DA:132,4 -DA:139,4 -BRDA:139,0,0,2 -DA:140,2 -DA:148,4 -BRDA:148,1,0,1 -BRDA:148,1,1,- -DA:149,1 -DA:150,3 -BRDA:150,2,0,- -BRDA:150,2,1,- -DA:151,0 -DA:152,3 -BRDA:152,3,0,3 -BRDA:152,3,1,- -DA:153,3 -DA:155,0 -DA:158,4 -FN:161,SquidFacet._bridgeCall -FNDA:1,SquidFacet._bridgeCall -DA:162,1 -FN:173,SquidFacet._callBridge -FNDA:0,SquidFacet._callBridge -DA:174,0 -FN:186,SquidFacet._callBridgeCall -FNDA:3,SquidFacet._callBridgeCall -DA:187,3 -FN:202,SquidFacet._calculateMsgValue -FNDA:4,SquidFacet._calculateMsgValue -DA:206,4 -DA:207,4 -BRDA:207,4,0,2 -DA:208,2 -DA:210,4 -FNF:8 -FNH:6 -LF:23 -LH:19 -BRF:8 -BRH:4 -end_of_record -TN: -SF:src/Facets/StandardizedCallFacet.sol -FN:15,StandardizedCallFacet.standardizedCall -FNDA:2,StandardizedCallFacet.standardizedCall -DA:16,2 -FN:21,StandardizedCallFacet.standardizedSwapCall -FNDA:2,StandardizedCallFacet.standardizedSwapCall -DA:22,2 -FN:27,StandardizedCallFacet.standardizedBridgeCall -FNDA:2,StandardizedCallFacet.standardizedBridgeCall -DA:28,2 -FN:33,StandardizedCallFacet.standardizedSwapAndBridgeCall -FNDA:2,StandardizedCallFacet.standardizedSwapAndBridgeCall -DA:36,2 -FN:39,StandardizedCallFacet.execute -FNDA:8,StandardizedCallFacet.execute -DA:42,8 -DA:43,8 -DA:47,8 -BRDA:47,0,0,4 -DA:48,4 -DA:55,4 -DA:64,4 -DA:67,4 -DA:68,0 -DA:70,4 -DA:71,4 -FNF:5 -FNH:5 -LF:14 -LH:13 -BRF:1 -BRH:1 -end_of_record -TN: -SF:src/Facets/StargateFacet.sol -FN:80,StargateFacet. -FNDA:0,StargateFacet. -DA:81,0 -FN:88,StargateFacet.initStargate -FNDA:23,StargateFacet.initStargate -DA:89,23 -DA:91,22 -DA:93,22 -DA:94,66 -DA:98,22 -DA:100,22 -FN:108,StargateFacet.startBridgeTokensViaStargate -FNDA:268,StargateFacet.startBridgeTokensViaStargate -DA:119,264 -DA:120,263 -DA:124,262 -FN:131,StargateFacet.swapAndStartBridgeTokensViaStargate -FNDA:6,StargateFacet.swapAndStartBridgeTokensViaStargate -DA:143,3 -DA:144,3 -DA:152,2 -FN:155,StargateFacet.quoteLayerZeroFee -FNDA:46,StargateFacet.quoteLayerZeroFee -DA:159,46 -DA:160,46 -FN:178,StargateFacet._startBridge -FNDA:264,StargateFacet._startBridge -DA:182,264 -BRDA:182,0,0,- -BRDA:182,0,1,259 -DA:183,3 -DA:201,261 -DA:207,261 -DA:224,262 -DA:226,262 -FN:229,StargateFacet.validateDestinationCallFlag -FNDA:267,StargateFacet.validateDestinationCallFlag -DA:234,267 -DA:236,1 -BRDA:236,1,0,1 -DA:237,1 -FN:247,StargateFacet.setLayerZeroChainId -FNDA:2,StargateFacet.setLayerZeroChainId -DA:251,2 -DA:252,1 -DA:254,1 -BRDA:254,2,0,- -DA:255,0 -DA:258,1 -DA:259,1 -FN:265,StargateFacet.getLayerZeroChainId -FNDA:310,StargateFacet.getLayerZeroChainId -DA:268,310 -DA:269,310 -DA:270,310 -DA:271,310 -FN:274,StargateFacet.toBytes -FNDA:310,StargateFacet.toBytes -DA:275,310 -FN:279,StargateFacet.getStorage -FNDA:333,StargateFacet.getStorage -DA:280,333 -DA:283,333 -FNF:11 -FNH:10 -LF:37 -LH:35 -BRF:4 -BRH:2 -end_of_record -TN: -SF:src/Facets/StargateFacetV2.sol -FN:40,StargateFacetV2. -FNDA:4,StargateFacetV2. -DA:41,4 -FN:49,StargateFacetV2.startBridgeTokensViaStargate -FNDA:23,StargateFacetV2.startBridgeTokensViaStargate -DA:60,19 -DA:64,18 -FN:71,StargateFacetV2.swapAndStartBridgeTokensViaStargate -FNDA:10,StargateFacetV2.swapAndStartBridgeTokensViaStargate -DA:83,7 -DA:91,6 -FN:99,StargateFacetV2._startBridge -FNDA:24,StargateFacetV2._startBridge -DA:105,24 -DA:113,18 -DA:119,17 -DA:122,17 -DA:126,16 -DA:127,16 -BRDA:127,3,0,5 -BRDA:127,3,1,10 -DA:130,5 -DA:134,11 -DA:135,11 -DA:140,11 -BRDA:140,4,0,10 -DA:142,10 -BRDA:142,5,0,2 -DA:143,2 -DA:146,10 -DA:151,16 -DA:154,16 -DA:160,14 -FNF:4 -FNH:4 -LF:21 -LH:21 -BRF:4 -BRH:4 -end_of_record -TN: -SF:src/Facets/SymbiosisFacet.sol -FN:49,SymbiosisFacet. -FNDA:0,SymbiosisFacet. -DA:53,0 -DA:54,0 -FN:62,SymbiosisFacet.startBridgeTokensViaSymbiosis -FNDA:264,SymbiosisFacet.startBridgeTokensViaSymbiosis -DA:74,259 -DA:79,258 -FN:88,SymbiosisFacet.swapAndStartBridgeTokensViaSymbiosis -FNDA:6,SymbiosisFacet.swapAndStartBridgeTokensViaSymbiosis -DA:100,3 -DA:107,2 -FN:113,SymbiosisFacet._startBridge -FNDA:260,SymbiosisFacet._startBridge -DA:117,260 -DA:118,260 -DA:120,260 -BRDA:120,0,0,2 -BRDA:120,0,1,258 -DA:121,2 -DA:123,258 -DA:130,260 -DA:144,260 -FNF:4 -FNH:3 -LF:13 -LH:11 -BRF:2 -BRH:2 -end_of_record -TN: -SF:src/Facets/SynapseBridgeFacet.sol -FN:37,SynapseBridgeFacet. -FNDA:0,SynapseBridgeFacet. -DA:38,0 -FN:46,SynapseBridgeFacet.startBridgeTokensViaSynapseBridge -FNDA:264,SynapseBridgeFacet.startBridgeTokensViaSynapseBridge -DA:58,259 -DA:63,258 -FN:70,SynapseBridgeFacet.swapAndStartBridgeTokensViaSynapseBridge -FNDA:6,SynapseBridgeFacet.swapAndStartBridgeTokensViaSynapseBridge -DA:83,3 -DA:90,2 -FN:98,SynapseBridgeFacet._startBridge -FNDA:260,SynapseBridgeFacet._startBridge -DA:102,260 -DA:103,260 -DA:105,260 -BRDA:105,0,0,2 -BRDA:105,0,1,258 -DA:106,2 -DA:107,2 -DA:109,258 -DA:116,260 -DA:125,260 -FNF:4 -FNH:3 -LF:13 -LH:12 -BRF:2 -BRH:2 -end_of_record -TN: -SF:src/Facets/ThorSwapFacet.sol -FN:31,ThorSwapFacet. -FNDA:0,ThorSwapFacet. -DA:32,0 -FN:38,ThorSwapFacet.startBridgeTokensViaThorSwap -FNDA:264,ThorSwapFacet.startBridgeTokensViaThorSwap -DA:50,259 -DA:54,258 -FN:61,ThorSwapFacet.swapAndStartBridgeTokensViaThorSwap -FNDA:6,ThorSwapFacet.swapAndStartBridgeTokensViaThorSwap -DA:74,3 -DA:80,2 -FN:86,ThorSwapFacet._startBridge -FNDA:260,ThorSwapFacet._startBridge -DA:90,260 -DA:91,260 -DA:93,260 -BRDA:93,0,0,258 -DA:94,258 -DA:100,260 -DA:110,260 -FNF:4 -FNH:3 -LF:11 -LH:10 -BRF:1 -BRH:1 -end_of_record -TN: -SF:src/Facets/WithdrawFacet.sol -FN:35,WithdrawFacet.executeCallAndWithdraw -FNDA:5,WithdrawFacet.executeCallAndWithdraw -DA:42,5 -BRDA:42,0,0,2 -DA:43,2 -DA:47,3 -DA:48,3 -DA:49,3 -DA:52,3 -DA:54,3 -BRDA:54,2,0,2 -BRDA:54,2,1,1 -DA:55,2 -DA:57,1 -FN:65,WithdrawFacet.withdraw -FNDA:0,WithdrawFacet.withdraw -DA:70,0 -BRDA:70,3,0,- -DA:71,0 -DA:73,0 -FN:82,WithdrawFacet._withdrawAsset -FNDA:2,WithdrawFacet._withdrawAsset -DA:87,2 -DA:88,2 -DA:89,2 -FNF:3 -FNH:2 -LF:15 -LH:12 -BRF:4 -BRH:3 -end_of_record -TN: -SF:src/Helpers/CelerIMFacetBase.sol -FN:69,CelerIMFacetBase. -FNDA:0,CelerIMFacetBase. -DA:76,0 -DA:83,0 -DA:84,0 -FN:92,CelerIMFacetBase.startBridgeTokensViaCelerIM -FNDA:271,CelerIMFacetBase.startBridgeTokensViaCelerIM -DA:103,267 -DA:104,266 -BRDA:104,0,0,262 -DA:106,262 -DA:109,262 -DA:110,262 -DA:118,261 -DA:120,0 -BRDA:120,1,0,- -DA:121,0 -DA:125,265 -FN:132,CelerIMFacetBase.swapAndStartBridgeTokensViaCelerIM -FNDA:9,CelerIMFacetBase.swapAndStartBridgeTokensViaCelerIM -DA:144,5 -DA:146,5 -DA:154,4 -BRDA:154,2,0,2 -DA:156,2 -DA:159,2 -DA:160,2 -DA:167,2 -DA:169,0 -BRDA:169,3,0,- -DA:170,0 -DA:174,4 -FN:182,CelerIMFacetBase._startBridge -FNDA:269,CelerIMFacetBase._startBridge -DA:188,269 -DA:193,269 -BRDA:193,4,0,1 -BRDA:193,4,1,2 -DA:195,267 -DA:203,2 -DA:206,2 -DA:209,2 -DA:216,2 -DA:227,2 -DA:231,268 -FN:237,CelerIMFacetBase._getRightAsset -FNDA:264,CelerIMFacetBase._getRightAsset -DA:240,264 -BRDA:240,5,0,- -BRDA:240,5,1,- -DA:242,0 -DA:245,264 -FN:249,CelerIMFacetBase.validateDestinationCallFlag -FNDA:272,CelerIMFacetBase.validateDestinationCallFlag -DA:254,272 -DA:256,1 -BRDA:256,6,0,1 -DA:257,1 -FNF:6 -FNH:5 -LF:37 -LH:29 -BRF:9 -BRH:5 -end_of_record -TN: -SF:src/Helpers/ExcessivelySafeCall.sol -FN:28,ExcessivelySafeCall.excessivelySafeCall -FNDA:0,ExcessivelySafeCall.excessivelySafeCall -DA:36,0 -DA:37,0 -DA:38,0 -DA:44,0 -DA:54,0 -DA:55,0 -BRDA:55,0,0,- -DA:56,0 -DA:59,0 -DA:61,0 -DA:63,0 -FN:81,ExcessivelySafeCall.excessivelySafeStaticCall -FNDA:0,ExcessivelySafeCall.excessivelySafeStaticCall -DA:88,0 -DA:89,0 -DA:90,0 -DA:96,0 -DA:105,0 -DA:106,0 -BRDA:106,1,0,- -DA:107,0 -DA:110,0 -DA:112,0 -DA:114,0 -FN:126,ExcessivelySafeCall.swapSelector -FNDA:0,ExcessivelySafeCall.swapSelector -DA:130,0 -BRDA:130,2,0,- -DA:131,0 -DA:133,0 -DA:136,0 -DA:139,0 -DA:140,0 -DA:141,0 -FNF:3 -FNH:0 -LF:27 -LH:0 -BRF:3 -BRH:0 -end_of_record -TN: -SF:src/Helpers/ReentrancyGuard.sol -FN:29,ReentrancyGuard.nonReentrant -FNDA:3329,ReentrancyGuard.nonReentrant -DA:30,3329 -DA:31,3329 -DA:32,3327 -DA:34,3173 -FN:40,ReentrancyGuard.reentrancyStorage -FNDA:6357,ReentrancyGuard.reentrancyStorage -DA:45,6357 -DA:48,6357 -FNF:2 -FNH:2 -LF:6 -LH:6 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Helpers/SwapperV2.sol -FN:30,SwapperV2.noLeftovers -FNDA:68,SwapperV2.noLeftovers -DA:35,68 -DA:36,68 -BRDA:36,0,0,4 -BRDA:36,0,1,15 -DA:37,18 -DA:38,18 -DA:42,18 -DA:43,18 -DA:45,18 -BRDA:45,1,0,15 -DA:46,15 -DA:49,15 -BRDA:49,2,0,4 -DA:50,4 -DA:58,18 -FN:71,SwapperV2.noLeftoversReserve -FNDA:29,SwapperV2.noLeftoversReserve -DA:77,29 -DA:78,29 -BRDA:78,3,0,- -BRDA:78,3,1,- -DA:79,0 -DA:80,0 -DA:84,0 -DA:85,0 -DA:87,0 -BRDA:87,4,0,- -DA:88,0 -DA:91,0 -DA:94,0 -BRDA:94,5,0,- -DA:95,0 -DA:103,0 -FN:114,SwapperV2.refundExcessNative -FNDA:2799,SwapperV2.refundExcessNative -DA:115,2799 -DA:117,2655 -DA:119,2655 -BRDA:119,6,0,6 -DA:120,6 -FN:136,SwapperV2._depositAndSwap -FNDA:87,SwapperV2._depositAndSwap -DA:142,87 -DA:144,87 -BRDA:144,7,0,19 -DA:145,19 -DA:148,68 -DA:149,68 -DA:151,68 -BRDA:151,8,0,20 -DA:152,20 -DA:155,68 -DA:157,68 -DA:158,68 -DA:165,68 -DA:168,68 -BRDA:168,9,0,- -DA:169,0 -DA:172,68 -FN:181,SwapperV2._depositAndSwap -FNDA:39,SwapperV2._depositAndSwap -DA:188,39 -DA:190,39 -BRDA:190,10,0,10 -DA:191,10 -DA:194,29 -DA:195,29 -DA:197,29 -BRDA:197,11,0,12 -DA:198,12 -DA:201,29 -DA:203,29 -DA:204,29 -DA:209,29 -DA:211,29 -DA:214,29 -BRDA:214,12,0,12 -DA:215,12 -DA:218,29 -BRDA:218,13,0,- -DA:219,0 -DA:222,29 -FN:232,SwapperV2._executeSwaps -FNDA:68,SwapperV2._executeSwaps -DA:238,18 -DA:239,18 -DA:240,36 -DA:243,36 -DA:251,36 -DA:254,36 -FN:262,SwapperV2._executeSwaps -FNDA:29,SwapperV2._executeSwaps -DA:275,0 -DA:276,0 -DA:277,0 -DA:280,0 -DA:288,0 -DA:291,0 -FN:299,SwapperV2._fetchBalances -FNDA:97,SwapperV2._fetchBalances -DA:302,97 -DA:303,97 -DA:304,97 -DA:305,97 -DA:306,115 -DA:307,115 -DA:309,115 -BRDA:309,16,0,35 -DA:310,35 -DA:314,115 -DA:318,97 -FNF:8 -FNH:8 -LF:80 -LH:62 -BRF:17 -BRH:11 -end_of_record -TN: -SF:src/Helpers/TransferrableOwnership.sol -FN:24,TransferrableOwnership. -FNDA:87,TransferrableOwnership. -DA:25,87 -FN:28,TransferrableOwnership.onlyOwner -FNDA:8,TransferrableOwnership.onlyOwner -DA:29,8 -FN:35,TransferrableOwnership.transferOwnership -FNDA:20,TransferrableOwnership.transferOwnership -DA:36,16 -DA:37,12 -DA:38,8 -DA:39,8 -FN:43,TransferrableOwnership.cancelOwnershipTransfer -FNDA:0,TransferrableOwnership.cancelOwnershipTransfer -DA:44,0 -DA:46,0 -FN:50,TransferrableOwnership.confirmOwnershipTransfer -FNDA:8,TransferrableOwnership.confirmOwnershipTransfer -DA:51,8 -DA:52,8 -DA:53,4 -DA:54,4 -DA:55,4 -FNF:5 -FNH:4 -LF:13 -LH:11 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Helpers/Validatable.sol -FN:11,Validatable.validateBridgeData -FNDA:3279,Validatable.validateBridgeData -DA:12,3279 -BRDA:12,0,0,27 -DA:13,27 -DA:15,3252 -BRDA:15,1,0,27 -DA:16,27 -DA:18,3225 -BRDA:18,2,0,27 -DA:19,27 -FN:24,Validatable.noNativeAsset -FNDA:3,Validatable.noNativeAsset -DA:25,3 -BRDA:25,3,0,- -DA:26,0 -FN:31,Validatable.onlyAllowSourceToken -FNDA:522,Validatable.onlyAllowSourceToken -DA:35,522 -BRDA:35,4,0,- -DA:36,0 -FN:41,Validatable.onlyAllowDestinationChain -FNDA:262,Validatable.onlyAllowDestinationChain -DA:45,262 -BRDA:45,5,0,- -DA:46,0 -FN:51,Validatable.containsSourceSwaps -FNDA:171,Validatable.containsSourceSwaps -DA:52,171 -BRDA:52,6,0,- -DA:53,0 -FN:58,Validatable.doesNotContainSourceSwaps -FNDA:6116,Validatable.doesNotContainSourceSwaps -DA:59,28 -BRDA:59,7,0,28 -DA:60,28 -FN:65,Validatable.doesNotContainDestinationCalls -FNDA:2689,Validatable.doesNotContainDestinationCalls -DA:68,11 -BRDA:68,8,0,11 -DA:69,11 -FNF:7 -FNH:7 -LF:18 -LH:14 -BRF:9 -BRH:5 -end_of_record -TN: -SF:src/LiFiDiamond.sol -FN:13,LiFiDiamond. -FNDA:4,LiFiDiamond. -DA:14,2 -DA:17,2 -DA:18,2 -DA:19,2 -DA:20,2 -DA:25,2 -FN:31,LiFiDiamond. -FNDA:12505,LiFiDiamond. -DA:32,12505 -DA:33,12505 -DA:38,12505 -DA:42,12505 -DA:44,12505 -BRDA:44,0,0,2 -DA:45,2 -DA:52,12503 -DA:54,12503 -DA:56,12503 -DA:59,12503 -DA:60,365 -DA:62,12138 -DA:63,12138 -FNF:2 -FNH:2 -LF:19 -LH:19 -BRF:1 -BRH:1 -end_of_record -TN: -SF:src/LiFiDiamondImmutable.sol -FN:13,LiFiDiamondImmutable. -FNDA:4,LiFiDiamondImmutable. -DA:14,2 -DA:17,2 -DA:18,2 -DA:19,2 -DA:20,2 -DA:25,2 -FN:31,LiFiDiamondImmutable. -FNDA:4,LiFiDiamondImmutable. -DA:32,4 -DA:33,4 -DA:38,4 -DA:42,4 -DA:44,4 -BRDA:44,0,0,2 -DA:45,2 -DA:52,2 -DA:54,2 -DA:56,2 -DA:59,2 -DA:60,1 -DA:62,1 -DA:63,1 -FNF:2 -FNH:2 -LF:19 -LH:19 -BRF:1 -BRH:1 -end_of_record -TN: -SF:src/Libraries/LibAccess.sol -FN:24,LibAccess.accessStorage -FNDA:8,LibAccess.accessStorage -DA:29,8 -DA:32,8 -FN:39,LibAccess.addAccess -FNDA:2,LibAccess.addAccess -DA:40,2 -BRDA:40,0,0,- -DA:41,0 -DA:43,2 -DA:44,2 -DA:45,2 -FN:51,LibAccess.removeAccess -FNDA:1,LibAccess.removeAccess -DA:52,1 -DA:53,1 -DA:54,1 -FN:59,LibAccess.enforceAccessControl -FNDA:5,LibAccess.enforceAccessControl -DA:60,5 -DA:61,5 -FNF:4 -FNH:4 -LF:12 -LH:11 -BRF:1 -BRH:0 -end_of_record -TN: -SF:src/Libraries/LibAllowList.sol -FN:22,LibAllowList.addAllowedContract -FNDA:850,LibAllowList.addAllowedContract -DA:23,850 -DA:25,846 -DA:29,732 -DA:30,732 -FN:35,LibAllowList.contractIsAllowed -FNDA:281,LibAllowList.contractIsAllowed -DA:38,281 -FN:43,LibAllowList.removeAllowedContract -FNDA:6,LibAllowList.removeAllowedContract -DA:44,6 -DA:46,6 -BRDA:46,1,0,- -DA:47,0 -DA:50,6 -DA:52,6 -DA:54,6 -DA:55,7 -BRDA:55,2,0,6 -DA:57,6 -DA:59,6 -DA:60,6 -FN:66,LibAllowList.getAllowedContracts -FNDA:4,LibAllowList.getAllowedContracts -DA:67,4 -FN:72,LibAllowList.addAllowedSelector -FNDA:2538,LibAllowList.addAllowedSelector -DA:73,2538 -FN:78,LibAllowList.removeAllowedSelector -FNDA:0,LibAllowList.removeAllowedSelector -DA:79,0 -FN:84,LibAllowList.selectorIsAllowed -FNDA:174,LibAllowList.selectorIsAllowed -DA:85,174 -FN:89,LibAllowList._getStorage -FNDA:3849,LibAllowList._getStorage -DA:94,3849 -DA:97,3849 -FN:103,LibAllowList._checkAddress -FNDA:850,LibAllowList._checkAddress -DA:104,850 -DA:106,848 -FNF:9 -FNH:8 -LF:23 -LH:21 -BRF:2 -BRH:1 -end_of_record -TN: -SF:src/Libraries/LibAsset.sol -FN:25,LibAsset.getOwnBalance -FNDA:826,LibAsset.getOwnBalance -DA:26,826 -DA:27,826 -FN:36,LibAsset.transferNativeAsset -FNDA:24,LibAsset.transferNativeAsset -DA:40,24 -DA:41,24 -DA:44,24 -DA:45,24 -FN:53,LibAsset.maxApproveERC20 -FNDA:6619,LibAsset.maxApproveERC20 -DA:58,6619 -BRDA:58,3,0,6619 -DA:59,6619 -DA:61,6616 -BRDA:61,4,0,- -DA:62,0 -DA:65,6616 -BRDA:65,5,0,6611 -DA:66,6611 -DA:67,6611 -FN:76,LibAsset.transferERC20 -FNDA:47,LibAsset.transferERC20 -DA:81,47 -BRDA:81,6,0,- -DA:82,0 -DA:84,47 -BRDA:84,7,0,- -DA:85,0 -DA:88,47 -DA:89,47 -BRDA:89,8,0,- -DA:90,0 -DA:92,47 -FN:100,LibAsset.transferFromERC20 -FNDA:6575,LibAsset.transferFromERC20 -DA:106,6575 -BRDA:106,9,0,- -DA:107,0 -DA:109,6575 -BRDA:109,10,0,- -DA:110,0 -DA:113,6575 -DA:114,6575 -DA:115,6575 -DA:116,6572 -BRDA:116,11,0,- -DA:117,0 -FN:121,LibAsset.depositAsset -FNDA:6122,LibAsset.depositAsset -DA:122,6122 -DA:123,6122 -BRDA:123,13,0,3 -BRDA:123,13,1,6053 -DA:124,43 -DA:126,6079 -DA:127,6079 -DA:128,6053 -FN:132,LibAsset.depositAssets -FNDA:97,LibAsset.depositAssets -DA:133,97 -DA:134,115 -DA:135,98 -BRDA:135,16,0,98 -DA:136,98 -DA:139,115 -FN:147,LibAsset.isNativeAsset -FNDA:26954,LibAsset.isNativeAsset -DA:148,26954 -FN:158,LibAsset.transferAsset -FNDA:71,LibAsset.transferAsset -DA:163,71 -FN:169,LibAsset.isContract -FNDA:146,LibAsset.isContract -DA:170,146 -DA:173,146 -DA:175,146 -FNF:10 -FNH:10 -LF:46 -LH:39 -BRF:12 -BRH:5 -end_of_record -TN: -SF:src/Libraries/LibBytes.sol -FN:16,LibBytes.slice -FNDA:35,LibBytes.slice -DA:21,35 -DA:22,35 -DA:24,35 -DA:28,35 -DA:31,35 -DA:41,35 -DA:47,35 -DA:51,35 -DA:63,968 -DA:64,933 -DA:65,933 -DA:66,933 -DA:67,933 -DA:70,35 -DA:74,35 -DA:77,0 -DA:78,0 -DA:81,0 -DA:83,0 -DA:87,35 -FN:90,LibBytes.toAddress -FNDA:0,LibBytes.toAddress -DA:94,0 -BRDA:94,2,0,- -DA:95,0 -DA:97,0 -DA:100,0 -DA:106,0 -FN:111,LibBytes.toHexString -FNDA:12,LibBytes.toHexString -DA:115,12 -DA:116,12 -DA:117,12 -DA:118,12 -DA:119,480 -DA:120,480 -DA:122,12 -BRDA:122,3,0,- -BRDA:122,3,1,12 -DA:123,12 -FNF:3 -FNH:2 -LF:33 -LH:24 -BRF:3 -BRH:1 -end_of_record -TN: -SF:src/Libraries/LibDiamond.sol -FN:53,LibDiamond.diamondStorage -FNDA:4991,LibDiamond.diamondStorage -DA:58,4991 -DA:61,4991 -FN:70,LibDiamond.setContractOwner -FNDA:5,LibDiamond.setContractOwner -DA:71,5 -DA:72,5 -DA:73,5 -DA:74,5 -FN:77,LibDiamond.contractOwner -FNDA:24,LibDiamond.contractOwner -DA:78,24 -FN:81,LibDiamond.enforceIsContractOwner -FNDA:1818,LibDiamond.enforceIsContractOwner -DA:82,1818 -FN:93,LibDiamond.diamondCut -FNDA:1600,LibDiamond.diamondCut -DA:98,1600 -DA:99,3136 -DA:100,3136 -BRDA:100,1,0,- -BRDA:100,1,1,- -DA:101,3136 -DA:105,0 -BRDA:105,2,0,- -BRDA:105,2,1,- -DA:106,0 -DA:110,0 -BRDA:110,3,0,- -BRDA:110,3,1,- -DA:111,0 -DA:116,0 -DA:119,3136 -DA:122,1600 -DA:123,1600 -FN:126,LibDiamond.addFunctions -FNDA:3136,LibDiamond.addFunctions -DA:130,3136 -BRDA:130,4,0,- -DA:131,0 -DA:133,3136 -DA:134,3136 -BRDA:134,5,0,- -DA:135,0 -DA:137,3136 -DA:141,3136 -BRDA:141,6,0,3136 -DA:142,3136 -DA:145,3136 -DA:146,15721 -DA:149,12585 -DA:150,12585 -DA:153,12585 -BRDA:153,7,0,- -DA:154,0 -DA:156,12585 -DA:158,12585 -DA:159,12585 -FN:164,LibDiamond.replaceFunctions -FNDA:0,LibDiamond.replaceFunctions -DA:168,0 -BRDA:168,8,0,- -DA:169,0 -DA:171,0 -DA:172,0 -BRDA:172,9,0,- -DA:173,0 -DA:175,0 -DA:179,0 -BRDA:179,10,0,- -DA:180,0 -DA:183,0 -DA:184,0 -DA:187,0 -DA:188,0 -DA:191,0 -BRDA:191,11,0,- -DA:192,0 -DA:194,0 -DA:195,0 -DA:197,0 -DA:198,0 -FN:203,LibDiamond.removeFunctions -FNDA:0,LibDiamond.removeFunctions -DA:207,0 -BRDA:207,12,0,- -DA:208,0 -DA:210,0 -DA:212,0 -BRDA:212,13,0,- -DA:213,0 -DA:216,0 -DA:217,0 -DA:220,0 -DA:221,0 -DA:224,0 -DA:226,0 -FN:231,LibDiamond.addFacet -FNDA:3136,LibDiamond.addFacet -DA:235,3136 -DA:236,3136 -DA:239,3136 -FN:242,LibDiamond.addFunction -FNDA:12585,LibDiamond.addFunction -DA:248,12585 -DA:251,12585 -DA:254,12585 -FN:257,LibDiamond.removeFunction -FNDA:0,LibDiamond.removeFunction -DA:262,0 -BRDA:262,14,0,- -DA:263,0 -DA:266,0 -BRDA:266,15,0,- -DA:267,0 -DA:270,0 -DA:273,0 -DA:278,0 -BRDA:278,16,0,- -DA:279,0 -DA:282,0 -DA:285,0 -DA:290,0 -DA:291,0 -DA:294,0 -BRDA:294,17,0,- -DA:296,0 -DA:297,0 -DA:300,0 -BRDA:300,18,0,- -DA:301,0 -DA:304,0 -DA:305,0 -DA:309,0 -DA:310,0 -FN:316,LibDiamond.initializeDiamondCut -FNDA:1600,LibDiamond.initializeDiamondCut -DA:320,1600 -BRDA:320,19,0,- -BRDA:320,19,1,- -DA:321,1592 -BRDA:321,20,0,- -DA:322,0 -DA:325,8 -BRDA:325,21,0,- -DA:326,0 -DA:328,8 -BRDA:328,22,0,8 -DA:329,8 -DA:332,8 -DA:333,8 -BRDA:333,23,0,- -DA:334,0 -BRDA:334,24,0,- -BRDA:334,24,1,- -DA:336,0 -DA:338,0 -FN:344,LibDiamond.enforceHasContractCode -FNDA:3144,LibDiamond.enforceHasContractCode -DA:345,3144 -DA:348,3144 -DA:350,3144 -BRDA:350,25,0,- -DA:351,0 -FNF:13 -FNH:10 -LF:109 -LH:45 -BRF:30 -BRH:2 -end_of_record -TN: -SF:src/Libraries/LibSwap.sol -FN:30,LibSwap.swap -FNDA:143,LibSwap.swap -DA:31,143 -DA:32,143 -DA:33,143 -DA:34,143 -DA:37,143 -DA:40,143 -DA:44,143 -BRDA:44,2,0,120 -DA:45,120 -DA:52,143 -BRDA:52,3,0,3 -DA:53,3 -DA:60,140 -DA:63,140 -BRDA:63,4,0,1 -DA:64,1 -DA:67,139 -DA:69,139 -FNF:1 -FNH:1 -LF:15 -LH:15 -BRF:3 -BRH:3 -end_of_record -TN: -SF:src/Libraries/LibUtil.sol -FN:9,LibUtil.getRevertMsg -FNDA:0,LibUtil.getRevertMsg -DA:13,0 -DA:14,0 -DA:15,0 -FN:21,LibUtil.isZeroAddress -FNDA:23636,LibUtil.isZeroAddress -DA:22,23636 -FN:25,LibUtil.revertWith -FNDA:9,LibUtil.revertWith -DA:27,9 -DA:28,9 -DA:29,9 -FNF:3 -FNH:2 -LF:7 -LH:4 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Libraries/OFTComposeMsgCodec.sol -FN:22,OFTComposeMsgCodec.encode -FNDA:3,OFTComposeMsgCodec.encode -DA:28,3 -FN:36,OFTComposeMsgCodec.nonce -FNDA:0,OFTComposeMsgCodec.nonce -DA:37,0 -FN:45,OFTComposeMsgCodec.srcEid -FNDA:0,OFTComposeMsgCodec.srcEid -DA:46,0 -FN:54,OFTComposeMsgCodec.amountLD -FNDA:2,OFTComposeMsgCodec.amountLD -DA:55,2 -FN:63,OFTComposeMsgCodec.composeFrom -FNDA:0,OFTComposeMsgCodec.composeFrom -DA:64,0 -FN:72,OFTComposeMsgCodec.composeMsg -FNDA:2,OFTComposeMsgCodec.composeMsg -DA:75,2 -FN:83,OFTComposeMsgCodec.addressToBytes32 -FNDA:35,OFTComposeMsgCodec.addressToBytes32 -DA:84,35 -FN:92,OFTComposeMsgCodec.bytes32ToAddress -FNDA:0,OFTComposeMsgCodec.bytes32ToAddress -DA:93,0 -FNF:8 -FNH:4 -LF:8 -LH:4 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Periphery/ERC20Proxy.sol -FN:22,ERC20Proxy. -FNDA:3,ERC20Proxy. -DA:23,3 -FN:29,ERC20Proxy.setAuthorizedCaller -FNDA:6,ERC20Proxy.setAuthorizedCaller -DA:33,6 -DA:34,6 -FN:42,ERC20Proxy.transferFrom -FNDA:2,ERC20Proxy.transferFrom -DA:48,2 -DA:50,2 -FNF:3 -FNH:3 -LF:5 -LH:5 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Periphery/Executor.sol -FN:30,Executor.noLeftovers -FNDA:13,Executor.noLeftovers -DA:34,13 -DA:35,13 -BRDA:35,0,0,- -BRDA:35,0,1,9 -DA:36,3 -DA:37,3 -DA:38,3 -DA:42,3 -DA:43,15 -DA:45,15 -BRDA:45,1,0,9 -DA:46,9 -DA:47,9 -BRDA:47,2,0,9 -DA:48,9 -DA:56,15 -FN:67,Executor. -FNDA:0,Executor. -DA:68,0 -DA:69,0 -FN:79,Executor.swapAndCompleteBridgeTokens -FNDA:11,Executor.swapAndCompleteBridgeTokens -DA:85,11 -FN:101,Executor.swapAndExecute -FNDA:2,Executor.swapAndExecute -DA:108,2 -FN:127,Executor._processSwaps -FNDA:13,Executor._processSwaps -DA:135,13 -DA:136,13 -DA:137,13 -DA:139,13 -BRDA:139,3,0,10 -BRDA:139,3,1,3 -DA:140,10 -DA:142,3 -DA:147,13 -BRDA:147,4,0,- -BRDA:147,4,1,2 -DA:148,11 -DA:149,11 -BRDA:149,5,0,- -BRDA:149,5,1,2 -DA:150,9 -DA:154,9 -DA:156,2 -DA:164,2 -DA:169,13 -DA:171,9 -DA:172,9 -BRDA:172,6,0,4 -DA:173,4 -DA:180,9 -DA:184,9 -BRDA:184,7,0,5 -DA:185,5 -DA:192,9 -FN:205,Executor._executeSwaps -FNDA:13,Executor._executeSwaps -DA:210,3 -DA:211,3 -DA:212,18 -BRDA:212,8,0,- -DA:213,0 -DA:216,18 -DA:217,18 -DA:219,18 -FN:227,Executor._fetchBalances -FNDA:3,Executor._fetchBalances -DA:230,3 -DA:231,3 -DA:232,3 -DA:233,3 -DA:234,18 -DA:235,18 -DA:237,18 -BRDA:237,9,0,9 -DA:238,9 -DA:242,18 -DA:246,3 -FNF:7 -FNH:6 -LF:54 -LH:51 -BRF:14 -BRH:10 -end_of_record -TN: -SF:src/Periphery/FeeCollector.sol -FN:44,FeeCollector. -FNDA:26,FeeCollector. -FN:53,FeeCollector.collectTokenFees -FNDA:11,FeeCollector.collectTokenFees -DA:59,11 -DA:60,11 -DA:61,11 -DA:62,11 -FN:74,FeeCollector.collectNativeFees -FNDA:6,FeeCollector.collectNativeFees -DA:79,6 -DA:81,6 -DA:82,6 -DA:83,6 -DA:85,6 -BRDA:85,1,0,1 -DA:87,1 -DA:90,1 -BRDA:90,2,0,- -DA:91,0 -DA:94,6 -FN:104,FeeCollector.withdrawIntegratorFees -FNDA:2,FeeCollector.withdrawIntegratorFees -DA:105,2 -DA:106,2 -BRDA:106,3,0,1 -DA:107,1 -DA:109,1 -DA:110,1 -DA:111,1 -FN:116,FeeCollector.batchWithdrawIntegratorFees -FNDA:1,FeeCollector.batchWithdrawIntegratorFees -DA:119,1 -DA:120,1 -DA:121,1 -DA:122,2 -DA:123,2 -BRDA:123,4,0,2 -DA:124,2 -DA:125,2 -DA:130,2 -DA:133,2 -FN:140,FeeCollector.withdrawLifiFees -FNDA:2,FeeCollector.withdrawLifiFees -DA:141,1 -DA:142,1 -BRDA:142,5,0,- -DA:143,0 -DA:145,1 -DA:146,1 -DA:147,1 -FN:152,FeeCollector.batchWithdrawLifiFees -FNDA:2,FeeCollector.batchWithdrawLifiFees -DA:155,1 -DA:156,1 -DA:157,1 -DA:158,2 -DA:159,2 -DA:160,2 -DA:165,2 -DA:167,2 -FN:175,FeeCollector.getTokenBalance -FNDA:8,FeeCollector.getTokenBalance -DA:179,8 -FN:184,FeeCollector.getLifiTokenBalance -FNDA:8,FeeCollector.getLifiTokenBalance -DA:187,8 -FNF:9 -FNH:9 -LF:44 -LH:42 -BRF:5 -BRH:3 -end_of_record -TN: -SF:src/Periphery/GasRebateDistributor.sol -FN:39,GasRebateDistributor. -FNDA:13,GasRebateDistributor. -DA:45,13 -DA:46,13 -DA:47,13 -DA:48,13 -FN:56,GasRebateDistributor.claim -FNDA:10,GasRebateDistributor.claim -DA:61,9 -DA:65,8 -DA:68,7 -DA:69,7 -DA:73,4 -DA:76,4 -DA:78,4 -FN:85,GasRebateDistributor.withdrawUnclaimed -FNDA:3,GasRebateDistributor.withdrawUnclaimed -DA:89,1 -DA:91,1 -DA:96,1 -DA:100,1 -FN:109,GasRebateDistributor.updateMerkleRoot -FNDA:3,GasRebateDistributor.updateMerkleRoot -DA:115,2 -DA:118,2 -DA:121,2 -DA:124,2 -FN:128,GasRebateDistributor.pauseContract -FNDA:3,GasRebateDistributor.pauseContract -DA:129,3 -FN:133,GasRebateDistributor.unpauseContract -FNDA:1,GasRebateDistributor.unpauseContract -DA:134,1 -FNF:6 -FNH:6 -LF:21 -LH:21 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Periphery/LiFuelFeeCollector.sol -FN:33,LiFuelFeeCollector. -FNDA:20,LiFuelFeeCollector. -FN:42,LiFuelFeeCollector.collectTokenGasFees -FNDA:262,LiFuelFeeCollector.collectTokenGasFees -DA:48,262 -DA:49,262 -FN:55,LiFuelFeeCollector.collectNativeGasFees -FNDA:4,LiFuelFeeCollector.collectNativeGasFees -DA:60,4 -DA:66,4 -DA:67,4 -BRDA:67,0,0,- -DA:68,0 -DA:69,0 -BRDA:69,1,0,- -DA:70,0 -FN:77,LiFuelFeeCollector.withdrawFees -FNDA:2,LiFuelFeeCollector.withdrawFees -DA:78,1 -DA:79,1 -DA:80,1 -FN:85,LiFuelFeeCollector.batchWithdrawFees -FNDA:1,LiFuelFeeCollector.batchWithdrawFees -DA:88,1 -DA:89,1 -DA:90,1 -DA:91,2 -DA:92,2 -DA:97,2 -DA:99,2 -FNF:5 -FNH:5 -LF:18 -LH:15 -BRF:2 -BRH:0 -end_of_record -TN: -SF:src/Periphery/Receiver.sol -FN:33,Receiver.onlySGRouter -FNDA:2,Receiver.onlySGRouter -DA:34,2 -BRDA:34,0,0,- -DA:35,0 -FN:39,Receiver.onlyAmarokRouter -FNDA:2,Receiver.onlyAmarokRouter -DA:40,2 -BRDA:40,1,0,- -DA:41,0 -FN:47,Receiver. -FNDA:0,Receiver. -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:60,0 -DA:61,0 -FN:74,Receiver.xReceive -FNDA:2,Receiver.xReceive -DA:82,2 -DA:87,2 -FN:105,Receiver.sgReceive -FNDA:2,Receiver.sgReceive -DA:113,2 -DA:118,2 -DA:123,2 -FN:138,Receiver.swapAndCompleteBridgeTokens -FNDA:0,Receiver.swapAndCompleteBridgeTokens -DA:144,0 -BRDA:144,2,0,- -BRDA:144,2,1,- -DA:145,0 -DA:154,0 -DA:158,0 -DA:159,0 -FN:174,Receiver.pullToken -FNDA:2,Receiver.pullToken -DA:179,1 -BRDA:179,3,0,- -BRDA:179,3,1,- -DA:181,0 -DA:182,0 -DA:184,1 -FN:197,Receiver._swapAndCompleteBridgeTokens -FNDA:4,Receiver._swapAndCompleteBridgeTokens -DA:205,4 -DA:207,4 -BRDA:207,5,0,- -BRDA:207,5,1,2 -DA:209,0 -DA:210,0 -BRDA:210,6,0,- -DA:213,0 -DA:214,0 -DA:216,0 -DA:223,0 -DA:229,0 -DA:233,0 -DA:235,0 -DA:236,0 -DA:238,0 -DA:248,4 -DA:249,4 -DA:250,4 -DA:252,4 -BRDA:252,9,0,1 -DA:254,1 -DA:256,1 -DA:263,1 -DA:267,3 -DA:269,3 -DA:272,0 -DA:273,1 -DA:274,1 -DA:283,3 -FNF:8 -FNH:6 -LF:52 -LH:23 -BRF:10 -BRH:2 -end_of_record -TN: -SF:src/Periphery/ReceiverStargateV2.sol -FN:52,ReceiverStargateV2.onlyEndpointV2 -FNDA:5,ReceiverStargateV2.onlyEndpointV2 -DA:53,5 -BRDA:53,0,0,3 -DA:54,3 -FN:60,ReceiverStargateV2. -FNDA:8,ReceiverStargateV2. -DA:67,5 -DA:68,3 -DA:69,3 -DA:70,2 -DA:71,4 -FN:83,ReceiverStargateV2.lzCompose -FNDA:5,ReceiverStargateV2.lzCompose -DA:92,2 -DA:95,2 -DA:98,2 -DA:102,2 -DA:108,2 -FN:121,ReceiverStargateV2.pullToken -FNDA:4,ReceiverStargateV2.pullToken -DA:126,3 -BRDA:126,2,0,1 -BRDA:126,2,1,1 -DA:128,2 -DA:129,2 -DA:131,1 -FN:143,ReceiverStargateV2._swapAndCompleteBridgeTokens -FNDA:2,ReceiverStargateV2._swapAndCompleteBridgeTokens -DA:150,2 -DA:152,2 -BRDA:152,4,0,- -BRDA:152,4,1,1 -DA:154,1 -BRDA:154,5,0,- -DA:157,0 -DA:158,0 -DA:160,0 -DA:167,0 -DA:173,1 -DA:177,0 -DA:179,1 -DA:180,1 -DA:182,1 -DA:192,1 -DA:193,1 -DA:195,1 -BRDA:195,8,0,- -DA:197,0 -DA:199,0 -DA:206,0 -DA:210,1 -DA:212,1 -DA:215,0 -DA:216,0 -DA:217,0 -DA:226,1 -FNF:5 -FNH:5 -LF:40 -LH:29 -BRF:7 -BRH:4 -end_of_record -TN: -SF:src/Periphery/RelayerCelerIM.sol -FN:40,RelayerCelerIM.onlyCBridgeMessageBus -FNDA:2,RelayerCelerIM.onlyCBridgeMessageBus -DA:41,2 -FN:44,RelayerCelerIM.onlyDiamond -FNDA:268,RelayerCelerIM.onlyDiamond -DA:45,268 -FN:51,RelayerCelerIM. -FNDA:0,RelayerCelerIM. -DA:56,0 -DA:57,0 -DA:58,0 -FN:73,RelayerCelerIM.executeMessageWithTransfer -FNDA:3,RelayerCelerIM.executeMessageWithTransfer -DA:87,2 -DA:92,2 -DA:97,2 -DA:106,2 -FN:117,RelayerCelerIM.executeMessageWithTransferRefund -FNDA:2,RelayerCelerIM.executeMessageWithTransferRefund -DA:128,1 -DA:134,1 -DA:136,1 -DA:144,1 -FN:153,RelayerCelerIM.sendTokenTransfer -FNDA:268,RelayerCelerIM.sendTokenTransfer -DA:164,268 -BRDA:164,2,0,- -BRDA:164,2,1,- -DA:165,263 -DA:166,263 -BRDA:166,3,0,- -BRDA:166,3,1,259 -DA:168,4 -DA:179,259 -DA:185,259 -DA:194,263 -DA:202,5 -BRDA:201,4,0,- -BRDA:201,4,1,- -DA:204,1 -DA:205,1 -DA:210,1 -DA:217,1 -DA:225,4 -BRDA:224,5,0,- -BRDA:224,5,1,- -DA:227,1 -DA:228,1 -DA:233,1 -DA:239,1 -DA:246,3 -BRDA:245,6,0,- -BRDA:245,6,1,- -DA:248,2 -DA:249,2 -BRDA:249,7,0,- -BRDA:249,7,1,1 -DA:251,1 -DA:260,1 -DA:265,1 -DA:274,1 -BRDA:273,8,0,- -BRDA:273,8,1,- -DA:276,1 -DA:277,1 -DA:282,1 -DA:290,0 -BRDA:289,9,0,- -BRDA:289,9,1,- -DA:293,0 -DA:294,0 -DA:299,0 -DA:307,0 -FN:320,RelayerCelerIM.forwardSendMessageWithTransfer -FNDA:2,RelayerCelerIM.forwardSendMessageWithTransfer -DA:327,2 -FN:346,RelayerCelerIM._swapAndCompleteBridgeTokens -FNDA:2,RelayerCelerIM._swapAndCompleteBridgeTokens -DA:354,2 -DA:355,2 -DA:360,2 -BRDA:360,10,0,- -BRDA:360,10,1,1 -DA:362,0 -DA:368,0 -DA:369,0 -DA:370,0 -DA:372,0 -DA:373,0 -BRDA:373,11,0,- -DA:374,0 -DA:378,2 -DA:379,2 -DA:380,2 -DA:383,2 -DA:389,1 -DA:390,1 -DA:391,1 -DA:392,1 -DA:394,2 -DA:397,2 -BRDA:397,12,0,1 -DA:398,1 -FN:412,RelayerCelerIM.withdraw -FNDA:0,RelayerCelerIM.withdraw -DA:417,0 -BRDA:417,13,0,- -BRDA:417,13,1,- -DA:419,0 -DA:420,0 -BRDA:420,14,0,- -DA:421,0 -DA:424,0 -DA:426,0 -FN:435,RelayerCelerIM.triggerRefund -FNDA:1,RelayerCelerIM.triggerRefund -DA:442,1 -DA:446,1 -DA:447,0 -DA:448,0 -DA:449,0 -DA:450,0 -DA:451,0 -BRDA:451,15,0,- -DA:452,0 -DA:457,1 -DA:460,1 -BRDA:460,16,0,1 -BRDA:460,16,1,- -DA:461,1 -DA:462,1 -DA:463,1 -DA:465,0 -FNF:10 -FNH:8 -LF:87 -LH:59 -BRF:26 -BRH:5 -end_of_record -TN: -SF:src/Periphery/ServiceFeeCollector.sol -FN:39,ServiceFeeCollector. -FNDA:20,ServiceFeeCollector. -FN:47,ServiceFeeCollector.collectTokenInsuranceFees -FNDA:4,ServiceFeeCollector.collectTokenInsuranceFees -DA:52,4 -DA:53,4 -FN:58,ServiceFeeCollector.collectNativeInsuranceFees -FNDA:2,ServiceFeeCollector.collectNativeInsuranceFees -DA:59,2 -FN:68,ServiceFeeCollector.withdrawFees -FNDA:2,ServiceFeeCollector.withdrawFees -DA:69,1 -DA:70,1 -DA:71,1 -FN:76,ServiceFeeCollector.batchWithdrawFees -FNDA:1,ServiceFeeCollector.batchWithdrawFees -DA:79,1 -DA:80,1 -DA:81,1 -DA:82,2 -DA:83,2 -DA:88,2 -DA:90,2 -FNF:5 -FNH:5 -LF:13 -LH:13 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Periphery/TokenWrapper.sol -FN:27,TokenWrapper. -FNDA:0,TokenWrapper. -DA:28,0 -DA:29,0 -FN:35,TokenWrapper.deposit -FNDA:1,TokenWrapper.deposit -DA:36,1 -DA:37,1 -FN:41,TokenWrapper.withdraw -FNDA:1,TokenWrapper.withdraw -DA:46,1 -DA:47,1 -DA:48,1 -DA:49,1 -DA:50,1 -BRDA:50,0,0,- -DA:51,0 -FNF:3 -FNH:2 -LF:10 -LH:7 -BRF:1 -BRH:0 -end_of_record -TN: diff --git a/networks b/networks index 292ceb72f..25671c586 100644 --- a/networks +++ b/networks @@ -12,6 +12,7 @@ fraxtal fuse gnosis gravity +immutablezkevm linea mantle metis @@ -24,6 +25,7 @@ polygonzkevm rootstock scroll sei +taiko zksync bsc-testnet lineatest diff --git a/package.json b/package.json index a9b161371..01d99889d 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,8 @@ "healthcheck": "tsx ./script/deploy/healthCheck.mts", "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" + "add-safe-owners": "ts-node ./script/deploy/safe/add-owners-to-safe.ts", + "flatten": "forge flatten --output" }, "dependencies": { "@arbitrum/sdk": "^3.0.0", @@ -105,7 +106,7 @@ "notify-send": "^0.1.2", "pino": "^7.9.2", "tsx": "^4.7.2", - "viem": "^2.11.1", + "viem": "^2.18.7", "zx": "^8.0.2" }, "lint-staged": { diff --git a/script/deploy/_targetState.json b/script/deploy/_targetState.json index c6c06940c..c129e7483 100644 --- a/script/deploy/_targetState.json +++ b/script/deploy/_targetState.json @@ -5,15 +5,15 @@ "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -21,10 +21,12 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", "ArbitrumBridgeFacet": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", @@ -35,30 +37,34 @@ "GnosisBridgeFacet": "1.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", "OmniBridgeFacet": "1.0.0", "OptimismBridgeFacet": "1.0.0", "PolygonBridgeFacet": "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", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -66,10 +72,12 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", "ArbitrumBridgeFacet": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", @@ -80,76 +88,20 @@ "GnosisBridgeFacet": "1.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", "OmniBridgeFacet": "1.0.0", "OptimismBridgeFacet": "1.0.0", "PolygonBridgeFacet": "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", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0", - "ArbitrumBridgeFacet": "1.0.0", - "CelerCircleBridgeFacet": "1.0.1", - "CircleBridgeFacet": "1.0.0", - "DeBridgeFacet": "1.0.0", - "GnosisBridgeFacet": "1.0.0", - "GravityFacet": "1.0.0", - "OmniBridgeFacet": "1.0.0", - "OptimismBridgeFacet": "1.0.0", - "PolygonBridgeFacet": "1.0.0", - "RoninBridgeFacet": "1.0.0", - "SquidFacet": "1.0.0", - "SynapseBridgeFacet": "1.0.0", - "ThorSwapFacet": "1.0.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "CCIPFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "CCIPFacet": "1.0.0" + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" } } }, @@ -159,15 +111,15 @@ "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -175,10 +127,12 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", "CelerCircleBridgeFacet": "1.0.1", @@ -186,26 +140,30 @@ "CelerIMFacetMutable": "2.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", "SquidFacet": "1.0.0", "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -213,10 +171,12 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "AcrossFacet": "2.0.0", "AcrossFacetPacked": "1.0.0", "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", "CelerCircleBridgeFacet": "1.0.1", @@ -224,28 +184,34 @@ "CelerIMFacetImmutable": "2.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", "SquidFacet": "1.0.0", "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" } - }, - "staging": { + } + }, + "bsc": { + "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -253,37 +219,38 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", + "OpBNBBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OpBNBBridgeFacet\u001b[0m\u001b[0m", "SquidFacet": "1.0.0", "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "ThorSwapFacet": "1.2.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -291,41 +258,42 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", "RelayerCelerIM": "2.0.0", "CelerIMFacetImmutable": "2.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", + "OpBNBBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OpBNBBridgeFacet\u001b[0m\u001b[0m", "SquidFacet": "1.0.0", "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "ThorSwapFacet": "1.2.0" } } }, - "base": { + "gnosis": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -333,33 +301,29 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AllBridgeFacet": "2.0.0", + "LiFiDEXAggregator": "1.0.0", "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "CircleBridgeFacet": "1.0.0", + "GnosisBridgeL2Facet": "1.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", - "StargateFacet": "2.2.0", "HopFacetOptimized": "2.0.0", - "SymbiosisFacet": "1.0.0" + "OmniBridgeFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -367,78 +331,33 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AllBridgeFacet": "2.0.0", + "LiFiDEXAggregator": "1.0.0", "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "CircleBridgeFacet": "1.0.0", + "GnosisBridgeL2Facet": "1.0.0", "HopFacet": "2.0.0", "HopFacetPacked": "1.0.6", - "StargateFacet": "2.2.0", "HopFacetOptimized": "2.0.0", - "SymbiosisFacet": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "OmniBridgeFacet": "1.0.0" } } }, - "bsc": { + "fantom": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -446,32 +365,28 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", + "LiFiDEXAggregator": "1.0.0", "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", "HyphenFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0", - "ThorSwapFacet": "1.2.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" + "StargateFacet": "2.2.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -479,97 +394,82 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", + "LiFiDEXAggregator": "1.0.0", "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", "RelayerCelerIM": "2.0.0", "CelerIMFacetImmutable": "2.0.0", "HyphenFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0", - "ThorSwapFacet": "1.2.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" + "StargateFacet": "2.2.0" } } }, - "gnosis": { + "okx": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AmarokFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "GnosisBridgeL2Facet": "1.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", - "OmniBridgeFacet": "1.0.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", - "AmarokFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "GnosisBridgeL2Facet": "1.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", - "OmniBridgeFacet": "1.0.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0" } } }, - "fantom": { + "avalanche": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -577,26 +477,38 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "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", + "CircleBridgeFacet": "1.0.0", "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0" + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "ThorSwapFacet": "1.2.0", + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -604,1731 +516,1010 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AllBridgeFacet": "2.0.0", "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "CelerCircleBridgeFacet": "1.0.1", "RelayerCelerIM": "2.0.0", "CelerIMFacetImmutable": "2.0.0", + "CircleBridgeFacet": "1.0.0", "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0" + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "ThorSwapFacet": "1.2.0", + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" } - }, - "staging": { + } + }, + "arbitrum": { + "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - } - } - }, - "okx": { - "production": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamondImmutable": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - } - } - }, - "avalanche": { - "production": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "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", - "AllBridgeFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0", - "CircleBridgeFacet": "1.0.0", - "HyphenFacet": "1.0.0", - "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0", - "ThorSwapFacet": "1.2.0", - "SymbiosisFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.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", - "AllBridgeFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetImmutable": "2.0.0", - "CircleBridgeFacet": "1.0.0", - "HyphenFacet": "1.0.0", - "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0", - "ThorSwapFacet": "1.2.0", - "SymbiosisFacet": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0", - "CelerCircleBridgeFacet": "1.0.1", - "CircleBridgeFacet": "1.0.0", - "ThorSwapFacet": "1.0.0", - "CCIPFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0", - "CCIPFacet": "1.0.0" - } - } - }, - "arbitrum": { - "production": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "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", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0", - "CircleBridgeFacet": "1.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", - "HyphenFacet": "1.0.0", - "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.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", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetImmutable": "2.0.0", - "CircleBridgeFacet": "1.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", - "HyphenFacet": "1.0.0", - "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "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", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0", - "CircleBridgeFacet": "1.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", - "HyphenFacet": "1.0.0", - "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0" - } - } - }, - "optimism": { - "production": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "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", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0", - "CircleBridgeFacet": "1.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", - "HyphenFacet": "1.0.0", - "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.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", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetImmutable": "2.0.0", - "CircleBridgeFacet": "1.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", - "HyphenFacet": "1.0.0", - "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "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", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0", - "CircleBridgeFacet": "1.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", - "HyphenFacet": "1.0.0", - "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.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", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AllBridgeFacet": "2.0.0", - "AmarokFacet": "2.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "CelerCircleBridgeFacet": "1.0.1", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetImmutable": "2.0.0", - "CircleBridgeFacet": "1.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", - "HyphenFacet": "1.0.0", - "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0", - "SymbiosisFacet": "1.0.0" - } - } - }, - "moonriver": { - "production": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamondImmutable": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetImmutable": "2.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - } - } - }, - "moonbeam": { - "production": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", - "SquidFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamondImmutable": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", - "SquidFacet": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - } - } - }, - "celo": { - "production": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.1", + "StandardizedCallFacet": "1.1.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", - "AllBridgeFacet": "2.0.0", - "SquidFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamondImmutable": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0", - "AllBridgeFacet": "2.0.0", - "SquidFacet": "1.0.0" - } - } - }, - "fuse": { - "production": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamondImmutable": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - } - } - }, - "cronos": {}, - "velas": { - "production": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "GenericSwapFacetV3": "1.0.1", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamondImmutable": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AcrossFacet": "2.0.0", + "AcrossFacetPacked": "1.0.0", + "AllBridgeFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "CelerCircleBridgeFacet": "1.0.1", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetMutable": "2.0.0", + "CircleBridgeFacet": "1.0.0", + "HopFacet": "2.0.0", + "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", + "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", + "SquidFacet": "1.0.0", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "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.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AcrossFacet": "2.0.0", + "AcrossFacetPacked": "1.0.0", + "AllBridgeFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "CelerCircleBridgeFacet": "1.0.1", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetImmutable": "2.0.0", + "CircleBridgeFacet": "1.0.0", + "HopFacet": "2.0.0", + "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", + "HyphenFacet": "1.0.0", + "MayanFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", + "SquidFacet": "1.0.0", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" } } }, - "harmony": { + "optimism": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AcrossFacet": "2.0.0", + "AcrossFacetPacked": "1.0.0", + "AllBridgeFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "CelerCircleBridgeFacet": "1.0.1", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetMutable": "2.0.0", + "CircleBridgeFacet": "1.0.0", + "HopFacet": "2.0.0", + "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", + "HyphenFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AcrossFacet": "2.0.0", + "AcrossFacetPacked": "1.0.0", + "AllBridgeFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "AmarokFacetPacked": "1.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "CelerCircleBridgeFacet": "1.0.1", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetImmutable": "2.0.0", + "CircleBridgeFacet": "1.0.0", + "HopFacet": "2.0.0", + "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", + "HyphenFacet": "1.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" } } }, - "evmos": { + "moonriver": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetMutable": "2.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetImmutable": "2.0.0" } - }, - "staging": { + } + }, + "moonbeam": { + "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.1", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0", - "GravityFacet": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", + "SquidFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "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.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", + "SquidFacet": "1.0.0" } } }, - "aurora": { + "fuse": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0" + "LiFiDEXAggregator": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetImmutable": "2.0.0" + "LiFiDEXAggregator": "1.0.0" } - }, - "staging": { + } + }, + "velas": { + "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.1", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "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.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0" } } }, - "boba": { + "harmony": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0" } - }, - "staging": { + } + }, + "evmos": { + "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.1", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "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.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0" } } }, - "nova": { - "staging": { + "aurora": { + "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.1", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetMutable": "2.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "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.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetImmutable": "2.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0" } } }, - "zksyncera": { - "staging": { + "boba": { + "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.1", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", + "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "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.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", + "SymbiosisFacet": "1.0.0" } } }, - "polygonzkevm": { + "arbitrumnova": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.1", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "RelayerCelerIM": "2.0.0", "CelerIMFacetMutable": "2.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.1", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "RelayerCelerIM": "2.0.0", "CelerIMFacetImmutable": "2.0.0", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", "SymbiosisFacet": "1.0.0" } - }, - "staging": { + } + }, + "zksync": { + "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.1", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AcrossFacet": "2.0.0", + "AcrossFacetPacked": "1.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "CelerIMFacetMutable": "2.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", + "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "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.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AcrossFacet": "2.0.0", + "AcrossFacetPacked": "1.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "CelerIMFacetImmutable": "2.0.0", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", + "SymbiosisFacet": "1.0.0" } } }, - "goerli": {}, - "bsc-testnet": { + "polygonzkevm": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0" + "CelerIMFacetMutable": "2.0.0", + "HopFacet": "2.0.0", + "HopFacetPacked": "1.0.6", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", + "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", "RelayerCelerIM": "2.0.0", - "CelerIMFacetImmutable": "2.0.0" + "CelerIMFacetImmutable": "2.0.0", + "HopFacet": "2.0.0", + "HopFacetPacked": "1.0.6", + "OFTWrapperFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract OFTWrapperFacet\u001b[0m\u001b[0m", + "SymbiosisFacet": "1.0.0" } } }, - "sepolia": { + "linea": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AmarokFacet": "3.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "HopFacet": "2.0.0", + "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AmarokFacet": "3.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "HopFacet": "2.0.0", + "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0" } } }, - "mumbai": { + "base": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0" + "LiFiDEXAggregator": "1.0.0", + "AcrossFacet": "2.0.0", + "AcrossFacetPacked": "1.0.0", + "AllBridgeFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "CelerCircleBridgeFacet": "1.0.1", + "CircleBridgeFacet": "1.0.0", + "HopFacet": "2.0.0", + "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetImmutable": "2.0.0" + "LiFiDEXAggregator": "1.0.0", + "AcrossFacet": "2.0.0", + "AcrossFacetPacked": "1.0.0", + "AllBridgeFacet": "2.0.0", + "AmarokFacet": "3.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "CelerCircleBridgeFacet": "1.0.1", + "CircleBridgeFacet": "1.0.0", + "HopFacet": "2.0.0", + "HopFacetPacked": "1.0.6", + "HopFacetOptimized": "2.0.0", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0", + "AllbridgeCircleBridgeFacet": "\u001b[31m[error] the following filepath is invalid: \u001b[31m[error] could not find src FILE path for contract AllbridgeCircleBridgeFacet\u001b[0m\u001b[0m" } } }, - "lineatest": { + "opbnb": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0" + "LiFiDEXAggregator": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetImmutable": "2.0.0" + "LiFiDEXAggregator": "1.0.0" } } }, - "zksynceratest": {}, - "linea": { + "metis": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -2336,28 +1527,26 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "AmarokFacet": "3.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", @@ -2365,375 +1554,348 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "AmarokFacet": "3.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "HopFacet": "2.0.0", - "HopFacetPacked": "1.0.6", "StargateFacet": "2.2.0", - "HopFacetOptimized": "2.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0" } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", - "AccessManagerFacet": "1.0.0", - "WithdrawFacet": "1.0.0", - "PeripheryRegistryFacet": "1.0.0", - "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", - "ERC20Proxy": "1.0.0", - "Executor": "2.0.0", - "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0" - } } }, - "localanvil": {}, - "binancesmartchain": { - "staging": { + "scroll": { + "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.1", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0", - "AllBridgeFacet": "2.0.0", - "OFTWrapperFacet": "0.0.3", - "OpBNBBridgeFacet": "1.0.0", - "AmarokFacetPacked": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "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.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0", - "OpBNBBridgeFacet": "1.0.0", - "AmarokFacetPacked": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "CBridgeFacet": "1.0.0", + "CBridgeFacetPacked": "1.0.3", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0" } } }, - "xdai": { - "staging": { + "mode": { + "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", + "CalldataVerificationFacet": "1.1.1", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0", - "GnosisBridgeL2Facet": "1.0.0", - "OmniBridgeFacet": "1.0.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AcrossFacet": "2.0.0", + "AcrossFacetPacked": "1.0.0", + "AmarokFacet": "3.0.0", + "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "1.0.0", + "DexManagerFacet": "1.0.1", "AccessManagerFacet": "1.0.0", "WithdrawFacet": "1.0.0", "PeripheryRegistryFacet": "1.0.0", "GenericSwapFacet": "1.0.0", - "LIFuelFacet": "1.0.0", - "CalldataVerificationFacet": "1.1.0", - "StandardizedCallFacet": "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.0", - "ServiceFeeCollector": "1.0.0", - "LiFuelFeeCollector": "1.0.0", - "HopFacetOptimized": "2.0.0", - "AmarokFacetPacked": "1.0.0" + "Receiver": "2.0.2", + "LiFuelFeeCollector": "1.0.1", + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "AcrossFacet": "2.0.0", + "AcrossFacetPacked": "1.0.0", + "AmarokFacet": "3.0.0", + "SymbiosisFacet": "1.0.0" } } }, - "binancesmartchaintestnet": {}, - "polygon-mumbai": {}, - "lineatestnet": {}, - "zksync-testnet": { + "mantle": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "SquidFacet": "1.0.0", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "SquidFacet": "1.0.0", + "StargateFacet": "2.2.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", + "SymbiosisFacet": "1.0.0" } } }, - "arbitrumnova": { + "celo": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetMutable": "2.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "AllBridgeFacet": "2.0.0", + "SquidFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "RelayerCelerIM": "2.0.0", - "CelerIMFacetImmutable": "2.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "AllBridgeFacet": "2.0.0", + "SquidFacet": "1.0.0" } } }, - "zksync": { + "blast": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.1", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", - "CelerIMFacetMutable": "2.0.0", + "SquidFacet": "1.0.0", "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.1", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", + "LiFiDEXAggregator": "1.0.0", "CBridgeFacet": "1.0.0", "CBridgeFacetPacked": "1.0.3", - "CelerIMFacetImmutable": "2.0.0", + "SquidFacet": "1.0.0", "SymbiosisFacet": "1.0.0" } } }, - "polygon-zkevm": {}, - "opbnb": { + "rootstock": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.1", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.1", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" - } - }, - "staging": { - "LiFiDiamond": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0", - "OwnershipFacet": "1.0.0" - }, - "LiFiDiamondImmutable": { - "DiamondCutFacet": "1.0.0", - "DiamondLoupeFacet": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0", + "SymbiosisFacet": "1.0.0" } } }, - "metis": { + "sei": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", @@ -2755,8 +1917,10 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AmarokFacet": "3.0.0", - "StargateFacet": "2.2.0", + "LiFiDEXAggregator": "1.0.0", + "SquidFacet": "1.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { @@ -2779,275 +1943,275 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AmarokFacet": "3.0.0", - "StargateFacet": "2.2.0", + "LiFiDEXAggregator": "1.0.0", + "SquidFacet": "1.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0" } } }, - "scroll": { + "fraxtal": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "StargateFacet": "2.2.0", + "LiFiDEXAggregator": "1.0.0", + "SquidFacet": "1.0.0", "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "StargateFacet": "2.2.0", + "LiFiDEXAggregator": "1.0.0", + "SquidFacet": "1.0.0", "SymbiosisFacet": "1.0.0" } } }, - "mode": { + "taiko": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AmarokFacet": "3.0.0", + "LiFiDEXAggregator": "1.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "AcrossFacet": "2.0.0", - "AcrossFacetPacked": "1.0.0", - "AmarokFacet": "3.0.0", + "LiFiDEXAggregator": "1.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0", "SymbiosisFacet": "1.0.0" } } }, - "mantle": { + "gravity": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamond": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", + "StandardizedCallFacet": "1.1.0", "LiFiDiamondImmutable": "1.0.0", "ERC20Proxy": "1.0.0", "Executor": "2.0.0", "FeeCollector": "1.0.0", - "Receiver": "2.0.0", + "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "SquidFacet": "1.0.0", - "StargateFacet": "2.2.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "StargateFacetV2": "1.0.1", + "ReceiverStargateV2": "1.0.0" } } }, - "blast": { + "immutablezkevm": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.1", + "StandardizedCallFacet": "1.1.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", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "SquidFacet": "1.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "SquidFacet": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamondImmutable": "1.0.1", - "ERC20Proxy": "1.0.1", - "Executor": "2.0.1", - "FeeCollector": "1.0.1", - "Receiver": "2.0.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", - "CBridgeFacet": "1.0.0", - "CBridgeFacetPacked": "1.0.3", - "SquidFacet": "1.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "SquidFacet": "1.0.0" } } }, - "rootstock": { + "bsc-testnet": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamond": "1.0.1", + "StandardizedCallFacet": "1.1.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", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetMutable": "2.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", "DiamondLoupeFacet": "1.0.0", "OwnershipFacet": "1.0.0", - "DexManagerFacet": "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.0", - "LIFuelFacet": "1.0.0", + "GenericSwapFacetV3": "1.0.1", + "LIFuelFacet": "1.0.1", "CalldataVerificationFacet": "1.1.1", - "StandardizedCallFacet": "1.0.0", - "LiFiDiamondImmutable": "1.0.1", - "ERC20Proxy": "1.0.1", - "Executor": "2.0.1", - "FeeCollector": "1.0.1", - "Receiver": "2.0.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", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetImmutable": "2.0.0" } } }, - "sei": { + "sepolia": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", @@ -3069,8 +2233,7 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "SquidFacet": "1.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", @@ -3092,12 +2255,11 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "SquidFacet": "1.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0" } } }, - "fraxtal": { + "mumbai": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", @@ -3119,8 +2281,9 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "SquidFacet": "1.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetMutable": "2.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", @@ -3142,12 +2305,13 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "SquidFacet": "1.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetImmutable": "2.0.0" } } }, - "taiko": { + "lineatest": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", @@ -3169,7 +2333,9 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetMutable": "2.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", @@ -3191,11 +2357,13 @@ "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", "TokenWrapper": "1.0.0", - "SymbiosisFacet": "1.0.0" + "LiFiDEXAggregator": "1.0.0", + "RelayerCelerIM": "2.0.0", + "CelerIMFacetImmutable": "2.0.0" } } }, - "gravity": { + "zksync-testnet": { "production": { "LiFiDiamond": { "DiamondCutFacet": "1.0.0", @@ -3215,10 +2383,9 @@ "Executor": "2.0.0", "FeeCollector": "1.0.0", "Receiver": "2.0.2", - "StargateFacetV2": "1.0.0", - "ReceiverStargateV2": "1.0.0", "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0" }, "LiFiDiamondImmutable": { "DiamondCutFacet": "1.0.0", @@ -3239,7 +2406,8 @@ "FeeCollector": "1.0.0", "Receiver": "2.0.2", "LiFuelFeeCollector": "1.0.1", - "TokenWrapper": "1.0.0" + "TokenWrapper": "1.0.0", + "LiFiDEXAggregator": "1.0.0" } } } diff --git a/script/deploy/deployAllContracts.sh b/script/deploy/deployAllContracts.sh index ff915ee26..c81f40113 100755 --- a/script/deploy/deployAllContracts.sh +++ b/script/deploy/deployAllContracts.sh @@ -75,14 +75,6 @@ deployAllContracts() { checkFailure $? "update approve deployer wallet to execute config-related functions" echo "[info] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< deployer wallet approved" - # run sync dexs script - echo "" - diamondSyncDEXs "$NETWORK" "$ENVIRONMENT" "$DIAMOND_CONTRACT_NAME" - - # run sync sigs script - echo "" - diamondSyncSigs "$NETWORK" "$ENVIRONMENT" "$DIAMOND_CONTRACT_NAME" - # deploy all non-core facets (that are in target_state.JSON) and add to diamond echo "" echo "" @@ -116,6 +108,17 @@ deployAllContracts() { # update periphery registry diamondUpdatePeriphery "$NETWORK" "$ENVIRONMENT" "$DIAMOND_CONTRACT_NAME" true false "" + # add core periphery addresses to dexs.json for whitelisting in subsequent steps + addPeripheryToDexsJson "$NETWORK" "$ENVIRONMENT" + + # run sync dexs script + echo "" + diamondSyncDEXs "$NETWORK" "$ENVIRONMENT" "$DIAMOND_CONTRACT_NAME" + + # run sync sigs script + echo "" + diamondSyncSigs "$NETWORK" "$ENVIRONMENT" "$DIAMOND_CONTRACT_NAME" + echo "" echo "[info] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< deployAllContracts completed" } diff --git a/script/deploy/deploySingleContract.sh b/script/deploy/deploySingleContract.sh index 48bdc899a..d327d40bd 100755 --- a/script/deploy/deploySingleContract.sh +++ b/script/deploy/deploySingleContract.sh @@ -11,11 +11,11 @@ deploySingleContract() { # read function arguments into variables local CONTRACT="$1" - NETWORK="$2" - ENVIRONMENT="$3" - VERSION="$4" - EXIT_ON_ERROR="$5" - DIAMOND_TYPE="$6" # optional parameter (only used by CelerIMFacet) + local NETWORK="$2" + local ENVIRONMENT="$3" + local VERSION="$4" + local EXIT_ON_ERROR="$5" + local DIAMOND_TYPE="$6" # optional parameter (only used by CelerIMFacet) # load env variables source .env @@ -93,17 +93,19 @@ deploySingleContract() { 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") - CONTRACT=$(echo $SCRIPT | sed -e 's/Deploy//') + local CONTRACT=$(echo $SCRIPT | sed -e 's/Deploy//') else SCRIPT="Deploy"$CONTRACT fi # Display contract-specific information, if existing if grep -q "^$CONTRACT=" "$CONTRACT_REMINDERS"; then - echo "" + echo -e "\n\n" + printf '\033[31m%s\031\n' "--------------------------------------- !!!!!!!! ATTENTION !!!!!!!! ---------------------------------------" warning "Please read the following information carefully: " warning "${!CONTRACT}" - echo "" + printf '\033[31m%s\031\n' "-----------------------------------------------------------------------------------------------------------" + echo -e "\n\n" fi # check if deploy script exists @@ -250,8 +252,10 @@ deploySingleContract() { # end this script according to flag if [[ -z "$EXIT_ON_ERROR" ]]; then + echo "return 1" return 1 else + echo "exit 1" exit 1 fi fi diff --git a/script/deploy/facets/DeployLiFiDEXAggregator.s.sol b/script/deploy/facets/DeployLiFiDEXAggregator.s.sol new file mode 100644 index 000000000..ba89e01c4 --- /dev/null +++ b/script/deploy/facets/DeployLiFiDEXAggregator.s.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import { DeployScriptBase } from "./utils/DeployScriptBase.sol"; +import { stdJson } from "forge-std/Script.sol"; +import { LiFiDEXAggregator } from "lifi/Periphery/LiFiDEXAggregator.sol"; + +contract DeployScript is DeployScriptBase { + using stdJson for string; + + constructor() DeployScriptBase("LiFiDEXAggregator") {} + + function run() + public + returns (LiFiDEXAggregator deployed, bytes memory constructorArgs) + { + constructorArgs = getConstructorArgs(); + + deployed = LiFiDEXAggregator( + deploy(type(LiFiDEXAggregator).creationCode) + ); + } + + function getConstructorArgs() internal override returns (bytes memory) { + string memory path = string.concat(root, "/config/global.json"); + string memory json = vm.readFile(path); + + address[] memory priviledgedUsers = new address[](1); + priviledgedUsers[0] = json.readAddress(".pauserWallet"); + + // the original RouteProcessor4.sol is also deployed with address(0) for _bentoBox + + return abi.encode(address(0), priviledgedUsers); + } +} diff --git a/script/deploy/healthCheck.mts b/script/deploy/healthCheck.mts index 21a2daf64..546156fac 100644 --- a/script/deploy/healthCheck.mts +++ b/script/deploy/healthCheck.mts @@ -15,6 +15,31 @@ import { parseAbi, } from 'viem' +const chainNameMappings: Record<string, string> = { + zksync: 'zkSync', + polygonzkevm: 'polygonZkEvm', + immutablezkevm: 'immutableZkEvm', +} + +const chainMap: Record<string, Chain> = {} +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 +} + const SAFE_THRESHOLD = 3 const louperCmd = 'louper-cli' @@ -44,12 +69,6 @@ const corePeriphery = [ 'TokenWrapper', ] -const chainMap: Record<string, Chain> = {} -for (const [k, v] of Object.entries(chains)) { - // @ts-ignore - chainMap[k] = v -} - const errors: string[] = [] const main = defineCommand({ meta: { @@ -105,7 +124,8 @@ const main = defineCommand({ const globalConfig = await import('../../config/global.json') - const chain = chainMap[network] + const chain = getViemChainForNetworkName(network) + const publicClient = createPublicClient({ batch: { multicall: true }, chain, @@ -172,15 +192,18 @@ 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` - const resgisteredFacets = JSON.parse(facetsResult.stdout).facets.map( + const registeredFacets = JSON.parse(facetsResult.stdout).facets.map( (f: { name: string }) => f.name ) for (const facet of [...coreFacets, ...nonCoreFacets]) { - if (!resgisteredFacets.includes(facet)) { + if (!registeredFacets.includes(facet)) { logError( `Facet ${facet} not registered in Diamond or possibly unverified` ) @@ -406,9 +429,9 @@ const main = defineCommand({ // Check that threshold is correct if (safeConfig.threshold < SAFE_THRESHOLD) { - logError(`SAFE signtaure threshold is less than ${SAFE_THRESHOLD}`) + logError(`SAFE signature threshold is less than ${SAFE_THRESHOLD}`) } else { - consola.success(`SAFE signtaure threshold is ${safeConfig.threshold}`) + consola.success(`SAFE signature threshold is ${safeConfig.threshold}`) } } diff --git a/script/deploy/resources/contractSpecificReminders.sh b/script/deploy/resources/contractSpecificReminders.sh index 87cea7d08..90bac1c30 100644 --- a/script/deploy/resources/contractSpecificReminders.sh +++ b/script/deploy/resources/contractSpecificReminders.sh @@ -5,3 +5,7 @@ # EXAMPLE: # CelerIMFacet="RelayerCelerIM needs to be deployed prior to deploying this facet (CelerIMFacet)" +FeeCollector="Please do not forget to add the new contract address to whitelisted DEXs before using it" +LiFuelFeeCollector="Please do not forget to add the new contract address to whitelisted DEXs before using it" +TokenWrapper="Please do not forget to add the new contract address to whitelisted DEXs before using it" +LiFiDEXAggregator="Please do not forget to add the new contract address to whitelisted DEXs before using it" diff --git a/script/deploy/resources/deployRequirements.json b/script/deploy/resources/deployRequirements.json index 49cff1354..3c3585753 100644 --- a/script/deploy/resources/deployRequirements.json +++ b/script/deploy/resources/deployRequirements.json @@ -192,6 +192,15 @@ } } }, + "LiFiDEXAggregator": { + "configData": { + "_privilegedUser": { + "configFileName": "global.json", + "keyInConfigFile": ".pauserWallet", + "allowToDeployWithZeroAddress": "false" + } + } + }, "MakerTeleportFacet": { "configData": { "_teleportGateway": { diff --git a/script/deploy/safe/add-owners-to-safe.ts b/script/deploy/safe/add-owners-to-safe.ts index 580600a03..1db2b99d2 100644 --- a/script/deploy/safe/add-owners-to-safe.ts +++ b/script/deploy/safe/add-owners-to-safe.ts @@ -1,25 +1,11 @@ import { defineCommand, runMain } from 'citty' import { type SafeApiKitConfig } from '@safe-global/api-kit' -import { type Chain, getAddress } from 'viem' -import Safe, { - ContractNetworksConfig, - EthersAdapter, -} from '@safe-global/protocol-kit' +import { getAddress } from 'viem' +import Safe, { EthersAdapter } from '@safe-global/protocol-kit' import SafeApiKit from '@safe-global/api-kit' import { ethers } from 'ethers6' -import * as chains from 'viem/chains' -import { - chainNameMappings, - getSafeUtilityContracts, - safeAddresses, - safeApiUrls, -} from './config' - -const chainMap: Record<string, Chain> = {} -for (const [k, v] of Object.entries(chains)) { - // @ts-ignore - chainMap[k] = v -} +import { getSafeUtilityContracts, safeAddresses, safeApiUrls } from './config' +import { getViemChainForNetworkName } from '../../../utils/viemScriptHelpers' const main = defineCommand({ meta: { @@ -48,17 +34,18 @@ const main = defineCommand({ }, }, async run({ args }) { - const chainName = chainNameMappings[args.network] || args.network - const chain: Chain = chainMap[chainName] + const { network, privateKey } = args + + const chain = getViemChainForNetworkName(network) const config: SafeApiKitConfig = { chainId: BigInt(chain.id), - txServiceUrl: safeApiUrls[chainName.toLowerCase()], + txServiceUrl: safeApiUrls[network], } const safeService = new SafeApiKit(config) - const safeAddress = getAddress(safeAddresses[chainName.toLowerCase()]) + const safeAddress = getAddress(safeAddresses[network]) const rpcUrl = args.rpcUrl || chain.rpcUrls.default.http[0] const provider = new ethers.JsonRpcProvider(rpcUrl) @@ -104,7 +91,6 @@ const main = defineCommand({ console.info('Adding owner', owner) console.info('Signer Address', senderAddress) console.info('Safe Address', safeAddress) - console.info('Network', chainName) // Propose transaction to the service await safeService.proposeTransaction({ diff --git a/script/deploy/safe/config.ts b/script/deploy/safe/config.ts index da076e3de..c344ccb9f 100644 --- a/script/deploy/safe/config.ts +++ b/script/deploy/safe/config.ts @@ -1,4 +1,5 @@ import { ContractNetworksConfig } from '@safe-global/protocol-kit' +import { immutableZkEvm } from 'viem/chains' export const safeApiUrls: Record<string, string> = { mainnet: 'https://safe-transaction-mainnet.safe.global/api', @@ -15,6 +16,7 @@ export const safeApiUrls: Record<string, string> = { fuse: 'https://transaction-fuse.safe.fuse.io/api', gnosis: 'https://safe-transaction-gnosis-chain.safe.global/api', gravity: 'https://safe.gravity.xyz/txs/api', + immutablezkevm: 'https://transaction.safe.immutable.com/api', linea: 'https://transaction.safe.linea.build/api', mantle: 'https://transaction.multisig.mantle.xyz/api', metis: 'https://metissafe.tech/txs/api', @@ -27,6 +29,7 @@ export const safeApiUrls: Record<string, string> = { rootstock: 'https://transaction.safe.rootstock.io/api', scroll: 'https://safe-transaction-scroll.safe.global/api', sei: 'https://transaction.sei-safe.protofire.io/api', + taiko: 'https://api.taikoscan.io/api', zksync: 'https://safe-transaction-zksync.safe.global/api', } @@ -45,6 +48,7 @@ export const safeAddresses: Record<string, string> = { fuse: '0x5336e97bA7332FAC20281Bda8B790c8892245Ded', gnosis: '0x2bC523875b59A1Ddd03CEB1F1b28c5B0e8e6654A', gravity: '0x245B16CaCE8730b009c5352186DcE7d73c3037A1', + immutablezkevm: '0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772', linea: '0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1', mantle: '0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772', metis: '0x925cD8289Ac2d617F52974da8338867f3bB62d56', @@ -57,20 +61,17 @@ export const safeAddresses: Record<string, string> = { rootstock: '0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1', scroll: '0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1', sei: '0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1', + taiko: '0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772', zksync: '0x02f1272aEaCaf7BD8b30278bc2AA381Cc623A744', } -export const chainNameMappings: Record<string, string> = { - zksync: 'zkSync', - polygonzkevm: 'polygonZkEvm', -} - export const getSafeUtilityContracts = (chainId: number) => { let contractNetworks: ContractNetworksConfig switch (chainId) { case 288: case 1088: - // Boba + case 13371: + // Boba, Metis, IMX contractNetworks = { [chainId.toString()]: { multiSendAddress: '0x998739BFdAAdde7C933B942a68053933098f9EDa', diff --git a/script/deploy/safe/confirm-safe-tx.ts b/script/deploy/safe/confirm-safe-tx.ts index 334675a89..bdb8a109b 100644 --- a/script/deploy/safe/confirm-safe-tx.ts +++ b/script/deploy/safe/confirm-safe-tx.ts @@ -6,12 +6,8 @@ import SafeApiKit from '@safe-global/api-kit' import { ethers } from 'ethers6' import consola from 'consola' import * as chains from 'viem/chains' -import { - chainNameMappings, - getSafeUtilityContracts, - safeAddresses, - safeApiUrls, -} from './config' +import { getSafeUtilityContracts, safeAddresses, safeApiUrls } from './config' +import { getViemChainForNetworkName } from '../../../utils/viemScriptHelpers' const ABI_LOOKUP_URL = `https://api.openchain.xyz/signature-database/v1/lookup?function=%SELECTOR%&filter=true` @@ -31,6 +27,8 @@ const skipNetworks: string[] = [ // 'fraxtal', // 'fuse', // 'gnosis', + // 'gravity', + // 'immutablezkevm', // 'linea', // 'mantle', // 'metis', @@ -77,17 +75,16 @@ for (const [k, v] of Object.entries(chains)) { } const func = async (network: string, privateKey: string, rpcUrl?: string) => { - const chainName = chainNameMappings[network] || network - const chain: Chain = chainMap[chainName] + const chain = getViemChainForNetworkName(network) const config: SafeApiKitConfig = { chainId: BigInt(chain.id), - txServiceUrl: safeApiUrls[chainName.toLowerCase()], + txServiceUrl: safeApiUrls[network.toLowerCase()], } const safeService = new SafeApiKit(config) - const safeAddress = safeAddresses[chainName.toLowerCase()] + const safeAddress = safeAddresses[network.toLowerCase()] const parsedRpcUrl = rpcUrl || chain.rpcUrls.default.http[0] const provider = new ethers.JsonRpcProvider(parsedRpcUrl) diff --git a/script/deploy/safe/propose-to-safe.ts b/script/deploy/safe/propose-to-safe.ts index 527809f70..75248faeb 100644 --- a/script/deploy/safe/propose-to-safe.ts +++ b/script/deploy/safe/propose-to-safe.ts @@ -9,12 +9,8 @@ import { type SafeTransactionDataPartial, } from '@safe-global/safe-core-sdk-types' import * as chains from 'viem/chains' -import { - chainNameMappings, - getSafeUtilityContracts, - safeAddresses, - safeApiUrls, -} from './config' +import { getViemChainForNetworkName } from '../../../utils/network' +import { getSafeUtilityContracts, safeAddresses, safeApiUrls } from './config' const chainMap: Record<string, Chain> = {} for (const [k, v] of Object.entries(chains)) { @@ -54,17 +50,16 @@ const main = defineCommand({ }, }, async run({ args }) { - const chainName = chainNameMappings[args.network] || args.network - const chain: Chain = chainMap[chainName] + const chain = getViemChainForNetworkName(args.network) const config: SafeApiKitConfig = { chainId: BigInt(chain.id), - txServiceUrl: safeApiUrls[chainName.toLowerCase()], + txServiceUrl: safeApiUrls[args.network.toLowerCase()], } const safeService = new SafeApiKit(config) - const safeAddress = safeAddresses[chainName.toLowerCase()] + const safeAddress = safeAddresses[args.network.toLowerCase()] const rpcUrl = args.rpcUrl || chain.rpcUrls.default.http[0] const provider = new ethers.JsonRpcProvider(rpcUrl) @@ -100,7 +95,7 @@ const main = defineCommand({ console.info('Signer Address', senderAddress) console.info('Safe Address', safeAddress) - console.info('Network', chainName) + console.info('Network', chain.name) console.info('Proosing transaction to', args.to) // Propose transaction to the service diff --git a/script/helperFunctions.sh b/script/helperFunctions.sh index 74ec735d7..9eb79eca9 100755 --- a/script/helperFunctions.sh +++ b/script/helperFunctions.sh @@ -1307,6 +1307,73 @@ function getBytecodeFromArtifact() { fi } +function addPeripheryToDexsJson() { + echo "[info] now adding all contracts listed in WHITELIST_PERIPHERY (config.sh) to config/dexs.json" + # read function arguments into variables + local NETWORK="$1" + local ENVIRONMENT="$2" + + local FILEPATH_DEXS="config/dexs.json" + local FILEPATH_GLOBAL_CONFIG="config/global.json" + + WHITELIST_PERIPHERY=($(jq -r '.autoWhitelistPeripheryContracts[] | select(length > 0)' "$FILEPATH_GLOBAL_CONFIG")) + + # Get all contracts that need to be whitelisted and convert the comma-separated string into an array + # IFS=',' read -r -a CONTRACTS <<< "$WHITELIST_PERIPHERY" + CONTRACTS=("${WHITELIST_PERIPHERY[@]}") + + # get number of periphery contracts to be added + local ADD_COUNTER=${#CONTRACTS[@]} + + + # get number of existing DEX addresses in the file for the given network + local EXISTING_DEXS=$(jq --arg network "$NETWORK" '.[$network] | length' "$FILEPATH_DEXS") + + # Iterate through all contracts + for CONTRACT in "${CONTRACTS[@]}"; do + # get contract address + local CONTRACT_ADDRESS=$(getContractAddressFromDeploymentLogs "$NETWORK" "$ENVIRONMENT" "$CONTRACT") + + if [[ -z "$CONTRACT_ADDRESS" ]]; then + error "Could not find contract address for contract $CONTRACT on network $NETWORK ($ENVIRONMENT) in deploy log." + error "Please manually whitelist this contract after this task has been completed." + # reduce add counter since we are not adding this contract + ((ADD_COUNTER--)) + continue + fi + + # check if address already exists in dexs.json for the given network + local EXISTS=$(jq --arg address "$CONTRACT_ADDRESS" --arg network "$NETWORK" '(.[$network] // []) | any(. == $address)' $FILEPATH_DEXS) + + if [ "$EXISTS" == "true" ]; then + echo "The address $CONTRACT_ADDRESS is already part of the whitelisted DEXs in network $NETWORK." + + # since this address is already in the list and will not be added, we have to reduce the "ADD_COUNTER" variable which will be used later to make sure that all addresses were indeed added + ((ADD_COUNTER--)) # reduces by 1 + else + # add the address to dexs.json + local TMP_FILE="tmp.$$.json" + jq --arg address "$CONTRACT_ADDRESS" --arg network "$NETWORK" '(.[$network] //= []) | .[$network] += [$address]' $FILEPATH_DEXS > "$TMP_FILE" && mv "$TMP_FILE" $FILEPATH_DEXS + rm -f "$TMP_FILE" + + + success "$CONTRACT address $CONTRACT_ADDRESS added to dexs.json[$NETWORK]" + fi + done + + # check how many DEX addresses are in the dexs.json now + local ADDRESS_COUNTER=${#CONTRACTS[@]} + + EXPECTED_DEXS=$((EXISTING_DEXS + ADD_COUNTER)) + + # make sure dexs.json has been updated correctly + if [ $EXPECTED_DEXS -eq $((EXISTING_DEXS + ADD_COUNTER)) ]; then + success "$ADD_COUNTER addresses were added to config/dexs.json" + else + error "The array in dexs.json for network $NETWORK does not have the expected number of elements after executing this script (expected: $, got: $ADDRESS_COUNTER)." + exit 1 + fi +} # <<<<< working with directories and reading other files # >>>>> writing to blockchain & verification @@ -1360,6 +1427,9 @@ function verifyContract() { # only show output if DEBUG flag is activated if [[ "$DEBUG" == *"true"* ]]; then forge verify-contract --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --skip-is-verified-check -e "${!API_KEY}" + + # TODO: add code that automatically identifies blockscout verification + # forge verify-contract --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --verifier blockscout --verifier-url "https://explorer.immutable.com/api?" else forge verify-contract --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 fi @@ -2054,6 +2124,9 @@ function echoDebug() { printf "$BLUE[debug] %s$NC\n" "$MESSAGE" fi } +function success() { + printf '\033[32m%s\033[0m\n' "$1" +} function error() { printf '\033[31m[error] %s\033[0m\n' "$1" } @@ -2871,6 +2944,14 @@ function getChainId() { echo "1329" return 0 ;; + "immutablezkevm") + echo "13371" + return 0 + ;; + "taiko") + echo "167000" + return 0 + ;; *) return 1 ;; @@ -3743,27 +3824,38 @@ function test_getContractNameFromDeploymentLogs() { function test_tmp() { - CONTRACT="AllBridgeFacet" - NETWORK="optimism" - # ADDRESS="0xbEbCDb5093B47Cd7add8211E4c77B6826aF7bc5F" - ADDRESS="0x2cE0ea020872a75bdE21a7e4e97556236Eb79e02" - ENVIRONMENT="staging" + CONTRACT="LiFiDEXAggregator" + NETWORK="immutablezkevm" + ADDRESS="" + ENVIRONMENT="production" VERSION="2.0.0" DIAMOND_CONTRACT_NAME="LiFiDiamondImmutable" - ARGS="0x0000000000000000000000007775d63836987f444e2f14aa0fa2602204d7d3e0" - # ARGS="0x000000000000000000000000b9c0de368bece5e76b52545a8e377a4c118f597b" - + ARGS="0x" + RPC_URL=$(getRPCUrl "$NETWORK" "$ENVIRONMENT") # ADDRESS=$(getContractOwner "$NETWORK" "$ENVIRONMENT" "ERC20Proxy"); # if [[ "$ADDRESS" != "$ZERO_ADDRESS" ]]; then # error "ERC20Proxy ownership was not transferred to address(0)" # exit 1 # fi #getPeripheryAddressFromDiamond "$NETWORK" "0x9b11bc9FAc17c058CAB6286b0c785bE6a65492EF" "RelayerCelerIM" - verifyContract "$NETWORK" "$CONTRACT" "$ADDRESS" "$ARGS" + # verifyContract "$NETWORK" "$CONTRACT" "$ADDRESS" "$ARGS" + + # forge verify-contract "$ADDRESS" "$CONTRACT" --chain-id 13371 --verifier blockscout --verifier-url https://explorer.immutable.com/api --skip-is-verified-check + # forge verify-contract 0x8CDDE82cFB4555D6ca21B5b28F97630265DA94c4 Counter --verifier oklink --verifier-url https://www.oklink.com/api/v5/explorer/contract/verify-source-code-plugin/XLAYER --api-key $OKLINK_API_KEY + - # transferContractOwnership "$PRIVATE_KEY_OLD" "$PRIVATE_KEY" "$ADDRESS" "$NETWORK" + # transferContractOwnership "$PRIVATE_KEY_PRODUCTION" "$PRIVATE_KEY" "$ADDRESS" "$NETWORK" # RESPONSE=$(cast call "$ADDRESS" "owner()" --rpc-url $(getRPCUrl "$NETWORK")) # echo "RESPONSE: $RESPONSE" -} + # ADDRESS_NEW_OWNER=0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772 + # cast call "$ADDRESS" "pendingOwner()" --rpc-url $(getRPCUrl "$NETWORK") + # cast call "$ADDRESS" "facets() returns ((address,bytes4[])[] )" --rpc-url $(getRPCUrl "$NETWORK") + # RESPONSE=$(cast send "$ADDRESS" "transferOwnership(address)" "$ADDRESS_NEW_OWNER" --private-key $PRIVATE_KEY_PRODUCTION --rpc-url "$RPC_URL") + # echo "RESPONSE: $RESPONSE" + + # RESULT=$(yarn add-safe-owners --network immutablezkevm --rpc-url "$(getRPCUrl "$NETWORK" "$ENVIRONMENT")" --privateKey "$PRIVATE_KEY_PRODUCTION" --owners "0xb78FbE12d9C09d98ce7271Fa089c2fe437B7B4D5,0x65f6F29D3eb871254d71A79CC4F74dB3AAF3b86e,0x24767E3A1cb07ee500BA9A5621F2B608440Ca270,0x81Dbb716aA13869323974A1766120D0854188e3e,0x11F1022cA6AdEF6400e5677528a80d49a069C00c,0x498E8fF83B503aDe5e905719D27b2f11B605b45A") -# test_tmp + # RESPONSE=$(yarn add-safe-owners --network taiko --rpc-url $(getRPCUrl $NETWORK $ENVIRONMENT) --privateKey $PRIVATE_KEY_PRODUCTION --owners "0xb78FbE12d9C09d98ce7271Fa089c2fe437B7B4D5,0x65f6F29D3eb871254d71A79CC4F74dB3AAF3b86e,0x24767E3A1cb07ee500BA9A5621F2B608440Ca270,0x81Dbb716aA13869323974A1766120D0854188e3e,0x11F1022cA6AdEF6400e5677528a80d49a069C00c,0x498E8fF83B503aDe5e905719D27b2f11B605b45A") + # echo "RESPONSE: $RESPONSE" +} +test_tmp diff --git a/script/resources/gasZipChainIds.json b/script/resources/gasZipChainIds.json new file mode 100644 index 000000000..3b1f50584 --- /dev/null +++ b/script/resources/gasZipChainIds.json @@ -0,0 +1,590 @@ +{ + "CheckGasZipDocsForMoreChains >> https://dev.gas.zip/gas/chain-support/outbound": { + "networkName": "n/a", + "gasZipChainId": 0 + }, + "2649": { + "networkName": "AILayer", + "gasZipChainId": 261 + }, + "10241024": { + "networkName": "AlienX", + "gasZipChainId": 233 + }, + "888888888": { + "networkName": "Ancient8", + "gasZipChainId": 128 + }, + "42170": { + "networkName": "Arbitrum Nova", + "gasZipChainId": 53 + }, + "42161": { + "networkName": "Arbitrum One", + "gasZipChainId": 57 + }, + "592": { + "networkName": "Astar", + "gasZipChainId": 40 + }, + "3776": { + "networkName": "Astar zkEVM", + "gasZipChainId": 99 + }, + "1313161554": { + "networkName": "Aurora", + "gasZipChainId": 62 + }, + "43114": { + "networkName": "Avalanche", + "gasZipChainId": 15 + }, + "8453": { + "networkName": "Base Mainnet", + "gasZipChainId": 54 + }, + "4337": { + "networkName": "Beam", + "gasZipChainId": 24 + }, + "11501": { + "networkName": "BEVM", + "gasZipChainId": 138 + }, + "3068": { + "networkName": "BiFrost", + "gasZipChainId": 85 + }, + "32520": { + "networkName": "Bitgert", + "gasZipChainId": 91 + }, + "200901": { + "networkName": "Bitlayer", + "gasZipChainId": 147 + }, + "199": { + "networkName": "BitTorrent", + "gasZipChainId": 18 + }, + "81457": { + "networkName": "Blast", + "gasZipChainId": 96 + }, + "60808": { + "networkName": "BOB", + "gasZipChainId": 150 + }, + "288": { + "networkName": "Boba", + "gasZipChainId": 140 + }, + "6001": { + "networkName": "BounceBit", + "gasZipChainId": 237 + }, + "56": { + "networkName": "BSC Mainnet", + "gasZipChainId": 14 + }, + "223": { + "networkName": "B² Network", + "gasZipChainId": 148 + }, + "820": { + "networkName": "Callisto", + "gasZipChainId": 126 + }, + "7700": { + "networkName": "Canto", + "gasZipChainId": 11 + }, + "42220": { + "networkName": "Celo", + "gasZipChainId": 21 + }, + "383353": { + "networkName": "CHEESE", + "gasZipChainId": 241 + }, + "8853": { + "networkName": "Clique", + "gasZipChainId": 264 + }, + "9980": { + "networkName": "Combo", + "gasZipChainId": 84 + }, + "1030": { + "networkName": "ConFlux", + "gasZipChainId": 65 + }, + "1116": { + "networkName": "CoreDAO", + "gasZipChainId": 34 + }, + "25": { + "networkName": "Cronos", + "gasZipChainId": 36 + }, + "7560": { + "networkName": "Cyber", + "gasZipChainId": 135 + }, + "666666666": { + "networkName": "Degen", + "gasZipChainId": 133 + }, + "432204": { + "networkName": "Dexalot", + "gasZipChainId": 63 + }, + "53935": { + "networkName": "DFK", + "gasZipChainId": 32 + }, + "2000": { + "networkName": "Dogechain", + "gasZipChainId": 46 + }, + "1100": { + "networkName": "Dymension", + "gasZipChainId": 134 + }, + "17777": { + "networkName": "EOS EVM", + "gasZipChainId": 142 + }, + "1": { + "networkName": "Ethereum", + "gasZipChainId": 255 + }, + "10001": { + "networkName": "ETHW", + "gasZipChainId": 71 + }, + "9001": { + "networkName": "EVMOS", + "gasZipChainId": 39 + }, + "530": { + "networkName": "f(x)Core", + "gasZipChainId": 86 + }, + "250": { + "networkName": "Fantom", + "gasZipChainId": 20 + }, + "314": { + "networkName": "Filecoin", + "gasZipChainId": 76 + }, + "14": { + "networkName": "Flare", + "gasZipChainId": 38 + }, + "252": { + "networkName": "Fraxtal", + "gasZipChainId": 10 + }, + "122": { + "networkName": "Fuse", + "gasZipChainId": 31 + }, + "32659": { + "networkName": "Fusion", + "gasZipChainId": 37 + }, + "12024": { + "networkName": "Gelios", + "gasZipChainId": 7 + }, + "100": { + "networkName": "Gnosis", + "gasZipChainId": 16 + }, + "1625": { + "networkName": "Gravity", + "gasZipChainId": 240 + }, + "5112": { + "networkName": "Ham", + "gasZipChainId": 247 + }, + "1666600000": { + "networkName": "Harmony", + "gasZipChainId": 66 + }, + "7332": { + "networkName": "Horizen", + "gasZipChainId": 49 + }, + "2911": { + "networkName": "Hychain", + "gasZipChainId": 132 + }, + "881": { + "networkName": "Hypr", + "gasZipChainId": 127 + }, + "13371": { + "networkName": "Immutable zkEVM", + "gasZipChainId": 95 + }, + "2525": { + "networkName": "Injective EVM", + "gasZipChainId": 78 + }, + "4689": { + "networkName": "IoTeX", + "gasZipChainId": 67 + }, + "2222": { + "networkName": "Kava", + "gasZipChainId": 22 + }, + "321": { + "networkName": "KCC", + "gasZipChainId": 90 + }, + "8217": { + "networkName": "Klayton", + "gasZipChainId": 33 + }, + "255": { + "networkName": "Kroma", + "gasZipChainId": 80 + }, + "12324": { + "networkName": "L3X Network", + "gasZipChainId": 243 + }, + "92000": { + "networkName": "Lambda", + "gasZipChainId": 145 + }, + "1890": { + "networkName": "Lightlink", + "gasZipChainId": 79 + }, + "59144": { + "networkName": "Linea", + "gasZipChainId": 59 + }, + "1135": { + "networkName": "Lisk", + "gasZipChainId": 238 + }, + "5151706": { + "networkName": "Loot", + "gasZipChainId": 25 + }, + "42": { + "networkName": "Lukso", + "gasZipChainId": 87 + }, + "8866": { + "networkName": "Lumio", + "gasZipChainId": 100 + }, + "169": { + "networkName": "Manta", + "gasZipChainId": 60 + }, + "5000": { + "networkName": "Mantle Mainnet", + "gasZipChainId": 13 + }, + "22776": { + "networkName": "MAP", + "gasZipChainId": 257 + }, + "4200": { + "networkName": "Merlin", + "gasZipChainId": 9 + }, + "1750": { + "networkName": "Metal", + "gasZipChainId": 144 + }, + "82": { + "networkName": "Meter", + "gasZipChainId": 26 + }, + "1088": { + "networkName": "Metis", + "gasZipChainId": 30 + }, + "185": { + "networkName": "Mint", + "gasZipChainId": 253 + }, + "34443": { + "networkName": "Mode", + "gasZipChainId": 73 + }, + "360": { + "networkName": "Molten", + "gasZipChainId": 263 + }, + "1284": { + "networkName": "Moonbeam", + "gasZipChainId": 28 + }, + "1285": { + "networkName": "Moonriver", + "gasZipChainId": 29 + }, + "4078": { + "networkName": "Muster Network", + "gasZipChainId": 97 + }, + "18686": { + "networkName": "MXC zkEVM", + "gasZipChainId": 129 + }, + "5551": { + "networkName": "Nahmii", + "gasZipChainId": 70 + }, + "245022934": { + "networkName": "Neon EVM", + "gasZipChainId": 92 + }, + "10507": { + "networkName": "Numbers", + "gasZipChainId": 259 + }, + "42262": { + "networkName": "Oasis Emerald", + "gasZipChainId": 23 + }, + "248": { + "networkName": "Oasys", + "gasZipChainId": 69 + }, + "66": { + "networkName": "OKX", + "gasZipChainId": 35 + }, + "27563": { + "networkName": "OnChain", + "gasZipChainId": 252 + }, + "10": { + "networkName": "OP Mainnet", + "gasZipChainId": 55 + }, + "204": { + "networkName": "opBNB", + "gasZipChainId": 58 + }, + "62050": { + "networkName": "Optopia", + "gasZipChainId": 236 + }, + "291": { + "networkName": "Orderly", + "gasZipChainId": 74 + }, + "669": { + "networkName": "OX Chain", + "gasZipChainId": 244 + }, + "20201022": { + "networkName": "PEGO", + "gasZipChainId": 88 + }, + "210425": { + "networkName": "PlatON", + "gasZipChainId": 5 + }, + "70700": { + "networkName": "Play Apex", + "gasZipChainId": 98 + }, + "137": { + "networkName": "Polygon", + "gasZipChainId": 17 + }, + "1101": { + "networkName": "Polygon zkEVM", + "gasZipChainId": 52 + }, + "369": { + "networkName": "Pulsechain", + "gasZipChainId": 12 + }, + "1380012617": { + "networkName": "Rari", + "gasZipChainId": 82 + }, + "111188": { + "networkName": "Re.al", + "gasZipChainId": 139 + }, + "690": { + "networkName": "Redstone", + "gasZipChainId": 149 + }, + "1729": { + "networkName": "Reya", + "gasZipChainId": 234 + }, + "570": { + "networkName": "Rollux", + "gasZipChainId": 141 + }, + "30": { + "networkName": "Rootstock", + "gasZipChainId": 254 + }, + "12553": { + "networkName": "RSS3", + "gasZipChainId": 125 + }, + "1996": { + "networkName": "Sanko", + "gasZipChainId": 131 + }, + "3109": { + "networkName": "SatoshiVM", + "gasZipChainId": 6 + }, + "1329": { + "networkName": "Sei", + "gasZipChainId": 246 + }, + "109": { + "networkName": "Shibarium", + "gasZipChainId": 42 + }, + "336": { + "networkName": "Shiden", + "gasZipChainId": 130 + }, + "148": { + "networkName": "ShimmerEVM", + "gasZipChainId": 93 + }, + "501474": { + "networkName": "Solana", + "gasZipChainId": 245 + }, + "19": { + "networkName": "Songbird", + "gasZipChainId": 68 + }, + "1234": { + "networkName": "Step", + "gasZipChainId": 64 + }, + "254": { + "networkName": "Swan", + "gasZipChainId": 256 + }, + "416": { + "networkName": "SX Network", + "gasZipChainId": 19 + }, + "5101": { + "networkName": "Syndicate Frame", + "gasZipChainId": 137 + }, + "167000": { + "networkName": "Taiko", + "gasZipChainId": 249 + }, + "911": { + "networkName": "Taproot", + "gasZipChainId": 260 + }, + "40": { + "networkName": "Telos", + "gasZipChainId": 47 + }, + "1559": { + "networkName": "Tenet", + "gasZipChainId": 27 + }, + "108": { + "networkName": "ThunderCore", + "gasZipChainId": 258 + }, + "1000001": { + "networkName": "Tron", + "gasZipChainId": 75 + }, + "1231": { + "networkName": "Ultron", + "gasZipChainId": 83 + }, + "88": { + "networkName": "Viction", + "gasZipChainId": 43 + }, + "207": { + "networkName": "VinuChain", + "gasZipChainId": 45 + }, + "888": { + "networkName": "Wanchain", + "gasZipChainId": 89 + }, + "1111": { + "networkName": "Wemix", + "gasZipChainId": 81 + }, + "196": { + "networkName": "X Layer", + "gasZipChainId": 146 + }, + "660279": { + "networkName": "XAI", + "gasZipChainId": 77 + }, + "94524": { + "networkName": "XCHAIN", + "gasZipChainId": 242 + }, + "37": { + "networkName": "XPLA", + "gasZipChainId": 48 + }, + "2702128": { + "networkName": "Xterio", + "gasZipChainId": 239 + }, + "7000": { + "networkName": "Zeta", + "gasZipChainId": 94 + }, + "381": { + "networkName": "zkAmoeba", + "gasZipChainId": 143 + }, + "1456": { + "networkName": "zkBase", + "gasZipChainId": 235 + }, + "42766": { + "networkName": "zkFair", + "gasZipChainId": 50 + }, + "810180": { + "networkName": "zkLink Nova", + "gasZipChainId": 136 + }, + "534352": { + "networkName": "zkScroll", + "gasZipChainId": 41 + }, + "324": { + "networkName": "zkSync Era", + "gasZipChainId": 51 + }, + "7777777": { + "networkName": "Zora", + "gasZipChainId": 56 + } +} diff --git a/script/scriptMaster.sh b/script/scriptMaster.sh index e7be7618e..62b98ea09 100755 --- a/script/scriptMaster.sh +++ b/script/scriptMaster.sh @@ -466,7 +466,7 @@ scriptMaster() { ) echo "[info] selected option: $SELECTION_NETWORK" - if [[ "$SELECTION_DIAMOND_TYPE" == "1)"* ]]; then + if [[ "$SELECTION_NETWORK" == "1)"* ]]; then # call update diamond log function updateDiamondLogs else diff --git a/script/tasks/diamondSyncDEXs.sh b/script/tasks/diamondSyncDEXs.sh index fb1d1b792..909f01fb8 100755 --- a/script/tasks/diamondSyncDEXs.sh +++ b/script/tasks/diamondSyncDEXs.sh @@ -80,9 +80,21 @@ function diamondSyncDEXs { # get addresses of DEXs that are already approved in the diamond contract RESULT=$(cast call "$DIAMOND_ADDRESS" "approvedDexs() returns (address[])" --rpc-url "$RPC_URL") - DEXS=($(echo ${RESULT:1:${#RESULT}-1} | tr ',' '\n' | tr '[:upper:]' '[:lower:]')) - echoDebug "${#DEXS[@]} approved DEXs found on diamond $DIAMOND_ADDRESS" + # Check if any approved DEXs were found + if [[ "$RESULT" == "[]" ]]; then + DEXS=() + else + # reformat + DEXS=($(echo ${RESULT:1:${#RESULT}-1} | tr ',' '\n' | tr '[:upper:]' '[:lower:]')) + fi + + # Check the length of the array + if [ ${#DEXS[@]} -eq 0 ]; then + echoDebug "0 approved DEXs found on diamond $DIAMOND_ADDRESS" + else + echoDebug "${#DEXS[@]} approved DEXs found on diamond $DIAMOND_ADDRESS: $DEXS ${DEXS[@]}" + fi # Loop through all DEX addresses from config and check if they are already known by the diamond NEW_DEXS=() diff --git a/script/tasks/diamondSyncSigs.sh b/script/tasks/diamondSyncSigs.sh index 53f2cd720..71fbdd442 100755 --- a/script/tasks/diamondSyncSigs.sh +++ b/script/tasks/diamondSyncSigs.sh @@ -74,10 +74,38 @@ function diamondSyncSigs { # 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" + RETURN_CODE=$? + + # check the typescript script failed + if [ $RETURN_CODE -ne 0 ]; then + echoDebug "diamondSyncSigs.ts was not successful, trying the old approach now" + + # do this stuff only on the first iteration to prepare the params for the call + if [[ $ATTEMPTS == 1 ]]; then + # get function selectors (sigs) from config files + local CFG_SIGS=($(jq -r '.[] | @sh' "./config/sigs.json" | tr -d \' | tr '[:upper:]' '[:lower:]' )) + + # prepare parameter for batchSetFunctionApprovalBySignature call (=add all sigs to an array) + for d in "${CFG_SIGS[@]}"; do + local PARAMS+="${d}," + done + fi + + # call diamond using the old approach (just registering all signatures) + if [[ "$DEBUG" == *"true"* ]]; then + # print output to console + cast send "$DIAMOND_ADDRESS" "batchSetFunctionApprovalBySignature(bytes4[],bool)" "[${PARAMS::${#PARAMS}-1}]" true --rpc-url $RPC_URL --private-key $(getPrivateKey "$NETWORK" "$ENVIRONMENT") --legacy + else + # do not print output to console + cast send "$DIAMOND_ADDRESS" "batchSetFunctionApprovalBySignature(bytes4[],bool)" "[${PARAMS::${#PARAMS}-1}]" true --rpc-url $RPC_URL --private-key $(getPrivateKey "$NETWORK" "$ENVIRONMENT") --legacy >/dev/null 2>&1 + fi + RETURN_CODE=$? + fi # check the return code of the last call - if [ $? -eq 0 ]; then + if [ $RETURN_CODE -eq 0 ]; then break # exit the loop if the operation was successful fi diff --git a/script/tasks/diamondSyncSigs.ts b/script/tasks/diamondSyncSigs.ts index 27ff736da..281520a5b 100644 --- a/script/tasks/diamondSyncSigs.ts +++ b/script/tasks/diamondSyncSigs.ts @@ -11,6 +11,7 @@ import { import { ethers } from 'ethers6' import * as chains from 'viem/chains' import { privateKeyToAccount } from 'viem/accounts' +import { getViemChainForNetworkName } from '../../utils/viemScriptHelpers' export const chainNameMappings: Record<string, string> = { zksync: 'zkSync', @@ -52,8 +53,7 @@ const main = defineCommand({ async run({ args }) { const { network, privateKey, environment } = args - const chainName = chainNameMappings[network] || network - const chain: Chain = chainMap[chainName] + const chain = getViemChainForNetworkName(network) console.log(`Checking signature for ${chain.name}`) diff --git a/script/tasks/diamondUpdateFacet.sh b/script/tasks/diamondUpdateFacet.sh index 6e18bc9eb..b084d929c 100755 --- a/script/tasks/diamondUpdateFacet.sh +++ b/script/tasks/diamondUpdateFacet.sh @@ -105,14 +105,47 @@ diamondUpdateFacet() { attempts=1 while [ $attempts -le "$MAX_ATTEMPTS_PER_SCRIPT_EXECUTION" ]; do echo "[info] trying to execute $SCRIPT on $DIAMOND_CONTRACT_NAME now - attempt ${attempts} (max attempts:$MAX_ATTEMPTS_PER_SCRIPT_EXECUTION)" - # try to execute call + # check if command output should be printed to console if [[ "$DEBUG" == *"true"* ]]; then - # print output to console - RAW_RETURN_DATA=$(NETWORK=$NETWORK FILE_SUFFIX=$FILE_SUFFIX USE_DEF_DIAMOND=$USE_MUTABLE_DIAMOND NO_BROADCAST=false PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") forge script "$SCRIPT_PATH" -f $NETWORK -vvvv --json --silent --broadcast --skip-simulation --legacy) + # check if we are deploying to PROD + if [[ "$ENVIRONMENT" == "production" ]]; then + # PROD: suggest diamondCut transaction to SAFE + UPDATE_SCRIPT=$(echo "$DEPLOY_SCRIPT_DIRECTORY""$SCRIPT".s.sol) + PRIVATE_KEY=$(getPrivateKey $NETWORK $ENVIRONMENT) + echoDebug "Calculating facet cuts for $SCRIPT..." + RAW_RETURN_DATA=$(NO_BROADCAST=true NETWORK=$NETWORK FILE_SUFFIX=$FILE_SUFFIX USE_DEF_DIAMOND=$USE_MUTABLE_DIAMOND PRIVATE_KEY=$PRIVATE_KEY forge script "$UPDATE_SCRIPT" -f $NETWORK -vvvv --json --silent --skip-simulation --legacy) + CLEAN_RETURN_DATA=$(echo $RAW_RETURN_DATA | sed 's/^.*{\"logs/{\"logs/') + FACET_CUT=$(echo $CLEAN_RETURN_DATA | jq -r '.returns.cutData.value') + + if [ "$FACET_CUT" != "0x" ]; then + echoDebug "Proposing facet cut for $SCRIPT..." + DIAMOND_ADDRESS=$(getContractAddressFromDeploymentLogs "$NETWORK" "$ENVIRONMENT" "$DIAMOND_CONTRACT_NAME") + ts-node script/deploy/safe/propose-to-safe.ts --to "$DIAMOND_ADDRESS" --calldata "$FACET_CUT" --network "$NETWORK" --rpcUrl "$(getRPCUrl $NETWORK)" --privateKey "$SAFE_SIGNER_PRIVATE_KEY" + fi + else + # STAGING: just deploy normally without further checks + RAW_RETURN_DATA=$(NETWORK=$NETWORK FILE_SUFFIX=$FILE_SUFFIX USE_DEF_DIAMOND=$USE_MUTABLE_DIAMOND NO_BROADCAST=false PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") forge script "$SCRIPT_PATH" -f $NETWORK -vvvv --json --silent --broadcast --skip-simulation --legacy) + fi else - # do not print output to console - RAW_RETURN_DATA=$(NETWORK=$NETWORK FILE_SUFFIX=$FILE_SUFFIX USE_DEF_DIAMOND=$USE_MUTABLE_DIAMOND NO_BROADCAST=false PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") forge script "$SCRIPT_PATH" -f $NETWORK -vvvv --json --silent --broadcast --skip-simulation --legacy) 2>/dev/null - fi + # check if we are deploying to PROD + if [[ "$ENVIRONMENT" == "production" ]]; then + # PROD: suggest diamondCut transaction to SAFE + UPDATE_SCRIPT=$(echo "$DEPLOY_SCRIPT_DIRECTORY"Update"$SCRIPT".s.sol) + PRIVATE_KEY=$(getPrivateKey $NETWORK $ENVIRONMENT) + echoDebug "Calculating facet cuts for $script..." + RAW_RETURN_DATA=$(NO_BROADCAST=true NETWORK=$NETWORK FILE_SUFFIX=$FILE_SUFFIX USE_DEF_DIAMOND=$USE_MUTABLE_DIAMOND PRIVATE_KEY=$PRIVATE_KEY forge script "$UPDATE_SCRIPT" -f $NETWORK -vvvv --json --silent --skip-simulation --legacy) + CLEAN_RETURN_DATA=$(echo $RAW_RETURN_DATA | sed 's/^.*{\"logs/{\"logs/') + FACET_CUT=$(echo $CLEAN_RETURN_DATA | jq -r '.returns.cutData.value') + if [ "$FACET_CUT" != "0x" ]; then + echo "Proposing facet cut for $script on network $NETWROK..." + DIAMOND_ADDRESS=$(getContractAddressFromDeploymentLogs "$NETWORK" "$ENVIRONMENT" "$DIAMOND_CONTRACT_NAME") + ts-node script/deploy/safe/propose-to-safe.ts --to "$DIAMOND_ADDRESS" --calldata "$FACET_CUT" --network "$NETWORK" --rpcUrl $(getRPCUrl $NETWORK) --privateKey "$SAFE_SIGNER_PRIVATE_KEY" + fi + else + # STAGING: just deploy normally without further checks + RAW_RETURN_DATA=$(NETWORK=$NETWORK FILE_SUFFIX=$FILE_SUFFIX USE_DEF_DIAMOND=$USE_MUTABLE_DIAMOND NO_BROADCAST=false PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") forge script "$SCRIPT_PATH" -f $NETWORK -vvvv --json --silent --broadcast --skip-simulation --legacy) + fi + fi RETURN_CODE=$? echoDebug "RAW_RETURN_DATA: $RAW_RETURN_DATA" @@ -142,8 +175,10 @@ diamondUpdateFacet() { return 1 fi - # save facet addresses - saveDiamondFacets "$NETWORK" "$ENVIRONMENT" "$USE_MUTABLE_DIAMOND" "$FACETS" + # save facet addresses (only if deploying to PROD, otherwise we update the logs before the diamondCut tx gets signed in the SAFE) + if [[ "$ENVIRONMENT" != "production" ]]; then + saveDiamondFacets "$NETWORK" "$ENVIRONMENT" "$USE_MUTABLE_DIAMOND" "$FACETS" + fi echo "[info] $SCRIPT successfully executed on network $NETWORK in $ENVIRONMENT environment" return 0 diff --git a/script/tasks/fundNewWalletOnAllChains.ts b/script/tasks/fundNewWalletOnAllChains.ts new file mode 100644 index 000000000..0413ef286 --- /dev/null +++ b/script/tasks/fundNewWalletOnAllChains.ts @@ -0,0 +1,239 @@ +import { defineCommand, runMain } from 'citty' +import { createPublicClient, createWalletClient, http, parseAbi } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' + +import { getAllNetworks, getViemChainForNetworkName } from '../../utils/network' +import gasZipChainIds from '../resources/gasZipChainIds.json' +import { BigNumber, BigNumberish } from 'ethers' +import axios from 'axios' +import { mainnet } from 'viem/chains' +import { network } from 'hardhat' + +const GAS_ZIP_ROUTER_MAINNET = '0x9e22ebec84c7e4c4bd6d4ae7ff6f4d436d6d8390' +const testnets = [ + 'bsc-testnet', + 'lineatest', + 'mumbai', + 'sepolia', + 'localanvil', + 'virtualtestnet', +] + +/// TYPES /// +type HexString = `0x${string}` + +type GasZipChainIds = { + [key: string]: { + networkName: string + gasZipChainId: number + } +} + +// this script is designed to be executed on mainnet (only) +// it will get a list of all networks we support (minus testnets) and send an equal USD +// amount worth of native tokens to each of these target networks using Gas.zip protocol + +// call this script +// ts-node ./script/tasks/fundNewWalletOnAllChains.ts --privKeyFundingWallet "$PRIVATE_KEY" --receivingWallet "$PAUSER_WALLET" --doNotFundChains "[97,80001]" --fundAmountUSD "5" + +const main = defineCommand({ + meta: { + name: 'fund-new-wallet-on-all-chains', + description: + 'Funds a wallet with equal value of native gas on all supported chains', + }, + args: { + privKeyFundingWallet: { + type: 'string', + description: 'Private key of the funding wallet', + required: true, + }, + receivingWallet: { + type: 'string', + description: 'Address of the receiving wallet', + required: true, + }, + doNotFundChains: { + type: 'string', + description: 'An array with chainIds that should not be funded', + required: true, + }, + fundAmountUSD: { + type: 'string', + description: 'The amount of USD that should be sent to every chain', + required: true, + }, + }, + async run({ args }) { + const { + privKeyFundingWallet, + receivingWallet, + doNotFundChains, + fundAmountUSD, + } = args + const fundingWallet = privateKeyToAccount( + `0x${privKeyFundingWallet}` as HexString + ) + + console.log(`fundingWalletAddress: ${fundingWallet.address}`) + console.log(`receivingWallet: ${receivingWallet}`) + console.log(`doNotFundChains: ${doNotFundChains}`) + console.log(`fundAmountUSD: ${fundAmountUSD}`) + + // get viem public client to read from blockchain + const publicClient = createPublicClient({ + chain: mainnet, + transport: http(), + }) + + // create wallet client to write to chain + const walletClient = createWalletClient({ + chain: mainnet, + transport: http(), + account: fundingWallet, + }) + + // get a list of all target networks + const networks = getAllTargetNetworks() + console.log(`${networks.length} target networks identified`) + + // calculate total amount USD needed (fundAmount * networks) + const amountUSDPerNetwork = BigNumber.from(fundAmountUSD) + const amountRequiredUSD = amountUSDPerNetwork.mul(networks.length) + console.log( + `USD amount required to fund all networks: $ ${amountRequiredUSD.toString()}` + ) + + // get current native price and calculate nativeAmount required + const ethPrice = Math.round(await getEthPrice()) + console.log(`Current ETH price: $${ethPrice}`) + // const amountRequiredNative = amountRequiredUSD.div(ethPrice) + const amountRequiredNative = getNativeAmountRequired( + amountRequiredUSD, + ethPrice, + 10 + ) + console.log( + `Native amount required to fund all networks: ${amountRequiredNative.toString()}` + ) + + // get fundingWallet's native balance + const nativeBalance = BigNumber.from( + await publicClient.getBalance({ + address: fundingWallet.address, + }) + ) + + // make sure that balance is sufficient + if (nativeBalance.lt(amountRequiredNative)) + throw new Error( + `Native balance of funding wallet is insufficient (required: ${amountRequiredNative}, available: ${nativeBalance}` + ) + else + console.log( + 'Funding wallet native balance is sufficient for this action: \nbalance: ${nativeBalance}, \nrequired: ${amountRequiredNative}' + ) + + // get an array with target chainIds + const chainIds = networks.map((network) => network.id) + console.log(`ChainIds: [${chainIds}]`) + + // prepare calldata (get list of gasZip chainIds and combine them) + const chainsBN = chainIds.reduce( + (p, c) => (p << BigInt(8)) + BigInt(c), + BigInt(0) + ) + + // simulate transaction + const result = await publicClient.simulateContract({ + account: fundingWallet, + address: GAS_ZIP_ROUTER_MAINNET, + abi: parseAbi(['function deposit(uint256,address) external payable']), + functionName: 'deposit', + value: amountRequiredNative.toBigInt(), + args: [chainsBN, receivingWallet as HexString], + }) + console.dir(result, { depth: null, colors: true }) + + // execute transaction + const txHash = await walletClient.writeContract(result.request) + console.log(`Transaction successfully submitted: ${txHash}`) + }, +}) + +const getNativeAmountRequired = ( + dividend: BigNumberish, + divisor: BigNumberish, + precision: number +): BigNumber => { + if (precision > 10) throw new Error('max precision is 10 decimals') + // calculate division result with precision + const multiplier = BigNumber.from(10).pow(precision) + const decimalResult = BigNumber.from(dividend).mul(multiplier).div(divisor) + + // adjust the amount to 10 ** 18 + const scaleFactor = BigNumber.from(10).pow(18 - precision) + const nativeAmount = decimalResult.mul(scaleFactor) + + return nativeAmount +} + +// Function to get ETH price from CoinGecko +const getEthPrice = async () => { + try { + const response = await axios.get( + 'https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd' + ) + const ethPrice = response.data.ethereum.usd + // console.log(`Current ETH price: $${ethPrice}`) + return ethPrice + } catch (error) { + console.error('Error fetching ETH price:', error) + throw error + } +} + +const getAllTargetNetworks = () => { + // get a list of all target networks + const allNetworks = getAllNetworks() + + // remove testnets + const allProdNetworks = allNetworks.filter( + (network) => !testnets.includes(network) + ) + + // get an array with Viem networks + const allViemNetworks = allProdNetworks.map((network) => { + const chain = getViemChainForNetworkName(network) + return { + ...chain, + nameLiFi: network, + } + }) + + // identify networks that gasZip does not support + const gasZipChainIdsTyped: GasZipChainIds = gasZipChainIds + const unsupportedNetworks = allViemNetworks.filter( + (network) => !gasZipChainIdsTyped[network.id.toString()] + ) + + if (unsupportedNetworks.length > 0) + console.log( + `Viem does not support ${ + unsupportedNetworks.length + } of our networks: [${unsupportedNetworks.map((network) => network.id)}]` + ) + + // identify networks that gasZip does not support + const targetNetworks = allViemNetworks.filter( + (network) => gasZipChainIdsTyped[network.id.toString()] + ) + + return targetNetworks +} + +function sleep(ms: number): Promise<void> { + return new Promise((resolve) => setTimeout(resolve, ms)) +} + +runMain(main) diff --git a/script/tasks/moveAllFundsToNewWallet.ts b/script/tasks/moveAllFundsToNewWallet.ts deleted file mode 100644 index b882472f7..000000000 --- a/script/tasks/moveAllFundsToNewWallet.ts +++ /dev/null @@ -1,480 +0,0 @@ -import { defineCommand, runMain } from 'citty' -import { - Abi, - Hex, - PrivateKeyAccount, - createPublicClient, - createWalletClient, - encodeFunctionData, - erc20Abi, - http, - multicall3Abi, - parseAbi, - type Chain, -} from 'viem' -import * as chains from 'viem/chains' -import { privateKeyToAccount } from 'viem/accounts' -import { getAllNetworks, node_url } from '../../utils/network' -import axios from 'axios' -import { mainnet } from 'viem/chains' -import { erc20 } from '@uma/sdk/dist/types/clients' -import { call, readContract, simulateContract, multicall } from 'viem/actions' -import { BigNumber } from 'ethers' -import BigNumberJs from 'bignumber.js' -import { getMulticall3AddressForChain } from '../../utils/getMulticallAddress' -import { Multicall2 } from '@arbitrum/sdk/dist/lib/abi/Multicall2' - -const MAX_BATCH_SIZE_MULTICALLS = 500 // the max amount of multicalls we do in one call -const MIN_USD_THRESHOLD_BALANCE_TRANSFER = 5 // balances must be worth more than 5 USD, otherwise we leave them -const ADDRESS_USDC_ETH = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' -const ADDRESS_WETH_ETH = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' -const ADDRESS_MULTICALL3_ETH = '0xcA11bde05977b3631167028862bE2a173976CA11' -const BALANCE_OF_ABI = parseAbi([ - 'function balanceOf(address) external view returns (uint256)', -]) - -/// TYPES /// - -type Token = { - chainId: number - address: string - symbol: string - name: string - decimals: number - priceUSD: string - coinKey: string - logoURI: string -} - -interface TokensByChainId { - [chainId: string]: Token[] -} - -interface TokenAPIResponse { - tokens: TokensByChainId -} - -type BalanceNotFound = 'BalanceNotFound' - -type TokenBalance = { - token: Token - balance: string | BalanceNotFound -} - -type Contract = { - address: `0x${string}` - abi: Abi -} - -enum CallType { - 'balanceOf', - 'transfer', -} - -type HexString = `0x${string}` - -type MultiCall3 = { - target: HexString - allowFailure: boolean - callData: HexString -} -type MultiCallResponse = { - success: string - returnData: HexString -} -type MultiCall = Contract & { - functionName: string - args?: any[] - client?: any -} - -export const chainNameMappings: Record<string, string> = { - zksync: 'zkSync', - polygonzkevm: 'polygonZkEvm', -} - -// will contain a list of all tokens -const BASE_URL_LIFI_API = `https://partner-test.li.quest/v1` -const fullURL = `${BASE_URL_LIFI_API}/tokens` -let allTokens: TokenAPIResponse - -const getAllTokens = async () => { - // not yet initialized - if (!allTokens) { - try { - // get a list of all tokens - const result = await axios(fullURL) - - // return only the "tokens" property - allTokens = result.data - } catch (err) { - const msg = JSON.stringify(err, null, 2) - throw new Error(msg) - } - } - - if (!allTokens) throw Error(`could not get a list of all ERC20 tokens`) - - return allTokens -} - -const getAllKnownERC20TokensForChain = async (chainId: number) => { - const allTokens = await getAllTokens() - - if (!allTokens.tokens) - throw Error('Error while getting all known ERC20 tokens') - - // return only the tokens for the given chainId, or throw an error if none exist - if (allTokens.tokens[chainId.toString()]) { - return allTokens.tokens[chainId.toString()] - } else { - throw new Error(`No tokens found for chainId: ${chainId}`) - } -} - -const doNotExecuteOnNetworks = [ - 'localanvil', - 'sepolia', - 'mumbai', - 'lineatest', - 'bsc-testnet', - 'virtualtestnet', -] - -const getAllSupportedNetworks = () => { - // get a list of all networks - const networks = getAllNetworks() - - // filter out all testnets and local networks - return networks.filter((network) => !doNotExecuteOnNetworks.includes(network)) -} - -const chainMap: Record<string, Chain> = {} -for (const [k, v] of Object.entries(chains)) { - // @ts-ignore - chainMap[k] = v -} - -const main = defineCommand({ - meta: { - name: 'move-all-funds-to-new-wallet', - description: - 'Moves all ERC20 and native funds of a wallet to another address on all supported chains', - }, - args: { - privateKey: { - type: 'string', - description: 'Private key of the source wallet', - required: true, - }, - newWallet: { - type: 'string', - description: 'Address of the receiving wallet', - required: true, - }, - }, - async run({ args }) { - const { privateKey, newWallet } = args - const srcWallet = privateKeyToAccount(`0x${privateKey}` as `0x${string}`) - - let networks = await getAllSupportedNetworks() - networks = ['mainnet', 'bsc'] - networks = ['mainnet'] - console.log(`${networks.length} networks found`) - - // iterate through the list of networks - const promises = await Promise.allSettled( - networks.map((network) => - performTaskOnNetwork(network, srcWallet, newWallet as HexString) - ) - ) - - // create an overview to show results per network - const overview = promises.map((result, index) => { - const network = networks[index] - return { - network, - status: result.status, - reason: result.status === 'rejected' ? result.reason : undefined, - } - }) - - console.log('Task Overview:') - overview.forEach((result) => { - if (result.status === 'fulfilled') { - console.log(`Network: ${result.network}: Success`) - } else { - console.log( - `Network: ${result.network}: Not executed - ${result.reason}` - ) - } - }) - }, -}) - -const getCalldata = (type: CallType, args: any): string => { - let callData - try { - callData = encodeFunctionData({ - abi: erc20Abi, - functionName: type == CallType.balanceOf ? 'balanceOf' : 'transfer', - args, - }) - } catch (error: any) { - console.error(`ERROR: ${error.message})`) - } - - if (!callData) throw new Error('no calldata') - - return callData -} - -const getMulticall = ( - contractAddress: HexString, - type: CallType, - args: any -): MultiCall3 => { - const callData = getCalldata(type, args) as HexString - - const call: MultiCall3 = { - target: contractAddress, - allowFailure: true, - callData, - } - return call -} - -const isAboveMinUSDThreshold = (balance: TokenBalance): boolean => { - const usdAmount = new BigNumberJs(balance.balance) - .multipliedBy(balance.token.priceUSD) - .shiftedBy(-balance.token.decimals) - - return usdAmount.gte(MIN_USD_THRESHOLD_BALANCE_TRANSFER) -} - -const transferBalances = async ( - publicClient: any, - srcWallet: PrivateKeyAccount, - balances: TokenBalance[], - receiverAddress: HexString, - multicall3Address: HexString -) => { - // console.log(`[${publicClient.chain.name}] in transferBalances`) - - // get transfer() multicalls for each balance - const multicalls = balances - .map((balance) => { - // check if balance is above min USD value, otherwise neglect this token - if (isAboveMinUSDThreshold(balance)) { - // create multicall for it - return getMulticall( - balance.token.address as HexString, - CallType.transfer, - [receiverAddress, balance.balance] - ) - } - }) - // filter out all empty multicalls - .filter((call) => call != null) - - console.log( - `[${publicClient.chain.name}] ${multicalls.length} transfer calls prepared` - ) - - // if exceedingly many potential transfers with min USD value are found, stop here and let the user check before proceeding - if (multicalls.length > 30) - throw new Error( - `\n\n[${publicClient.chain.name}] more than ${ - multicalls.length - } potential transfers found. Not continuing for protection of native funds. - Please check if all transfers are legit and then run the script again. \n\n Multicalls: ${JSON.stringify( - multicalls, - null, - 2 - )}` - ) - - // send transaction - // const { result } = await publicClient.writeContract({ - // account: srcWallet.address, - // address: multicall3Address, - // abi: multicall3Abi, - // functionName: 'aggregate3', - // args: [multicalls], - // }) - - // check success -} - -// Function to perform some asynchronous task on a network -const performTaskOnNetwork = async ( - network: string, - srcWallet: PrivateKeyAccount, - newWallet: HexString -): Promise<void> => { - // get the (viem) chain for this network - const chainName = chainNameMappings[network] || network - const chain: Chain = chainMap[chainName] - console.log(`[${chain.name}] in performTaskOnNetwork`) - - // get RPC URL - const rpcUrl = node_url(network) - - // get viem public client to read from blockchain - const publicClient = createPublicClient({ - chain, - transport: http(), - }) - - // create wallet client for this chain - const walletClient = createWalletClient({ - chain, - transport: http(), - account: srcWallet, - }) - - // get multicall3 address for network - const multicall3Address = (await getMulticall3AddressForChain( - chain.id - )) as HexString - console.log(`[${chain.name}] multicall3 address found: ${multicall3Address}`) - - // check get native balance - // const nativeBalance = await publicClient.getBalance({ - // address: srcWallet, - // }) - // console.log(`[${network}] native Balance (${network}): ${nativeBalance} `) - - // get balances of source wallet - const balances = await getAllERC20BalancesForWallet( - srcWallet, - chain.id, - publicClient, - multicall3Address - ) - console.log( - `[${chain.name}] ${balances.length} balances above threshold ($ ${MIN_USD_THRESHOLD_BALANCE_TRANSFER}) found` - ) - - // transfer all balances - const transferResults = await transferBalances( - publicClient, - srcWallet, - balances, - newWallet as Hex, - multicall3Address - ) - - // check results -} - -const convertBalanceFromMulticallResponse = ( - response: MultiCallResponse -): string => { - // check if data is available - if (!response || !response.success) { - return 'BalanceNotFound' - } - - // some contracts respond with empty string - if (response.returnData === '0x') return '0' - - // convert hex to string - return BigNumber.from(response.returnData).toString() -} - -const batchExecuteMulticall = async ( - tokens: Token[], - srcWallet: PrivateKeyAccount, - publicClient: any, - multicall3Address: HexString -) => { - const calls: MultiCall3[] = [] - const results: MultiCallResponse[] = [] - - // create a multicall call object for each token and execute one multicall for all - const processBatch = async (batch: Token[]) => { - batch.forEach((token) => { - // get a multicall object for each token address - const multicall = getMulticall( - token.address as HexString, - CallType.balanceOf, - [srcWallet.address] - ) - - // add multicall object to calls array - calls.push(multicall) - }) - - const { result } = await publicClient.simulateContract({ - account: srcWallet, - address: multicall3Address, - abi: multicall3Abi, - functionName: 'aggregate3', - args: [calls], - }) - - console.log(`[${publicClient.chain.name}] result[0]: ${result[0]} `) - console.log( - `[${publicClient.chain.name}] ${result.length} results received from this batch` - ) - - return results.push(...result) - } - - for (let i = 0; i < tokens.length; i += MAX_BATCH_SIZE_MULTICALLS) { - // Get tokens for current batch - const batchTokens = tokens.slice(i, i + MAX_BATCH_SIZE_MULTICALLS) - - console.log( - `Processing chunk from index ${i} to ${i + MAX_BATCH_SIZE_MULTICALLS - 1}` - ) - - // create multicalls and execute them for this batch - await processBatch(batchTokens) - } - - console.log(`${calls.length} multicalls executed`) - console.log(`${results.length} results received`) - return results -} - -const getAllERC20BalancesForWallet = async ( - srcWallet: PrivateKeyAccount, - chainId: number, - publicClient: any, - multicall3Address: HexString -): Promise<TokenBalance[]> => { - // get all tokens - const chainTokens = await getAllKnownERC20TokensForChain(chainId) - console.log( - `[${publicClient.chain.name}] ${chainTokens.length} tokens found on this network` - ) - - const multicallResults = await batchExecuteMulticall( - chainTokens, - srcWallet, - publicClient, - multicall3Address - ) - - return ( - chainTokens - .map((token, index) => { - const tokenBalance: TokenBalance = { - token, - balance: convertBalanceFromMulticallResponse(multicallResults[index]), - } - - return tokenBalance - }) - // filter out zero and unavailable balances - .filter( - (tokenBalance) => - tokenBalance.balance !== '0' && - tokenBalance.balance !== 'BalanceNotFound' - ) - ) -} - -runMain(main) diff --git a/script/tasks/solidity/RemoveUnusableSelectorsFromImmutableDiamond.s.sol b/script/tasks/solidity/RemoveUnusableSelectorsFromImmutableDiamond.s.sol index ab8765866..0bfe018b4 100644 --- a/script/tasks/solidity/RemoveUnusableSelectorsFromImmutableDiamond.s.sol +++ b/script/tasks/solidity/RemoveUnusableSelectorsFromImmutableDiamond.s.sol @@ -17,7 +17,6 @@ import { CBridgeFacetPacked } from "lifi/Facets/CBridgeFacetPacked.sol"; import { HopFacet } from "lifi/Facets/HopFacet.sol"; import { HopFacetOptimized } from "lifi/Facets/HopFacetOptimized.sol"; import { HopFacetPacked } from "lifi/Facets/HopFacetPacked.sol"; -import { MultichainFacet } from "lifi/Facets/MultichainFacet.sol"; import { OptimismBridgeFacet } from "lifi/Facets/OptimismBridgeFacet.sol"; import { StargateFacet } from "lifi/Facets/StargateFacet.sol"; @@ -92,16 +91,6 @@ contract DeployScript is UpdateScriptBase { selectors.push(HopFacetPacked.setApprovalForHopBridges.selector); } - // MultichainFacet - if ( - DiamondLoupeFacet(diamond).facetAddress( - MultichainFacet.registerRouters.selector - ) != address(0) - ) { - selectors.push(MultichainFacet.registerRouters.selector); - selectors.push(MultichainFacet.updateAddressMappings.selector); - } - // OptimismBridgeFacet if ( DiamondLoupeFacet(diamond).facetAddress( diff --git a/src/Errors/GenericErrors.sol b/src/Errors/GenericErrors.sol index a5d1121b4..75fd3dff0 100644 --- a/src/Errors/GenericErrors.sol +++ b/src/Errors/GenericErrors.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; error AlreadyInitialized(); diff --git a/src/Helpers/CelerIMFacetBase.sol b/src/Helpers/CelerIMFacetBase.sol index 79e413be6..00d3147f9 100644 --- a/src/Helpers/CelerIMFacetBase.sol +++ b/src/Helpers/CelerIMFacetBase.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/src/Helpers/ExcessivelySafeCall.sol b/src/Helpers/ExcessivelySafeCall.sol index 7532a319f..40375cd94 100644 --- a/src/Helpers/ExcessivelySafeCall.sol +++ b/src/Helpers/ExcessivelySafeCall.sol @@ -1,5 +1,6 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 // This contract has been taken from: https://github.com/nomad-xyz/ExcessivelySafeCall +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { InvalidCallData } from "../Errors/GenericErrors.sol"; diff --git a/src/Helpers/ReentrancyGuard.sol b/src/Helpers/ReentrancyGuard.sol index fd8d2a356..a03b5a61f 100644 --- a/src/Helpers/ReentrancyGuard.sol +++ b/src/Helpers/ReentrancyGuard.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: UNLICENSED +/// @custom:version 1.0.0 pragma solidity 0.8.17; /// @title Reentrancy Guard diff --git a/src/Helpers/SwapperV2.sol b/src/Helpers/SwapperV2.sol index 85920d7e0..6b5e14fa9 100644 --- a/src/Helpers/SwapperV2.sol +++ b/src/Helpers/SwapperV2.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { ILiFi } from "../Interfaces/ILiFi.sol"; diff --git a/src/Helpers/TransferrableOwnership.sol b/src/Helpers/TransferrableOwnership.sol index 79a2537c3..c833651d3 100644 --- a/src/Helpers/TransferrableOwnership.sol +++ b/src/Helpers/TransferrableOwnership.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { IERC173 } from "../Interfaces/IERC173.sol"; diff --git a/src/Helpers/Validatable.sol b/src/Helpers/Validatable.sol index e0ea85831..7edc8fd54 100644 --- a/src/Helpers/Validatable.sol +++ b/src/Helpers/Validatable.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: UNLICENSED +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { LibAsset } from "../Libraries/LibAsset.sol"; diff --git a/src/Interfaces/IAcrossSpokePool.sol b/src/Interfaces/IAcrossSpokePool.sol index 8e8e194ce..fe5e97b6c 100644 --- a/src/Interfaces/IAcrossSpokePool.sol +++ b/src/Interfaces/IAcrossSpokePool.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IAcrossSpokePool { diff --git a/src/Interfaces/IAllBridge.sol b/src/Interfaces/IAllBridge.sol index 7fe0a3b19..3b9c934db 100644 --- a/src/Interfaces/IAllBridge.sol +++ b/src/Interfaces/IAllBridge.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; /// @title AllBridge Interface diff --git a/src/Interfaces/ICBridge.sol b/src/Interfaces/ICBridge.sol index c019f1289..9f4b30b3b 100644 --- a/src/Interfaces/ICBridge.sol +++ b/src/Interfaces/ICBridge.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface ICBridge { diff --git a/src/Interfaces/ICircleBridgeProxy.sol b/src/Interfaces/ICircleBridgeProxy.sol index b01ad3a91..29da3adc2 100644 --- a/src/Interfaces/ICircleBridgeProxy.sol +++ b/src/Interfaces/ICircleBridgeProxy.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface ICircleBridgeProxy { diff --git a/src/Interfaces/IConnextHandler.sol b/src/Interfaces/IConnextHandler.sol index 4398a0234..c70bdbde1 100644 --- a/src/Interfaces/IConnextHandler.sol +++ b/src/Interfaces/IConnextHandler.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IConnextHandler { diff --git a/src/Interfaces/IDeBridgeGate.sol b/src/Interfaces/IDeBridgeGate.sol index 8829dbaca..feade3e58 100644 --- a/src/Interfaces/IDeBridgeGate.sol +++ b/src/Interfaces/IDeBridgeGate.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IDeBridgeGate { diff --git a/src/Interfaces/IDiamondCut.sol b/src/Interfaces/IDiamondCut.sol index d3f531b9c..cab5553c3 100644 --- a/src/Interfaces/IDiamondCut.sol +++ b/src/Interfaces/IDiamondCut.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IDiamondCut { diff --git a/src/Interfaces/IDiamondLoupe.sol b/src/Interfaces/IDiamondLoupe.sol index ee6ee5589..6089ff06d 100644 --- a/src/Interfaces/IDiamondLoupe.sol +++ b/src/Interfaces/IDiamondLoupe.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; // A loupe is a small magnifying glass used to look at diamonds. diff --git a/src/Interfaces/IDlnSource.sol b/src/Interfaces/IDlnSource.sol index 13789b30f..b3ca24414 100644 --- a/src/Interfaces/IDlnSource.sol +++ b/src/Interfaces/IDlnSource.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IDlnSource { diff --git a/src/Interfaces/IERC165.sol b/src/Interfaces/IERC165.sol index 15cad26b6..5d1ddaefb 100644 --- a/src/Interfaces/IERC165.sol +++ b/src/Interfaces/IERC165.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IERC165 { diff --git a/src/Interfaces/IERC173.sol b/src/Interfaces/IERC173.sol index 3bdcc568d..474c42f57 100644 --- a/src/Interfaces/IERC173.sol +++ b/src/Interfaces/IERC173.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; /// @title ERC-173 Contract Ownership Standard diff --git a/src/Interfaces/IERC20Proxy.sol b/src/Interfaces/IERC20Proxy.sol index 207e1fe03..521686a81 100644 --- a/src/Interfaces/IERC20Proxy.sol +++ b/src/Interfaces/IERC20Proxy.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IERC20Proxy { diff --git a/src/Interfaces/IExecutor.sol b/src/Interfaces/IExecutor.sol index 1dc82adb3..07f101681 100644 --- a/src/Interfaces/IExecutor.sol +++ b/src/Interfaces/IExecutor.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { LibSwap } from "../Libraries/LibSwap.sol"; diff --git a/src/Interfaces/IGatewayRouter.sol b/src/Interfaces/IGatewayRouter.sol index 95dc7a665..0ee520736 100644 --- a/src/Interfaces/IGatewayRouter.sol +++ b/src/Interfaces/IGatewayRouter.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IGatewayRouter { diff --git a/src/Interfaces/IHopBridge.sol b/src/Interfaces/IHopBridge.sol index e3f8e8720..102619825 100644 --- a/src/Interfaces/IHopBridge.sol +++ b/src/Interfaces/IHopBridge.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IHopBridge { diff --git a/src/Interfaces/IHyphenRouter.sol b/src/Interfaces/IHyphenRouter.sol index 1674d4a85..b07c54004 100644 --- a/src/Interfaces/IHyphenRouter.sol +++ b/src/Interfaces/IHyphenRouter.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; // https://github.com/bcnmy/hyphen-contract/blob/master/contracts/hyphen/LiquidityPool.sol diff --git a/src/Interfaces/IL1StandardBridge.sol b/src/Interfaces/IL1StandardBridge.sol index ede673018..b8aff2634 100644 --- a/src/Interfaces/IL1StandardBridge.sol +++ b/src/Interfaces/IL1StandardBridge.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IL1StandardBridge { diff --git a/src/Interfaces/ILiFi.sol b/src/Interfaces/ILiFi.sol index 0b27e0946..31d9adab5 100644 --- a/src/Interfaces/ILiFi.sol +++ b/src/Interfaces/ILiFi.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface ILiFi { diff --git a/src/Interfaces/IMayan.sol b/src/Interfaces/IMayan.sol index 6c8bfb8ef..b6c4f3657 100644 --- a/src/Interfaces/IMayan.sol +++ b/src/Interfaces/IMayan.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IMayan { diff --git a/src/Interfaces/IMultichainRouter.sol b/src/Interfaces/IMultichainRouter.sol index 7334b01c8..b14e110d1 100644 --- a/src/Interfaces/IMultichainRouter.sol +++ b/src/Interfaces/IMultichainRouter.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IMultichainRouter { diff --git a/src/Interfaces/IMultichainToken.sol b/src/Interfaces/IMultichainToken.sol index 8349d1bcb..386c0022f 100644 --- a/src/Interfaces/IMultichainToken.sol +++ b/src/Interfaces/IMultichainToken.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IMultichainToken { diff --git a/src/Interfaces/IOmniBridge.sol b/src/Interfaces/IOmniBridge.sol index 489e00b7e..68ab30937 100644 --- a/src/Interfaces/IOmniBridge.sol +++ b/src/Interfaces/IOmniBridge.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IOmniBridge { diff --git a/src/Interfaces/IRootChainManager.sol b/src/Interfaces/IRootChainManager.sol index 49ac21539..7b3803c13 100644 --- a/src/Interfaces/IRootChainManager.sol +++ b/src/Interfaces/IRootChainManager.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IRootChainManager { diff --git a/src/Interfaces/ISquidMulticall.sol b/src/Interfaces/ISquidMulticall.sol index 844106075..dfc4df6bf 100644 --- a/src/Interfaces/ISquidMulticall.sol +++ b/src/Interfaces/ISquidMulticall.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface ISquidMulticall { diff --git a/src/Interfaces/ISquidRouter.sol b/src/Interfaces/ISquidRouter.sol index dee9926d3..f28c99da4 100644 --- a/src/Interfaces/ISquidRouter.sol +++ b/src/Interfaces/ISquidRouter.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { ISquidMulticall } from "./ISquidMulticall.sol"; diff --git a/src/Interfaces/IStargate.sol b/src/Interfaces/IStargate.sol index 1536acb97..cc3e46d9c 100644 --- a/src/Interfaces/IStargate.sol +++ b/src/Interfaces/IStargate.sol @@ -1,5 +1,5 @@ // Interface for Stargate V2 - +/// @custom:version 1.0.0 // SPDX-License-Identifier: BUSL-1.1 pragma solidity =0.8.17; diff --git a/src/Interfaces/IStargateRouter.sol b/src/Interfaces/IStargateRouter.sol index bd702c1fd..7fbda9a6e 100644 --- a/src/Interfaces/IStargateRouter.sol +++ b/src/Interfaces/IStargateRouter.sol @@ -1,4 +1,5 @@ // Interface for Stargate V1 +/// @custom:version 1.0.0 // SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.17; diff --git a/src/Interfaces/ISymbiosisMetaRouter.sol b/src/Interfaces/ISymbiosisMetaRouter.sol index b60c46e4f..8ad1afd2a 100644 --- a/src/Interfaces/ISymbiosisMetaRouter.sol +++ b/src/Interfaces/ISymbiosisMetaRouter.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface ISymbiosisMetaRouter { diff --git a/src/Interfaces/ISynapseRouter.sol b/src/Interfaces/ISynapseRouter.sol index dd6aba939..804177ea4 100644 --- a/src/Interfaces/ISynapseRouter.sol +++ b/src/Interfaces/ISynapseRouter.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface ISynapseRouter { diff --git a/src/Interfaces/ITeleportGateway.sol b/src/Interfaces/ITeleportGateway.sol index 1c5b83517..9a31f3647 100644 --- a/src/Interfaces/ITeleportGateway.sol +++ b/src/Interfaces/ITeleportGateway.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface ITeleportGateway { diff --git a/src/Interfaces/IThorSwap.sol b/src/Interfaces/IThorSwap.sol index 99445f4c9..244ef05ed 100644 --- a/src/Interfaces/IThorSwap.sol +++ b/src/Interfaces/IThorSwap.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; /// @title ThorSwap Interface diff --git a/src/Interfaces/ITokenMessenger.sol b/src/Interfaces/ITokenMessenger.sol index 817ffc803..7ac314ebc 100644 --- a/src/Interfaces/ITokenMessenger.sol +++ b/src/Interfaces/ITokenMessenger.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface ITokenMessenger { diff --git a/src/Interfaces/ITransactionManager.sol b/src/Interfaces/ITransactionManager.sol index b585a75fa..83f162860 100644 --- a/src/Interfaces/ITransactionManager.sol +++ b/src/Interfaces/ITransactionManager.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: UNLICENSED +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface ITransactionManager { diff --git a/src/Interfaces/IXDaiBridge.sol b/src/Interfaces/IXDaiBridge.sol index 9b9d88bc3..951d29886 100644 --- a/src/Interfaces/IXDaiBridge.sol +++ b/src/Interfaces/IXDaiBridge.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IXDaiBridge { diff --git a/src/Interfaces/IXDaiBridgeL2.sol b/src/Interfaces/IXDaiBridgeL2.sol index 3880e4d8b..a26f392a3 100644 --- a/src/Interfaces/IXDaiBridgeL2.sol +++ b/src/Interfaces/IXDaiBridgeL2.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; interface IXDaiBridgeL2 { diff --git a/src/Libraries/LibAccess.sol b/src/Libraries/LibAccess.sol index a6b9e9847..583f59e90 100644 --- a/src/Libraries/LibAccess.sol +++ b/src/Libraries/LibAccess.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { CannotAuthoriseSelf, UnAuthorized } from "../Errors/GenericErrors.sol"; diff --git a/src/Libraries/LibAllowList.sol b/src/Libraries/LibAllowList.sol index 7e2794e5a..c347cb5e0 100644 --- a/src/Libraries/LibAllowList.sol +++ b/src/Libraries/LibAllowList.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { InvalidContract } from "../Errors/GenericErrors.sol"; diff --git a/src/Libraries/LibAsset.sol b/src/Libraries/LibAsset.sol index 910d13aca..d3b54b606 100644 --- a/src/Libraries/LibAsset.sol +++ b/src/Libraries/LibAsset.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: UNLICENSED +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { InsufficientBalance, NullAddrIsNotAnERC20Token, NullAddrIsNotAValidSpender, NoTransferToNullAddress, InvalidAmount, NativeAssetTransferFailed } from "../Errors/GenericErrors.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/src/Libraries/LibBytes.sol b/src/Libraries/LibBytes.sol index d79b34812..4a19bca17 100644 --- a/src/Libraries/LibBytes.sol +++ b/src/Libraries/LibBytes.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; library LibBytes { diff --git a/src/Libraries/LibDiamond.sol b/src/Libraries/LibDiamond.sol index f6adcb109..39559b361 100644 --- a/src/Libraries/LibDiamond.sol +++ b/src/Libraries/LibDiamond.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { IDiamondCut } from "../Interfaces/IDiamondCut.sol"; diff --git a/src/Libraries/LibSwap.sol b/src/Libraries/LibSwap.sol index 6646340fa..62c3ae81e 100644 --- a/src/Libraries/LibSwap.sol +++ b/src/Libraries/LibSwap.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; import { LibAsset } from "./LibAsset.sol"; diff --git a/src/Libraries/LibUtil.sol b/src/Libraries/LibUtil.sol index bde149493..1f633a5d1 100644 --- a/src/Libraries/LibUtil.sol +++ b/src/Libraries/LibUtil.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +/// @custom:version 1.0.0 pragma solidity 0.8.17; import "./LibBytes.sol"; diff --git a/src/Libraries/OFTComposeMsgCodec.sol b/src/Libraries/OFTComposeMsgCodec.sol index 79ca7a15e..619a079e6 100644 --- a/src/Libraries/OFTComposeMsgCodec.sol +++ b/src/Libraries/OFTComposeMsgCodec.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT - +/// @custom:version 1.0.0 pragma solidity =0.8.17; // This library was taken from: https://github.com/LayerZero-Labs/LayerZero-v2/tree/38278c8d8f4606d0ce247d6edd473fc96674769b/packages/layerzero-v2/evm/oapp/contracts/oft/libs diff --git a/src/Periphery/LiFiDEXAggregator.sol b/src/Periphery/LiFiDEXAggregator.sol new file mode 100644 index 000000000..a61f38245 --- /dev/null +++ b/src/Periphery/LiFiDEXAggregator.sol @@ -0,0 +1,1180 @@ +// SPDX-License-Identifier: UNLICENSED + +pragma solidity ^0.8.17; + +import { SafeERC20, IERC20, IERC20Permit } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; + +address constant NATIVE_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; +address constant IMPOSSIBLE_POOL_ADDRESS = 0x0000000000000000000000000000000000000001; +address constant INTERNAL_INPUT_SOURCE = 0x0000000000000000000000000000000000000000; + +uint8 constant LOCKED = 2; +uint8 constant NOT_LOCKED = 1; +uint8 constant PAUSED = 2; +uint8 constant NOT_PAUSED = 1; + +/// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK) +uint160 constant MIN_SQRT_RATIO = 4295128739; +/// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK) +uint160 constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; + +/// @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 +contract LiFiDEXAggregator is Ownable { + using SafeERC20 for IERC20; + using Approve for IERC20; + using SafeERC20 for IERC20Permit; + using InputStream for uint256; + + event Route( + address indexed from, + address to, + address indexed tokenIn, + address indexed tokenOut, + uint256 amountIn, + uint256 amountOutMin, + uint256 amountOut + ); + + error MinimalOutputBalanceViolation(uint256 amountOut); + + IBentoBoxMinimal public immutable bentoBox; + mapping(address => bool) public priviledgedUsers; + address private lastCalledPool; + + uint8 private unlocked = NOT_LOCKED; + uint8 private paused = NOT_PAUSED; + modifier lock() { + require(unlocked == NOT_LOCKED, "RouteProcessor is locked"); + require(paused == NOT_PAUSED, "RouteProcessor is paused"); + unlocked = LOCKED; + _; + unlocked = NOT_LOCKED; + } + + modifier onlyOwnerOrPriviledgedUser() { + require( + msg.sender == owner() || priviledgedUsers[msg.sender], + "RP: caller is not the owner or a privileged user" + ); + _; + } + + constructor(address _bentoBox, address[] memory priviledgedUserList) { + bentoBox = IBentoBoxMinimal(_bentoBox); + lastCalledPool = IMPOSSIBLE_POOL_ADDRESS; + + for (uint256 i = 0; i < priviledgedUserList.length; i++) { + priviledgedUsers[priviledgedUserList[i]] = true; + } + } + + function setPriviledge(address user, bool priviledge) external onlyOwner { + priviledgedUsers[user] = priviledge; + } + + function pause() external onlyOwnerOrPriviledgedUser { + paused = PAUSED; + } + + function resume() external onlyOwnerOrPriviledgedUser { + paused = NOT_PAUSED; + } + + /// @notice For native unwrapping + receive() external payable {} + + /// @notice Processes the route generated off-chain. Has a lock + /// @param tokenIn Address of the input token + /// @param amountIn Amount of the input token + /// @param tokenOut Address of the output token + /// @param amountOutMin Minimum amount of the output token + /// @return amountOut Actual amount of the output token + function processRoute( + address tokenIn, + uint256 amountIn, + address tokenOut, + uint256 amountOutMin, + address to, + bytes memory route + ) external payable lock returns (uint256 amountOut) { + return + processRouteInternal( + tokenIn, + amountIn, + tokenOut, + amountOutMin, + to, + route + ); + } + + /// @notice Transfers some value to <transferValueTo> and then processes the route + /// @param transferValueTo Address where the value should be transferred + /// @param amountValueTransfer How much value to transfer + /// @param tokenIn Address of the input token + /// @param amountIn Amount of the input token + /// @param tokenOut Address of the output token + /// @param amountOutMin Minimum amount of the output token + /// @return amountOut Actual amount of the output token + function transferValueAndprocessRoute( + address payable transferValueTo, + uint256 amountValueTransfer, + address tokenIn, + uint256 amountIn, + address tokenOut, + uint256 amountOutMin, + address to, + bytes memory route + ) external payable lock returns (uint256 amountOut) { + (bool success, bytes memory returnBytes) = transferValueTo.call{ + value: amountValueTransfer + }(""); + if (!success) { + assembly { + revert(add(32, returnBytes), mload(returnBytes)) + } + } + return + processRouteInternal( + tokenIn, + amountIn, + tokenOut, + amountOutMin, + to, + route + ); + } + + /// @notice Processes the route generated off-chain + /// @param tokenIn Address of the input token + /// @param amountIn Amount of the input token + /// @param tokenOut Address of the output token + /// @param amountOutMin Minimum amount of the output token + /// @return amountOut Actual amount of the output token + function processRouteInternal( + address tokenIn, + uint256 amountIn, + address tokenOut, + uint256 amountOutMin, + address to, + bytes memory route + ) private returns (uint256 amountOut) { + uint256 balanceInInitial = tokenIn == NATIVE_ADDRESS + ? 0 + : IERC20(tokenIn).balanceOf(msg.sender); + uint256 balanceOutInitial = tokenOut == NATIVE_ADDRESS + ? address(to).balance + : IERC20(tokenOut).balanceOf(to); + + uint256 realAmountIn = amountIn; + { + uint256 step = 0; + uint256 stream = InputStream.createStream(route); + while (stream.isNotEmpty()) { + uint8 commandCode = stream.readUint8(); + if (commandCode == 1) { + uint256 usedAmount = processMyERC20(stream); + if (step == 0) realAmountIn = usedAmount; + } else if (commandCode == 2) + processUserERC20(stream, amountIn); + else if (commandCode == 3) { + uint256 usedAmount = processNative(stream); + if (step == 0) realAmountIn = usedAmount; + } else if (commandCode == 4) processOnePool(stream); + else if (commandCode == 5) processInsideBento(stream); + else if (commandCode == 6) applyPermit(tokenIn, stream); + else revert("RouteProcessor: Unknown command code"); + ++step; + } + } + + uint256 balanceInFinal = tokenIn == NATIVE_ADDRESS + ? 0 + : IERC20(tokenIn).balanceOf(msg.sender); + require( + balanceInFinal + amountIn >= balanceInInitial, + "RouteProcessor: Minimal input balance violation" + ); + + uint256 balanceOutFinal = tokenOut == NATIVE_ADDRESS + ? address(to).balance + : IERC20(tokenOut).balanceOf(to); + if (balanceOutFinal < balanceOutInitial + amountOutMin) + revert MinimalOutputBalanceViolation( + balanceOutFinal - balanceOutInitial + ); + + amountOut = balanceOutFinal - balanceOutInitial; + + emit Route( + msg.sender, + to, + tokenIn, + tokenOut, + realAmountIn, + amountOutMin, + amountOut + ); + } + + /// @notice Applies ERC-2612 permit + /// @param tokenIn permitted token + /// @param stream Streamed program + function applyPermit(address tokenIn, uint256 stream) private { + uint256 value = stream.readUint(); + uint256 deadline = stream.readUint(); + uint8 v = stream.readUint8(); + bytes32 r = stream.readBytes32(); + bytes32 s = stream.readBytes32(); + IERC20Permit(tokenIn).safePermit( + msg.sender, + address(this), + value, + deadline, + v, + r, + s + ); + } + + /// @notice Processes native coin: call swap for all pools that swap from native coin + /// @param stream Streamed program + function processNative( + uint256 stream + ) private returns (uint256 amountTotal) { + amountTotal = address(this).balance; + distributeAndSwap(stream, address(this), NATIVE_ADDRESS, amountTotal); + } + + /// @notice Processes ERC20 token from this contract balance: + /// @notice Call swap for all pools that swap from this token + /// @param stream Streamed program + function processMyERC20( + uint256 stream + ) private returns (uint256 amountTotal) { + address token = stream.readAddress(); + amountTotal = IERC20(token).balanceOf(address(this)); + unchecked { + if (amountTotal > 0) amountTotal -= 1; // slot undrain protection + } + distributeAndSwap(stream, address(this), token, amountTotal); + } + + /// @notice Processes ERC20 token from msg.sender balance: + /// @notice Call swap for all pools that swap from this token + /// @param stream Streamed program + /// @param amountTotal Amount of tokens to take from msg.sender + function processUserERC20(uint256 stream, uint256 amountTotal) private { + address token = stream.readAddress(); + distributeAndSwap(stream, msg.sender, token, amountTotal); + } + + /// @notice Processes ERC20 token for cases when the token has only one output pool + /// @notice In this case liquidity is already at pool balance. This is an optimization + /// @notice Call swap for all pools that swap from this token + /// @param stream Streamed program + function processOnePool(uint256 stream) private { + address token = stream.readAddress(); + swap(stream, INTERNAL_INPUT_SOURCE, token, 0); + } + + /// @notice Processes Bento tokens + /// @notice Call swap for all pools that swap from this token + /// @param stream Streamed program + function processInsideBento(uint256 stream) private { + address token = stream.readAddress(); + uint256 amountTotal = bentoBox.balanceOf(token, address(this)); + unchecked { + if (amountTotal > 0) amountTotal -= 1; // slot undrain protection + } + distributeAndSwap(stream, address(this), token, amountTotal); + } + + /// @notice Distributes amountTotal to several pools according to their shares and calls swap for each pool + /// @param stream Streamed program + /// @param from Where to take liquidity for swap + /// @param tokenIn Input token + /// @param amountTotal Total amount of tokenIn for swaps + function distributeAndSwap( + uint256 stream, + address from, + address tokenIn, + uint256 amountTotal + ) private { + uint8 num = stream.readUint8(); + unchecked { + for (uint256 i = 0; i < num; ++i) { + uint16 share = stream.readUint16(); + uint256 amount = (amountTotal * share) / + type(uint16).max /*65535*/; + amountTotal -= amount; + swap(stream, from, tokenIn, amount); + } + } + } + + /// @notice Makes swap + /// @param stream Streamed program + /// @param from Where to take liquidity for swap + /// @param tokenIn Input token + /// @param amountIn Amount of tokenIn to take for swap + function swap( + uint256 stream, + address from, + address tokenIn, + uint256 amountIn + ) private { + uint8 poolType = stream.readUint8(); + if (poolType == 0) swapUniV2(stream, from, tokenIn, amountIn); + else if (poolType == 1) swapUniV3(stream, from, tokenIn, amountIn); + else if (poolType == 2) wrapNative(stream, from, tokenIn, amountIn); + else if (poolType == 3) bentoBridge(stream, from, tokenIn, amountIn); + else if (poolType == 4) swapTrident(stream, from, tokenIn, amountIn); + else if (poolType == 5) swapCurve(stream, from, tokenIn, amountIn); + else revert("RouteProcessor: Unknown pool type"); + } + + /// @notice Wraps/unwraps native token + /// @param stream [direction & fake, recipient, wrapToken?] + /// @param from Where to take liquidity for swap + /// @param tokenIn Input token + /// @param amountIn Amount of tokenIn to take for swap + function wrapNative( + uint256 stream, + address from, + address tokenIn, + uint256 amountIn + ) private { + uint8 directionAndFake = stream.readUint8(); + address to = stream.readAddress(); + + if (directionAndFake & 1 == 1) { + // wrap native + address wrapToken = stream.readAddress(); + if (directionAndFake & 2 == 0) + IWETH(wrapToken).deposit{ value: amountIn }(); + if (to != address(this)) + IERC20(wrapToken).safeTransfer(to, amountIn); + } else { + // unwrap native + if (directionAndFake & 2 == 0) { + if (from == msg.sender) + IERC20(tokenIn).safeTransferFrom( + msg.sender, + address(this), + amountIn + ); + IWETH(tokenIn).withdraw(amountIn); + } + (bool success, ) = payable(to).call{ value: amountIn }(""); + require( + success, + "RouteProcessor.wrapNative: Native token transfer failed" + ); + } + } + + /// @notice Bridge/unbridge tokens to/from Bento + /// @param stream [direction, recipient] + /// @param from Where to take liquidity for swap + /// @param tokenIn Input token + /// @param amountIn Amount of tokenIn to take for swap + function bentoBridge( + uint256 stream, + address from, + address tokenIn, + uint256 amountIn + ) private { + uint8 direction = stream.readUint8(); + address to = stream.readAddress(); + + if (direction > 0) { + // outside to Bento + // deposit to arbitrary recipient is possible only from address(bentoBox) + if (from == address(this)) + IERC20(tokenIn).safeTransfer(address(bentoBox), amountIn); + else if (from == msg.sender) + IERC20(tokenIn).safeTransferFrom( + msg.sender, + address(bentoBox), + amountIn + ); + else { + // tokens already are at address(bentoBox) + amountIn = + IERC20(tokenIn).balanceOf(address(bentoBox)) + + bentoBox.strategyData(tokenIn).balance - + bentoBox.totals(tokenIn).elastic; + } + bentoBox.deposit(tokenIn, address(bentoBox), to, amountIn, 0); + } else { + // Bento to outside + if (from != INTERNAL_INPUT_SOURCE) { + bentoBox.transfer(tokenIn, from, address(this), amountIn); + } else amountIn = bentoBox.balanceOf(tokenIn, address(this)); + bentoBox.withdraw(tokenIn, address(this), to, 0, amountIn); + } + } + + /// @notice UniswapV2 pool swap + /// @param stream [pool, direction, recipient, fee] + /// @param from Where to take liquidity for swap + /// @param tokenIn Input token + /// @param amountIn Amount of tokenIn to take for swap + function swapUniV2( + uint256 stream, + address from, + address tokenIn, + uint256 amountIn + ) private { + address pool = stream.readAddress(); + uint8 direction = stream.readUint8(); + address to = stream.readAddress(); + uint24 fee = stream.readUint24(); // pool fee in 1/1_000_000 + + if (from == address(this)) + IERC20(tokenIn).safeTransfer(pool, amountIn); + else if (from == msg.sender) + IERC20(tokenIn).safeTransferFrom(msg.sender, pool, amountIn); + + (uint256 r0, uint256 r1, ) = IUniswapV2Pair(pool).getReserves(); + require(r0 > 0 && r1 > 0, "Wrong pool reserves"); + (uint256 reserveIn, uint256 reserveOut) = direction == 1 + ? (r0, r1) + : (r1, r0); + amountIn = IERC20(tokenIn).balanceOf(pool) - reserveIn; // tokens already were transferred + + uint256 amountInWithFee = amountIn * (1_000_000 - fee); + uint256 amountOut = (amountInWithFee * reserveOut) / + (reserveIn * 1_000_000 + amountInWithFee); + (uint256 amount0Out, uint256 amount1Out) = direction == 1 + ? (uint256(0), amountOut) + : (amountOut, uint256(0)); + IUniswapV2Pair(pool).swap(amount0Out, amount1Out, to, new bytes(0)); + } + + /// @notice Trident pool swap + /// @param stream [pool, swapData] + /// @param from Where to take liquidity for swap + /// @param tokenIn Input token + /// @param amountIn Amount of tokenIn to take for swap + function swapTrident( + uint256 stream, + address from, + address tokenIn, + uint256 amountIn + ) private { + address pool = stream.readAddress(); + bytes memory swapData = stream.readBytes(); + + if (from != INTERNAL_INPUT_SOURCE) { + bentoBox.transfer(tokenIn, from, pool, amountIn); + } + + IPool(pool).swap(swapData); + } + + /// @notice UniswapV3 pool swap + /// @param stream [pool, direction, recipient] + /// @param from Where to take liquidity for swap + /// @param tokenIn Input token + /// @param amountIn Amount of tokenIn to take for swap + function swapUniV3( + uint256 stream, + address from, + address tokenIn, + uint256 amountIn + ) private { + address pool = stream.readAddress(); + bool zeroForOne = stream.readUint8() > 0; + address recipient = stream.readAddress(); + + if (from == msg.sender) + IERC20(tokenIn).safeTransferFrom( + msg.sender, + address(this), + uint256(amountIn) + ); + + lastCalledPool = pool; + IUniswapV3Pool(pool).swap( + recipient, + zeroForOne, + int256(amountIn), + zeroForOne ? MIN_SQRT_RATIO + 1 : MAX_SQRT_RATIO - 1, + abi.encode(tokenIn) + ); + require( + lastCalledPool == IMPOSSIBLE_POOL_ADDRESS, + "RouteProcessor.swapUniV3: unexpected" + ); // Just to be sure + } + + /// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. + /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped. + /// @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 IUniswapV3PoolActions#swap call + function uniswapV3SwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) public { + require( + msg.sender == lastCalledPool, + "RouteProcessor.uniswapV3SwapCallback: call from unknown source" + ); + int256 amount = amount0Delta > 0 ? amount0Delta : amount1Delta; + require( + amount > 0, + "RouteProcessor.uniswapV3SwapCallback: not positive amount" + ); + + lastCalledPool = IMPOSSIBLE_POOL_ADDRESS; + address tokenIn = abi.decode(data, (address)); + IERC20(tokenIn).safeTransfer(msg.sender, uint256(amount)); + } + + /// @notice Called to `msg.sender` after executing a swap via IAlgebraPool#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// The caller of this method _must_ be checked to be a AlgebraPool deployed by the canonical AlgebraFactory. + /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped. + /// @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 IAlgebraPoolActions#swap call + function algebraSwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external { + uniswapV3SwapCallback(amount0Delta, amount1Delta, data); + } + + /// @notice Called to `msg.sender` after executing a swap via PancakeV3Pool#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 PancakeV3Pool#swap call + function pancakeV3SwapCallback( + 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 + /// @param tokenIn Input token + /// @param amountIn Amount of tokenIn to take for swap + function swapCurve( + uint256 stream, + address from, + address tokenIn, + uint256 amountIn + ) private { + address pool = stream.readAddress(); + uint8 poolType = stream.readUint8(); + int128 fromIndex = int8(stream.readUint8()); + int128 toIndex = int8(stream.readUint8()); + address to = stream.readAddress(); + address tokenOut = stream.readAddress(); + + uint256 amountOut; + if (tokenIn == NATIVE_ADDRESS) { + amountOut = ICurve(pool).exchange{ value: amountIn }( + fromIndex, + toIndex, + amountIn, + 0 + ); + } else { + if (from == msg.sender) + IERC20(tokenIn).safeTransferFrom( + msg.sender, + address(this), + amountIn + ); + IERC20(tokenIn).approveSafe(pool, amountIn); + if (poolType == 0) + amountOut = ICurve(pool).exchange( + fromIndex, + toIndex, + amountIn, + 0 + ); + else { + uint256 balanceBefore = IERC20(tokenOut).balanceOf( + address(this) + ); + ICurveLegacy(pool).exchange(fromIndex, toIndex, amountIn, 0); + uint256 balanceAfter = IERC20(tokenOut).balanceOf( + address(this) + ); + amountOut = balanceAfter - balanceBefore; + } + } + + if (to != address(this)) { + if (tokenOut == NATIVE_ADDRESS) { + (bool success, ) = payable(to).call{ value: amountOut }(""); + require( + success, + "RouteProcessor.swapCurve: Native token transfer failed" + ); + } else { + IERC20(tokenOut).safeTransfer(to, amountOut); + } + } + } +} + +/// @notice Minimal BentoBox vault interface. +/// @dev `token` is aliased as `address` from `IERC20` for simplicity. +interface IBentoBoxMinimal { + /// @notice Balance per ERC-20 token per account in shares. + function balanceOf(address, address) external view returns (uint256); + + /// @dev Helper function to represent an `amount` of `token` in shares. + /// @param token The ERC-20 token. + /// @param amount The `token` amount. + /// @param roundUp If the result `share` should be rounded up. + /// @return share The token amount represented in shares. + function toShare( + address token, + uint256 amount, + bool roundUp + ) external view returns (uint256 share); + + /// @dev Helper function to represent shares back into the `token` amount. + /// @param token The ERC-20 token. + /// @param share The amount of shares. + /// @param roundUp If the result should be rounded up. + /// @return amount The share amount back into native representation. + function toAmount( + address token, + uint256 share, + bool roundUp + ) external view returns (uint256 amount); + + /// @notice Registers this contract so that users can approve it for BentoBox. + function registerProtocol() external; + + /// @notice Deposit an amount of `token` represented in either `amount` or `share`. + /// @param token The ERC-20 token to deposit. + /// @param from which account to pull the tokens. + /// @param to which account to push the tokens. + /// @param amount Token amount in native representation to deposit. + /// @param share Token amount represented in shares to deposit. Takes precedence over `amount`. + /// @return amountOut The amount deposited. + /// @return shareOut The deposited amount represented in shares. + function deposit( + address token, + address from, + address to, + uint256 amount, + uint256 share + ) external payable returns (uint256 amountOut, uint256 shareOut); + + /// @notice Withdraws an amount of `token` from a user account. + /// @param token_ The ERC-20 token to withdraw. + /// @param from which user to pull the tokens. + /// @param to which user to push the tokens. + /// @param amount of tokens. Either one of `amount` or `share` needs to be supplied. + /// @param share Like above, but `share` takes precedence over `amount`. + function withdraw( + address token_, + address from, + address to, + uint256 amount, + uint256 share + ) external returns (uint256 amountOut, uint256 shareOut); + + /// @notice Transfer shares from a user account to another one. + /// @param token The ERC-20 token to transfer. + /// @param from which user to pull the tokens. + /// @param to which user to push the tokens. + /// @param share The amount of `token` in shares. + function transfer( + address token, + address from, + address to, + uint256 share + ) external; + + /// @dev Reads the Rebase `totals`from storage for a given token + function totals(address token) external view returns (Rebase memory total); + + function strategyData( + address token + ) external view returns (StrategyData memory total); + + /// @dev Approves users' BentoBox assets to a "master" contract. + function setMasterContractApproval( + address user, + address masterContract, + bool approved, + uint8 v, + bytes32 r, + bytes32 s + ) external; + + function harvest( + address token, + bool balance, + uint256 maxChangeAmount + ) external; +} + +interface ICurve { + function exchange( + int128 i, + int128 j, + uint256 dx, + uint256 min_dy + ) external payable returns (uint256); +} + +interface ICurveLegacy { + function exchange( + int128 i, + int128 j, + uint256 dx, + uint256 min_dy + ) external payable; +} + +/// @notice Trident pool interface. +interface IPool { + /// @notice Executes a swap from one token to another. + /// @dev The input tokens must've already been sent to the pool. + /// @param data ABI-encoded params that the pool requires. + /// @return finalAmountOut The amount of output tokens that were sent to the user. + function swap( + bytes calldata data + ) external returns (uint256 finalAmountOut); + + /// @notice Executes a swap from one token to another with a callback. + /// @dev This function allows borrowing the output tokens and sending the input tokens in the callback. + /// @param data ABI-encoded params that the pool requires. + /// @return finalAmountOut The amount of output tokens that were sent to the user. + function flashSwap( + bytes calldata data + ) external returns (uint256 finalAmountOut); + + /// @notice Mints liquidity tokens. + /// @param data ABI-encoded params that the pool requires. + /// @return liquidity The amount of liquidity tokens that were minted for the user. + function mint(bytes calldata data) external returns (uint256 liquidity); + + /// @notice Burns liquidity tokens. + /// @dev The input LP tokens must've already been sent to the pool. + /// @param data ABI-encoded params that the pool requires. + /// @return withdrawnAmounts The amount of various output tokens that were sent to the user. + function burn( + bytes calldata data + ) external returns (TokenAmount[] memory withdrawnAmounts); + + /// @notice Burns liquidity tokens for a single output token. + /// @dev The input LP tokens must've already been sent to the pool. + /// @param data ABI-encoded params that the pool requires. + /// @return amountOut The amount of output tokens that were sent to the user. + function burnSingle( + bytes calldata data + ) external returns (uint256 amountOut); + + /// @return A unique identifier for the pool type. + function poolIdentifier() external pure returns (bytes32); + + /// @return An array of tokens supported by the pool. + function getAssets() external view returns (address[] memory); + + /// @notice Simulates a trade and returns the expected output. + /// @dev The pool does not need to include a trade simulator directly in itself - it can use a library. + /// @param data ABI-encoded params that the pool requires. + /// @return finalAmountOut The amount of output tokens that will be sent to the user if the trade is executed. + function getAmountOut( + bytes calldata data + ) external view returns (uint256 finalAmountOut); + + /// @notice Simulates a trade and returns the expected output. + /// @dev The pool does not need to include a trade simulator directly in itself - it can use a library. + /// @param data ABI-encoded params that the pool requires. + /// @return finalAmountIn The amount of input tokens that are required from the user if the trade is executed. + function getAmountIn( + bytes calldata data + ) external view returns (uint256 finalAmountIn); + + /// @dev This event must be emitted on all swaps. + event Swap( + address indexed recipient, + address indexed tokenIn, + address indexed tokenOut, + uint256 amountIn, + uint256 amountOut + ); + + /// @dev This struct frames output tokens for burns. + struct TokenAmount { + address token; + uint256 amount; + } +} + +interface ITridentCLPool { + function token0() external returns (address); + + function token1() external returns (address); + + function swap( + address recipient, + bool zeroForOne, + int256 amountSpecified, + uint160 sqrtPriceLimitX96, + bool unwrapBento, + bytes calldata data + ) external returns (int256 amount0, int256 amount1); +} + +interface IUniswapV2Pair { + event Approval(address indexed owner, address indexed spender, uint value); + event Transfer(address indexed from, address indexed to, uint value); + + function name() external pure returns (string memory); + + function symbol() external pure returns (string memory); + + function decimals() external pure returns (uint8); + + function totalSupply() external view returns (uint); + + function balanceOf(address owner) external view returns (uint); + + function allowance( + address owner, + address spender + ) external view returns (uint); + + function approve(address spender, uint value) external returns (bool); + + function transfer(address to, uint value) external returns (bool); + + function transferFrom( + address from, + address to, + uint value + ) external returns (bool); + + function DOMAIN_SEPARATOR() external view returns (bytes32); + + function PERMIT_TYPEHASH() external pure returns (bytes32); + + function nonces(address owner) external view returns (uint); + + function permit( + address owner, + address spender, + uint value, + uint deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external; + + event Mint(address indexed sender, uint amount0, uint amount1); + event Burn( + address indexed sender, + uint amount0, + uint amount1, + address indexed to + ); + event Swap( + address indexed sender, + uint amount0In, + uint amount1In, + uint amount0Out, + uint amount1Out, + address indexed to + ); + event Sync(uint112 reserve0, uint112 reserve1); + + function MINIMUM_LIQUIDITY() external pure returns (uint); + + function factory() external view returns (address); + + function token0() external view returns (address); + + function token1() external view returns (address); + + function getReserves() + external + view + returns ( + uint112 reserve0, + uint112 reserve1, + uint32 blockTimestampLast + ); + + function price0CumulativeLast() external view returns (uint); + + function price1CumulativeLast() external view returns (uint); + + function kLast() external view returns (uint); + + function mint(address to) external returns (uint liquidity); + + function burn(address to) external returns (uint amount0, uint amount1); + + function swap( + uint amount0Out, + uint amount1Out, + address to, + bytes calldata data + ) external; + + function skim(address to) external; + + function sync() external; + + function initialize(address, address) external; +} + +interface IUniswapV3Pool { + function token0() external returns (address); + + function token1() external returns (address); + + function swap( + address recipient, + bool zeroForOne, + int256 amountSpecified, + uint160 sqrtPriceLimitX96, + bytes calldata data + ) external returns (int256 amount0, int256 amount1); +} + +interface IWETH { + function deposit() external payable; + + function transfer(address to, uint256 value) external returns (bool); + + function withdraw(uint256) external; +} + +/** @notice Simple read stream */ +library InputStream { + /** @notice Creates stream from data + * @param data data + */ + function createStream( + bytes memory data + ) internal pure returns (uint256 stream) { + assembly { + stream := mload(0x40) + mstore(0x40, add(stream, 64)) + mstore(stream, data) + let length := mload(data) + mstore(add(stream, 32), add(data, length)) + } + } + + /** @notice Checks if stream is not empty + * @param stream stream + */ + function isNotEmpty(uint256 stream) internal pure returns (bool) { + uint256 pos; + uint256 finish; + assembly { + pos := mload(stream) + finish := mload(add(stream, 32)) + } + return pos < finish; + } + + /** @notice Reads uint8 from the stream + * @param stream stream + */ + function readUint8(uint256 stream) internal pure returns (uint8 res) { + assembly { + let pos := mload(stream) + pos := add(pos, 1) + res := mload(pos) + mstore(stream, pos) + } + } + + /** @notice Reads uint16 from the stream + * @param stream stream + */ + function readUint16(uint256 stream) internal pure returns (uint16 res) { + assembly { + let pos := mload(stream) + pos := add(pos, 2) + res := mload(pos) + mstore(stream, pos) + } + } + + /** @notice Reads uint24 from the stream + * @param stream stream + */ + function readUint24(uint256 stream) internal pure returns (uint24 res) { + assembly { + let pos := mload(stream) + pos := add(pos, 3) + res := mload(pos) + mstore(stream, pos) + } + } + + /** @notice Reads uint32 from the stream + * @param stream stream + */ + function readUint32(uint256 stream) internal pure returns (uint32 res) { + assembly { + let pos := mload(stream) + pos := add(pos, 4) + res := mload(pos) + mstore(stream, pos) + } + } + + /** @notice Reads uint256 from the stream + * @param stream stream + */ + function readUint(uint256 stream) internal pure returns (uint256 res) { + assembly { + let pos := mload(stream) + pos := add(pos, 32) + res := mload(pos) + mstore(stream, pos) + } + } + + /** @notice Reads bytes32 from the stream + * @param stream stream + */ + function readBytes32(uint256 stream) internal pure returns (bytes32 res) { + assembly { + let pos := mload(stream) + pos := add(pos, 32) + res := mload(pos) + mstore(stream, pos) + } + } + + /** @notice Reads address from the stream + * @param stream stream + */ + function readAddress(uint256 stream) internal pure returns (address res) { + assembly { + let pos := mload(stream) + pos := add(pos, 20) + res := mload(pos) + mstore(stream, pos) + } + } + + /** @notice Reads bytes from the stream + * @param stream stream + */ + function readBytes( + uint256 stream + ) internal pure returns (bytes memory res) { + assembly { + let pos := mload(stream) + res := add(pos, 32) + let length := mload(res) + mstore(stream, add(res, length)) + } + } +} + +library Approve { + /** + * @dev ERC20 approve that correct works with token.approve which returns bool or nothing (USDT for example) + * @param token The token targeted by the call. + * @param spender token spender + * @param amount token amount + */ + function approveStable( + IERC20 token, + address spender, + uint256 amount + ) internal returns (bool) { + (bool success, bytes memory data) = address(token).call( + abi.encodeWithSelector(token.approve.selector, spender, amount) + ); + return success && (data.length == 0 || abi.decode(data, (bool))); + } + + /** + * @dev ERC20 approve that correct works with token.approve which reverts if amount and + * current allowance are not zero simultaniously (USDT for example). + * In second case it tries to set allowance to 0, and then back to amount. + * @param token The token targeted by the call. + * @param spender token spender + * @param amount token amount + */ + function approveSafe( + IERC20 token, + address spender, + uint256 amount + ) internal returns (bool) { + return + approveStable(token, spender, amount) || + (approveStable(token, spender, 0) && + approveStable(token, spender, amount)); + } +} + +struct Rebase { + uint128 elastic; + uint128 base; +} + +struct StrategyData { + uint64 strategyStartDate; + uint64 targetPercentage; + uint128 balance; // the balance of the strategy that BentoBox thinks is in there +} + +/// @notice A rebasing library +library RebaseLibrary { + /// @notice Calculates the base value in relationship to `elastic` and `total`. + function toBase( + Rebase memory total, + uint256 elastic + ) internal pure returns (uint256 base) { + if (total.elastic == 0) { + base = elastic; + } else { + base = (elastic * total.base) / total.elastic; + } + } + + /// @notice Calculates the elastic value in relationship to `base` and `total`. + function toElastic( + Rebase memory total, + uint256 base + ) internal pure returns (uint256 elastic) { + if (total.base == 0) { + elastic = base; + } else { + elastic = (base * total.elastic) / total.base; + } + } +} diff --git a/test/solidity/Facets/CBridgeFacetPacked.t.sol b/test/solidity/Facets/CBridgeFacetPacked.t.sol index a6c6a56d5..d4c176ec9 100644 --- a/test/solidity/Facets/CBridgeFacetPacked.t.sol +++ b/test/solidity/Facets/CBridgeFacetPacked.t.sol @@ -24,7 +24,7 @@ contract CBridgeFacetPackedTest is Test, DiamondTest { address internal constant CBRIDGE_ROUTER = 0x1619DE6B6B20eD217a58d00f37B9d47C7663feca; address internal constant USDT_ADDRESS = - 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8; + 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9; address internal constant USDC_ADDRESS = 0xaf88d065e77c8cC2239327C5EDb3A432268e5831; address internal constant WHALE = diff --git a/tsconfig.json b/tsconfig.json index f39e542db..5fa2df4a1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,9 @@ "moduleResolution": "node", "forceConsistentCasingInFileNames": true, "outDir": "dist", - "resolveJsonModule": true + "resolveJsonModule": true, + "lib": ["es2015"], + "types": ["node"] }, "include": [ "hardhat.config.ts", diff --git a/utils/network.ts b/utils/network.ts index 8a6f08b69..b9ab4bd46 100644 --- a/utils/network.ts +++ b/utils/network.ts @@ -1,4 +1,8 @@ import 'dotenv/config' +import * as fs from 'fs' +import path from 'path' +import { Chain } from 'viem' +import * as chains from 'viem/chains' export function node_url(networkName: string): string { if (networkName) { const uri = process.env['ETH_NODE_URI_' + networkName.toUpperCase()] @@ -46,3 +50,45 @@ export function getMnemonic(networkName?: string): string { export function accounts(networkName?: string): { mnemonic: string } { return { mnemonic: getMnemonic(networkName) } } + +// get a list of all networks from our ./networks file +export function getAllNetworks(): string[] { + try { + // Read file contents + const fileContents = fs.readFileSync( + path.join(__dirname, '../networks'), + 'utf-8' + ) + + // Split the contents by new lines to get an array of network names + const networkNames = fileContents + .split('\n') + .map((name) => name.trim()) + .filter((name) => name !== '') + + return networkNames + } catch (error) { + console.error(`Error reading file: ${JSON.stringify(error, null, 2)}`) + return [] + } +} + +// viem chain handling +const chainNameMappings: Record<string, string> = { + zksync: 'zkSync', + polygonzkevm: 'polygonZkEvm', +} + +const chainMap: Record<string, Chain> = {} +for (const [k, v] of Object.entries(chains)) { + // @ts-ignore + chainMap[k] = v +} + +export const getViemChainForNetworkName = (network: string): Chain => { + const chainName = chainNameMappings[network] || network + const chain: Chain = chainMap[chainName] + + if (!chain) throw new Error(`Viem chain not found for network ${network}`) + return chain +} diff --git a/utils/viemScriptHelpers.ts b/utils/viemScriptHelpers.ts new file mode 100644 index 000000000..470029461 --- /dev/null +++ b/utils/viemScriptHelpers.ts @@ -0,0 +1,26 @@ +import { Chain } from 'viem' +import * as chains from 'viem/chains' + +const chainNameMappings: Record<string, string> = { + zksync: 'zkSync', + polygonzkevm: 'polygonZkEvm', + immutablezkevm: 'immutableZkEvm', +} + +const chainMap: Record<string, Chain> = {} +for (const [k, v] of Object.entries(chains)) { + // @ts-ignore + chainMap[k] = v +} + +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 +} diff --git a/yarn.lock b/yarn.lock index 4e2485232..4b7829c2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9924,10 +9924,10 @@ viem@^1.6.0: isows "1.0.3" ws "8.13.0" -viem@^2.11.1: - version "2.18.4" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.18.4.tgz#6af97b68141faa68f624b7cded4956065432a078" - integrity sha512-JGdN+PgBnZMbm7fc9o0SfHvL0CKyfrlhBUtaz27V+PeHO43Kgc9Zd4WyIbM8Brafq4TvVcnriRFW/FVGOzwEJw== +viem@^2.18.7: + version "2.18.7" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.18.7.tgz#a7020b67ee14fd27f8c038efb4a4cf6cf5e55a4a" + integrity sha512-0Xy5ypk+n4lYthsvC96jsZE97quKoq1t53RrbhKElmq84Dt705uUjQDgH0/LqAV02Oe6341M3jPTU9JLbs2K2Q== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.4.0"