《NFT区块链进阶指南一》Remix部署Solidity ERC721合约(NFT合约)到Etherscan

1,050 阅读3分钟

本篇为NFT区块链高级部分,在阅读之前需了解:Remix、Metamask、Etherscan、Solidity、Openzeppelin、ERC721合约

一、部署合约

1.1 无构造参数合约部署

  1. 智能合约编写完成后,需要将代码发布到以太网主网,在部署主网之前,通常需要先在测试网络完成测试
  2. 目前常用的下面将合约部署到Goerli测试网络,各个测试网络数的部署和正式环境部署基本一致
  3. 下面待部署合约代码,此处部署一个ERC721合约示例(即NFT合约)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/Pausable.sol";

contract SolidityERC721 is ERC721, Pausable, Ownable {
    string public email;

    constructor() ERC721("Solidity", "ERC721") {}

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function setEmail(string memory _email) public onlyOwner {
        email = _email;
    }

    function getEmail() public view returns (string memory) {
        return email;
    }
}
  1. 编译合约,检查代码是否正常编译,需要注意此处的编译器(COMPILER)版本为0.8.19,此处的版本在合约验证时需要匹配

image.png

  1. 部署合约,然后测试合约是否正确
    • 注意:测试环境改为内置环境,测试完成后再切换钱包

image.png

  1. 校验均通过之后切换钱包的环境为Goerli测试环境(如果是部署主网则选择以太坊主网即可,操作完全一致)

image.png

  1. 切换部署环境,选择Injected Provider - MetaMask

image.png

  1. 如果有多个钱包则选择需要作为部署账户的钱包(也就是合约的拥有者,即owner,对于需要onlyOwner权限的操作只能由当前钱包完成)

image.png

  1. 确定连接,确定后,环境将会切换为Metamask钱包

image.png

  1. 点击Deploy进行合约部署,然后在弹出的钱包确定交易,不同时间段的gas费不一致,对于合约的部署可以选择在网络不繁忙的时候进行部署,此时gas相对低

image.png

  1. 确认交易后控制台会输出交易信息,选择 view on etherscan 查看合约部署详情

image.png

  1. 查看合约交易详情

image.png

1.2 有构造参数合约部署

  1. 有构造参数智能合约源码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/Pausable.sol";

contract SolidityERC721Construct is ERC721, Pausable, Ownable {
    string public email;

    constructor(string memory _email) ERC721("Solidity", "ERC721") {
        email = _email;
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function setEmail(string memory _email) public onlyOwner {
        email = _email;
    }

    function getEmail() public view returns (string memory) {
        return email;
    }
}

  1. 部署合约,注意部署时需要配置构造参数信息(除了此处和无构造参数合约部署不一致外别的操作完全一致)

image.png

  1. 剩下的操作请参考无构造参数合约部署部署,部署完成后合约地址如下

image.png

二、合约详情

  1. 点击部署的合约地址,此处点击上图红框的地址将会进入到合约详情

image.png

  1. 点击Contract,此处是合约的源代码和合约提供的读取和设置方法
    • 注意:必须要合约验证之后才能展示详情,合约验证参考下篇文章

image.png

三、部署提示

  1. 不同时间段Gas费用相差较大,如果在中国区部署可选择下午时间,此时对应EST的凌晨,此时gas费用会低一些
  2. 合约部署到主网前一定要在测试网络综合测试完成没有问题再部署主网
  3. 如果遇到部署问题可以评论区留言