开发步奏:

1.创建教育联盟

2.区块链服务平台自动生成通道id

3.区块链网络服务人员通过命令行在区块链网络中创建对应通道

4.创建相关教育组织

5.邀请相关组织加入联盟

6.区块链网络管理人员通过命令行在区块链网络创建组织并加入通道

7.教育组织相关开发人员通过区块链网络进行系统开发

实现功能:

联盟管理

组织管理

联盟邀请

证书下载

实现联盟相关组织签名同意机制、实现智能合约在线上传

其他需求:

1、把区块链显示仪表盘的接口实现换成Java的(目前:node.js)

2、Java查看区块链信息的api接口 ------------- blockWalker

借鉴腾讯区块链平台搭建思想

①创建联盟

②创建网络(选择区块链引擎[Fabric、Bcos、TrustSQL])

=======================> ③选择区块链类型:私有链、公有链 =====> 创建对应channel

④设置网络信息 ------> 邀请组织(绑定channel中的org、peer)

智能合约部分

运行在docker容器里面,如果需要调试只能通过打日志log方式

一个合约,就是一个用户用go/java/ node编写的文件(包括:字符,方法,返回信息)

在区块中 (chaincode目录下),一个合约只能对应一个目录

用户上传的智能合约都是存放在hyperledger安装的以下目录:(注:src目录结构之前的是用户自定义安装目录结构)

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/chaincode

下面目录有用go/java/node语言开发智能合约的代码

下面网址可以查看channel跟存入的数据等(一个合约跟一个channel会生成一个库)

一个channel下可以安装多个合约,每个合约都会生成一个数据库

安装合约

命令行代码

解释:

-n : 合约名称

-v:合约版本

-p:合约所在目录

说明:

合约所在目录从github.com开始,因为前面会自动从根目录(opt)目录层拼上路径

安装后,状态查看

实例化合约

实例化操作是会存到区块链上的,需要指定是在哪个channel里面上传区块。

指令:

说明:

  -n、-v跟上面指令相同

  -o:指定order的节点 //上块操作都必须指定order节点

  --tls --cafile:指定tls证书 //保证数据的安全性

  -c:执行方法名参数 //-c '{"Args":["init"]}'

  -P:指定倍数策略 //上面指令只装一台节点

实例化后,状态查看

实例化完整之后,可以触发合约

往合约里面上传一条数据【invoke命令】

查询刚刚上传的数据【调用自定义的合约方法】

调用自定义的query方法,查询结果

通过create database查看上传的数据

合约代码调试(log打印方式)

升级合约

情景:增加新功能、有新的优化等

注意:不需要再实例化

1、修改、

2、重新安装当前合约(版本更改2.0)

3、调用升级指令(会在区块链上生成一个区块)

  a、升级之前先查询当前channel区块信息

  结果:高度 = 9

  b、执行升级指令

  c、升级之后再查询一次channel区块信息,看height增加了没有

  注意:更新之后,调用原来合约的查询方法,得到的都是最新数据,原来的版本数据作废

合约里对私有数据(字段)处理【只能指定人查看】

使用private data

1、修改合约代码

调用api存储和取值时,换成保存私有数据的api

2、定义一个json

说明:

name:私有字段名称

policy:策略(允许哪些组织机构访问)

requiredPeerCount:除了倍数节点以外,哪些节点还可以作为私有数据的存储备份

maxPeerCount:私有数据备份的最大数量

blockToLive:私有数据存储上链之后,增加?个块,当前私有数据消失(0:永远不消失)

memberOnlyRead:只有当前定义的组织机构成员可以访问

3、指定实例化合约的路径

说明:所有的策略都是在实例化的时候指定的

channel部分

创建channel

方法一、服务器命令行创建

方法二、Java sdk 创建

1、在服务器生成tlx证书文件

命令: configtxgen -profile TwoOrgsChannel -outputCreateChannelTx channel-artifacts/sunsheen.tx -channelID sunsheen

说明:红色部分是证书名

在first-network目录下面执行当前命令

查看当前生成的证书

2、将证书文件下载到本地

channel-artifacts目录下....

3、编写userContext类;编写FabricClient类;测试

FabricClient:

上面获取channel方法需要修改

测试:

优化:

先创建channel,返回后再加入peer跟order ...

查看新创建的channel

问题点:

1、docker没有正常启动 ---- > docker ps

· 命令查看,重新启动

生成tx证书

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx channel-artifacts/ws.tx -channelID ws

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx channel-artifacts/sunsheen.tx -channelID sunsheen

通过生成的证书创建channel

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/fabric-ca-server/ca-cert.pem

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem

