
blockchain
文章平均质量分 81
fpcc
行之苟有恒,久久自芬芳!
展开
-
Fabric源码分析之九数据库存储源码分析leveldb
一、fabric数据存储在fabric中,数据的存储被抽象成一个帐本对象,本身数据底层的数据库和文件是被隔离的,这样做的优势在于,上层数据的变化,对底层数据库的影响极小,甚至于一般情况下都不会有什么影响。抽象的这一层包括有帐本数据存储对象(包括区块数据文件、隐私数据库和区块索引数据库)、状态数据库、历史数据库和Transient隐私数据库等。看一下它们的相关的类图:从上图可以清晰的看到整个Fabric中数据存储的相关的类关系。其具体的类代码如下:首先看一个最底层的DB操作类及其相关的类,其下就是操作原创 2020-05-10 19:23:59 · 2364 阅读 · 2 评论 -
Fabric源码分析之八commiter(记帐)节点分析
一、记帐节点区块链的一个特点是分布式记帐,即各个节点都要承载相同的一份数据。在联盟链中,因为一些节点的配置有所不同,所以可能有些节点没有记帐功能或者说不需要完整的帐本。因此本篇就针对具有记帐功能的相关源码进行分析。记帐其实就是数据存储的过程,根据实际情况写入或更新相关数据库。记帐的功能主要包括交易的验证和帐本提交两个主要的方面,具体到数据的存储和区块的具体的数据结构等会在后面专门相关的篇章进行...原创 2020-04-28 11:42:50 · 3029 阅读 · 0 评论 -
fabric源码分析之七链码源码分析
一、容器和虚拟机在fabric中,有两类链码,一类是系统链码,一类是用户链码。而链码都需要安装和实例化才能使用,在这当中,它们虽然原理相似,但是实现的方式还是有所不同。在系统链码中,首先要Register,然后再Deploy才能使用;而用户链码则首先要Install,然后再instantiate就可以被外部接口使用了。因此,对容器的启动也可分成这两部分来进行解析,从宏观上把握入口,然后分类进行...原创 2020-04-24 11:59:12 · 1825 阅读 · 0 评论 -
fabric源码分析之六MSP源码分析
一、介绍分析MSP其实应该先对权限控制源码进行分析最好,但是权限控制的主要源码在CA相关代码中比较多,所以先把这块放到后面再分析。MSP(membership service provider),成员管理服务提供者,它是从1.0引进的一个组件,目的是抽象各个成员间的管理结构关系。它包含:证书的管理、用户认证、加密和协议等。二、MSP内容MSP主要的内容有什么呢?其实主要就是身份认证。有没有...原创 2020-03-28 10:51:06 · 1216 阅读 · 0 评论 -
Fabric源码分析之六MSP和BCCSP源码分析
一、介绍在前面分析了MSP的基本的流程和源码,但是还是有些疏漏,这里补充一下,同时把相关的BCCSP的部分分析一下,充实整个的加密系统。在MSP中主要对配置管理和证书验证进行一下分析;BCCSP则从整体流程和相关源码进行一下分析。二、MSP的补遗1、配置管理在前面的Peer节点的启动里,从主函数里mainCmd.AddCommand(node.Cmd()),而在node.Cmd()中会有:...原创 2020-03-28 10:48:57 · 1448 阅读 · 0 评论 -
fabric源码分析之五链码源码分析
一、链码介绍在fabric中,与外界的操作,基本都是通过链码(智能合约)来实现,所以说,链码称为链应用对外的API是完全可以的。不过,此API非常见的那种开发的的API,它指用户编写的应用代码,外界可以通过部署其到Fabric上,完成和链的交互通信,将数据存储到链上或者查询链上存储的数据。它分为两大类,即系统链码和用户链码。系统链码就是随链安装就存在的,一般用来处理链节点自身功能的代码;用户链码...原创 2020-02-24 16:11:00 · 2561 阅读 · 0 评论 -
Fabric源码分析之四背书(endoser)节点分析
一、记帐介绍背书节点只是一个逻辑意义上的节点,并不说专门有一个背书节点的模块。这个在前面的分析中已经提到过。背书和背书策略,在Fabric中是很重要的一个环节,他是整个交易流程中直到确认交易的一个重要环节。背书是对交易的确认(正如银行业的背书),而背书策略是对交易确认的条件。如果不指定背书策略,默认是当前组织的任意成员实现背书即可。二、启动流程1、入口背书节点的启动一如普通的Peer节点启...原创 2020-02-22 23:12:12 · 3476 阅读 · 0 评论 -
Fabric源码分析之三启动流程代Orderer分析
一、排序节点的启动本来是想把Peer和Orderer放到一起,结果发现内容太多了,不得不拆开。其实明白了Peer的流程,Orderer也就差不多了,不同的是由于功能的不同,启动的服务肯定有所不同,诸如通信、数据库等。但到了底层,其生成的方式应该类似,下面就看一下相关的排序节点的源码。二、启动流程如果觉得Peer的启动入口函数有点简单,那么Orderer更简单:1、启动func main(...原创 2020-02-20 22:06:06 · 1542 阅读 · 0 评论 -
Fabric源码分析之三启动流程代码Peer分析
一、安装启动方式Fabric的启动有几种方法,一种是使用Docker从官方下载相应的版本然后启动,一种是直接源码编译启动,这两种方式没有本质的不同。同时,最新的Fabric提供了Solo和Raft两种共识服务机制(不讨论旧版本的KAFKA等),在数据的保存机制上提供了LevelDB和CouchDB两种方式。因此,有必要把这些环境都指定下来,才能更好的分析源码。这里主要以Raft共识为主,lev...原创 2020-02-02 22:24:36 · 1182 阅读 · 2 评论 -
Fabric源码分析之二整体架构和流程
一、架构fabric可以从逻辑架构和系统架构两种层面上来解析,先看一下二者的结构图:1、逻辑架构图:从逻辑架构构图上来理解Fabric的整体的逻辑,联盟链和公链的不同之处在于,其逻辑结构有着完全的不同。比如看上面的逻辑结构,就会发现,较之于常见的公链体系,它要复杂的多。在普通的公链逻辑体系中,可以认为只有一个节点,既当爹又当妈,反正该操心的事儿他一个人都干了。可是在联盟链,特别是Fabri...原创 2020-01-31 16:57:28 · 1557 阅读 · 0 评论 -
Fabric源码分析之一概述和目录
一、概述本来随着春天的离去,区块链的春天也更快的走了。但是,最高指示一下子,让几乎在隆冬里的区块链步入了春天,不过,请擦亮眼睛,指示的是区块链中的联盟链。在网上曾经说过,联盟链是权力链。其实就可监管链。在联盟链中,本来就不多,毕竟这玩意不如搞公链来钱快。比较突出的就是IBM发起的Fabric,所以国内搞联盟链的,可以说几乎全部是以这个为主修改、完善或者扩展出来的。Fabric做为联盟链,要求...原创 2020-01-29 10:42:43 · 1237 阅读 · 2 评论 -
caliper的应用之四测试具体项目
一、环境安装环境安装和前边基本没有什么不同。仍然采用默认的配置文件,但配置文件在这里只能当做一个蓝本来使用,需要根据实际情况进行不少相关的增减和删除。最大的不同的在于,测试的目标,前面都是从Docker镜像上下载安装在自己的机器上,而这次是别人已经安装好的Fabric环境。对方提供了相关的证书、IP和端口以及相关的信息。在这里仍然使用Raft的相关配置默认基础,其它诸如Solo等配置文件的修...原创 2020-01-10 14:20:05 · 2406 阅读 · 2 评论 -
caliper的应用之三Raft版本的分析使用
一、安装使用在分析好Solo版本之后,其实都明白,实际应用中,不可能会使用这个版本的,因为,这个不是一个真正的应用环境。早先Caliper使用的是Kafka共识排序,现在新的版本提供了Raft共识排序。为什么要换成Raft呢?主要原因在于,前者是等于利用的另外一个框架,其版本的迭代,必然会影响到Caliper自身的变化。而且Kafka本身也不是为了Caliper量身定制的。大量的相差的功能其实是...原创 2020-01-06 11:27:02 · 839 阅读 · 0 评论 -
caliper的应用之二Solo版本的分析使用
一、安装使用在上一篇中其时启动的就是一个默认的Solo版本,其实在实际的应用场景中基本不会使用此场景来进行应用。但是对于一些学习和熟悉Fabric的初步知识的人可以说有一个比较直观的方式。还是有很大的方便性的。Caliper的使用其实主要是配置文件的使用,在不研究源码的前提下,掌握好各种测试文件的配置,是掌握其应用的主要的方式。使用Caliper将配置搞定,其基本就可以移植到实际场景中的应用配...原创 2019-12-20 15:22:27 · 560 阅读 · 6 评论 -
fabric使用国官的openssl和GmSSL环境安装
一、介绍在国密算法系列中,开源的代码里,Openssl和GmSSL是比较为大家熟悉的开源库。当然,Openssl只是在1.1.1后才开始支持。而且支持的不是套件系列而只是算法系列。在目前流行的Linux操作系统中,前者基本都已经是默认安装了,但是普遍的版本比较低。所以要想使用国密算法,需要升级一下。而后者则是北大一个实验室做的一个开源的国密算法库(它有相当一部分是依赖于Opensssl的)。二...原创 2019-12-12 12:15:19 · 1519 阅读 · 0 评论 -
caliper的应用之一最新版本安装和使用
一、Caliper的介绍Caliper是华为出的一款对区块链进行压力测试的工具,网上的介绍不少,但基本都是老版本的,和新版本的使用有比较大的差别,好多问题的解决方式和方法都有了比较大的变化,另外一些代码和配置文件的改动也非常大。在网上有人提到了,新版本的Caliper有问题,目前只能测试到TPS在800左右,原因是其代码中的一些事件处理占用了太多的CPU资源(8核16G,当然这个只是猜测,他和...原创 2019-12-06 12:11:56 · 3555 阅读 · 44 评论 -
以太坊源码分析之四挖矿和共识之二挖矿细节及共识
以太坊源码分析之四挖矿和共识之二挖矿细节及共识这里详细说明一下ethash的DAG,然后再分析一下共识,这样就可以比较全面的呈现以太坊的挖矿和共识。前面的分析中提到了ethash,那么它内部是怎么实现的呢?Ethash来源于Dagger Hashimoto算法,Hashimoto算法可以做到抑制ASIC专用挖矿芯片,并且支持轻客户端以及全链数据存储。dagger算法它利用了有向无环图DAG同时实现...原创 2018-06-30 23:11:42 · 1113 阅读 · 0 评论 -
以太坊的区块同步
以太坊的区块同步以太坊的数据同步是提供区块链基本数据存储的重要环节,正是因为数据在P2P网络的分发,形成了完全分布式的去中心化的支持。以太坊的区块同步分成两种形式:一、 主动同步:Downloader调用syncer主动同步启动有三种情况:1、启动时。2、接收到NewBlockMsg :这种情况下经常被fetcher覆盖3、新的Peer连接。4、定时二、 被动同步fetcher...原创 2018-12-08 21:48:14 · 3281 阅读 · 0 评论 -
EOS智能合约中的权限控制
EOS智能合约中的权限控制一、EOS中的权限介绍权限这个概念对于人们来说并不陌生,做开发的人更是绕不过去。EOS中的权限和人们认知的权限基本一致,没有什么特殊之处。但是在区块链中,对帐户中明确的提出权限控制和管理的,EOS算是比较完善的。举一个简单的例子,在比特币和以太坊中,如果私钥被盗,基本上币就没了。可是在EOS中却可以申请把帐户恢复过来。同样,在EOS中,权限也可以自己组合定义,以...原创 2019-02-04 21:12:08 · 2189 阅读 · 3 评论 -
DPOS3.0的改进分析
在DPOS2.0时代,V神提出一个问题,也就是原来大家一直认为BFT是不会有分叉的现象的,但是在V神看来,这个是有可能的,看下面的示例: 上图中可以看到,假设Z为不可逆块,有A,B,C,D四个节点出块,当从A开始到c完成出块,即达到2N/3 + 1(所有出块节点的三分之二再加一),即达到新的不可逆节点。但是假如D节点断网了,看不到102以后的块,自己出了一块101,然后又连接...原创 2019-02-20 15:45:39 · 514 阅读 · 0 评论 -
Monoxide的简单分析和讨论
Monoxide的简单分析和讨论一、简介这两天Monoxide火得不得了,王博士的论文把大家的热情搞了起来。看了王博士的一些介绍,对Monoxide有一个粗浅的认识。在这里对其中的一些问题进行了简单的讨论和分析,特别是在群里和朋友讨论时,对一些细节有了更深的领会。毕竟没有源码,所以到真正实现,到底会是什么样子,还需要看整个项目的进展情况。官方论文地址:https://www.use...原创 2019-03-04 10:55:25 · 1930 阅读 · 0 评论 -
Lucet的使用方法
Lucet的使用方法一、介绍Lucet项目是CDN供应商Fastly的一个新开源的项目,其提供了WebAssembly原生的编译器和运行时。它主要是为边缘服务者提供WASM的解决方案。Lucet提供了对WASI的支持,在安全、速度等性能上进行了再平衡。它的效率比一般的JS引擎要快很多并且小很多。在官方的例子中,只需要5毫秒和几K的内存。同样,它的安全性也不容小觑,它在成千上万的实...原创 2019-08-30 11:42:16 · 896 阅读 · 0 评论 -
EOS开发应用系列之一环境搭建
EOS开发应用系列之一环境搭建EOS的开发和应用都需要搭建环境,早先在编译EOS时,因为早先的版本特别不好编译,所以并没有在虚拟机编译。这次准备在虚拟机上进行编译一次。虚拟机的硬件环境是内存8G,CPU4核,硬盘80G。软件是最新的ubuntu18,推荐使用最新的UBUNTU18,相关的软件资源下载都是最新的。老的版本可能需要更新源。整体的过程有以下几步:一、 下载源码 使用命令...原创 2018-12-02 06:46:36 · 953 阅读 · 0 评论 -
一起学智能合约之九错误和异常处理
一起学智能合约之九错误和异常处理记得在群里和小伙伴们讨论的时候儿,有人说他的智能合约执行没成功,但钱没了。这个有点可怕,但是如果你从源码角度看,这种可能性是不可能的。下面分析一下出现了错误和异常会是什么情况?一、 错误在Solidity中,出现错误很常见,比如条件不满足、目标不对,这时候儿,就会返回一个错误,返回错误,只要是非异常的错误,都可以保证合约的正常执行,只是达不到目的。当然,g...原创 2018-11-17 21:11:57 · 2574 阅读 · 0 评论 -
一起学智能合约之八API
一起学智能合约之八API就像学习任何一门语言,官方的库总是少不了,如何调用官方的库,其实就是API接口的调用,在Solidity中也有相关的API。Solidity的API分为以下几类:1、区块和交易的属性2、错误处理3、数学及加密功能4、地址相关5、合约相关一、区块和交易1、block.blockhash(uint blockNumber) returns (bytes32)...原创 2018-11-03 09:14:14 · 859 阅读 · 0 评论 -
以太坊的一个TOKEN合约的发布
以太坊的一个TOKEN合约的发布 需要搞一个TOKEN的发布合约,先试一下水,从官网上找到了一个例子如下:pragma solidity ^0.4.8;contract Token{ // token总量,默认会为public变量生成一个getter函数接口,名称为totalSupply(). uint256 public totalSupply; ...原创 2018-07-27 17:51:23 · 1569 阅读 · 0 评论 -
以太坊源码分析之八虚拟机
以太坊源码分析之八虚拟机一、智能合约的编译分析接上文,先搞一个小的智能合约,编译好,放到环境里执行看流程和结果,先看智能合约 :pragma solidity ^0.4.4; contract HelloWorld { function Hello( uint256 t) returns (uint256) { t = t +1; ...原创 2018-08-05 08:33:32 · 1004 阅读 · 0 评论 -
以太坊源码分析之七智能合约
以太坊源码分析之七智能合约这个以太坊之所以较之于比特币看上去更高大上一些,主要原因是提供了智能合约,以太坊的智能合约确实提供了一个更方便、更开放区块链的接口。首先说明一下,要想看懂以太坊的智能合约部分,首先要对智能合约有所了解,回头会专门写一个智能合约编写的系列。扯回来。先看智能合约的入口,不管智能合约还是交易,创建的时候儿都是有Transaction来实现的。不同的是创建的目标是一样...原创 2018-08-05 08:31:18 · 1403 阅读 · 0 评论 -
以太坊源码分析之六交易
以太坊的交易才是真正为“币圈”重视的,代码啥的,人家根本不感兴趣,交易也算是“币圈”和“链圈”的结合点吧。一、 交易的流程以太坊的交易大致分以下几步:1、 发起交易:指定目标地址和交易金额以及相关的gas/gaslimit发起相关交易,如果目标地址为空,则表示其为一个智能合约的交易。2、 交易签名:使用私钥对交易进行签名。这涉及到上一篇中帐户的私钥和公钥的产生机制。3、 提交交易:把交...原创 2018-07-15 10:47:19 · 1544 阅读 · 1 评论 -
以太坊源码分析之三网络分析之二网络的数据交互
以太坊源码分析之三网络分析之二网络的数据交互一、 网络的数据交互准备 在前面提到过启动节点时会启动P2P网络的监听(包括UDP和TCP),首先看创建一个Service,在前文的makeFullNode 函数时,使用了RegisterEthService这个函数,在这个函数里:func RegisterEthService(stack *node.Node, cfg *eth.Config) { v...原创 2018-06-10 18:02:30 · 741 阅读 · 0 评论 -
以太坊源码分析之三网络分析之三逻辑层消息机制
以太坊的网络通讯中封装了peer这个逻辑的概念,这样就有利于方便的进行数据的通信,先看一个最简单的golang的网络通信:服务端:func main() { service := ":3456" tcpAddr, err := net.ResolveTCPAddr("ip4", service) checkError(err) listener, err := net.Li...原创 2018-06-18 01:52:43 · 715 阅读 · 0 评论 -
以太坊源码分析之三网络分析之一网络的发现维护
以太坊源码分析之三网络分析之一网络的发现维护前面分析了启动,启动完成了就要开始布网了,只有网络开始服务,才能进行各种分布式去中心化的工作。这里重点介绍网络发现、维护还有数据交互。对RPC等的分析会往后推一下。1、 网络发现(UDP的网络发现)在前面提到过,以太坊中,发现网络使用的是UDP的网络通信方式。在以太坊中维护网络使用的是Kademlia的DHT的方式。DHT,分布式哈希表,是一种分布式的存...原创 2018-06-03 11:58:55 · 1173 阅读 · 0 评论 -
以太坊源码分析之九区块
以太坊源码分析之九区块终于到了区块链中最和区块链搭界的部分,毕竟它们只差一个字。区块是区块链的基础,区块通过HASH链接在一起就成为了区块链。一、区块的相关数据结构不当嘴炮党,看源码:链数据结构:type BlockChain struct { chainConfig *params.ChainConfig // Chain & network configuration...原创 2018-08-11 09:12:42 · 862 阅读 · 0 评论 -
一起学智能合约之七接口和抽象类
一起学智能合约之七接口和抽象类继承说一下,不能有多个构造函数,结构体接口接口其实和其它语言的没有什么区别,只是略微增加了一些限制:1、不能继承其它合约,或接口。2、不能定义构造器3、不能定义变量4、不能定义结构体5、不能定义枚举类接口的关键字是interface:interface Token { function transfer(address ...原创 2018-10-21 17:18:56 · 1107 阅读 · 0 评论 -
一起学智能合约之六币值单位和时间单位
一起学智能合约之六币值单位和时间单位 一、货币单位ether:一个以太币finney:千分之一个etherszabo:百万分之一个etherwei:10^18 wei=1 ether这些单位其实都是密码学家的名字:wei: Wei Dai 戴伟 密码学家 ,发表 B-moneyfinney: Hal Finney 芬尼 密码学家、工作量证明机制(POW)提出...原创 2018-10-21 17:18:16 · 393 阅读 · 0 评论 -
一起学智能合约之五函数和修改器
一起学智能合约之五函数和修改器 函数是所有的语言都离不开的。其实在上面的表达式里就简单的说明了函数的一些形式和用法,这里再整体说明一下。Solidity的函数形式如下:function (<parameter types>) {internal|external} [pure|constant|view|payable] [returns (<return typ...原创 2018-10-13 20:09:31 · 494 阅读 · 0 评论 -
一起学智能合约之四表达式和控制结构
一起学智能合约之四表达式和控制结构 一、控制结构在Solidity中,主要有以下控制结构:1、条件语句:if,if…elseif(msg.sender != admin){ …….;}else{ ……}Solidity中不支持从非布尔类型类型到布尔类型的转换, 所以类似if (1){…}这种语句会引起编译错误。 2、...原创 2018-10-06 22:25:58 · 451 阅读 · 0 评论 -
一起学智能合约之三数据存储位置
一起学智能合约之三数据存储位置 在上一篇介绍变量时,简单的提到过智能合约中的数据存储的位置分为memory 和storage。在本篇将重点介绍一下以太坊智能合约的数据存储的位置和用途以及因此产生的Gas的消耗。一、存储的位置现在已经知道Solidity中的变量分为两类:值类型和引用类型。其实之所以分为两种类型主要还是为了减少合约中应用时的内存的开销。一般来说,大的数据会使用引用...原创 2018-10-03 09:26:04 · 4998 阅读 · 0 评论 -
一起学智能合约之二基本类型
一起学智能合约之二基本类型首先需要说明的是,如果大家对下面的某些点存疑,可去官网查询,以官网的文章为准。地址:英文:https://solidity.readthedocs.io/en/v0.4.24/中文:http://solidity-cn.readthedocs.io/zh/develop/index.html源码:https://github.com/ethe...原创 2018-10-03 09:22:59 · 2408 阅读 · 2 评论 -
合约的自动编译和一键部署
合约的自动编译和一键部署在开发智能合约时,有时候儿需要对合约自动化部署,通过一条指令或者调用一个文件来完成,下面给出一个思路,供借鉴:环境的安装1、安装 相关软件 [root@k7762v /home]# yum install git[root@k7762v /home]# yum install openssl-devel [root@k7762v /home]# n...原创 2018-09-15 14:30:59 · 983 阅读 · 0 评论