Hyperledger Fabric(4)链码ChainCode】的更多相关文章

前言 本文主要目的是用于整理Hyperledger  Fabric中关于chaincode 管理和操作的内容,作者以release-1.2为范本进行讲解. 主要参考链接: https://hyperledger-fabric.readthedocs.io/en/release-1.2/chaincode4noah.html 本文总计有两节: 第一节: chaincode Operator 介绍 第二节: 测试和验证 新入门的建议看一看有所了解,已经熟练也可以查缺补漏. 关键词 chaincode…
本文接上一节是测试部分 搭建一个模拟测试环境 作者将fabric release1.2工程中的 example-e2e进行了改造来进行本次实验: (1)首先我们将examples/e2e_cli/scripts/script.sh中的安装智能合约部分注释掉,或者从此处下载替换原有的脚本 (2)然后再写一个用于安装signcd的脚本 script_chaincode.sh ,放在examples/e2e_cli/scripts/ 目录下面 (3)启动测试网络: cd examples/e2e_cl…
联盟链由于其本身的特性,目前应用在一些大型国有企业银行比较多.出于安全考虑,这些企业一般会隔离外网环境.所以在实际生产需求中可能存在需要在一个离线的环境中打包安装chaincode的情况. 本文基于这个需求而编写. java env 镜像源码:https://github.com/hyperledger/fabric-chaincode-java/tree/release-1.4/fabric-chaincode-docker 我使用的是java chaincode.目前fabric中的java…
链码(chaincode) 会对 Fabric应用程序  发送的交易做出响应,执行代码逻辑,与 账本 进行交互. 再复习下他们之间的逻辑关系: Hyperledger Fabric 中,Chaincode 默认运行在 Docker 容器中.Peer 通过调用 Docker API 来创建和启动 Chaincode 容器.Chaincode 容器启动后跟 Peer 之间创建 gRPC 连接,双方通过发送 ChaincodeMessage 来进行交互通信.Chaincode 容器利用 core.ch…
什么是Chaincode(智能合约)? chaincode是一个程序,它是使用Go语言编写的,最终在Java等其他编程语言中实现了指定的接口.chaincode运行在一个被背书peer进程独立出来的安全的Docker容器中.chaincode通过应用程序提交的事务初始化和管理账本状态. chaincode通常处理被网络成员认可的业务逻辑,因此它被认为是一种"智能合约".由chaincode创建的状态只作用于该chaincode,而不能通过另一个chaincode直接访问.但是,在同一个…
搭建基础环境 阿里云安装出现的一些问题解决 1. [signal SIGSEGV: segmentation violation code=0x1 addr=xxx pc=xxx] 类似的错误:原始错误的代码(来自peer节点): 2020-02-09 22:43:43.665 CST [couchdb] handleRequest -> WARN 016 Retrying couchdb request in 125ms. Attempt:1 Error:Get http://couchdb:…
使用CouchDB作为状态数据库 状态数据库选项 状态数据库包括LevelDB和CouchDB.LevelDB是嵌入在peer进程中的默认键/值状态数据库,CouchDB是一个可选的外部状态数据库.与LevelDB键/值存储一样,CouchDB可以存储任何以chaincode建模的二进制数据(CouchDB附件函数在内部用于非json二进制数据).但是,当chaincode值(例如,资产)被建模为JSON数据时,作为JSON文档存储,CouchDB支持对chaincode数据进行丰富的查询. L…
使用CouchDB作为状态数据库 状态数据库选项 状态数据库包括LevelDB和CouchDB.LevelDB是嵌入在peer进程中的默认键/值状态数据库,CouchDB是一个可选的外部状态数据库.与LevelDB键/值存储一样,CouchDB可以存储任何以chaincode建模的二进制数据(CouchDB附件函数在内部用于非json二进制数据).但是,当chaincode值(例如,资产)被建模为JSON数据时,作为JSON文档存储,CouchDB支持对chaincode数据进行丰富的查询. L…
第一次安装fabric有很多坑.记录一下,主要跟版本问题. 参考的是http://www.cnblogs.com/aberic/p/7532114.html 这篇博客. 我用的阿里云centOs 7.X的版本. 前面安装go,docker的过程不在描述. 安装完docker后下载fabric源码. mkdir –p ~/go/src/github.com/hyperledger cd ~/go/src/github.com/hyperledger 用git命令下载完整源码 git clone h…
智能合约,是一个抽象的概念,智能合约的历史可以追溯到 1990s 年代.它是由尼克萨博(Nick Szabo)提出的理念,几乎与互联网同龄. 我们这里所说的智能合约只狭义的指区块链中.它能够部署和运行在区块链环境中,由一段代码来描述相关的业务逻辑.部署后的智能合约在区块链中无法修改,智能合约的执行完全由代码决定,不受人为因素的干扰.一般来说,参与方通过智能合约规定各自权利和义务.触发合约的条件以及结果,一旦该智能合约在区块链环境中运行就可以得出客观.准确的结果. 什么是ChainCode Cha…
在<Hyperledger Fabric链码之一>和<Hyperledger Fabric链码之二>中我们介绍了链码的定义,并通过dev网络测试了测试了自己编写的链码程序. 本文中我们站在区块链网络管理员的角度来阐述链码,我们集中在链码的声明周期管理,如链码的打包,安装,初始话以及升级. 链码声明周期 超级帐本Fabric提供的接口使得多种类型的节点能够进行交互 - 节点,排序节点以及成员管理服务 - 同时使得在背书节点上可以进行打包.安装.初始化和升级链码. Hyperledge…
上篇文章中我们介绍了链码的概念,本文中我们将介绍Fabric下链码的编写和测试.我们会通过一个简单例子的方式来阐述链码API的使用. 链码API     每一个链码程序都必须实现一个接口Chaincode Interface, 这些方法用来响应接受到的交易.特别的,当链码接收到``Instantiate``和``upgrade``类型的交易时会调用``Init``方法,执行一些需要的初始化,包括应用状态的初始化.当链码接收到``Invoke``类型的交易时候会调用``Invoke``方法来处理交…
什么是链码(Chaincode)? 我们知道区块链有3个发展阶段:区块链1.0,区块链2.0,区块链3.0.其中区块链2.0就是各种区块链平台百花齐放的阶段,区块链2.0最大的特点就是智能合约,我们接下来要介绍的链码就是智能合约的一种,是Hyperledger子项目Fabric提供的智能合约,叫做chaincode,翻译过来就是链码. 链码是一段程序,目前采用go语言来编写,Java.NodeJs语言也会慢慢支持.链码的编写需要实现Fabric提供的一套接口,之后链码需要运行在一个安全的Dock…
上个版本的chaincode有很多功能不完备,所以要部署新版本的chaincode.Fabric支持在保留现有状态的前提对chaincode进行升级. 一.新版chaincode 新版本的chaincode增加的功能如下: 1.增加了数据追溯功能,在社区用户发起transaction时,chaincode将自动在用户证书中提取用户信息,将其存储在帖子的字段里. 2.加入了敏感词监管功能,敏感词字典和敏感词过滤功能在外部提供,chaincode通过http api(post 请求)调用服务. 3.…
前几章已经分别把三台虚拟机环境和配置文件准备好了,在启动fabric网络之前我们要准备好写好的chaincode.chaincode的开发一般是使用GO或者JAVA,而我选择的是GO语言.先分析一下官方最典型的一个chaincode--fabcar,然后着重介绍一下shim.ChaincodeSubInterface,最后在贴上我自己的chaincode. 一.chaincode主要框架结构 1.1 引入了4个程序库,用于格式化.处理字节.读取和写入JSON,以及字符串操作.2个Hyperled…
1.Fabric简介 Fabric是超级账本中的一个项目,用以推进区块链技术.和其他区块链类似,它也有一个账本,使用智能合约,且是一个参与者可以分别管理自身交易的系统.它是一个联盟链.Fabric与其他区块链系统最大的不同在于它是隐私的.许可的网络.相对于像其他区块链那样通过“工作量证明”来验证身份(允许任何人加入网络),Fabric的成员通过会员注册服务提供商来加入网络.Fabric提供了多种可插拔的选择,账本数据可以以多种形式存储,共识机制可切换,且支持不同的会员服务.Fabric还提供了创…
一直以来,写完链码进行测试都要先搭建一个Fabric环境,然后安装链码进行测试,实际上Fabric提供了最为简单的方式可以允许我们对编写的应用链码进行功能测试,不需要搭建一个完整的Fabeic环境.而且测试完直接停止网络也不会担心有残余的文件没有删除干净,以至于搭建正式环境的时候出现各种错误. 进入正题好了,Fabric提供了一个开发模式,是专门用来对链码进行测试用的. 其实,这些内容在Fabric官方文档中都是有的,但是一般我们都忽略掉了,所以简单说一下步骤 官方文档地址:点这里 1.先决条件…
Hyperledger fabric 链码篇GO(四) fabric中的链码也就是我们区块链所认知的智能合约,fabric中可由nodejs,java,go编写,本篇只针对GO语言编写链码.将详细介绍链码编写所必须的函数以及相关功能函数. 1.常识 链码的包名指定 // xxx.go package main 必须要引入的包 import( "github.com/hyperledger/fabric/core/chaincode/shim" pb "github.com/h…
深蓝前几篇博客讲了Fabric的环境搭建,在环境搭建好后,我们就可以进行Fabric的开发工作了.Fabric的开发主要分成2部分,ChainCode链上代码开发和基于SDK的Application开发.我们这里先讲ChainCode的开发.Fabric的链上代码支持Java或者Go语言进行开发,因为Fabric本身是Go开发的,所以深蓝建议还是用Go进行ChainCode的开发. ChainCode的Go代码需要定义一个SimpleChaincode这样一个struct,然后在该struct上…
环境搭建完毕,需要的工具和镜像安装完毕,就可以进行chaincode测试了,接下来参考官方教程运行first-network. 进入first-netwok: cd first-network first-network的文件结构如下 在first-network目录下有两个自动化脚本byfn.sh和eyfn.sh,这两个脚本的启动顺序是先执行byfn.sh再执行eyfn.sh(eyfn.sh不是必须的,eyfn.sh的作用稍后再介绍).byfn.sh的执行格式为:./byfn.sh (up|d…
Q&A Q1: 使用fabric release 1.2 进行golang chaincode开发时报错: ..\..\hyperledger\fabric\vendor\github.com\docker\docker\pkg\archive\archive.go:364:5: hdr.Format undefined (type *tar.Header has no field or method Format) ..\..\hyperledger\fabric\vendor\github.…
三.测试Fabric 其实我们在前面运行./network_setup.sh up的时候系统已经运行了一个Example02的ChainCode测试,部署上去的ChainCodeName是mycc,所以接下来我们要测试的话不能再初始化并部署同样名字的ChainCode了,我们可以使用自己另外命名的名字,比如devincc. 3.1在CLI中测试Example02 首先我们需要登录到CLI这个容器中,才能执行Fabric的CLI命令. docker exec -it cli bash 如果成功进入…
预览 Hyperledger Fabric的chaincode开发目前支持Go.Java.Node.js语言,下面以Go语言作为例子,我们先看下面的一个官方提供chaincode模板 ··· package main import ( "github.com/hyperledger/fabric/core/chaincode/shim" "github.com/hyperledger/fabric/protos/peer" "fmt" ) typ…
Hyperledger Fabric 1.0 从零开始(十)--智能合约 Hyperledger Fabric 1.0 从零开始(十一)--CouchDB 上述两章,最近网上各路大神文章云集,方案多多,因为最近工作太忙太忙,我暂时就先不赘述了,后续会提供我参考过的大神文章链接出来. 这章先捡大家都比较在意的java sdk应用方案贴出来,很多朋友都找我要过,我主要是把注释都写进去了,用法简单了说了下,一般情况下会java开发的都能看懂. 年前实在太忙. JAVA-SDK 9.1.基本介绍 官方在…
超级账本组成模型 本文主要讲述Hyperledger Fabric的关键设计特性,并细述如何实现了一个全面的.可定制的企业级区块链解决方案: 资产定义--资产这里理解为任何具有货币价值的东西,它们都可以通过网络进行交易,无论是超市商品到古董车再到货币期货都属于资产. 智能合约--链码(chaincode)即Fabric的智能合约,分为系统链码和用户链码.链码的执行由事务排序划分,限制了节点类型间的信任和验证级别,并优化了网络的可伸缩性和性能. 账本特征--账本不可变的.共享的并且为每个通道(ch…
前言 最近在参加一个比赛,使用到了区块链的开源软件hyperledger,由于之前从未接触过区块链,以及和区块链开发相关的内容,所有在网上查阅了大量的资料,并且通过学习yeasy(杨宝华)开源的入门书籍区块链技术指南以及进阶学习的<区块链原理.设计与应用>,对区块链的一些相关概念有了一定认识.这里记录的是我安装hyperledger fabric的所有步骤,同时也是一个快速搭建单机环境的参考教程. 准备好机器环境 本人的区块链网络部署在VMware搭建的ubuntu16.04的环境下(推荐使用…
 Hyperledger Fabric . Corda 和以太坊的对比 三种不同的框架 我们从 Hyperledger Fabric.R3 Corda和以太坊的白皮书中可以看到,三种框架在可能的应用领域上分别具有完全不同的想法. Fabric[1] 和 Corda[2] 的开发是受具体用例驱动的.其中,Corda 的用例来自于金融服务行业,这也是 Corda 可见的主要应用领域.Fabric 设计提供一种模块化.可扩展的架构,可用于从银行.医疗保健到供应链等各个行业. 以太坊表现出完全独立于任何…
This section outlines the key design features woven into Hyperledger Fabric that fulfill its promise of a comprehensive, yet customizable, enterprise blockchain solution: Assets - Asset definitions enable the exchange of almost anything with monetary…
Hyperledger Fabric is a unique implementation of distributed ledger technology (DLT) that delivers enterprise-ready network security, scalability, confidentiality and performance, in a modular blockchain architecture. Hyperledger Fabric delivers the…
本文主要介绍Hyperledger Fabric的主要设计特点,为了满足功能丰富.可定制.企业化区块链解决方案. Assets - 资产定义,使得任何形式的资产,从食物到汽车到货币都可以进行自由的交换. Chaincode - 链码的执行从交易共识中分离,将需要的可信等级和验证分担给各种类型的节点,优化了网络的可扩展性和性能. Ledger-Features - 不可更改的,共享的账本对每个通道中的所有历史进行编码,为高效的审计和解决分歧等提供了类SQL的查询能力. Privacy-throug…