自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cactusblossom

区块链博客

  • 博客(34)
  • 收藏
  • 关注

原创 Fabric v2.0 源码解析——容器运行智能合约(chaincode)

1. Fabric各个组件的交互Fabric v1.x 的组件包括client、orderer节点、peer节点、chaincode容器,各个容器节点间的交互关系如下:上图中可知,最主要的5个交互步骤为:Client → Peer: EndorseProposal,Client向Endorser发送交易提案,请求背书;Peer ↔ Chaincode: ChaincodeIntera...

2020-04-06 23:46:33 1591

原创 Fabric v2.0 源码解析——排序节点(Orderer)运行机制

Orderer在Fabric网络中的作用主要是原子广播(Atomic Broadcast)和全排序(Total Order )。- orderer通过`broadcast`接口,接受client发送的交易,然后将这些Tx进行排序;排序的的原则为FIFS(First In First Served),但是区块内交易的顺序不一定与实际顺序一样,而是由到达Orderer的时间来决定的。- 排序后的交易根据一定的规则打包成区块,通过`deliver`接口将区块发送给Peer或client;保证所有Orderer

2020-04-05 23:34:18 3652

原创 Fabric v2.0 源码解析——典型的业务流程

根据Fabric中典型的业务流程,简单地分析相关的代码,包括创建通道(channel)、加入通道(channel)、安装智能合约(chaincode)、认可智能合约(chaincode)定义、提交智能合约(chaincode)定义、调用智能合约(chaincode)。

2020-04-04 17:59:16 2205

原创 Fabric v2.0 通道(channel)创建后的配置修改——新增组织

1. 创建包含两个组织的channel1.1 准备configtx.yaml文件首先需要准备channel配置的configtx.yaml文件,同时需要将环境变量FABRIC_CFG_PATH设置为该文件所在目录。configtx.yaml中的相关配置如下: TwoOrgsChannel: Consortium: SampleConsortium &l...

2020-04-02 16:07:03 4481

原创 Fabric v2.0 智能合约新生命周期模型的常用操作指南

Fabric v2.0引入了智能合约的去中心化治理,升级到了新的chaincode生命周期管理模式。下面将进行实际的生命周期管理操作演练。

2020-03-31 14:50:46 2883

原创 Fabric v2.0 first-network测试网络运行与剖析

1. byfn测试网络运行步骤1.1 准备二进制可执行文件在fabric目录中执行make native命令可编译出二进制可执行文件,然后将fabric/build/bin目录拷贝到fabric-samples目录中;但是最新的fabric版本在可能会造成后面运行./byfn generate报错的问题。因此可考虑直接从github上下载稳定的二进制可执行文件,运行命令wget https...

2020-03-30 15:36:08 1212

原创 centos7最小化安装后——从零开始安装配置Fabric的依赖环境

1. 基础配置与安装关闭终端的响铃:vi /etc/inputrc# 将下面这一行取消注释set bell-style none 配置静态IP:vi /etc/sysconfig/network-scripts/ifcfg-ens33# 修改配置:TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="...

2020-03-28 18:18:50 892

原创 Go语言的并发机制——goroutine原理

通常程序会被编写为一个顺序执行并完成一个独立任务的代码。如果没有特别的需求,最好总是这样写代码,因为这种类型的程序通常很容易写,也很容易维护。不过也有一些情况下,并行执行多个任务会有更大的好处。一个例子是,Web 服务需要在各自独立的套接字(socket)上同时接收多个数据请求。每个套接字请求都是独立的,可以完全独立于其他套接字进行处理。具有并行执行多个请求的能力可以显著提高这类系统的性能。考虑到...

2020-03-27 16:49:38 695

原创 Go语言接口(interface)的实现原理

1. Go语言的接口与多态多态是指代码可以根据类型的具体实现采取不同行为的能力。如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值。标准库里有很好的例子,如io 包里实现的流式处理接口。io 包提供了一组构造得非常好的接口和函数,来让代码轻松支持流式数据处理。只要实现两个接口,就能利用整个io 包背后的所有强大能力。不过,我们的程序在声明和实现接口时会涉及很多细节。即便...

2020-03-27 12:46:55 1160

原创 Fabric v1.x 应用开发指南

