跳至主要内容
本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)

ERC-721

概述

本指南将逐步介绍如何在 Kaia 上创建和部署 ERC-721 兼容令牌。 由于 Kaia 的以太坊兼容性,在 Kaia 上创建可替代代币的步骤与在以太坊上创建代币的步骤类似,并且使用 ERC721 标准

为遵循标准,您将部署一个分别实现以下 ERC721 和 ERC165 接口的合约:


interface ERC721 /* is ERC165 */ {
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);=
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
function balanceOf(address _owner) external view returns (uint256);
function ownerOf(uint256 _tokenId) external view returns (address);
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
function approve(address _approved, uint256 _tokenId) external payable;
function setApprovalForAll(address _operator, bool _approved) external;
function getApproved(uint256 _tokenId) external view returns (address);
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}
interface ERC165 {
function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

  • 转移事件:当令牌的所有权从一个地址转移到另一个地址时发出。
  • 批准事件:当一个地址被批准传输特定令牌时发出。
  • ApprovalForAll 事件:当所有者批准或撤销批准操作员管理其所有代币时发出。
  • balanceOf:返回特定地址拥有的 NFT(不可篡改代币)数量的方法。
  • ownerOf:返回特定令牌所有者地址的方法。 每个 ERC721 令牌都是唯一的,由一个 ID 表示。 该功能允许用户或应用程序根据令牌的唯一 ID 确定令牌的所有者。
  • safeTransferFrom(无数据):将特定令牌的所有权从一个地址安全转移到另一个地址的方法。 该函数检查收件人是否为智能合约。 如果是,则必须执行一个特定函数(onERC721Received)来接受传输。
  • transferFrom:将令牌的所有权从一个地址转移到另一个地址的方法。 一般用于发件人已获准转移令牌的情况。
  • approve:批准地址转移特定令牌的方法。 这样就可以进行委托转让,即所有者可以允许另一方代表自己转让代币。
  • getApproved:用于获取特定令牌的已批准地址的方法。
  • setApprovalForAll:允许一个或多个代币的所有者批准或撤销批准操作员管理其所有代币的方法。
  • isApprovedForAll:检查操作员是否获准管理所有者所有代币的方法。
  • safeTransferFrom(带数据):方法类似于 safeTransferFrom(不带数据),但多了一个数据参数。 如果接收方是智能合约,这些额外数据可用于在传输过程中传递额外信息。 该函数还会检查接收方是否是智能合约,以及它是否实现了 onERC721Received 函数。

入门

在本节中,您将使用 Remix Online IDE 创建和部署您的 ERC721 令牌合约。 为了方便和安全起见,我们将使用 OpenZeppelin ERC-721 合约来创建我们的令牌。 有了 OpenZeppelin,我们无需编写整个 ERC-721 接口。 相反,我们可以导入库合同并使用其函数。

第 1 步:将文件添加到 Filebase 和 IPFS

我们需要托管我们的 NFT 艺术和元数据文件;为此,我们将使用 IPFS --一个点对点文件存储和共享分布式系统。 使用 IPFS 协议有多种方法。 您可以在自己的系统上建立并运行 IPFS,也可以使用 Filebase 这个更简单的解决方案。

Filebase 是连接 IPFS 上 web3 分散存储的桥梁。 它通过管理底层基础设施,简化了对 IPFS 的访问。

在本指南中,我们将使用 Filebase 在 IPFS 上托管我们的 NFT 艺术和元数据。

步骤:

  1. 登录 Filebase 控制面板。
  2. 如果没有 IPFS 桶,请单击创建桶

  1. 选择 ** 上传** 按钮,上传您在水桶仪表板中看到的 NFT 图样。

  1. 点击文件选项卡中的文件名,复制(共享按钮)NFT 艺术的 IPFS URL。
  2. 使用 Filebase 向 IPFS 添加元数据 JSON 文件。

创建名为 kairos.json 的 JSON 文件,在图像字段中替换 IPFS URL,然后保存。 保存后,将 JSON 文件上传到 IPFS,与上一步类似。


{
"name": "Kairos NFT",
"description": "gkaia frens! gazuaaaaa!!!",
"image": "https://disastrous-turquoise-parakeet.myfilebase.com/ipfs/QmRvQc4wZCp6NF7dFL4ywiWTG7FSH3KKGUAkXGgsdYfcKi"
}

上传后,单击 "文件 "选项卡中的文件名并复制 IPFS URL。 它看起来一定和下面这张差不多:


https://disastrous-turquoise-parakeet.myfilebase.com/ipfs/QmY1LZF8JHo2r3h4X5VzLLXtJujqnBFGTyo2aqR9joXnt8

保存此 IPFS URL。 在下一节中,我们需要用它来铸造我们的 NFT。

第 2 步:创建 ERC721 令牌合约

开放式齐柏林合同向导

  • 打开 OpenZeppelin 合同向导
  • 选择 ER721
  • 为令牌提供名称符号。 例如分别是 Kairos 和 KS。
  • Base URI 字段中,将其设置为空
  • 在 "功能 "部分,选中 "可铸币"、"可焚烧"、"URIStorage"功能,以允许特权账户(只有所有者)能够铸币、焚烧令牌,并允许我们更新单个令牌 ID 的令牌 URI。
  • 点击复制图标,复制代码以便在下一节的 Remix 中使用。

重新混音

  • Remix 中,导航至 ** 文件资源管理器**,在 contracts 文件夹中新建一个名为 Kairos.sol 的文件。
  • 导航至Solidity Compiler选项卡,然后单击Compile Kairos.sol编译令牌合约。
  • 导航至部署和运行事务选项卡
  • 选择 Environment > Injected Provider > MetaMask
  • 合同下拉菜单中,选择您的合同。 例如,《启明星》。
  • Deploy 字段中,为 initialOwner 提供构造函数参数。
  • 点击 部署

第 3 步:与 ERC721 令牌合约互动

现在转到 Remix 中的已部署合同部分,展开已部署合同。 你会看到一堆功能。 展开safeMint函数并添加以下细节:

  1. 栏中添加您的钱包地址。
  2. tokenId 字段中输入任意大数值。 我们建议使用 "1",因为它代表铸造的第一枚令牌。
  3. uri 字段中,输入您在 向 IPFS 添加文件 部分生成的 JSON 文件的 URI。

  1. 点击交易,确认来自 MetaMask 的交易。 这可能需要几分钟时间,但您可以通过 Kaiascan 等区块浏览器确认交易是否已执行。

现在,您可以在凯亚-凯罗斯测试网上使用 NFT。

您可以通过输入地址或之前使用的令牌 ID 来检查其他详细信息,如 balanceOfnamesymbolownerOftokenURI

步骤 4:查看 Metamask 上的 NFT

  • 打开 MetaMask
  • 导航至NFT选项卡和钱包主页,您就会看到自动检测到的 NFT。

备注

显示 NFT 的最简单方法是打开 NFT 自动检测功能,您可以在 "安全与隐私 "下的 "设置 "中切换该功能。

让这个页面变得更好