ZORA 是一个备受关注的去层化应用(dApp)平台和 NFT 市场,它以其创新的低费用、高速度的以太坊 Layer 2 解决方案和强大的开发者工具而闻名,如果你是一名开发者,并希望基于 ZORA 平台进行开发、测试或部署自己的 dApp,那么搭建一个本地开发环境是必不可少的步骤,本文将详细介绍如何从零开始搭建 ZORA 币(更准确地说是 ZORA 协议及其代币 ZORA)的本地开发环境。

理解 ZORA 开发环境

在开始之前,我们需要明确一点:ZORA 本身不是一个像比特币那样的“币”,而是一个构建在以太坊(特别是其 Layer 2 网络 OP Stack,如 Base)之上的协议,其原生代币 ZORA 用于协议内的激励、治理等功能,搭建 ZORA 的本地开发环境,更多的是指搭建一个能够与 ZORA 协议交互、部署和测试 ZORA 相关智能合约以及开发前端 dApp 的本地环境。

这通常包括以下几个核心组件:

  1. 以太坊节点/客户端:用于与区块链网络交互。
  2. 开发框架:如 Hardhat 或 Foundry,用于编写、编译、测试和部署智能合约。
  3. 前端框架:如 Next.js 或 React,用于构建用户界面。
  4. ZORA SDK/合约:ZORA 提供的官方开发工具包和核心合约。
  5. 钱包集成:如 MetaMask,用于用户与 dApp 交互。

前提条件

在开始搭建之前,请确保你的开发环境满足以下条件:

  • 操作系统:macOS、Linux 或 Windows (推荐使用 WSL2 - Windows Subsystem for Linux)。
  • Node.js:建议版本为 18.x 或更高,可以通过 Node.js 官网 下载并安装。
  • npm 或 yarn:Node.js 的包管理器,npm 通常随 Node.js 一起安装,yarn 可以通过 npm install -g yarn 安装。
  • Git:用于版本控制,可以从 Git 官网 下载安装。
  • 代码编辑器:推荐使用 VS Code,并安装 Solidity 插件(如 Hardhat for VS Code)。
  • MetaMask 测试钱包:从 MetaMask 官网 安装浏览器扩展,并创建一个或多个测试账户。

搭建步骤

步骤 1:安装并配置本地开发节点

ZORA 协议主要部署在以太坊的 Layer 2 网络上,Base,对于本地开发,我们通常使用 Hardhat 提供的本地节点(Hardhat Network),它模拟了以太坊行为,非常适合快速开发和测试。

  1. 创建项目目录

    mkdir zora-dapp-dev
    cd zora-dapp-dev
  2. 初始化 npm 项目

    npm init -y
  3. 安装 Hardhat

    npm install --save-dev hardhat
  4. 初始化 Hardhat 项目

    npx hardhat

    在交互式命令中,选择 "Create a basic sample project"(创建一个基本示例项目),然后一路回车使用默认配置,这会生成 hardhat.config.js 文件和一些示例合约和测试脚本。

步骤 2:安装 ZORA 相关依赖

ZORA 提供了官方的合约库和 SDK,方便开发者快速集成。

  1. 安装 ZORA 合约

    npm install @zoralabs/zora-protocol

    这会安装 ZORA 协议的核心合约,包括 NFT 合约、市场合约等。

  2. 安装 OpenZeppelin 合约(可选但推荐): OpenZeppelin 提供了经过审计的、安全的 Solidity 合约模板。

    npm install @openzeppelin/contracts
  3. 安装 Ethers.js(用于与区块链交互)

    npm install ethers

步骤 3:配置 Hardhat

我们需要在 hardhat.config.js 文件中配置网络信息,以便连接到本地 Hardhat 节点或测试网。

打开 hardhat.config.js,你可以根据需要添加配置,确保默认的 Hardhat 网络是启用的:

require("@nomicfoundation/hardhat-toolbox");
require("@openzeppelin/contracts");
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.19", // 根据你的需求调整 Solidity 版本
  networks: {
    hardhat: {
      // 默认配置通常足够
    },
    // 如果你想要连接到测试网,可以在这里添加配置
    // base-goerli (Base 测试网)
    // baseGoerli: {
    //   url: "https://goerli.base.org",
    //   accounts: [process.env.PRIVATE_KEY] // 使用环境变量存储私钥
    // }
  },
  etherscan: {
    apiKey: process.env.ETHERSCAN_API_KEY // 如果你需要验证合约到测试网
  }
};

步骤 4:编写和测试智能合约

  1. 创建新的合约文件: 在 contr

    随机配图
    acts 目录下,创建一个新的 Solidity 文件,MyZoraNFT.sol

  2. 编写合约: 你可以基于 ZORA 的 NFT 合约进行扩展,或者编写一个简单的合约来与 ZORA 协议交互。

    // contracts/MyZoraNFT.sol
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.19;
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
    import "@openzeppelin/contracts/access/Ownable.sol";
    // 如果你需要使用 ZORA 的特定功能,可以导入相应的 ZORA 合约
    // import "@zoralabs/zora-protocol/contracts/token/ERC721/extensions/ERC721CreatorRoyalties.sol";
    contract MyZoraNFT is ERC721, Ownable {
        uint256 private _tokenIdCounter;
        constructor() ERC721("MyZoraNFT", "MZORA") {
            _tokenIdCounter = 1;
        }
        function mint(address to, uint256 tokenId) public onlyOwner {
            _safeMint(to, tokenId);
        }
        function safeMint(address to) public onlyOwner {
            uint256 tokenId = _tokenIdCounter;
            _safeMint(to, tokenId);
            _tokenIdCounter++;
        }
    }
  3. 编写测试脚本: 在 test 目录下,为你的合约编写测试脚本。MyZoraNFT.test.js

    // test/MyZoraNFT.test.js
    const { expect } = require("chai");
    const { ethers } = require("hardhat");
    describe("MyZoraNFT", function () {
        it("Should mint and return the correct token URI", async function () {
            const MyZoraNFT = await ethers.getContractFactory("MyZoraNFT");
            const myZoraNFT = await MyZoraNFT.deploy();
            await myZoraNFT.deployed();
            const [owner, addr1] = await ethers.getSigners();
            await myZoraNFT.safeMint(addr1.address);
            expect(await myZoraNFT.ownerOf(1)).to.equal(addr1.address);
        });
    });
  4. 运行测试: 在终端中执行:

    npx hardhat test

步骤 5:部署合约到本地网络

  1. 创建部署脚本: 在 scripts 目录下,创建一个部署脚本,deploy.js

    // scripts/deploy.js
    async function main() {
        const MyZoraNFT = await ethers.getContractFactory("MyZoraNFT");
        const myZoraNFT = await MyZoraNFT.deploy();
        await myZoraNFT.deployed();
        console.log("MyZoraNFT deployed to:", myZoraNFT.address);
    }
    main()
        .then(() => process.exit(0))
        .catch((error) => {
            console.error(error);
            process.exit(1);
        });
  2. 执行部署

    npx hardhat run scripts/deploy.js --network hardhat

    这会将你的合约部署到本地 Hardhat 节点,并输出合约地址。

步骤 6:搭建前端 dApp(可选)

如果你想开发一个