1 技术栈1.1 经典软件工程管理Fabric应用开发者需要了解经典软件工程管理:依赖管理(调用第三方库):govendor/dep, npm/yarn, gradle/maven, pip异常处理:defer, saync/await测试流水线:Smoke, Unit/Mock, SI tests1.2 PKI密码体系Fabric应用开发者需要精通PKI密码体系,包括:EC...

2020-03-05 16:19:00 746

原创 Fabric v1.x Idemix(Identity Mixer)介绍

一、Idemix是什么Idemix(Identity Mixer)的核心是零知识证明(Zero Knowledge Proof),用户无需暴露私有数据以及任何有用的信息,也能证明自己拥有这些私有数据,对方能够进行有效验证,这就是零知识证明。Idemix是一个密码协议套件(X.509+加密算法),保留隐私实现匿名性,交易时不用透露交易者的身份,而且交易间是无关联的,不可往前追溯。Identit...

2020-03-03 21:28:32 1141

原创 Fabric v1.x MSP的结构和使用方法

一、MSP是什么1.1 相关概念证书:证书是fabric权限管理的基础,采用ecdsa算法,符合X.509标准,通过CA来签发证书,每个identity或organization都可以拥有自己的身份证书。组织:证书遵循组织结构,通过组织实现灵活的权限管理,组织一般包含名称、ID、MSP、管理策略、anchor peer节点位置信息。成员:peer和client都是成员,peer提供节...

2020-03-03 15:27:08 901

原创 Fabric v1.x CA简介

一、Fabric CA架构概述Fabric CA主要功能有身份注册、签发ECert、证书续签和吊销等。下图说明了Fabric CA与Fabric总体架构之间关系:Fabric CA是典型的CS架构,包括单独的client端和server端,可以通过Fabric-CA client或SDK与server端交互。server端也可以扩展成HA模式,Fabric CA客户端或SDK可以连接到一个...

2020-03-02 19:41:37 488

原创 Fabric v1.x Orderer中的许可

Fabric是一个许可链,每一个模块都有permission的存在。除了背书策略(Endorsement Policy)还包括其他ACL管控,比如谁可以动态地增加一个组织,谁可以修改channel配置属性。Orderer中的许可的实现原理:ImplicitMeta Policy验证过程中并不起决定性作用,用于集合其他Policy,如下图所示叶子节点都是Signature Policy。Impl...

2020-02-22 21:06:49 256

原创 Fabric v1.x Orderer的共识算法

Fabric Orderer的共识算法是可插拔的,包括Solo、Kafka、Raft,其中Raft算法是在Fabric v1.4版本中新增的,未来还将加入BFT算法。本文会对已实现的3个共识算法进行剖析。一、SoloSolo算法中只有一个orderer节点,用于开发阶段的实验。一个Orderer节点不存在共识的问题,该节点接收所有来自客户端的交易,然后将其排序并产生区块,如下图所示:二、K...

2020-02-22 20:24:31 1486

原创 Fabric v1.x 通道(Channel)机制运行原理

一、channel实现原理1.1 System Channelchannel是Orderer的一个模块,Fabric的启动会创建一个内建的system channel,是系统的一个默认链,用于管理其他的user channel。orderer启动的时候必须要有该channel的genesis block,genesis block里规定了所有关于system channel的配置,因此所有的...

2020-02-22 10:45:12 2729 10

原创 Fabric v1.x Orderer全排序与区块切割规则

一、执行-排序-验证(Execute-Order-Validate)Fabric采用的是先执行、后排序、最后验证的共识模型(Execute-Order-Validate),如下图所示:首先由client提出交易,发给peer仿真执行,产生读写集并签名后返回给client,client会把签名的读写集(proposal response)打包发送给orderer,orderer会将所有从cli...

2020-02-21 19:48:23 817

原创 Fabric v1.x 私有数据(PrivateData)模型分析

一、私有数据是什么对于一些组织来说,总会有一些机密数据,比如产品价格、用户电话、用户地址等信息,这些数据可能希望只被某几个组织知道,或者仅仅自己知道。可以将这些机密数据存储到私有数据库中,然后通过私有数据收集策略来定义有哪些peer有权获得这些私有数据,这些授权peer同样是将这些数据存储到私有数据库里,对于ordering来说,也只能看到私有数据的哈希。另外私有数据同样是通过Gossip协议...

