Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat(Multichain): use contract addresses from safe-deployments [SW-169] #4262

Merged
merged 4 commits into from
Sep 30, 2024

Conversation

jmealy
Copy link
Contributor

@jmealy jmealy commented Sep 26, 2024

What it solves

Resolves: https://www.notion.so/safe-global/Use-officially-deployed-lib-contracts-ee4ff0091ae946799c37dde88531a070

How this PR fixes it

  • Replaces hardcoded temporary contract addresses with the proper addresses from safe-deployments

How to test it

  • Ensure safe creation works as before.
  • Ensure migration of invalid mastercopy safes works as before.
  • It should work on all the chains where the new contracts are deployed.
  • Creation and migration transactions should not be flagged by blockaid.

Checklist

  • I've tested the branch on mobile 📱
  • I've documented how it affects the analytics (if at all) 📊
  • I've written a unit/e2e test for it (if applicable) 🧑‍💻

Copy link

Copy link

github-actions bot commented Sep 26, 2024

Branch preview

⏳ Deploying a preview site...

Copy link

github-actions bot commented Sep 26, 2024

📦 Next.js Bundle Analysis for safe-wallet-web

This analysis was generated by the Next.js Bundle Analysis action. 🤖

⚠️ Global Bundle Size Increased

Page Size (compressed)
global 1003.23 KB (🟡 +48.43 KB)
Details

The global bundle is the javascript bundle that loads alongside every page. It is in its own category because its impact is much higher - an increase to its size means that every page on your website loads slower, and a decrease means every page loads faster.

Any third party scripts you have added directly to your app using the <script> tag are not accounted for in this analysis

If you want further insight into what is behind the changes, give @next/bundle-analyzer a try!

Eighteen Pages Changed Size

The following pages changed size from the code in this PR compared to its base branch:

Page Size (compressed) First Load
/ 511 B (🟢 -24.37 KB) 1003.73 KB
/address-book 26.09 KB (🟡 +5 B) 1.01 MB
/apps 50.18 KB (🟡 +174 B) 1.03 MB
/apps/custom 41.81 KB (🟡 +174 B) 1.02 MB
/apps/open 54.74 KB (🟡 +37 B) 1.03 MB
/balances 31 KB (🟡 +73 B) 1.01 MB
/balances/nfts 19.18 KB (-1 B) 1022.41 KB
/home 60.96 KB (🟡 +1.24 KB) 1.04 MB
/imprint 1.38 KB (🟡 +11 B) 1004.61 KB
/new-safe/advanced-create 36.49 KB (🟡 +1.36 KB) 1.02 MB
/new-safe/create 35.75 KB (🟡 +1.36 KB) 1.01 MB
/new-safe/load 16.41 KB (🟡 +10 B) 1019.64 KB
/settings/modules 9.78 KB (-1 B) 1013.01 KB
/settings/notifications 27.02 KB (🟢 -12 B) 1.01 MB
/settings/safe-apps 25.56 KB (🟡 +38 B) 1 MB
/settings/setup 35.98 KB (🟡 +5 B) 1.01 MB
/transactions/tx 21.07 KB (-2 B) 1 MB
/welcome 6.77 KB (🟢 -30 B) 1010 KB
Details

Only the gzipped size is provided here based on an expert tip.

First Load is the size of the global bundle plus the bundle for the individual page. If a user were to show up to your website and land on a given page, the first load size represents the amount of javascript that user would need to download. If next/link is used, subsequent page loads would only need to download that page's bundle (the number in the "Size" column), since the global bundle has already been downloaded.

Any third party scripts you have added directly to your app using the <script> tag are not accounted for in this analysis

Next to the size is how much the size has increased or decreased compared with the base branch of this PR. If this percentage has increased by 20% or more, there will be a red status indicator applied, indicating that special attention should be given to this.

Copy link

github-actions bot commented Sep 26, 2024

Coverage report

St.
Category Percentage Covered / Total
🟡 Statements
78.2% (-0.02% 🔻)
12422/15885
🔴 Branches
58.18% (+0.01% 🔼)
3229/5550
🟡 Functions 65.7% 1961/2985
🟡 Lines
79.66% (-0.02% 🔻)
11212/14074
Show files with reduced coverage 🔻
St.
File Statements Branches Functions Lines
🟡
... / transactions.ts
75.32% (+0.15% 🔼)
42.86% (-0.69% 🔻)
52.17%
76.43% (+0.13% 🔼)
🟡
... / transaction-guards.ts
66.97% (-1.11% 🔻)
33.33% 68.25%
67.09% (-1.58% 🔻)
🟢
... / useSafeCreationData.ts
98.57%
95.45% (-0.2% 🔻)
100% 100%
🟢
... / index.tsx
95.45% (+1.01% 🔼)
76.92% (-4.9% 🔻)
100% 100%

Test suite run success

1548 tests passing in 206 suites.

