介绍

超级账本(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

基于Hyperledger Fabric实现ERC721的更多相关文章

  1. 搭建基于hyperledger fabric的联盟社区(六) --搭建node.js服务器

    接下来我要做的是用fabric sdk来做出应用程序,代替CLI与整个区块链网络交互.并且实现一个http API,向社区提供一个简单的接口,使社区轻松的与区块链交互. 官方虽然提供了Node.JS, ...

  2. 搭建基于hyperledger fabric的联盟社区(一) --前言

    三个月前上面发了一个关于智群汇聚和问题求解研究的项目,我们公司做其中的一个子项目,就是基于区块链的科技信息联盟构建.利用区块链的去中心化特性,构建一个基于区块链的科技社区,以提供科技群智汇聚采集的基础 ...

  3. 搭建基于hyperledger fabric的联盟社区(七) --升级chaincode

    上个版本的chaincode有很多功能不完备,所以要部署新版本的chaincode.Fabric支持在保留现有状态的前提对chaincode进行升级. 一.新版chaincode 新版本的chainc ...

  4. 搭建基于hyperledger fabric的联盟社区(五) --启动Fabric网络

    现在所有的文件都已经准备完毕,我们可以启动fabric网络了. 一.启动orderer节点 在orderer服务器上运行: cd ~/go/src/github.com/hyperledger/fab ...

  5. 搭建基于hyperledger fabric的联盟社区(四) --chaincode开发

    前几章已经分别把三台虚拟机环境和配置文件准备好了,在启动fabric网络之前我们要准备好写好的chaincode.chaincode的开发一般是使用GO或者JAVA,而我选择的是GO语言.先分析一下官 ...

  6. 搭建基于hyperledger fabric的联盟社区(三) --生成公私钥证书及配置文件

    一.生成公私钥和证书 Fabric中有两种类型的公私钥和证书,一种是给节点之前通讯安全而准备的TLS证书,另一种是用户登录和权限控制的用户证书.这些证书本来应该是由CA来颁发,但是目前只有两个社区,所 ...

  7. 搭建基于hyperledger fabric的联盟社区(二) --环境配置

    接下来讲一下在本地测试区块链网络的过程.我要部署的是2peer+1orderer架构,所以需要准备三台虚拟机,为了方便起见可以先把一台配置好,然后复制出剩余两台即可.搭建虚拟机我用的是virtualb ...

  8. 搭建基于hyperledger fabric的联盟社区(八) --Fabric证书解析

    一.证书目录解析   通过cryptogen生成所有证书文件后,以peerOrgannizations的第一个组织树org1为例,每个目录和对应文件的功能如下:   ca: 存放组织的根证书和对应的私 ...

  9. 区块链:基于Hyperledger Fabric的 java 客户端开发(java sdk /java api server/java event server)

    fabric针对java 开发的部分支持不是很友好.基于目前较为稳定的fabric 1.4版本,我们封装了一个java sdk,apiserver,eventServer 封装java sdk的主要目 ...

随机推荐

  1. 终于搞懂了PR曲线

    PR(Precision Recall)曲线 问题 最近项目中遇到一个比较有意思的问题, 如下所示为: 图中的PR曲线很奇怪, 左边从1突然变到0. PR源码分析 为了搞清楚这个问题, 对源码进行了分 ...

  2. Ubuntu 16.04LTS修改开机启动项

    装上Ubuntu16.04后,每次开机都得手选开机项,挺麻烦 sudo vi /etc/default/grub GRUB_DEFAULT=0GRUB_HIDDEN_TIMEOUT=0GRUB_HID ...

  3. 高德地图——searchNearBy()

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script ty ...

  4. Linux从头学10:三级跳过程详解-从 bootloader 到 操作系统,再到应用程序

    作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...

  5. k8s 存活探针(健康检查)

    重启策略 (RestartPolicy ) Always:当容器终止退出后,总是重启容器,默认策略. OnFailure:当容器异常退出(退出状态码非0)时,才重启容器. Never:当容器终止退出, ...

  6. ubantu下载源详细目录

    都说ubantu系统自带的下载源不给力,一般使用时体现不出来,也没有必要更换.我是在安装gnuradio时,安装了好久,没安装上,后来就去更改下载源(后来发现不是下载源的问题),不过还不错,最起码最下 ...

  7. openswan中out_sa()函数报文封装思想

    out_sa()函数报文封装思想讲解 1. out_sa前言 我已经在上一篇文章中将in_struct函数的基本原理进行了阐述,而out_struct()的实现基本是相同的,如果能理解in_struc ...

  8. AspectJ基于xml和基于注解

    一.基于xml 执行的切入点中具体方法有返回值,则方法结束会立即执行后置通知,然后再执行环绕通知的放行之后的代码: 2.连接点即所有可能的方法,切入点是正真被切的方法,连接点方法名: 其中,只有环绕通 ...

  9. Servlet3.0注解配置访问路径和urlParttern配置

    一.Servlet用注解配置访问路径 二.IDEA的tomcat相关配置 其中,第一点的配置文件,直接在IDEA的可视化操作界面修改就可以改掉配置文件中内容: 三.urlParttern配置 其中,* ...

  10. 机器学*——K*邻算法(KNN)

    1 前言 Kjin邻法(k-nearest neighbors,KNN)是一种基本的机器学*方法,采用类似"物以类聚,人以群分"的思想.比如,判断一个人的人品,只需观察他来往最密切 ...