2020-02-21 13:23:34 528 2

原创 Fabric v1.x Gossip协议的一些细节和传播原理

一、Gossip协议的功能Fabric中需要在3个不同类型的节点间进行交易流 转,需要非常安全的、可靠的以及可扩展的传输协议,以确保数据的完整性和一致性,因此Fabric实现了Gossip数据传输协议。Gossip利用一种随机的方式将信息散播在整个网络中,与它名字的含义一样,类似于绯闻流言的传播。Gossip协议的具体功能如下:维护和管理channel成员,发现新的peer节点,不断探测p...

2020-02-20 17:36:02 452

原创 Fabric v1.x 智能合约的生命周期

一、智能合约是什么智能合约是Fabric区块链网络的心脏,在可执行代码中定义不同组织之间的规则。智能合约打包成chaincode,部署chaincode后即可通过chaincode生成交易记录到账本上。二、智能合约与账本的交互开发者需要开发的模块包括Application和SmartContract,Application可以通过ledger的API直接访问区块链,也可以通过智能合约访问区块...

2020-02-19 21:26:15 1066 4

原创 Fabric v1.x 账本与状态数据库

一、Fabric账本Fabric账本是有序的、不可篡改的状态转换记录,包括区块链(Blockchain)和世界状态(World stat)两部分。区块链中保存着不可变的顺序记录,包含配置记录,例如channel的配置;还包含全部交易记录;世界状态中维护账本的当前状态,方便Appication快速查询二、区块链区块链是一个历史交易记录,记录着所有数据对象是如何到达当前状态的。下图中有...

2020-02-19 18:01:01 1718 8

原创 Fabric v1.x 背书策略

一、背书策略是什么Committing Peers在验证交易的时候,通过背书策略来验证一个交易是否有效,背书策略里面定义了一些要求,只有根据背书策略进行背书的交易才被认为是有效的。每个智能合约在部署的时候,都会指定背书策略。Fabric定义了ESCC和VSCC两个system chaincode来为交易进行背书和验证:ESCC (Endorsement System ChainCode)在...

2020-02-19 16:58:16 1092 1

原创 Fabric应用开发流程

1. 开发范围1.1 开发chaincode与application首先需要建立一个Fabric网络,在此之上开发chaincode,然后需要在SDK基础上开发业务应用,与Fabric网络进行通讯,应用还需要通过Fabric CA签发证书。如下图所示:1.2 chaincode接口编写chaincode所需的接口在core/chaincode/shim/interfaces.go文件中,...

2020-02-19 13:52:12 1286

原创 Fabric v1.x Peer节点与交易流程分析

1. Fabric节点类型Fabric网络中包括Peer节点和排序节点(Ordering Node),Peer节点分为记账节点(Committing Peer)和背书节点(Endorsing Peer),这三种节点发挥的作用如下:Committing Peer:负责维护账本和世界状态以及将交易提交到账本并更新世界状态,可能部署有链码;Endorsing Peer:负责接收申请背书的交易...

2020-02-18 15:30:57 1468

翻译 Hyperledger Fabric v2.0发行版的新增功能介绍

Fabric v2.0是v1.0以来的第一个Hyperledger Fabric主要发行版,Fabric v2.0为用户和操作员带来了一些重要的新特性和改变,包括对新应用和隐私模式的支持、围绕智能合约加强的治理、以及为操作节点提供的新选项。保持不变的是,您可以根据自己的条件升级网络组件,支持从v1.4进行滚动升级,并且仅在成员组织准备就绪时才启用新功能。接下来让我们看一下Fabric v2.0...

2020-02-16 19:33:52 1274

原创 区块链引发的一些思考

区块链不是解决一切问题的法宝,不能被滥用;例如有人提出利用区块链的不可篡改特性,实现防伪、溯源,但是无法保证记录到区块链之前的源头的数据正确性,区块链无法检测出来;中心化与去中心化并不是黑白分明的,一个成功的商业模式可以都有;例如有人提出利用区块链的共识机制,实现互不信任的实体间建立共识,但这本身可能是个伪命题,因为互不信任的实体间是无法交易的,比如交易后发现商品质量有问题如何解决;所以可...

