banner
leaf

leaf

It is better to manage the army than to manage the people. And the enemy.
follow
substack
tg_channel

區塊鏈綜合應用開發實踐

在區塊鏈的開發過程中,除了開發自己的區塊鏈以及基於某個公鏈或框架進行開發外,還有一些第三方平台提供了工具可以快速生成數字加密資產並進行交易,如國外的 Opensea(網址 http://opensea.io)和 RareBits(網址 https://rarebits.io/),國內的 BIGE(網址 http://bige.game/)等。

3 個開發實例,包括一個以太坊查詢分析系統開發實例、一個 ERC20 代幣的開發實例和一個基於 OpenSea 平台的數字加密資產開發實例。

●了解以太坊測試網絡 Ropsten。

●掌握 web3.py 庫的功能。

●掌握以太坊數據的基本查詢和分析方法。

●了解 ERC20 代幣的開發。

●學習加密資產的開發過程。

●了解 OpenSea 交易平台。

以太坊之 DApp 開發實戰中搭建了一個以太坊的本地測試環境,但本地測試環境的數據比較少,無法體現真實的以太坊網絡的數據情況。所以在選擇以太坊的公開測試網絡 Ropsten 作為測試環境。

Ropsten 是 2016 年 11 月上線的一個以太坊測試網絡,以斯德哥爾摩(瑞典首都)的一個地鐵站命名。Ropsten 採用工作量證明的共識機制,它是對以太坊現有生產環境的最好模擬,在以太坊主網的系統和網絡狀態等方面都比較近似。而且 Ropsten 測試網絡上的以太幣是免費的,通過對接 Ropsten 測試網絡來對以太坊進行各種測試和開發成本極低,所以選擇 Ropsten 測試網絡性價比很理想。下面使用之前第 5 章介紹的 MetaMask 插件連接到 Ropsten 測試網絡。

(1)連接 Ropsten 測試網絡

單擊 MetaMask 插件,打開選項界面,再單擊網絡選項更改連接網絡為 Ropsten 測試網絡,如圖 8-1 所示。

(2)創建測試賬戶

切換網絡成功後接著單擊用戶頭像,選擇創建用戶在 Ropsten 測試網絡中生成一個新的賬戶,

在彈出界面中輸入用戶名並單擊 “CREATE” 按鈕進行創建,如圖 8-3 所示。

(3)查看賬戶餘額

創建完成後進入賬戶詳情頁面,新的賬戶餘額為 0 個以太幣,如圖 8-4 所示。

(4)獲取以太幣

為了進行對接測試,最好能在 Rospten 測試網絡中獲取一定數量的以太幣(對以太坊網絡進行更新操作需要消耗以太幣)。在 Rospten 測試網絡中獲取以太幣的方法主要有以下幾種。

●在 http://faucet.ropsten.be:3001 / 上申請,需要輸入在 Ropsten 網絡上的賬戶地址就可以了,轉幣操作非常迅速,目前一次可申請 3ETH。

●找朋友給自己轉幣。

●自己挖礦。

毫無疑問,第一種方式是最方便快捷的,下面進行申請操作

2. 申請以太幣

申請以太幣需要輸入賬戶地址。

(1)複製賬戶地址

單擊賬戶左上角菜單可以看到账戶詳情,在地址右邊有一個複製按鈕,單擊複製地址信息。

(2)在 Ropsten 上進行申請

得到账戶地址後,在瀏覽器中訪問 http://faucet.ropsten.be:3001/,打開的頁面上輸入剛才複製的賬戶地址,如圖

image

(3)申請成功

單擊 “Send me test Ether” 按鈕申請測試以太幣即可。申請成功後,頁面下部會出現申請成功信息和轉賬交易記錄的哈希值,如圖

image

注意,申請到的以太幣需要 Ropsten 網絡中其他結點確認,故申請成功後一般還需要半天左右時間才能在 MetaMask 看到申請到的以太幣信息。

已經使用 MetaMask 插件創建了 Ropsten 測試網絡的測試賬號,為了對接這個測試網絡的接口進行數據的查詢和獲取,在這裡將使用 web3.py 庫與 Ropsten 測試網絡進行對接。

1.web3.py 介紹

web3.py 是以太坊接口的 Python 封裝,通過 JSON-RPC 連接以太坊網絡進行交互。web3.py 和 web3.js 類似,其中 web3.js 主要適合瀏覽器端的 Dapp 的開發,而 web3.py 是基於 Python 開發的,更適合在伺服器使用。

2.web3.py 的安裝使用

web3.py 可以使用 Python 的包管理工具 pip 進行安裝,首先新建一個虛擬環境。

(1)新建虛擬環境

這裡先新建一個名為 ch8 的 Python 虛擬環境(web3.py 支持 Python3.5 以上版本),命令如下:

virtualenv venv-p python3

(2)安裝 web3.py

創建完成後激活這個虛擬環境,然後使用 pip install web3 命令安裝 web3.py,該命令會自動下載安裝依賴庫並打印安裝信息,如圖

web3.py 提供了數據過濾接口、服務提供商、以太坊命名服務、網絡信息、賬戶信息、區塊信息等幾個主要的功能接口,詳情可以訪問 web3.py 的官網 https://web3py.readthedocs.io/en/stable/index.html 進行查詢。

(3)申請測試結點

安裝了 web3.py 後需要申請一個用於連接 Ropsten 測試網絡的測試結點。這裡使用 Infura,Infura 是一個以太坊結點服務提供商,它提供公開的 Ethereum 主網和測試網絡結點,開發者可以到 Infura 官網進行申請。在瀏覽器中打開 https://infura.io/ 看到 Infura 的頁面,如圖

image

單擊頁面上的 “GET STARTED FOR FREE” 按鈕開始免費申請。免費申請需要填寫姓名、郵箱和密碼等基本信息信息填寫完畢後,單擊 “SIGN UP” 按鈕進行註冊。註冊後提示已發送一份確認郵件到已填寫的郵箱中,如未收到可以單擊 “RE-SEND VERIFICATION EMAIL” 按鈕重新發送確認郵件,所示。

單擊郵件中的確認連接後會自動登錄進入註冊賬戶中。順利登錄後會提示用戶新增一個項目,項目名任意,這裡項目名為 “自學區塊鏈”,單擊 “CREATE PROJECT” 按鈕創建項目,如圖

圖 8-12 創建項目

創建完成後進入項目詳情頁面。詳情頁面中顯示了用來連接以太坊網絡的 API KEY、API SECRET 和可連接的結點地址 ENDPOINT,以及這個結點上智能合約的白名單列表。這裡選擇 Ropsten 測試網絡的結點,如圖 8-13 所示。

3. 使用 web3.py 連接網絡

在上面得到 Ropsten 測試網絡的連接結點後可以使用 web3.py 進行連接。先從 web3.py 導入 Web3 和 HTTPProvider,然後連接項目中的 Ropsten 測試結點,連接後使用 isConnected 方法檢查連接狀態,返回 True 說明連接成功,如圖 8-14 所示。

連接成功後就可以使用 web3.py 提供的 getTransartion 等方法查詢 Ropsten 網絡數據了。

  項目目錄

(3)創建應用

初始化項目之後,可以開始實現功能代碼。先新建一個 Flask 應用並初始化 Web3 進行連接,在 app.py 中編

image

完成後執行 python app.py 命令就可以啟動這個應用。啟動的應用默認在 5000 端口進行監聽,處理請求並返回結果。

(4)實現基礎模板

創建應用後開始編寫頁面。在 Flask 中默認使用的是 Jinja2 模板語言來實現模板功能(Jinja2 有個強大的功能即模板繼承功能。模板繼承允許開發者創建一個基礎的骨架模板,這個模板包含網站的通用元素,在子模板中可以通過繼承這個基礎模板擁有這些通用元素,不同的頁面元素可以通過重載來實現,就像 Python 類的繼承和重載一樣簡單),因此可以先編寫一個基礎模板,將頁面公共的部分都放到這個基礎模板中,其他頁面繼承這個模板就會擁有這些公共的部分,再加上頁面需要的定制內容並用 bootstrap 來美化頁面樣式就可以快速實現一個頁面。這樣做的好處是可以避免編寫重複的內容,提高開發效率,具體操作為:在當前目錄的 templates 文件夾新建一個 layout.html 的文件,在這個文件中引入 bootstrap 相關的 css 和 js,代碼

image

image

其中類似 “{% block ×××%}{% endblock %}” 的內容是供子模板中重載的區域,子模板可以通過重載添加自定義的內容。下面開始實現第 1 個功能,第 1 個功能是查詢並顯示 Ropsten 測試網絡中的最新區塊

查詢 Ropsten 測試網絡中的最新區塊信息,可以通過 web3.py 的函數 getBlock 來實現,這個函數返回的格式是一個 Json 字符串,前端 HTML 頁面負責將這個 Json 字符串顯示出來。在 app.py 中實現一個名為 get_last_block 的函數,在函數中調用 getBlock(“latest”)函數,然後從返回的區塊信息中提取主要內容傳遞給模板進行顯示,代碼如下

image

image

以上代碼從獲取到的區塊信息中提取主要區塊信息,並將這些信息封裝到一個字典中傳遞給模板 block.html。block.html 模板先是繼承 layout.html 模板,然後使用 jquery.json-browse 的 jquery 插件進行顯示。jquery.json-browse 的作用是美化 Json 數據的顯示,並且可以對 Json 數據進行展開和折疊處理,block.html 代碼如下

image

以上查詢最新區塊的代碼編寫完成後啟動應用可查看效果,打開瀏覽器訪問 http://127.0.0.1:5000,就可以看到最新區塊的信息,如圖 8-16 所示,顯示了最新區塊的信息,包括礦工地址(miner)、哈希值(hash)等。

2. 查詢區塊的交易數據

在一個區塊中往往存儲了很多個交易記錄。在圖 8-16 中的區塊信息中有一個 transactions 字段,其中包含了一系列哈希值,每一個哈希值對應的就是一個交易記錄。在這一節中實現的功能是使用 web3.py 中的 getTransaction 函數查詢哈希值對應的交易信息並將交易信息顯示在 HTML 中。在 app.py 中實現一個 handle_transaction 函數,該函數接收 GET 和 POST 兩種請求方式。GET 請求返回一個包含輸入框和按鈕的 HTML 頁面,POST 會傳遞一個交易信息的哈希值,函數內調用 web3.py 的 getTransaction 函數查詢對應的交易並將結果返回,代碼如下

image

image

image

更新 app.py 後,再新建一個 transaction.html 模板文件,該模板文件依舊從 layout.html 繼承而來。模板中顯示一個輸入框和按鈕,在輸入框輸入交易哈希值後,單擊 “搜索交易” 按鈕會將交易哈希值的請求數據發送到應用,從應用得到交易數據後再使用 jquery.json-browse 命令顯示 Json 數據,代碼如下

image

image

完成後重啟應用,查看頁面效果,可以看到一個用來搜索交易的頁面。在瀏覽器中輸入 http://127.0.0.1:5000/transaction,打開該頁面,然後在輸入框輸入一個交易 id,單擊 “搜索交易” 按鈕即可看到交易詳情,如圖所示

image

完成了區塊和交易數據的查詢功能,再來實現查詢賬戶餘額的功能。查詢賬戶餘額的實現邏輯和查詢交易數據類似。在 app.py 中實現一個 get_balance 的函數,接收 GET 和 POST 兩種請求方式。GET 請求返回一個包含輸入框和按鈕的 HTML 頁面,POST 請求接收賬戶地址信息並通過 web3.py 的 getBalance 函數獲取賬戶餘額,代碼可以根據 “2. 查詢區塊的交易數據” 部分稍作修改即可。完成後在瀏覽器中打開 http://127.0.0.1:5000/balance,輸入賬戶地址即可查詢對應賬戶的餘額,如圖

image

區塊信息分析#

簡單分析一下 Ropsten 測試網絡中的區塊信息。先寫一個 Python 腳本下載 Ropsten 測試網絡中的前 10000 個區塊,並通過 pickle 模塊將這些數據保存下來。pickle 是 Python 用來將 Python 對象保存為文件的一個模塊,使用 pickle 可以方便地存儲和讀取 Python 對象。

(1)下載區塊數據

新建一個 eth_helper.py 文件,在這個文件中新建一個 download_blocks 函數用來循環下載區塊數據,下載完成後,使用 pickle 將這些區塊數據保存到一個名為 block.pkl 的文件中,代碼如下

image

運行 python eth_helper.py 命令執行腳本。腳本下載區塊數據需要一段時間,下載完成後會在本地自動生成一個 block.pkl 的文件,裡面包含了 10000 個區塊數據,如圖

image

2)加載區塊數據

