自定义博客皮肤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

区块链博客

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

原创 Fabric 智能合约——token(代币)交易

1. 应用场景借用以太坊思维,将以太坊代币合约搬到Fabric上,一样可以实现代币的功能,这个代币除了不能上交易所,基本满足我们替代积分系统的需求。合约需要支持新种类代币发行、代币转账,额度查询,代币增发,代币回收、账户冻结,锁仓等功能。代币增发后打入coinbase账户,coinbase账户与普通账户之间可以互相转账。这样就实现了代币流通。2. 数据的生命周期代币(token)数据内容...

2020-04-18 18:27:11 648 3

原创 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 581

原创 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 1020

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

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

2020-04-04 17:59:16 847

原创 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 673

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

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

2020-03-31 14:50:46 1260

原创 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 676

原创 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 249

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

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

2020-03-27 16:49:38 184 2

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

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

2020-03-27 12:46:55 273

原创 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 287

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

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

2020-03-03 21:28:32 487

原创 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 262

原创 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 194

原创 Fabric v1.x Orderer中的许可

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

2020-02-22 21:06:49 145

原创 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 542

原创 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 535 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 314

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

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

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

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

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

2020-02-20 17:36:02 200

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

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

2020-02-19 21:26:15 422 3

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

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

2020-02-19 18:01:01 515 7

原创 Fabric v1.x 背书策略

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

2020-02-19 16:58:16 258 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 364

原创 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 452

翻译 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 798

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

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

2020-02-14 11:36:22 275

原创 以太坊智能合约“Beauty Chain”的漏洞分析

文章目录一、Beauty Chain是什么二、内存溢出漏洞分析三、预防措施一、Beauty Chain是什么美链(Beauty Chain)是一个部署在以太坊上的智能合约,有自己的代币BEC。美链没有自己的区块链,发行代币的智能合约对应的是以太坊状态树中的一个节点,有自己的账户余额(总的以太币数额),代币都可以自己定义发行规则,合约里每个账户上有多少个代币保存在智能合约的状态变量里,维护在存...

2020-02-13 22:02:16 144

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

一、智能合约的反思智能合约真的智能吗?(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 199

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

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

2020-02-13 15:15:42 426

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

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

2020-02-12 15:35:38 397

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

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

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

原创 以太坊的权益证明机制(PoS)

文章目录一、权益证明(Proof of Stake)的优势二、权益证明机制设计的挑战三、Casper the Friendly Finality Gadget一、权益证明(Proof of Stake)的优势工作量证明(PoW)被大家诟病的是能耗太大,比特币一笔交易需要1000度电左右,以太坊因出块时间短,一笔交易大概是67度电左右。工作量证明中矿工通过购买矿机、GPU等来挖矿,从而获得出块...

2020-02-11 12:33:37 850

原创 以太坊的挖矿算法、难度调整及代码分析

对于区块链系统来说,挖矿是保证区块链安全的重要手段(Block chain is secured by mining)。比特币的挖矿算法是比较成功的,经受了时间的考验(一个天然的bug bounty)。但是比特币的挖矿算法有一些饱受争议的问题,比如只能用ASIC芯片才能挖到矿,这与去中心化背道而驰。理想的挖矿的方式是普通的PC也能参与挖矿,这样算力就能分散开来,发动51%攻击就比较困难了。所以很多加密货币设计mining puzzle的时候,希望能够做到ASIC resistance。

2020-02-10 20:16:55 1050

原创 以太坊的GHOST协议

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

2020-02-09 15:50:08 284

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

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

2020-02-08 16:16:28 1692

原创 以太坊1.0概述

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

2020-02-07 14:01:22 733

原创 比特币引发的一些思考

区块存入KV数据库,区块哈希为key值,区块内容为value,根据hashPrevBlock可以追溯上一个区块,继而可以逐个追溯到创世区块。如果需要多个人共享账户,不能用截断私钥的方法,应该使用多重签名。截断私钥的方法会降低私钥的安全性,根据私钥的一半信息,获取整个私钥数据就比较容易,暴力破解的复杂度也大大降低。比特币并没有达成真正意义上的共识,没有绕过分布式共识那些不可能结论。理论上的不可...

2020-02-06 22:53:22 307

原创 比特币的匿名性分析

比特币并不具有严格意义上的匿名(anonymity)特性,而是更接近化名(pseudonymity),公钥哈希即为用户在比特币系统中的名称。根据各种分析手段可以推测公钥账户背后的真实身份信息和不同账户的关联性。一般来说,一个比特币账户建议只使用一次,防止通过一个账户的多个交易分析出背后的真实身份;另外即使使用不同的账户,也可以通过简单的分析得出不同账户之间的关联关系,例如下图所示,这笔转账交...

2020-02-06 19:46:23 642

原创 比特币的分叉

一、分叉类别比特币分叉有两种:状态分叉和协议分叉。1. 状态分叉(state fork)比特币系统每个节点都可以出块,如果有两个以上节点同时出块,或者在短时间内相继出块,那么就会出现状态分叉,状态分叉一般是临时性分叉,随着时间流逝,总会有一条链胜出成为最长合法链,其他分叉将会成为孤块,挖出这些区块的节点不会获得任何奖励。分叉攻击(forking attack)分叉攻击也属于状态分叉,恶意...

2020-02-06 15:32:44 200

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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