基于Hyperledger Fabric实现ERC721
介绍
超级账本(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的更多相关文章
- 搭建基于hyperledger fabric的联盟社区(六) --搭建node.js服务器
接下来我要做的是用fabric sdk来做出应用程序,代替CLI与整个区块链网络交互.并且实现一个http API,向社区提供一个简单的接口,使社区轻松的与区块链交互. 官方虽然提供了Node.JS, ...
- 搭建基于hyperledger fabric的联盟社区(一) --前言
三个月前上面发了一个关于智群汇聚和问题求解研究的项目,我们公司做其中的一个子项目,就是基于区块链的科技信息联盟构建.利用区块链的去中心化特性,构建一个基于区块链的科技社区,以提供科技群智汇聚采集的基础 ...
- 搭建基于hyperledger fabric的联盟社区(七) --升级chaincode
上个版本的chaincode有很多功能不完备,所以要部署新版本的chaincode.Fabric支持在保留现有状态的前提对chaincode进行升级. 一.新版chaincode 新版本的chainc ...
- 搭建基于hyperledger fabric的联盟社区(五) --启动Fabric网络
现在所有的文件都已经准备完毕,我们可以启动fabric网络了. 一.启动orderer节点 在orderer服务器上运行: cd ~/go/src/github.com/hyperledger/fab ...
- 搭建基于hyperledger fabric的联盟社区(四) --chaincode开发
前几章已经分别把三台虚拟机环境和配置文件准备好了,在启动fabric网络之前我们要准备好写好的chaincode.chaincode的开发一般是使用GO或者JAVA,而我选择的是GO语言.先分析一下官 ...
- 搭建基于hyperledger fabric的联盟社区(三) --生成公私钥证书及配置文件
一.生成公私钥和证书 Fabric中有两种类型的公私钥和证书,一种是给节点之前通讯安全而准备的TLS证书,另一种是用户登录和权限控制的用户证书.这些证书本来应该是由CA来颁发,但是目前只有两个社区,所 ...
- 搭建基于hyperledger fabric的联盟社区(二) --环境配置
接下来讲一下在本地测试区块链网络的过程.我要部署的是2peer+1orderer架构,所以需要准备三台虚拟机,为了方便起见可以先把一台配置好,然后复制出剩余两台即可.搭建虚拟机我用的是virtualb ...
- 搭建基于hyperledger fabric的联盟社区(八) --Fabric证书解析
一.证书目录解析 通过cryptogen生成所有证书文件后,以peerOrgannizations的第一个组织树org1为例,每个目录和对应文件的功能如下: ca: 存放组织的根证书和对应的私 ...
- 区块链:基于Hyperledger Fabric的 java 客户端开发(java sdk /java api server/java event server)
fabric针对java 开发的部分支持不是很友好.基于目前较为稳定的fabric 1.4版本,我们封装了一个java sdk,apiserver,eventServer 封装java sdk的主要目 ...
随机推荐
- 刷题-力扣-518. 零钱兑换 II
518. 零钱兑换 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/coin-change-2/ 著作权归领扣网络所有.商业转载 ...
- 重启网络服务 network 出现问题
2021-08-24 地址冲突了,因为想要设置成静态 ip 一直都不对,情急之下就将本地 ip 设置成了虚拟机的 ip,故出现此错误 后将地址改掉,重启网络服务就没有错误了 一开始我设置的虚拟网卡 n ...
- 四种cmd打开方式
四种cmd打开方式: 开始+系统+命令提示符: Win+R 输入cmd回车(推荐使用): 按住shift键加右键,点击打开PowerShell窗口: 资源管理器的地址栏前加入cmd+空格
- Python - 面向对象编程 - 小实战(3)
需求 房子(House)有户型.总面积.家具名称列表:新房子没有任何的家具 家具(HouseItem)有名字.占地面积 席梦思(bed) 占地 4 平米 衣柜(bed) 占地 2 平米 餐桌(bed) ...
- unity渲染篇:烘焙模型贴图
今天要来做一件有趣的事情,那就是把一个模型数据烘焙到贴图上! 什么意思?就是下面酱紫,把这只小喵从第一张图拍扁,变成第二张图的样子(似乎有点残忍~) 可能你经常会从美术那边听到"烘焙光照贴图 ...
- 学习Tomcat(一)之容器概览
Tomcat是Apache软件基金会的一个顶级项目,由Apache.Sun和其它一些公司及个人共同开发,是目前比较流行的Web服务器之一.Tomcat是一个开源的.小型的轻量级应用服务器,具有占用系统 ...
- throws声明异常中断式处理异常
1.throws 编译期异常,一直往上抛最后是JVM处理(打印并中断程序) 2.声明多个或者直接声明父类
- 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)
前言 我们之前搭建了第一个docker项目: windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互):https://www.cnblogs.com/xiongze520/p ...
- Vue个人博客关于标题自动打字机效果Typewriter
最近在写个人Blog 中间看过很多个人博客的开发 一大部分用的是Hexo框架或者vuePress框架 导入各种主题样式插件等等 但是看多了就会发现 很多博主的个人博客基本都很相似 并没有什么新东西呈现 ...
- 【OI技巧】解决cin、cout因输入输出慢而TLE的问题
语言本身没有问题!! 语言本身没有问题!! 语言本身没有问题!! C++本来的设计就是将输入输出流和C的标准输入输出挂钩在一起,这样就导致cin,cout输入输出前先要将内容放入缓冲区,最后再由cin ...