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

Contract verification plugin #5221

Merged
merged 100 commits into from
Oct 15, 2024

Conversation

manuelwedler
Copy link
Contributor

@manuelwedler manuelwedler commented Sep 25, 2024

This PR adds a generalized contract verification plugin. Contracts written / compiled in Remix can be verified at Sourcify, Etherscan and Blockscout at the same time. It basically adds all the features the separate Etherscan and Sourcify plugins had and makes them obsolete.

Features:

  • Verify contracts and their proxies on Sourcify, Etherscan and Blockscout by providing the source code to their APIs
  • Check the verification status via receipts that are stored in local storage
  • Lookup up the source code of any address and add it to Remix, if the respective contract is verified on one of the three verifiers

The plugin isn't enabled by default yet, as I wasn't sure how to do it.

We had to make changes to the compiler-artefacts.ts to be able to get the compiler input JSON of contracts. Some more info about this here: sourcifyeth#1

Copy link

netlify bot commented Sep 25, 2024

👷 Deploy request for remixproject pending review.

Visit the deploys page to approve it

Name Link
🔨 Latest commit dacce46

@Aniket-Engg Aniket-Engg added the plugins internal & external plugins' issues label Oct 15, 2024
Only after adding the PluginClient (that imports @remixproject/plugin-webview) the
contract-verification-plugin started to inherit Remix styles
The current compilerArtefacts plugin's existing methods had two flaws:
1. It wasn't possible to get all Compiler Abstracts available in one go.
2. It was possible to first get all files with `getAllContractsData` and then call each CompilerAbstract one by one with `getCompilerAbstract`, however, in that case the CompilerAbstract was missing the `input` because it wasn't passed to the contructor and saveCompilationPerFileResult. It was only done so for the `solidityUnitTesting` plugin listener.

The compiler input is needed for consistent contract verification. While it's possible to generate a compiler input from the contract artefact, via the metadata, it is not always possible to get a match due to known bugs in compiler's AST generation in prev. versions. This results in different bytecode from the original compiler input's output vs the compilation output from the metadata file.
Copy link
Collaborator

@Aniket-Engg Aniket-Engg left a comment

Choose a reason for hiding this comment

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

As discussed with @LianaHus , I have tested plugin functionality on preview link of #5235 . Functionality wise it looks fine.

@Aniket-Engg Aniket-Engg merged commit e293ad9 into ethereum:master Oct 15, 2024
24 of 26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
plugins internal & external plugins' issues
Projects
Status: COMPLETED
Development

Successfully merging this pull request may close these issues.

3 participants