2020-02-14 11:36:22 657

原创 以太坊带来的一些反思

一、智能合约的反思智能合约真的智能吗?(Is smart contract really smart?)智能合约并不智能,更接近自动合约。(Smart contract is anything but smart.)二、不可篡改性的反思Irrevocability is a double edged sword.很多区块链的应用都利用了不可篡改的特性,比如防伪、溯源。但是从“The DA...

2020-02-13 17:30:11 587

原创 以太坊社区的分裂——The DAO项目分析

DAO:Decentralized Autonomous OrganizationThe DAO:众筹投资基金,创建了一个智能合约,运行在以太坊区上。将以太币转账给该智能合约,然后换回代币,通过代币作为权重投票决定投资哪个项目。2015年5月发起众筹,1个月内就筹到了1.5亿的以太币,但是3个月后该项目被迫宣告结束。split DAO - child DAO回款时没有先清0,导致重入攻...

2020-02-13 15:15:42 1409

原创 以太坊智能合约示例与漏洞分析——竞拍合约

一、拍卖合约智能合约定义成员变量、event等,构造函数初始化受益人、拍卖结束时间,如下所示:出价的函数如下,标注payable说明接收转账,require(now <= auctionEnd)检查拍卖是否结束,如果已经结束就抛出异常,然后检查出价是否大于最高出价,然后将出价人记录到bidders数组(因为bids哈希表不支持遍历),然后记录新的最高出价人,记录日志,如下所示:结束...

2020-02-12 15:35:38 809

原创 以太坊智能合约的原理和使用方法

一、智能合约概述1. 智能合约是什么智能合约本质上是运行在区块链上的一段代码,代码的逻辑定义了合约的内容。智能合约账户保存了合约当前的运行状态,包括当前余额(balance)、交易次数(nonce)、合约代码(code)、存储(storage 数据结构是MPT)。2. solidity语言智能合约的最常用的语言是Solidity,语法上与JavaScript很接近。如下图所示:“pr...

2020-02-11 22:01:37 7952 1

原创 以太坊的GHOST协议

以太坊1.0将出块时间降低到15s左右,发布的区块在网络上传播时间本身就需要10几秒,其他节点没有充足时间来接收区块,会使得分叉变成常态,且分叉数量会很多,大量孤块(orphan block)得不到收益。

2020-02-09 15:50:08 612

原创 以太坊的数据结构(状态树、交易树、收据树)及代码分析

以太坊是基于账户的账本,因此需要进行账户地址和账户状态的映射,如下所示:我们尝试寻找一种合适的数据结构来完成这个需求:如果以哈希表的形式保存状态数据,可以非常有效率地查找、更新账户状态数据,但是由于状态数据只保存在区块体中,轻节点难以进行Merkle Proof,因此考虑构建Merkle tree;如果将账户数据简单组织成Merkle tree,不进行排序,就需要发布所有账户到区块中,保证根哈希一致,但是数量级太大,不可行;如果只发布状态变化的账户,就会导致所有节点的根哈希不一致,无法共识;如果

2020-02-08 16:16:28 7018

原创 以太坊1.0概述

以太坊(Ethereum)以太坊对比特币进行改进,将出块时间降低到15s,提高了吞吐量。挖矿谜题(mining puzzle)具有memory-hard特性,无法使用ASIC矿机来挖矿。另外以太坊将逐步切换到PoS(Proof of Stake)共识协议,不需要通过算力来投票,而是通过权益比例来投票。比特币是去中心化货币(decentralized currency),在跨国转账方面非常具...

2020-02-07 14:01:22 1369

原创 联盟链与公链的一些思考

许可联盟链与公链不是对立关系,联盟链许可的含义有很多维度,包括:谁可以跑一个节点谁可以提交一个交易谁可以看到你的数据谁可以出块你的身份是否公开架构fabric采用高度模块化的架构,可扩展性强。智能合约的语言fabric的智能合约可以采用通用语言来编写,支持GO、Java、JavaScript等通用语言以及solidity。以太坊的智能合约语言一般是用solidity。...

2020-01-13 13:52:47 1001

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除