peer channel create -o orderer.example.com:7050 -c testChannel -f ./channel-artifacts/testChannel.tx --tls --cafile /home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

peer channel fetch config config_block.pb -o orderer.example.com:7050 -c testchainid

ideal:

阿里有区块链API,下下来,直接调用。

https://help.aliyun.com/document_detail/141372.html?spm=a2c4g.11186623.6.606.281c379evInTeZ

链码里不写业务  不同的业务控制接口

hyperledger fabric 智能合约开发的更多相关文章

  1. Hyperledger Fabric 智能合约开发及 fabric-sdk-go/fabric-gateway 使用示例

    前言 在上个实验 Hyperledger Fabric 多组织多排序节点部署在多个主机上 中,我们已经实现了多组织多排序节点部署在多个主机上,但到目前为止,我们所有的实验都只是研究了联盟链的网络配置方 ...

  2. 使用IBM Blockchain Platform extension开发你的第一个fabric智能合约

    文章目录 安装IBM Blockchain Platform extension for VS Code 创建一个智能合约项目 理解智能合约 打包智能合约 Local Fabric Ops 安装智能合 ...

  3. 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发

    智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...

  4. 智能合约开发环境搭建及Hello World合约

    如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...

  5. 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例

    智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力.智能合约其实是"执行合 ...

  6. NEO智能合约开发(二)再续不可能的任务

      NEO智能合约开发中,应用合约比较简单,是的你没看错,应用合约比较简单. 应用合约三部曲,发布.调用.看结果.除了看结果工具比较缺乏,发布调用neogui最起码可以支撑你测试.   鉴权合约比较麻 ...

  7. EOS智能合约开发(四):智能合约部署及调试(附编程示例)

    EOS智能合约开发(一):EOS环境搭建和创建节点 EOS智能合约开发(二):EOS创建和管理钱包 EOS智能合约开发(三):EOS创建和管理账号 部署智能合约的示例代码如下: $ cleos set ...

  8. EOS智能合约开发(三):EOS创建和管理账号

    没有看前面文章的小伙伴可以看一下 EOS智能合约开发(一):EOS环境搭建和启动节点 EOS智能合约开发(二):EOS创建和管理钱包 创建好钱包.密钥之后,接下来你就可以创建账号了,账号是什么?账号保 ...

  9. 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明

    以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...

随机推荐

  1. c++萌新到大牛,要看哪些书?

    基础语法 <c++primer> 语法进阶 <c++primer plus> 专为c++编著.支持c++14国际标准. 数据结构和算法 <大话数据结构> 编程规范 ...

  2. Vue Elementui 表单必填项和非必填项label文字对齐的简单方式

    1. 不好的方式 很长时间以来都是用改写form-item样式来使得必填项和非必填项保证label对齐,这样需要改写系统样式,还要在相应的item上引用,代码量增多,示例如下(不推荐) <tem ...

  3. 树堆(Treap)学习笔记 2020.8.12

    如果一棵二叉排序树的节点插入的顺序是随机的,那么这样建立的二叉排序树在大多数情况下是平衡的,可以证明,其高度期望值为 \(O( \log_2 n )\).即使存在一些极端情况,但是这种情况发生的概率很 ...

  4. Redis持久化存储——>RDB & AOF

    Redis中两种持久化存储机制RDB和AOF redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB ...

  5. 什么是P,NP和NPC问题?

    P问题,NP问题,NPC问题?这些都是计算机科学领域,关于算法方面的术语.在认识这些术语之前,建议同学们先认真学习一下算法的时间复杂度,因为算法的时间复杂度与P,NP和NPC问题高度相关. 什么是P问 ...

  6. 解决SpringBoot页面跳转无法访问静态资源的问题

    初学SpringBoot,写项目的时候遇到了问题,原本的页面是这样的 但启动项目后是这样的 这是因为thymeleaf中引入静态资源及模板需要使用到 th:xxx 属性,否则无法在动态资源中访问静态资 ...

  7. SpringBoot+MyBatis整合报错Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    项目启动的时候报这个错误,这个问题我百度了一天,果然不出意外的还是没能解决,其中有一篇文章相对来说还是有点用的:https://blog.csdn.net/qq8693/article/details ...

  8. Java异步CompletableFuture的使用

    所谓异步调用其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的方法.Java中的CompletableFuture 提供了四个静态方法来创建一个异步操作. public static Co ...

  9. A review of learning in biologically plausible spiking neural networks

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Contents: ABSTRACT 1. Introduction 2. Biological background 2.1. Spik ...

  10. Shell编程—数据展示

    1.标准文件描述符 Linux用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一个非负整数,可以唯一标识会话中打开的文件.每个进程一次 多可以有九个文件描述符.出于特殊目 ...