EIP-2535 Diamond 项目使用教程
本文档基于开源项目 mudgen/diamond-3-hardhat 编写,旨在帮助用户了解项目的目录结构、启动文件和配置文件。
1. 项目的目录结构及介绍
diamond-3-hardhat/
├── contracts/
│ ├── facets/
│ ├── upgrades/
│ ├── Diamond.sol
│ ├── DiamondCutFacet.sol
│ ├── DiamondLoupeFacet.sol
│ ├── OwnershipFacet.sol
├── scripts/
│ ├── deploy.js
├── test/
│ ├── diamondTest.js
├── .env.example
├── .gitattributes
├── .gitignore
├── .prettierignore
├── .prettierrc
├── hardhat.config.ts
├── LICENSE
├── package.json
├── README.md
├── tsconfig.json
├── yarn.lock
目录结构介绍
contracts/
: 包含所有智能合约文件。facets/
: 存放各个 facet 合约。upgrades/
: 存放升级相关的合约。Diamond.sol
: 主钻石合约。DiamondCutFacet.sol
: 用于切割钻石的 facet。DiamondLoupeFacet.sol
: 用于查看钻石信息的 facet。OwnershipFacet.sol
: 用于管理钻石所有权的 facet。
scripts/
: 包含部署脚本。deploy.js
: 部署钻石合约的脚本。
test/
: 包含测试脚本。diamondTest.js
: 钻石合约的测试脚本。
.env.example
: 环境变量示例文件。.gitattributes
: Git 属性配置文件。.gitignore
: Git 忽略文件配置。.prettierignore
: Prettier 忽略文件配置。.prettierrc
: Prettier 配置文件。hardhat.config.ts
: Hardhat 配置文件。LICENSE
: 项目许可证。package.json
: 项目依赖和脚本配置。README.md
: 项目说明文档。tsconfig.json
: TypeScript 配置文件。yarn.lock
: Yarn 锁定文件。
2. 项目的启动文件介绍
scripts/deploy.js
deploy.js
是项目的启动文件,用于部署钻石合约。以下是该文件的主要内容:
const hre = require("hardhat");
async function main() {
const DiamondCutFacet = await hre.ethers.getContractFactory("DiamondCutFacet");
const diamondCutFacet = await DiamondCutFacet.deploy();
await diamondCutFacet.deployed();
const Diamond = await hre.ethers.getContractFactory("Diamond");
const diamond = await Diamond.deploy(ownerAddress, diamondCutFacet.address);
await diamond.deployed();
console.log("Diamond deployed to:", diamond.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
启动步骤
- 部署
DiamondCutFacet
合约。 - 部署
Diamond
合约,并传入钻石的所有者地址和DiamondCutFacet
合约地址。 - 输出钻石合约的部署地址。
3. 项目的配置文件介绍
hardhat.config.ts
hardhat.config.ts
是 Hardhat 的配置文件,用于配置网络、编译器和其他 Hardhat 相关的设置。以下是该文件的主要内容:
import { HardhatUserConfig } from "hardhat/config";
import "@nomiclabs/hardhat-waffle";
import "@nomiclabs/hardhat-ethers";
import "hardhat-gas-reporter";
import "solidity-coverage";
const config: HardhatUserConfig = {
solidity: "0.8.0",
networks: {
hardhat: {
chainId: 1337
},
// 其他网络配置
},
gasReporter: {