Report generated by 🧪jest coverage report action from 38fbaef

@jmealy jmealy marked this pull request as ready for review September 27, 2024 09:11
@jmealy jmealy requested a review from schmanu September 27, 2024 09:11
@@ -44,6 +43,9 @@ const latestSafeVersion = getLatestSafeVersion(
.build(),
)

const SAFE_TO_L2_SETUP_ADDRESS = '0xBD89A1CE4DDe368FFAB0eC35506eEcE0b1fFdc54'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can fetch this from the safe-deployments too here.

@@ -44,6 +43,9 @@ const latestSafeVersion = getLatestSafeVersion(
.build(),
)

const SAFE_TO_L2_SETUP_ADDRESS = '0xBD89A1CE4DDe368FFAB0eC35506eEcE0b1fFdc54'
const SAFE_TO_L2_SETUP_INTERFACE = new Interface(['function setupToL2(address l2Singleton)'])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should try to get the lib contracts also added to our typechain.

@@ -226,6 +225,10 @@ export const createNewUndeployedSafeWithoutSalt = (
throw new Error('No Safe deployment found')
}

const safeToL2SetupDeployment = getSafeToL2SetupDeployment({ version: safeVersion, network: chain.chainId })
const safeToL2SetupAddress = safeToL2SetupDeployment?.defaultAddress
const safeToL2SetupInterface = safeToL2SetupDeployment && new Interface(safeToL2SetupDeployment?.abi)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally we try to use typechain for this.

@@ -226,6 +225,10 @@ export const createNewUndeployedSafeWithoutSalt = (
throw new Error('No Safe deployment found')
}

const safeToL2SetupDeployment = getSafeToL2SetupDeployment({ version: safeVersion, network: chain.chainId })
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This contract only exists for 1.4.1 Safes. So I think we need to always fetch it for those:

Suggested change
const safeToL2SetupDeployment = getSafeToL2SetupDeployment({ version: safeVersion, network: chain.chainId })
const safeToL2SetupDeployment = getSafeToL2SetupDeployment({ version: "1.4.1", network: chain.chainId })

@@ -226,6 +225,10 @@ export const createNewUndeployedSafeWithoutSalt = (
throw new Error('No Safe deployment found')
}

const safeToL2SetupDeployment = getSafeToL2SetupDeployment({ version: safeVersion, network: chain.chainId })
const safeToL2SetupAddress = safeToL2SetupDeployment?.defaultAddress
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think its better to use this:

Suggested change
const safeToL2SetupAddress = safeToL2SetupDeployment?.defaultAddress
const safeToL2SetupAddress = safeToL2SetupDeployment?.networkAddresses[chain.chainId]

@@ -26,14 +26,17 @@ export const SingleTxDecoded = ({ tx, txData, actionTitle, variant, expanded, on
const addressInfo = txData.addressInfoIndex?.[tx.to]
const name = addressInfo?.name

const safeToL2MigrationDeployment = getSafeToL2MigrationDeployment()
const safeToL2MigrationAddress = safeToL2MigrationDeployment?.defaultAddress
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also use and check the networkAddresses here.
Not because they could be different but because the deployment could be missing on a chain.

@@ -96,6 +96,10 @@ const ActivateAccountFlow = () => {

const { owners, threshold, safeVersion } = undeployedSafeSetup

const safeToL2SetupDeployment = getSafeToL2SetupDeployment({ version: safeVersion, network: chain?.chainId })
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. We also gotta use 1.4.1:

Suggested change
const safeToL2SetupDeployment = getSafeToL2SetupDeployment({ version: safeVersion, network: chain?.chainId })
const safeToL2SetupDeployment = getSafeToL2SetupDeployment({ version: "1.4.1", network: chain?.chainId })


jest.mock('@/services/tx/tx-sender/sdk')

export const SAFE_TO_L2_MIGRATION_ADDRESS = '0xfF83F6335d8930cBad1c0D439A841f01888D9f69'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lets also fetch this one from the deployments.

Copy link
Member

@schmanu schmanu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a small nit but otherwise it is looking good now.

data: includeMigration ? SAFE_TO_L2_SETUP_INTERFACE.encodeFunctionData('setupToL2', [safeL2Address]) : EMPTY_DATA,
to: includeMigration && safeToL2SetupAddress ? safeToL2SetupAddress : ZERO_ADDRESS,
data:
includeMigration && safeToL2SetupInterface
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: the safeToL2SetupInterface cannot be undefined.

Suggested change
includeMigration && safeToL2SetupInterface
includeMigration

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

true, thanks!

@jmealy jmealy merged commit 5c7d23c into epic/multichain-safes Sep 30, 2024
2 of 3 checks passed
@jmealy jmealy deleted the multichain-use-official-deployments branch September 30, 2024 09:51
@github-actions github-actions bot locked and limited conversation to collaborators Sep 30, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants