隨著NFT的熱度越來越高,加密藝術家們用“日進斗金”來形容一點也不為過,那如何創建自己的NFT作品,並出售給他人來獲利呢?本文就是關於使用OpenSea平台創建屬於自己的NFT作品及商店的教程。

1

構建你自己的智能合約

利用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合約

Textpragma 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 installexport 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。

2

添加元數據

一旦你部署了自己的合約,你就需要一種方法讓每個單獨的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上查看資產的更多信息。

3

查看你在OpenSea的商品

現在,假設你已經把你的合約部署到了Rinkeby測試網絡上,作為一個具體的例子,我們在Rinkeby上部署的OpenSea Creature合約地址是:

0x7dca125b1e805dc88814aed7ccc810f677d3e1db。

我們還為這個合約鑄造了25件新的商品,因此目前的總商品供應量為25。在Etherscan上,我們可以查看其中一個項目的tokenURI,以查看它是否指向OpenSea Creature API端點。

現在就是激動人心的部分了! OpenSea有一個Rinkeby環境,其允許開發者測試他們與OpenSea的集成。這可以在testnets.opensea.io通過點擊正確的URL找到,我們應該能夠立即在OpenSea上查看到我們的其中一個商品,URL可按以下方式構造:

https://testnets.opensea.io/assets/ /

其中asset_contract_address是我們的合約地址,token_id是我們商品的代幣ID之一。例如,對於OpenSea Creature合約,這裡是OpenSea Creature #12:

https://testnets.opensea.io/assets/0x7dca125b1e805dc88814aed7ccc810f677d3e1db/12

通過使用你自己的合約地址和代幣ID,你也可以查看你的商品,並再次檢查所有內容是否按預期顯示。注意,我們在代幣元數據中包含的屬性,顯示為該商品的“properties”和"stats"。只要將它們作為字符串或int包含在元數據的attributes部分中,就會自動發生這種情況。而要測試集成,你只需導航到:

https://testnets.opensea.io/assets/ /

默認情況下,OpenSea將為你的資產緩存數據。需要強制更新你的商品嗎?你只需要使用force_update參數更改API:

https://testnets-api.opensea.io/api/v1/asset/ / /?force_update=true

下一步是什麼?

如果你在OpenSea上遇到顯示商品的問題(可能它們還缺少圖像或屬性),你可以使用以下API端點調試元數據。

查看下一節了解有關調試的信息。

如果元數據按預期顯示,你可以直接跳到第5節。

4

調試你的元數據

使用/validate endpoiunt

如果你遇到OpenSea顯示的問題(可能它們缺少圖像或屬性),你可以使用以下API端點調試元數據。

https://testnets-api.opensea.io/asset/ / /validate/

或者

https://api.opensea.io/asset/ / /validate/

只需使用你的合約地址和代幣ID訪問此URL,即可查看元數據URL是否有任何錯誤。如果你需要更多的幫助,請隨時聯繫我們的Discord頻道。

5

創建你的虛擬店鋪

現在,我們已經測試了集成你的商品,現在是時候在OpenSea上創建你自己的虛擬商店了。

為了做到這一點,我們將使用OpenSea虛擬商店創建器,它將填充OpenSea上的所有資產,並為你的NFT商品提供一個專用的商店頁面。例如,你可以在這裡查看OpenSea Creatures商店。

OpenSea 虛擬商店創建器

點擊此處‌轉到虛擬商店創建器,它將引導你完成在OpenSea上顯示所有你的商品的過程。

6

競拍商品

現在,你的NFT商品就已經上架到OpenSea上了,用戶可以立即購買或出售它們。你不需要再編寫任何其它的智能合約,OpenSea平台會處理剩餘的所有事情。

測試拍賣流程

假設你把自己的商品放在自己的賬戶裡,你可以立即測試商品的競拍流程。你只需要選擇一個你的商品,並點擊“sell”進入競拍流程。

在完成了競拍流程之後,你的商品就會進入拍賣了,事實上,如果你在Rinkeby上登錄另一個MetaMask帳戶,你就可以立即競拍自己的商品!

試著對一件商品出價

此外,你的所有商品,都可以立即通過任何以太坊賬戶出價,你只需找到任何一個商品,並為此提出報價即可。