在 app.py 中新建一個名為 visualization 函數,用來加載已經下載好的區塊數據並將其中的區塊難度提取出來,放到一個列表中傳遞給 HTML 頁面(visualization.html)以供展示,代碼如下

image

這裡只是將區塊難度提取出來做分析處理,有興趣的讀者也可以提取其他字段進行分析。為了方便通過 HTML 頁面進行展示,這裡將區塊序號和區塊難度分別放到一個獨立的列表中。

(3)對數據進行可視化

最後一步是對數據進行可視化展示。這裡使用 ECharts 進行可視化操作。ECharts 是一款由百度前端技術部開發的、基於 JavaScript 的數據可視化圖表庫,可以提供直觀、生動、可交互、可個性化定制的數據可視化圖表。使用 ECharts 對數據進行可視化的方法也很簡單,只需要在 HTML 頁面中包含 ECharts 的 js 庫文件,然後新建一個一定大小的 div 元素,再編寫一段 js 代碼加載數據,即可進行數據可視化顯示。

新建一個 visualization.html 文件,這裡選擇折線圖的形式進行區塊難度數據的可視化。編寫代碼如下

image

image

image

代碼編寫完成後重啟 Flask 應用,訪問 http://127.0.0.1:5000/visualization 就可以看到可視化效果,如圖

