Diamond Tutorial
1) Clone the hardhat-1-diamond repo from Nick Mudge
git clone [https://github.com/mudgen/diamond-1-hardhat](https://github.com/mudgen/diamond-1-hardhat)
2) Change to the new directory
cd diamond-1-hardhat
3) Install dependencies
npm install
💡
Automatically verify your smatcontracts on etherscan by installing the extension with-
npm install --save-dev @nomiclabs/hardhat-etherscan
4) Edit hardhat.config
add Etherscan plugin import to allow for automatic smart contract verification
require("@nomiclabs/hardhat-etherscan");add module exports
networks: {goerli: {url: "YOUR_QUICKNODE_HTTP_ENDPOINT",accounts: ["YOUR_PRIVATE_KEY"]}},etherscan: {// Your API key for Etherscan// Obtain one at [https://etherscan.io/](https://etherscan.io/)apiKey: "YOUR_ETHERSCAN_API_KEY"}
5) Deploy Diamond
Compile code
npx hardhat compileDeploy Diamond
npx hardhat run scripts/deploy.js --network goerli
6) Create script for facet deployment
// Deploy facets and set the `facetCuts` variableconsole.log('')console.log('Deploying facets')const FacetNames = ['DiamondCutFacet','DiamondLoupeFacet','OwnershipFacet']// The `facetCuts` variable is the FacetCut[] that contains the functions to add during diamond deploymentconst facetCuts = []for (const FacetName of FacetNames) { const Facet = await ethers.getContractFactory(FacetName) const facet = await Facet.deploy() await facet.deployed() console.log(`${FacetName} deployed: ${facet.address}`) facetCuts.push({ facetAddress: facet.address, action: FacetCutAction.Add, functionSelectors: getSelectors(facet) })}
7) Deploy Facet
npx hardhat run scripts/deploy.js --network goerli
8) Verify Contract
Run the following command with your Facet smart contract address:
npx hardhat verify --network goerli DEPLOYED_CONTRACT_ADDRESS
9) Diamond Cut