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

Open
wants to merge 100 commits into
base: master
Choose a base branch
from

Conversation

manuelwedler
Copy link

@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 7fee827

kuzdogan and others added 29 commits September 27, 2024 17:11
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Sprint - Blocked
Development

Successfully merging this pull request may close these issues.

2 participants