区块链
文章平均质量分 58
卢舍那
体系结构,Linux内核,区块链,分布式计算,嵌入式。
展开
-
DAG技术提高区块链交易速度
区块由链式结构到DAG结构之前一篇文章也讲过区块链式结构和DAG结构的区别,DAG的区块可以并发出块,在保证交易全序的情况下能够提升TPS,但是对于联盟链来讲采用raft\pbft共识算法,经过共识后交易顺序即可确定,与区块是链式结构还是DAG结构无关,也就是说区块的DAG结构提升不了采用raft\pbft这类共识算法的交易速度。通过DAG对交易排序,交易并发执行DAG即一个无环的有向图称做有向无环图(Directed Acyclic Graph)。在一批交易中,可以先识别出每笔交易需要占用的互斥资源原创 2020-12-29 10:53:26 · 831 阅读 · 0 评论 -
启动container:failed to write 0 to memory.swappiness
问题描述在部署fabric,peer节点实例化chaincode container时报错:Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused “process_linux.go:430: container init caused \”process_linux.go:396: setting cgroup config for原创 2020-11-06 08:52:04 · 891 阅读 · 0 评论 -
树图区块链相关说明
背景最近在寻求提升区块链交易TPS的方案,注意到目前有采用DAG结构来实现出块并发的方案来实现提高交易TPS。这里发现Conflux项目的树图区块链采用的就是DAG结构,在这里把方案的出发点,解决之道进行相关阐述。相关阐述为何全序?所谓交易全序指的是交易在所有节点上的顺序是确定的、一致的。例如A有10个币,转给B 7个币,转给C 5个币,这两个交易如果顺序不确定则得到的结果也是不确定的,这...原创 2020-01-14 10:33:44 · 10828 阅读 · 0 评论 -
区块链底层网络调研
背景在做区块链项目时,大多落地金融机构,网络开通比较麻烦。现有区块链底层平台组成联盟链要求链上组织机构网络都需要打通,这里相对底层网络进行一些优化,初步想法是通过一些路由节点或是超级节点进行路由,也就是P2P网络中混合式架构。这里调研常见的区块链网络架构。比特币网络架构扩展比特币网络(extended bitcoin network):指代所有包含比特币P2P协议、矿池挖矿协议、Stratu...原创 2020-01-09 15:13:33 · 665 阅读 · 0 评论 -
再读PBFT算法
背景从事区块链相关研发,两三年了,共识这一块接触过pbft\kafka\raft。对pbft一开始从fabric0.6开始,论文也看了几遍,后来共识换成了kafka\raft。pbft就没有继续研究下去,最近接触一个区块链底层平台,采用pbft。因此这里又把论文读了一遍,总结一下心得体会,对一些比较难理解的地方进行梳理。PBFT算法为什么是3f+1?心得体会...原创 2020-01-07 11:00:23 · 748 阅读 · 0 评论 -
x509证书吊销相关调研
背景在做一个区块链项目时,区块链底层平台采用PBFT共识,没有配置块的概念,fabric有配置块约定链的权限。当删除一个节点时由于证书还没有吊销,被删除节点还可以自己启动加入区块链网络,这里实现证书吊销十分有必要。x509证书吊销什么是证书吊销证书吊销列表 (Certificate Revocation List ,简称: CRL) 是 PKI 系统中的一个结构化数据文件,该文件包含了证书...原创 2019-12-25 16:31:31 · 1014 阅读 · 0 评论 -
基于fabric的联盟链管理项目
manageChain项目地址https://github.com/lushena/manageChain.git在建设联盟链时,发现更新联盟链组织成员不是太方便,例如增删链内成员;利用一些空余时间写了一个后端服务程序,通过SDK对区块链节点进行操作,目的是对联盟链进行管理,主要是创建,增删链内成员等,为区块链发展尽一些绵薄之力。一、目的与初衷1、基于hyperledger/fabric...原创 2019-12-19 20:49:49 · 9387 阅读 · 0 评论 -
区块链与merkle tree
Merkle TreeMerkle Tree 是由计算机科学家 Ralph Merkle 在很多年前提出的,并以他本人的名字来命名。通常也被称作Hash Tree,就是存储hash值的一棵树。Merkle树的叶子是数据块的hash值。非叶节点是其对应子节点串联字符串的hash。 merkle tree(变体例如 merkle patricia tree:MPT)广泛地应用于比特币,以太坊,f...原创 2018-08-16 19:41:20 · 12783 阅读 · 0 评论 -
fabric:gossip协议
gossip协议主要是一个P2P的网络传输协议。fabric主要通过此协议来进行区块的同步。具体地,leader的peer节点会从orderer把区块拿到,然后把区块同步到该组织的其它peer节点。anchor peer节点主要用来同步各组织间的信息。gossip通过不断地广播alive消息来判断哪些节点在线,这个信息用PKI ID和发送方的签名,来保证作恶节点冒充其它节点。这个机制大概过程是:c...原创 2018-08-21 18:28:20 · 11776 阅读 · 0 评论 -
fabric 共识模块解读
本文主要分析fabric共识模块的流程,方便自己添加新的共识模块。主要涉及的函数和调用流程如下图所示:一般来讲,如果要添加新的共识算法,主要实现这个接口:type Chain interface { // NOTE: The kafka consenter has not been updated to perform the revalidation // che...原创 2018-09-13 13:16:41 · 12526 阅读 · 3 评论 -
fabric 国密库相关编译问题
背景在区块链中采用国密加密算法,涉及到c代码编译成动态库供golang调用的问题。要满足linux下可运行,Darwin下可运行。linux的相关编译已经在另一篇博文上记录过,这里主要总结mac下的相关问题。问题符号表未定义问题Undefined symbols for architecture x86_64: "_BIO_ctrl", referenced from: _...原创 2019-02-24 21:35:46 · 10417 阅读 · 0 评论 -
以太坊学习笔记(一):基于POA的私有链搭建
简介这里以太坊的一些特性就不赘述,可以在官网进行查阅:https://www.ethereum.org/。下面主要介绍基于POA机制的环境的搭建来窥探以太坊的运行机制。源码下载及编译1、git clone https://github.com/ethereum/go-ethereum2、git checkout -b remotes/origin/release/1.8这里采用1.8这个...原创 2019-06-05 16:09:25 · 12145 阅读 · 1 评论 -
fabric社区发展概况
前言官网:https://github.com/hyperledger/fabricfabric作为联盟链底层的基础设施已经发展几年,也陆续在一些场景中落地。在发展过程中,也在不断完善。从最早fabric0.6版本到现在1.4,1.X版本后面会停止更新,会切换到2.0版本。本文就从fabric发展历程,把几个版本主要的特性做一下总结,也可从中发现商业落地对社区的发展的一些推动。fabric主...原创 2019-07-30 11:22:42 · 10403 阅读 · 0 评论 -
fabric零知识证明
简介官网:https://hyperledger-fabric.readthedocs.io/en/release-1.3/idemix.htmlfabric1.3 发布idemix特性,该功能主要实现了零知识证明,即:匿名性、不可关联性。目前主要实现SDK端的零知识证明,也就是client可以采用idemix,peer、orderer验证,目前只有Java-sdk实现了该功能,其他sdk...原创 2019-09-23 15:37:06 · 9360 阅读 · 0 评论 -
fabric0.6交易处理流程及调用关系分析
本文主要分析fabric0.6交易从发送到处理,送到共识模块的流程及主要函数的调用关系。见下图:原创 2017-08-19 16:05:29 · 15566 阅读 · 0 评论 -
fabric1.0 tls模式配置
fabric1.0 tls模式配置由于tls模式生成的crypto需要域名的方式,否则加密会出现x509密码学错误;目前可以通过修改hosts的形式来进行配置。修改HOSTS文件docker-compose文件中添加相关的extra_hosts extra_hosts: - “peer1.org1.example.com: 192.168.9.1” - ...原创 2017-12-06 17:15:03 · 16079 阅读 · 0 评论 -
golang time.Format坑
在重构fabric1.0日志模块时,以日志作为文件名字,遇到一个格式化的坑:fName = w.fileNameOnly + fmt.Sprintf(".%s%s", logTime.Format("2006-01-02 15:04:05"), w.suffix)发现必须采用”2006-01-02 15:04:05”,否则出错;后来查了一下代码,发现这个是golang诞生的时间。。。。原创 2017-10-26 17:35:46 · 2697 阅读 · 1 评论 -
docker volumes 文件映射
背景在做区块链日志模块时,如果容器运行,需要把日志文件映射到宿主机上以方便查看。下面介绍一下我的实现方式。实现通过docker-compose配置文件volumes参数配置文件示例: volumes: - /var/run/:/host/var/run/ - ./channel-artifacts:/var/hyperledger/configs原创 2017-11-01 11:05:35 · 14007 阅读 · 0 评论 -
Linux下模拟恶劣网络环境
背景在做区块链互联网环境下交易测试时发现,不同网络环境对交易的执行有很大的影响;网络差的时候交易会丢失,卡住等,网络好或者局域网的时候则正常。因此需要一个模拟恶劣网络环境的工具。 本文介绍一个Linux下的为traffic control和netem工具。 其中,Netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联原创 2017-08-15 16:41:52 · 1893 阅读 · 0 评论 -
x509: certificate has expired or is not yet valid错误解决
x509: certificate has expired or is not yet valid错误解决原创 2017-08-02 10:39:40 · 40753 阅读 · 6 评论 -
hyperledger fabric0.6简析之peer start
入口src: peer/main.go...mainCmd.AddCommand(version.Cmd())mainCmd.AddCommand(node.Cmd())mainCmd.AddCommand(network.Cmd())mainCmd.AddCommand(chaincode.Cmd())...if mainCmd.Execute() != nil { o原创 2017-07-24 17:45:01 · 783 阅读 · 0 评论 -
fabric调试:go pprof查看内存
运行pprof1、代码开启pprofimport _ "net/http/pprof" if viper.GetBool("peer.profile.enabled") { go func() { profileListenAddress := viper.GetString("peer.profile.listenAddress")原创 2017-07-20 15:38:19 · 1875 阅读 · 0 评论 -
Fabric: invoke执行流程分析
fabric1.0 invoke 流程原创 2017-11-22 21:05:00 · 17730 阅读 · 3 评论 -
区块链密码学(一):密码学基础及概念
一 、概念主要介绍非对称加密的一些概念。公钥,私钥:均可加密或解密,配对即可。一般来讲,私钥用来进行解密和签名,是给自己用的。公钥由本人公开,用于加密和验证签名,是给别人用的。 签名:内容->hash->digest->私钥加密->签名 验签:用公钥解密签名得到摘要,然后用原始文件经过hash得到摘要,与解密出的摘要进行对比。 证书:数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之原创 2018-03-13 10:54:56 · 18894 阅读 · 0 评论 -
区块链密码学(二):加密算法介绍
本文主要介绍区块链项目 fabric 的加密算法。BCCSP(Blockchain crypto provider)即区块链加密提供商,用于定义选择使用的密码学实现库。负责摘要生成,非对称密钥的签名与验证,根据证书查找私钥等。该模块提供了一系列的接口,这些接口定义了摘要的生成方法,签名,验证,加密,解密等。所有自定义的密码学实现库都需要实现这些接口,以此达到密码学算法的可插拔。目前fabric BC原创 2018-03-13 12:58:30 · 24055 阅读 · 0 评论 -
fabric 1.2运行出错:Unable to decode a Kafka packet
fabric 1.2运行示例e2e时报错:Unable to decode a Kafka packet. Usually, this indicates that the Kafka.Version specified in the orderer configuration is incorrectly set to a version which is newer than the ...原创 2018-07-23 20:59:43 · 14322 阅读 · 0 评论 -
区块链项目:生产环境上chaincode容器不断重启的排查
背景在做区块链项目时,银行发送业务交易时有时会出现超时,报错的response;于是跟踪部署的服务的相关容器,发现业务chaincode容器存在不断重启的现象,业务chaincode容器存活一般几分钟到几小时不等。这说明chaincode容器异常挂掉过,然后再被拉起。但是获取区块链状态的状态chaincode没有重启过,一直在运行。现象描述具体地,chaincode容器的日志...原创 2018-07-11 14:53:10 · 19879 阅读 · 1 评论 -
fabric 1.2编译出错:common/crypto/tlsgen/key.go:36:20: undefined: x509.MarshalPKCS8PrivateKey
fabric 1.2编译出现如下错误: 解决:这个由于golang版本太低,有些类型没有导致,升级golang版本到1.10.3,便可以编译通过。原创 2018-07-23 11:23:56 · 16009 阅读 · 0 评论 -
区块链项目:golang内存泄漏,goroutine泄漏排查
一、pprof的使用pprof的启动及操作import net/http/pprofgo func() { http.ListenAndServe("0.0.0.0:11181", nil) }()然后通过网页打开即可:ht原创 2019-02-24 21:34:28 · 13454 阅读 · 0 评论 -
linux 进程内存占用高分析
通过free命令可以查看系统内存使用情况:free -m total used free shared buff/cache availableMem: 7983 2427 5155 26 400 5272Swap: ...原创 2018-06-11 16:19:36 · 20401 阅读 · 0 评论 -
etcd集群增加节点
etcd集群增加节点主要两步:添加节点启动新节点原本etcd集群# etcdctl member listb7124c8d88451: name=myetcd1 peerURLs=http://192.168.9.100:2380 clientURLs=http://192.168.9.100:2379 isLeader=true235dcf74ed6248d5: n...原创 2018-03-28 13:42:26 · 7696 阅读 · 1 评论 -
etcd集群搭建
etcd集群搭建下载安装从这下载https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2-linux-amd64.tar.gztar xzvf etcd-v3.3.2-linux-amd64.tar.gz cd etcd-v3.3.2-linux-amd64; cp etcd* /user/local/...原创 2018-03-28 11:47:21 · 16343 阅读 · 1 评论 -
区块链学习知识模块
1.Bitcoin,Ethereum,HyperLedger Fabric的区块链相关机制与原理;2.共识算法,主要有PoW,PoS,DPoS,PBFT,Paxos,Raft等;3.GoLang,C++等主流区块链系统开发语言;4.NoSQL数据库的原理与使用,尤其是KV型数据库:LevelDB,RocksDB等;5.linux操作系统,Docker容器技术的原理,部署和使用优化;原创 2017-07-15 10:13:38 · 16141 阅读 · 0 评论