今日实时汇率
1 美元(USD)=
7.178 人民币(CNY)
反向汇率:1 CNY = 0.1393 USD 更新时间:2025-07-09 03:00:01
随着NFT的热度越来越高,加密艺术家们用“日进斗金”来形容一点也不为过,那如何创建自己的NFT作品,并出售给他人来获利呢?本文就是关于使用OpenSea平台创建属于自己的NFT作品及商店的教程。
一、 构建你自己的智能合约
利用ERC721代币标准,可以让你的NFT商品在OpenSea上立即进行交易。
由CryptoKitties率先开创的ERC721是非同质代币(NFT)的最新标准,而要在OpenSea上线你的作品,最好是遵循最新的Open Zeppelin ERC721实现。
注:如果你正在开发ERC1155合约,请查看这份ERC1155教程。
OpenSea Creature样本合约
我们创建了一个非常简单的示例存储库来帮助你入门,该示例的完整代码可以在Github上找到。
这个示例代码是一个名为OpenSea Creatures的收藏品。OpenSea Creatures非常简单:它们各自具有独特的外观、特征和属性,虽然有一天我们可能会围绕这些creatures添加更多的游戏,但出于本示例的目的,你可以对该creature进行的主要操作就是拥有它。你可以在此处查看Rinkeby环境中所有适用于OpenSea的OpenSea creatures。
创建ERC721合约
Text
pragma solidity ^0.5.0;
import "./TradeableERC721Token.sol";
import "openzeppelin-solidity/contracts/ownership/Ownable.sol";
/**
* @title Creature
* Creature - a contract for my non-fungible creatures.
*/
contract Creature is TradeableERC721Token {
constructor(address _proxyRegistryAddress) TradeableERC721Token("Creature", "OSC", _proxyRegistryAddress) public { }
function baseTokenURI() public view returns (string memory) {
return "https://opensea-creatures-api.herokuapp.com/api/creature/";
}
}
pragma solidity ^0.5.0;
import "./TradeableERC721Token.sol";
import "openzeppelin-solidity/contracts/ownership/Ownable.sol";
/**
* @title Creature
* Creature - a contract for my non-fungible creatures.
*/
contract Creature is TradeableERC721Token {
constructor(address _proxyRegistryAddress) TradeableERC721Token("Creature", "OSC", _proxyRegistryAddress) public { }
function baseTokenURI() public view returns (string memory) {
return "https://opensea-creatures-api.herokuapp.com/api/creature/";
}
}
正如你看到的,合约本身是简单的,它只是继承自TradeableERC721Token,后者又是继承自OpenZeppelin ERC721合约(该合约实现了所有必要的ERC721方法)。你可能会在游戏中拥有更多的逻辑,但是对于OpenSea来说,重要的是tokenURI方法,该方法使得我们能够将Creature合约中的tokenId映射到该合约的链下元数据。我们将在下一部分中了解更多有关此内容的信息。
OpenSea白名单(可选)
此外,ERC721Tradable和ERC1155Tradable合约将OpenSea用户的代理账户列入白名单,以便他们能够自动在OpenSea上进行任何交易(无需支付额外的批准费用)。在OpenSea上,每个用户都有一个他们控制的“代理”帐户,最终由交易合约调用以交易其商品。
请注意,这一添加并不意味着OpenSea本身就可以访问这些商品,只是意味着用户可以根据需要更轻松地列出它们。它们是完全可选的,但是可以为用户大大减少摩擦。你可以在覆盖的isApprovedForAll方法以及factory mint方法中找到此代码。
接下来,我们将学习如何构造该元数据,以便OpenSea可以选择它。
部署你的合约
要部署Creature合约,只需要核实存储库,获取免费的Alchemy API密钥,然后使用Truffle进行部署:
yarn install
export ALCHEMY_KEY=""
export MNEMONIC=""
export NETWORK="rinkeby"
truffle deploy --network rinkeby
如果你已经在使用Infura API ,则还可以使用INFURA_KEY环境变量代替ALCHEMY_KEY。
“小建议:你只需在shell会话中运行上述导出行一次。我们建议你将这些行放入.env文件中,一旦使用. .env就应用它,并避免在提交你的代码时检入它。 这里有一个示例.env文件。”
请注意,为了使用Truffle和Infura进行部署,你将需要一个来自MetaMask账户的“助记词短语”,为了让ETH进入你的Rinkeby MetaMask账户,你可以使用Rinkeby ETH水龙头,而要从Metamask中获取“助记词短语”,请单击“设置”并单击“显示助记词短语”,注意,请确保自己采用的是没有主网资产的钱包账户!
铸造你的代币
接下来,我们需要为新部署的ERC721合约铸造新的资产,我们会将这些资产放入我们控制的帐户中,以便我们可以测试商品的OpenSea拍卖流程。
部署到Rinkeby测试网络后,Rinkeby上将有一个合约,该合约将在Rinkeby Etherscan上可见。你可以在Deployment命令的输出中找到已部署合约的地址,并通过以下URL在Etherscan上找到它:
https://rinkeby.etherscan.io/address/。
例如,这是最近部署的一个合约。运行铸造脚本时,应将此合约地址和MetaMask帐户的地址设置为环境变量:
export OWNER_ADDRESS=""
export NFT_CONTRACT_ADDRESS=""
node scripts/mint.js
至此,我们已经在Rinkeby网络上部署了一个智能合约,并在合约中铸造了一些新的OpenSea创作品,你应该可以访问rinkeby.opensea.io,并在钱包中以NFT的形式查看你的商品。有关更多的信息,请参见第3节。
这些creatures的默认元数据由https://opensea-creatures-api.herokuapp.com/api/creature/{token_id}提供,你可以在此处进行设置。接下来,你需要创建自定义元数据API。
二、添加元数据
一旦你部署了自己的合约,你就需要一种方法让每个单独的NFT商品在OpenSea(以及其他支持NFT代币的网站)上正确显示。这就是链外元数据的作用!
ERC721合约中的每个代币标识符都将具有相应的元数据URI,该URI返回有关该商品的其他重要信息,例如名称、图像、描述等。要查找此URI,我们使用ERC721中的tokenURI方法和ERC1155中的URI方法。此元数据的一个简单示例是:
{
"name": "Herbie Starbelly",
"description": "Friendly OpenSea Creature that enjoys long swims in the ocean.",
"image": "https://storage.googleapis.com/opensea-prod.appspot.com/creature/50.png",
"attributes": [...]
}
你可以用元数据做很多事情——包括添加排名、提升、动画、日期等等!我们认为你肯定会想全面地了解它,所以请参阅我们为本教程提供的专用元数据标准文档。
接下来是什么?
所以,你现在有了自己的元数据API。你需要将它连接到一个代币合约,因此更改这里的行以使用API的URL,然后重新部署合约并创建一些测试项。完成后,请转到下一节,以了解有关在OpenSea上查看资产的更多信息。
三、查看你在OpenSea的商品
现在,假设你已经把你的合约部署到了Rinkeby测试网络上,作为一个具体的例子,我们在Rinkeby上部署的OpenSea Creature合约地址是:0x7dca125b1e805dc88814aed7ccc810f677d3e1db。
我们还为这个合约铸造了25件新的商品,因此目前的总商品供应量为25。在Etherscan上,我们可以查看其中一个项目的tokenURI,以查看它是否指向OpenSea Creature API端点。