對於報價,用戶還需要進行一些額外的步驟,包括將ETH換成WETH,你可以在這裡閱讀更多關於OpenSea競拍系統的信息。

7

上線到以太坊主網

在完成Rinkeby測試網的測試過程後,你準備好在以太坊主網上啟動你的NFT資產了嗎?是不是感到有點興奮?過程大致相同,只是環境變量發生了一些變化。

一旦你部署了你的合約並鑄造了你的商品,點擊這裡轉到主網商店創建器。這將引導你完成將自己所有的商品顯示在主網OpenSea平台的過程。

關於主網部署的說明

在主網上運行minting腳本時,需要將環境變量設置為mainnet not live,該環境變量影響minting腳本中節點的URL,而不是truffle。

部署時,你使用的是truffle,需要為truffle提供一個與truffle.js 中的命名對應的參數(--network live) 。但是當你mint時,你依賴於你設置的環境變量來構建URL (https://github.com/ProjectOpenSea/opensea-creatures/blob/master/scripts/mint.js#L54)。

如果你啟動了minting腳本,但什麼都沒有發生,請仔細檢查你的環境變量。

8

定制你的虛擬商店

現在,你已經創建了自己的OpenSea店面,你可以根據自己的喜好進行定制了,你只需確保以智能合約所有者身份登錄到Metamask(需要確保合約是可擁有的,如果不是,請聯繫support@ opensea.io),你將開始一個允許你編輯商店的按鈕。或者你可以通過商店管理者頁面修改你的店面情況。

單擊編輯按鈕,打開商店編輯器,並自定義你喜歡的商店,你自己的名字、描述和網頁URL。另外,你還可以為二級市場銷售設置自己的費用。

9

運行初始商品銷售

你的OpenSea市場允許用戶購買、出售你的相關商品,並對你的商品進行競價,但如何讓你的商品給到用戶呢?

選項1:簡單商品銷售

你可以使用OpenSea通過“初始商品”選項分發你的作品,CryptoVoxels就是一個很好的例子,CryptoVoxels的開發者專門使用OpenSea來銷售CryptoVoxels世界中的土地。

用這種方式在OpenSea上進行商品銷售其實很簡單。只需要把你的物品鑄造到你選擇的賬戶中,然後用標準的拍賣流程將其賣掉。它們將立即出現在你專用的OpenSea分類頁面和global OpenSea feed上,在那裡,它們可以被更廣泛的OpenSea用戶群發現。

選項2 :定制銷售合約

或者,你可以使用我們的商品工廠合約,立即插入到我們的預售基礎設施,你可以在這裡查看相關教程。

10

設置二級市場交易費用

每次在OpenSea上出售一件物品,你都可以獲得加密貨幣收入。

使用OpenSea最令人興奮的原因之一,在於創作者可從商品的二次銷售中獲得收入。當一件商品在OpenSea上被出售時,該商品的創建者(你)可以獲得銷售額的一部分作為收入。這意味著你不僅可以通過向用戶出售你的初始物品來賺錢,而且你還可以隨著遊戲和市場的升溫而繼續賺錢。

要設置二次銷售費用,你只需訪問店面編輯器,並調整“buyer fee”和“seller fee”這兩個字段,並指定你希望接受費用的地址。

費用類型

費用可以向賣方或買方收取,我們就來舉一個例子:比如有一個用戶以1 ETH的價格銷售一個商品,加上2%的賣方費用後,買方將為該商品支付1 ETH的商品費,而其中有0.02 ETH是支付給創建者(你)的,這意味著賣方能收到0.98 ETH。而加上2%的買方費用,意味著買方將為該商品支付1.02 ETH,其中0.02ETH支付給開發者(你),1ETH支付給賣方。

你可以在商店編輯器中隨意設置你想要收取的費用。

如果有成交,收入將每兩週分配到你指定的地址,如果你有需要以更高的頻率收取費用,可以聯繫OpenSea。

OpenSea提供了基礎設施,因此其也會收取一部分費用作為抽成,據悉,每次銷售成交額的2.5%會歸OpenSea所有,而與創作者選擇收取的任何費用無關。

11

將你的虛擬商店嵌入到你自己的網站當中

一旦你為自己的商品建立的虛擬商店,你可以將其嵌入到自己的網站或應用當中。要直接嵌入你的虛擬商店,只需按照這些說明設置,示例如下: