介紹
超級賬本(Hyperledger)專案是首個面向企業應用場景的開源分散式賬本平臺。由linux基金會牽頭,包括 IBM 等 30家初始企業成員共同成立的。
區塊鏈網路主要有三種型別:公共區塊鏈、聯盟或聯合區塊鏈,以及私有區塊鏈。Hyperledger Fabric定位是面向企業的分散式賬本平臺,引入許可權管理,設計上支援可插拔、可擴充套件,是首個面向聯盟鏈場景的開源專案。
REC721是一個區塊鏈數字資產標準,我的這篇文章初探區塊鏈數字加密資產標準ERC721有介紹,本文不再贅述。
準備工作
根據Hyperledger Fabric官網的要求,我們需要如下的環境:
- Git
- cURL
- Docker
- Java JDK
然後根據官網的要求搭建好環境,具體過程參見官網:https://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html
專案分為合約和應用程式兩部分,下面會分別介紹。
合約
先來看一下目錄結構
.
|-- BasicContract.java ----------------------合約檔案
|-- ERC721Context.java ----------------------合約上下文
|-- IERC721.java ----------------------------ERC721介面
|-- Utils.java ------------------------------工具類
|-- constant --------------------------------存放常量的目錄
| `-- ContractConstant.java
|-- event -----------------------------------存放事件的目錄
| |-- ApprovalEvent.java
| |-- ApprovalForAllEvent.java
| |-- Event.java
| `-- TransferEvent.java
|-- ledgerapi -------------------------------對State的抽象,定義了基礎的增刪改查
| |-- State.java
| |-- StateDeserializer.java
| |-- StateList.java
| `-- impl
| `-- StateListImpl.java
`-- state -----------------------------------存放state的目錄
|-- Balance
| |-- Balance.java
| `-- BalanceList.java
|-- NFT
| |-- NFT.java
| `-- NFTList.java
`-- OperatorApproval
|-- OperatorApproval.java
`-- OperatorApprovalList.java
合約的具體內容太長了,這裡就不放出來了,地址:https://github.com/huajiayi/ERC721-implementation/blob/main/contract-java/src/main/java/org/example/BasicContract.java
需要注意的有幾點:
- 部署合約的時候合約名要和settings.gradle中的名字一樣,不然會報錯
- Hyperledger Fabric不支援方法過載,所以safeTransferFrom的兩個方法得捨棄一個
- Hyperledger Fabric不支援帶有Transaction註解的方法巢狀呼叫,會報錯
應用程式
應用程式就簡單多了,只有三個檔案
.
|-- App.java ------------------------------主程式
|-- EnrollAdmin.java ----------------------註冊Admin
`-- RegisterUser.java ---------------------註冊User
這裡要注意的是,User是由Admin來授權的,所以必須先註冊Admin,再註冊User。
寫這個應用的時候也遇到了一些坑:
- 在應用端獲取不到msg.sender,所以得在合約中寫一個返回自己的方法
@Transaction(intent = Transaction.TYPE.EVALUATE)
public String msgSender(ERC721Context ctx) {
return ctx.getClientIdentity().getId();
}
- 傳參的時候不能傳null,合約會報錯
- 檔案內不能有中文,不然編譯可能會通不過
- 重啟網路後,需要吧wallet資料夾刪除,因為證照被重新生成了,wallet內的檔案是和證照相關的
同樣具體內容就不放了,地址:https://github.com/huajiayi/ERC721-implementation/tree/main/application-java/src/main/java/application/java
專案地址
專案已經上傳到GIthub上,有需要的同學可以自行檢視:https://github.com/huajiayi/ERC721-implementation
參考
https://linux.cn/article-11328-1.html
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
https://hyperledger-fabric.readthedocs.io/en/latest/whatis.html