image

從圖中可以看到,在 Ropsten 測試網絡中區塊難度的值是直線上升的,這表明隨著區塊鏈的不斷延長,生成區塊的難度越來越大。

以上就是一個簡單的以太坊查詢分析系統,有興趣的讀者還可以進一步分析以太坊的其他數據,如區塊的生成速度、區塊每日生成的個數以及待確認的區塊數目等。若要分析實際環境中的以太坊,只需要把上面的 Ropsten 測試結點地址(http://ropsten.infura:io/v3/×××)換成正式結點地址就可以了。

ERC20 可以簡單理解成以太坊上的一個代幣協議,所有基於以太坊開發的代幣合約都遵守這個協議。遵守這個協議的代幣叫作 ERC20 代幣。本案例將開發一個名為 Mini Token 的 ERC20 代幣。

密數字貨幣的種類紛繁複雜,比特幣、瑞波幣、小蟻幣等眾多老牌幣種,都有獨自的鏈,在自己的鏈上運行著自己的加密數字貨幣。除了這些之外,還有一種平台型代幣,它們是依託以太坊而創建的,沒有自己的鏈,而是運行在以太坊之上。當前市面上十有八九的數字貨幣都屬於平台型代幣。這些代幣都遵守 ERC20 代幣協議,都是標準化的代幣,這些標準化的代幣可以被各種以太坊錢包支持。被以太坊錢包支持的代幣可用於各種項目的開發,也可以提交到各個交易所進行交易。

之所以叫 ERC20 代幣,是因為 ERC20 是在 2015 年 11 月以太坊社區提出的代號為 20 的一項標準,符合這個標準的都是 ERC20 代幣。在 ERC20 標準出現之前,代幣的標準不統一,發行代幣是一件非常麻煩的事,對開發者來說既需要單獨開發智能合約,還並不能做到多種錢包的兼容。在 ERC20 標準出現後,發行基於 ERC20 標準的代幣變得很簡單,開發一個 ERC20 代幣基本不超過 10 分鐘,50 行代碼就能實現。

ERC20 是各個代幣的標準接口,開發者需要將這些標準接口集成到他們的智能合約中,以便能夠執行以下操作:

●獲得代幣總供應量。

●獲得賬戶餘額。

●轉讓代幣。

●批准花費代幣。

ERC20 讓以太坊區塊鏈上的其他智能合約和去中心化應用之間實現了無縫交互。ERC20 標準的接口文件如下

image

其中的含義如下。

●name 是需要指定名字,比如可以叫作 MyToken。

●symbol 是代幣的符號,類似於常見的 BTC、ETH 等。

●decimal 是代幣最少交易的單位,它表示小數點的位數,如果設置為 1,那麼最少可以交易 0.1 個代幣。

●totalSupply 是指總發行量。

●balanceOf 返回某個地址(賬戶)的賬戶餘額

●transfer 實現轉賬一定數量(_value)的代幣到目標地址(_to),它會提供一個返回值來說明是否轉賬成功,並且會觸發 Transfer 事件。

●transferFrom 從一個地址(_from)轉賬一定數量(_value)的代幣到目標地址(_to),也會提供一個返回值來說明是否轉賬成功,同樣也會觸發 Transfer 事件。

●approve 授權第三方(_spender)從發送者賬戶轉移一定量(最多為_value 數量)的代幣。第三方通常是某個智能合約,可以通過 transferFrom()函數來執行具體的轉移操作。

●allowance 返回_spender 仍然被允許從_owner 提取的金額。

●Transfer 和 Approval 事件是為了記錄日誌用的。前者是在代幣被轉移時觸發,後者是在調用 approve 方法時觸發。

ERC20 代幣不是一個 DApp,它是智能合約的重要應用之一,ERC20 代幣也使用 Solidity 語言進行開發,開發環境一般選擇 Remix(Remix 是一個在線的、用來開發以太坊智能合約的 IDE,地址是 http://remix.ethereum.org)。

這裡要實現一個名為 “Mini Token” 的代幣,符號為 “MT”,總發行量為 1000 枚。實現的方法是修改 ERC20 標準接口中相應函數的內容,如將 name 改為 “Mini Token”,symbol 改為 “MT” 等,完整代碼如下

image

image

image

image

image

將上述代碼複製粘貼到 Remix 的編輯器中,執行編譯,並部署到本地測試環境中,這樣 Mini Token 就發布成功了。從合約的詳情中可以看到 Mini Token 的名稱、符號和總發行量等信息,如圖

image

單擊合約右側的複製按鈕,將 Mini Token 的地址複製到剪切板。然後打開 MetaMask 的賬戶選項,選擇 “ADD TOKEN”,如圖 8-22 所示。

在 Add Tokens 對話框中選擇 “Custom Token”,在 “Token Address” 文本框中填入剛才複製的 Mini Token 的地址,之後下面的符號欄和精度欄會自動補充,然後單擊 “Next” 按鈕繼續,如圖

最後,再單擊 “ADD TOKENS” 按鈕,將 Mini Token 添加到賬號中,如圖 8-24 所示。

完成以後,在賬戶界面就可以看到新創建的代幣,並可以將這些代幣進行交易或轉賬

2017 年底,以太坊上發布了一款火爆的小游戏加密貓(CryptoKitties),它是加密貓的養成與繁殖遊戲,利用以太幣作為該遊戲的唯一交易貨幣,兩隻加密貓交配而生出的子孫會從他們父母基因組中通過遺傳算法獲取新的基因,這些基因決定了外觀、個性與特徵等。每隻貓都是獨一無二的,100% 歸所有者擁有;加密貓不能被複製、帶走或毀壞,但可以購買或出售它。加密貓可以作為一個收藏品並在區塊鏈中被安全地記錄。加密貓的作者 Axion Zen 後來還定義了一種代幣標準 ERC721,開發者可以基於這個標準發布數字資產。在 ERC20 中所有符合 ERC20 的代幣都是相同的,任何兩個 ERC20 代幣之間沒有區別;而在 ERC721 中每種數字資產都有它唯一的標識,沒有兩種符合 ERC721 標準的數字資產是完全相同的,這與 ERC20 有著明顯的不同。

ERC721 官方簡要解釋是 “Non-Fungible Tokens”,翻譯為不可互換的代幣,英文簡寫為 “NFT”,簡單理解為每個代幣都是獨一無二的。以加密貓來解釋的話,每一隻加密貓都是獨立的代幣,而且每隻加密貓都有它獨一無二的特徵,無法相互替換。而 ERC721 就是定義了這樣一個標準來實現這一類的加密資產。

本節的實例就是實現一個類似於加密貓的數字資產 —— 加密豬。要開發這類數字資產,需要實現符合 ERC721 標準的智能合約,然後基於這個智能合約實現一套用戶界面來展示開發的數字資產。

隨著類似加密貓之類數字資產的增多,有人就開始創建一個專門用來進行此類加密資產交易的平台,其中 OpenSea 是世界上最大的加密資產交易平台。開發者不再需要自己從頭開發,只需要在 OpenSea 平台上按照流程進行操作就可以快速開發出一個 ERC721 數字資產。本節接下來首先介紹 OpenSea,然後講解如何在 OpenSea 上開發和交易數字資產。通過本案例可以學到如何開發一個符合 ERC721 標準的數字資產,以及如何對這類資產進行交易。

OpenSea 是一個基於區塊鏈的加密資產交易平台,為廣大用戶提供加密資產的購買和銷售等服務,OpenSea 首頁如圖

OpenSea 提供了一份開發文檔,讓開發者在幾分鐘內就可以開發完成屬於自己的店鋪,可以訪問 https://docs.opensea.io/docs 進行查閱,OpenSea 提供的示例是交易各種海洋生物加密資產,如所示。

這裡參照這個海洋生物加密資產的開發過程來開發自己的加密資產 —— 加密豬。加密豬遵循以太坊 ERC721 標準,並加入權限控制的功能。開發步驟依次為創建和實現加密豬的智能合約、加密豬的展示頁面和用戶界面,以及加密豬交易功能。

本實例基於 Truffle 框架進行開發,開發過程中需要使用 NodeJS 包管理器 npm 安裝依賴庫,開發之前應確保系統中的 npm 工具可用,然後選擇一個常用的文本編輯器(如 VScode、Sublime)等就可以開發這個加密豬了。

這裡智能合約的開發基於 OpenZeppelin 庫。OpenZeppelin 是用 Soildity 語言實現的一個開源庫,裡面包含了已知智能合約的最佳實踐。OpenZeppelin 提供了開發智能合約所需的各種重要功能,使我們可以基於它在更少的時間內創建更安全的智能合約。下面開始正式開發智能合約。

(1)初始化智能合約

這裡先在本地任一目錄下新建一個 LittlePig 的文件夾,創建完成後進入文件並使用 truffle init 命令初始化一個 Truffle 項目,如圖

image

初始化項目

初始化後再安裝 OpenZeppelin 庫,安裝命令如下:

npm install openzeppelin-solidity

安裝完成後開始實現智能合約的功能。

(2)實現 LittlePig 智能合約

LittlePig 智能合約的功能實現比較簡單,只需要基於 openzeppelin-solidity 庫進行二次開發。在當前目錄的 contracts 文件夾下新建一個 LittlePig.sol 的文件。在文件中編寫一個 LittlePig 的類,這個類繼承於 ERC721Token 和 Ownable 這兩個基礎類。其中 ERC721Token 是 ERC721 標準的基礎類,Ownable 提供了權限控制的功能。繼承後在類的主體部分還需要實現 tokenURI、baseTokenURI、isApprovedForll 等函數。值得注意的是有兩點,一是 tokenURI 函數,這個函數返回一個 URI 地址,這裡是 https://little-pig-api.herokuapp.com/api/pig/,請求這個 URI 會返回每個 ERC721 資產的屬性,如名稱、描述和圖片等,這些屬性將被展示在 OpenSea 平台上;二是 isApprovedForAll 函數,它用來控制獲取 OpenSea 數據的白名單列表,具體代碼如下

image

實現智能合約代碼後就可以開始發布智能合約了。

(3)發布智能合約

這裡使用之前註冊的 Infura 賬戶(參數 8.1.2 節對接以太坊接口中申請測試結點部分)發布到 Ropsten 測試網絡上。發布的方法也比較簡單,使用 HDWalletProvider 連接到 Ropsten 測試網絡並進行發布操作。其中連接過程中需要配置錢包的助記詞(用來推算錢包信息的十幾個英文單詞,講過)和 Infura 的接口地址,在 truffle.js 文件中配置如下

image

image

配置完成後,使用 truffle deploy--network ropsten 命令將智能合約部署到 Ropsten 測試網絡中,部署成功後可以看到交易哈希值(transaction hash)和合約地址(contract address)等信息

image

4)生成加密資產

成功發布智能合約後,就可以調用智能合約生成屬於自己的加密資產。生成的方法是使用 HDWalletProvider 連接到 Ropsten 測試網絡,然後加載智能合約並調用 mintTo 函數生成加密數字資產。這裡新建一個 mint.js 文件,在文件中編寫代碼如下

image

image

完成 mint.js 後通過在終端中執行 node mint.js 就可以生成加密資產,上述代碼中設置生成 12 個加密豬。可以在終端上看到生成的 12 個哈希值,也就是 12 個加密豬如圖

image

生成加密豬的哈希值

以上生成的這樣的加密豬就是屬於自己的加密資產,可以進行交易和轉讓。為了讓這些加密豬看起來更加直觀和吸引人,可以給每個加密豬添加一些屬性數據,這樣在 Opensea 上每個加密豬都會展示出不同的形象。

前面的智能合約中實現了一個 tokenURI()方法,這個方法針對每個 Token 返回一個唯一的 URI,請求這個 URI 就可以返回這個 Token 對應的屬性數據。比如,對於 Id 為 1 的 Token 返回的 URI 是 https://little-pig-api.herokuapp.com/api/creature/1。請求這個 URI 會返回如下的 Json 數據:

image

其中 description 字段是加密豬的描述,external_url 字段是加密豬的外部鏈接,image 是加密豬的圖片地址,name 是加密豬的名稱,attributes 是加密豬的自定義屬性列表。

添加好屬性數據後,即可在 Opensea 平台上查看該加密資產的信息。查看的鏈接為 https://ropsten.opensea.io/assets/ 合約地址 /tokenId,比如查看加密豬 token Id 為 1 的鏈接地址為 https://ropsten.opensea.io/assets/0x×××/1,效果如圖

image

交易加密豬有兩種方式,一是定價銷售(Fixed Price),二是在一定價格範圍內進行拍賣(Auction)

以上就是加密豬的交易功能#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。