@nomiclabs/buidler-etherscan
v2.1.0
Published
Buidler plugin for verifying contracts on etherscan
Downloads
253
Readme
buidler-etherscan
Buidler plugin for integration with Etherscan's contract verification service.
What
This plugin helps you verify the source code for your Solidity contracts on Etherscan.
It's smart and it tries to do as much as possible to facilitate the process:
- Just provide the deployment address and constructor arguments, and the plugin will detect locally which contract to verify.
- If your contract uses Solidity libraries, the plugin will detect them and deal with them automatically. You don't need to do anything about them.
- A simulation of the verification process will run locally, allowing the plugin to detect and communicate any mistakes during the process.
- Once the simulation is successful the contract will be verified using the Etherscan API.
Installation
npm install --save-dev @nomiclabs/buidler-etherscan
And add the following statement to your buidler.config.js
:
usePlugin("@nomiclabs/buidler-etherscan");
Tasks
This plugin provides the verify
task, which allows you to verify contracts through Etherscan's service.
Environment extensions
This plugin does not extend the environment.
Usage
You need to add the following Etherscan config to your buidler.config.js
file:
module.exports = {
networks: {
mainnet: { ... }
},
etherscan: {
// Your API key for Etherscan
// Obtain one at https://etherscan.io/
apiKey: "YOUR_ETHERSCAN_API_KEY"
}
};
Lastly, run the verify
task, passing the address of the contract, the network where it's deployed, and the constructor arguments that were used to deploy it (if any):
npx buidler verify --network mainnet DEPLOYED_CONTRACT_ADDRESS "Constructor argument 1"
Complex arguments
When the constructor has a complex argument list, it might be easier to write a javascript module that exports the argument list. The expected format is the same as a constructor list for an ethers contract. For example, if you have a contract like this:
struct Point {
uint x;
uint y;
}
contract Foo {
constructor (uint x, string s, Point memory point, bytes b) { ... }
}
then you can use an arguments.js
file like this:
module.exports = [
50,
"a string argument",
{
x: 10,
y: 5,
},
// bytes have to be 0x-prefixed
"0xabcdef",
];
Where the third argument represents the value for the point
parameter.
The module can then be loaded by the verify
task when invoked like this:
npx buidler verify --constructor-args arguments.js DEPLOYED_CONTRACT_ADDRESS
How it works
The plugin works by fetching the bytecode in the given address and using it to check which contract in your project corresponds to it. Besides that, some sanity checks are performed locally to make sure that the verification won't fail.
Known limitations
- Cases where more than one contract correspond to the same bytecode aren’t supported.
- Adding, removing, moving or renaming new contracts to the buidler project or reorganizing the directory structure of contracts after deployment may alter the resulting bytecode in some solc versions. See this Solidity issue for further information.
TypeScript support
You need to add this to your tsconfig.json
's files
array: "node_modules/@nomiclabs/buidler-etherscan/src/type-extensions.d.ts"