分布式一致性协议之Raft算法
前置知识
CAP理论
描述分布式一致性的三个维度,一个分布式系统只能满足三项中的两项而不可能满足全部三项。
一致性(Consistency)
每次读操作都能保证返回的是最新数据;在分布式系统中,如果能针对一个数据项的更新执行成功后,所有的请求都可以读到其最新的值,这样的系统就被认为具有严格的一致性。
可用性(Availablity)
任何一个没有发生故障的节点,会在合理的时间内返回一个正常的结果,也就是对于每一个请求总能够在有限时间内返回结果。
分区容忍性(Partition-torlerance)
当节点间出现网络分区,照样可以提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。
BASE理论
CAP理论无法全部满足,为了指导工业实现,就需要降低标准,因此出现了BASE理论。
它的思想是:“即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性” 。
BASE理论有三项指标:
基本可用(Basically Available) :是指分布式系统在出现不可预知故障的时候,允许损失部分可用性:比如响应时间、功能降级等; ...
数字签名算法之ECDSA
数字签名算法之ECDSA
椭圆曲线密码学,简称ECC。是一种建立公开加密的算法,也就是非对称加密。和RSA类似。被公认在给定密钥长度下最安全的加密算法。应用范围很广,主要的三个技术TLS、PGP、SSH都在使用它,特别是以BTC为代表的数字货币。
基于ECC的签名算法就是ECDSA。
椭圆曲线一般情况下,椭圆曲线可用下列方程式来表示,其中a,b,c,d为系数。
E:y2=ax3+ bx2+cx+d
简化这个问题
一条椭圆曲线就是一组被 定义的且满足 的点集。
可以发现,椭圆曲线始终是关于x轴对称的。
再定义一个无穷远的点,记为0,那么包含无穷远点的整个椭圆曲线点集为:
群(Group)
群是离散数学数学中定义的一个二元运算。如:“加法”用符号“+”表示,但此处的加法可以是任意的一个二元运算。
群G的定义需要满足以下四个条件:
封闭性(closure):如果a和b被包含于群G,那么a+b 也一定是群G的元素。
结合律(associativity)。
存在一个单位元(identity element)0,使得 a+0 = 0+a = a;[单位元:与任意元素运算不改变 ...
数字签名算法之RSA
数字签名算法之RSA
RSA算法是一种常用的非对称加密算法,常用于数字签名。
在公开密钥密码体制(PKI)中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK,反之亦然。
RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
对称加密与非对称加密对称加密:
加密和解密用的是同一密钥,也是最简单、最快速的加密方式,通常使用的密匙相对较小,容易被破解,如果密钥过大,安全性确实可以得到保证,但同样加密和解密的效率将会很低。因为双方都需要密钥进行加密解密,如果有一方的密钥泄露出去,整个安全性将不复存在,所以这也是对称加密的缺点。
非对称加密:
相较于对称加密,非对称加密使用两个密匙,即公开密钥和私钥密钥。非对称加密很有趣,公钥是任何人都可以请求得到的,但私钥只有一个人持有,而且用公钥加密的密文只能通过私钥来解开,解密者无需像对称加密一样接收加密者的密钥,而是自己保存一个密钥 ...
Fabric网络搭建流程
Fabric网络搭建流程
本项目基于Fabric2.2进行搭建,暂时不使用CA二用crytogen生成证书文件。
假设我们项目的home是/data/twonodes。
目录
配置网络
通道配置
部署节点
节点与通道
链码的安装与执行
配置网络
配置网络主要是由CA负责,基于crypto-config.yaml文件生成orderer和peer节点的证书文件
由于本项目暂时还不采用CA搭建,所以使用官方给定的crytogen命令生成证书文件。
预备条件,参考Fabric测试网络的搭建。
使用cryptogen showtemplate > crypto_config.yaml生成生成密钥材料模板
其内容如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 ...
FabricCA机制详解
Fabric CA机制详解
Fabric CA项目是超级账本Fabric内的MemberService组件, 对网络内各个实体的身份证书的管理。
Fabric CA概述Fabric 基于PKI 认证体系实现了:
身份认证,或者从 LDAP(轻量目录访问协议) 中获取注册信息;
发行担保证书 ECerts (Enrollment Certificates);
发行交易证书 TCerts (Transaction Certificates),保障 Hyperledger Fabric 区域链交易平台上的信息匿名性和不可追踪性;
证书更新和撤销。
有两种方式可以与Fabric CA服务器交互:
使用Fabric CA客户端
使用某种特定开发语言的Farbic SDK
所有与Fabric CA服务器的通信都是 使用REST API。详情参考:fabric-ca/swagger/swagger-fabric-ca.json文件
Fabric CA客户端或SDK可能连接到Fabric CA服务器集群 中的一个服务器,这一点可以查看上图的右上部分。客户端将请求提交给HA代理访问 端结点, ...
PKI的简单理解和实现
PKI的简单理解和实现
Public Key Infrastructure(PKI),中文叫做公开密钥基础设施,也就是利用公开密钥机制建立起来的基础设施。
PKI的简单理解PKI的核心是身份证明书的发行PKI的主要目的是用来发行“身份证明书”,在互联网相互通信的时候,如果能相互确认身份证明书,那么我们就知道自己是在跟对的人通信。
网络世界中,我们需要一个信得过的发证机关来发行身份证明书,同时自己要好好保管自己的身份证明书,就像派出所给你发了公民身份证,自己要好好保管一样。
PKI的世界里,这个身份证明书,被叫做“证明书”。发行“证明书”的机关叫做“认证机关”。还有一个就是统一管理证明书的证书“档案库”。这三个东西加起来,就是PKI的主要构成要素。
构成PKI的要素只有三个构成PKI的主要要素就是下面三个概念
证明书 Cert
认证机关 CA
证书库
说到底,PKI指的是证明书的制作和分发的一种机制。在这个机制的保障前提下,进行可信赖的网络通信。即安全的网路通信保障机制。
证明书被存放在硬盘里。证明书的文件构造是一种叫做 X.509 的协议规定的。
认证机关也其实就是一个网络应 ...
Fabric智能合约Go开发包简单理解
Fabric 智能合约API简单理解
在基于github.com/hyperledger/fabric/core/chaincode 或者 hyperledger/fabric-contract-api-go库进行简单的开发后,进一步分析一下Fabric chaincode 的 处理流程和一些常用API解释。
Fabric 原生构建流程首先我们可以看到,github.com/hyperledger/fabric/core/chaincode是源于Fabric本身的代码,因为Fabric基于Go开发,所以方便调用自身的代码构建。
以一个案例分析:
1234567891011121314151617181920212223242526272829303132333435363738package mainimport ( "github.com/hyperledger/fabric/core/chaincode/shim" pb "github.com/hyperledger/fabric/protos/peer" "fmt& ...
Fabric开发实践
基于Fabric 2.2.3 测试网络的Go语言开发实践。
前置条件
搭建使用Fabric的测试网络
创建一个Channel
功能简述本案例基于Fabric-Sample中的fabcar做修改,简单来说就是在区块链中发布一个车产证,标识车的属性和所有者。
其数据结构如下:
123456type Car struct { Make string `json:"make"` Model string `json:"model"` Colour string `json:"colour"` Owner string `json:"owner"`}
其功能如下:
创建车产证
查询车产证
查询所有车产证
修改车辆所有者
智能合约开发
本代码基于Go,注意Go的Fabric智能合约需要引入github.com/hyperledger/fabric-contract-api-go项目
1234567891011121314151617181920212223242526272829 ...
Fabric应用程序开发基础
Fabric应用开发基础
应用程序可以通过将交易提交到帐本或查询帐本内容来与区块链网络进行交互。
需要注意的是:Fabric的应用是类似客户端的存在,而更核心的是智能合约的开发。
目录
从应用程序到调用智能合约
应用程序如何使用钱包和身份
应用程序如何使用网关连接
如何访问特定网络
如何构造交易请求
如何提交交易
如何处理交易响应
基本流程应用程序必须遵循六个基本步骤来提交交易:
从钱包中选择一个身份
连接到网关
访问所需的网络
构建智能合约的交易请求
将交易提交到网络
处理响应
例如:issue.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687'use strict';// Bring key classes into scope, most importantly Fab ...
Fabric智能合约开发基础
Fabric智能合约开发基础
区块链网络的核心是智能合约。
智能合约定义业务对象的不同状态,并管理对象在不同状态之间变化的过程。
在 PaperNet 案例中,商业票据智能合约中的代码定义了商业票据的有效状态,以及将票据从一种状态状态转变为另一种状态的交易逻辑。
本案例实现了商业票据中最简单的三个功能:发行、购买、兑换。
PaperNet 是一个商业票据网络,允许适当授权的参与者发行,交易,兑换和估价商业票据。PaperNet 商业票据网络。六个组织目前使用 PaperNet 网络发行,购买,出售,兑换和估价商业票据。MagentoCorp 发行和兑换商业票据。 DigiBank, BigFund,BrokerHouse 和 HedgeMatic 互相交易商业票据。RateM 为商业票据提供各种风险衡量标准。
目录
什么是智能合约以及智能合约为什么重要
如何定义智能合约
如何定义交易
如何实现一笔交易
如何在智能合约中表示业务对象
如何在账本中存储和检索对象
合约类
扩展自 Hyperledger Fabric Contract 类,使用Contract类的内置功能,例如自动方 ...