-
聊聊fabric的数据结构
前言我们知道,对于一个程序来讲,其核心是数据结构和算法。正如我们之前学习TCP/IP协议的时候。对于Fabric来讲,我们很关心区块是怎么存储的,那么了解其数据结构是很重要的,本文将带你了解Fabric区块的数据结构。我们先来看2张图,第一张图是区块的结构,第二张图是数据结构的定义图,两张图配合着看,我会对字段进行解释。给出这2个图的意义在于我们分析的时候,不会迷失方向。BlockBlock是区块链数据结构里面的一个最基本的元素。// This is finalized block str...…
-
一文吃透程序间的通信
前言我们在这篇文章研究进程间通信。因为我们的代码肯定需要和其他的程序进行交换数据。如果只是在一台电脑上,我们可以使用系统级别的I/O,如果不在一台电脑上呢,我们可以使用socket网络编程。更为特殊的是,我们还会面临高并发编程这个很困难的问题。1. 系统级别的I/O输入/输出 是在主存和外部存储设备之间复制数据的过程,输入操作是从I/O设备复制到主存,输出操作是从主存到I/O设备。1.1 Unix I/O一个linux文件是m个字节的序列,所有的I/O设备都被模型化为文件,所有的输入输出都...…
-
一文学会http
前言本篇文章主要学习http的相关知识。主要学习以下内容。这方面最经典的书应该是《Unix网络编程了》。1. Http的前世今生HTTP (Hypertext transfer protocol) 翻译成中文是超文本传输协议,是互联网上重要的一个协议,由欧洲核子研究委员会CERN的英国工程师 Tim Berners-Lee v发明的,同时,他也是WWW的发明人,最初的主要是用于传递通过HTML封装过的数据。在1991年发布了HTTP 0.9版,在1996年发布1.0版,1997年是1.1版...…
-
docker的学习之路
1. 关于学习方法这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题。这个问题非常关键,也就是说,你在学习一个技术的时候,需要知道这个技术的成因和目标,也就是这个技术的灵魂。如果不知道这些的话,那么你会看不懂这个技术的一些设计理念。这个技术的优势和劣势分别是什么,或者说,这个技术的 trade-off 是什么。任何技术都有其好坏,在解决一个问题的时候,也会带来新的问题。另外,一般来说,任何设计都有 trade-off(要什么和不要什么),所以,你要清楚这个技术的优势和劣势,...…
-
github如何支持markdown的toc
前言markdown算是很好的写作格式,toc标签可以让读者更好的看我们文章的大纲,并且可以快速跳转。像是下面这样:可是遗憾的是,不是所有的编译器都支持toc这个标签的,比如github,这样就比较烦了,像是下面这样。如果文章比较长的话,我们不能从整体上来把握。解决对于一个程序员来讲,遇到问题,当然得解决了,为了避免重复造轮子,我先用google来搜索下。第一个点进去,瞅瞅,star,fork,和issue,感觉还不错,看下readme,就决定入坑了。地址是这个:https://githu...…
-
Linker & Loader
1. 前言之前在学习java的JVM的时候,总是傻傻的分不清堆,栈,数据区,代码区什么的,查了很多的资料,都是很零碎的,学的也很乱,其实现在才发现,这些都是编译原理里面的。下面的内容我主要参考的是《程序员的自我修养,链接,装载与库》和《Links and Loaders》。我没有按照实际的顺序,按照的书的顺序,方便以后的查找,只是摘录了现阶段比较重要的东西,像是语义分析之类的,直接省略了。动态链接的内容也是比较少,以后用到的时候,在来补充吧。https://mp.weixin.qq.com...…
-
区块链的前世今生
前言随着老大的讲话,原本已经平静下去的区块链又一下子热闹了起来。也有好多人来问我区块链相关的东西,正好趁着这个机会把我学习的东西也整理一遍。本篇文章将从区块链的历史,区块链技术的革命性与局限性,区块链的核心技术进行讲解。1. 区块链的历史区块链的开始,要从这篇白皮书开始,有兴趣的同学可以读一下。一个名叫中本聪的极客为了表达对政府肆意制造通货膨胀的不满,在2008年底,发表了上面这篇论文,2009年初,搭建了比特币网络,在比特币的创世块中,中本聪留下了这样的一段话:The Times 03/...…
-
操作系统学习笔记
os-learningos-learning实验任务 熟悉 hit-oslab 实验环境 修改 bootsect.s 和 setup.s 完成系统引导 添加两个系统调用并用于测试程序 基于模板 “process.c” 编写多进程的样本程序并输出日志 重写 switch_to 完成堆栈切换实现 TSSS 用信号量解决生产者—消费者问题 Bochs 调试工具跟踪 Linux 0.11 的地址映射过程、为程序增加共享内存功能 修改 Linux 0.11 对键盘输入和字符显示进行控...…
-
Fabric部署注意事项
Fabric部署注意事项【持续更新】https://app.yinxiang.com/fx/8dd0ae6e-6c04-4b1d-9b84-a885b789fc92【1、锚节点】每个通道至少有一个锚节点,强烈建议每个通道中的每个组织都要设置一个锚节点。例子:mychannel中有Org1和Org2两个组织,yourchannel中有Org1和Org2两个组织。那么我们需要设置4个锚节点。比如Org1MyChannelMSPanchors.tx,Org2MyChannelMSPanchors...…
-
How to write Makefile
前言本篇文章来自「左耳朵耗子」,最近在学makefile,就抄过来了。读完这篇文章,在读fabric的makefile就没任何障碍了。1. 概述什么是makefile?或许很多Windows的程序员都不知道这个东西,因为那些Windows的集成开发环境 (integrated development environment,IDE)都为你做了这个工作,但我觉得要作一个好的和专 业的程序员,makefile还是要懂。这就好像现在有这么多的HTML编辑器,但如果你想成为一个专业人士, 你还是要...…
-
fabric国密算法的改造
前言为什么需要修改fabric的国密算法?众所周知的原因,DES和AES等对称加密算法的关键之处:S盒是掌握在美国的手里的,所以是不可信任的。非对称加密算法也有未知的后门,所以我们必须进行替换成国密算法,sm2,sm3和sm4。密码学算法在fabric的应用场景常用的密码学分为对称加密,非对称加密和hash算法。非对称密码学算法主要用在:提案交易,背书交易,创建区块,tls和证书验证中。 算法 场景 算法 总结 ...…
-
手把手教你搭建docker-hub
前言为什么要搭建docker-hub第一,由于众所周知的原因,我们从docker下载镜像的时候,速度慢,而我们自己搭建docker-hub速度则很快。第二,官方的镜像有的时候无法满足我们的业务需求,我们需要进行定制开发,在完成之后,上传到公司内部的docker-hub中,方便其他人进行下载。基于以上的原因,我们就需要搭建自己的docker-hub了。经过上面的需求分析,我们选择了harbor来搭建我们的docker-hub。harbor1. 什么是harborHarbor正是一个用于存储D...…
-
fabric可以跨链吗?
CrossChainCrossChain in fabric前言今天公司让我整理一个基于fabric的跨链的方案,之前没怎么接触过跨链,在这里记录下自己的思路吧。首先,先明白几个概念。什么是跨链?我的理解是跨链是跨channel。下面详细说下我的理由: 回顾下fabric的启动过程:创建证书,生成创世区块,通道配置交易块,创建通道,节点加入通道,安装链码,实例化链码,链码的调用。这个是完整的生命周期。 一个节点上可以安装多个chaincode,且每个chaincode是一个账本。 同...…
-
jenkins+gitlab
1.相关概念互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:编码 –> 构建 –> 集成 –> 测试 –> 交付 –> 部署持续集成(CI)上面整个流程中最重要的组成部分就是持续集成(Continuous integration,简称CI)。持续集成指的是,频繁地(一天多次)将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。它的好处主要有两个: 快速发现错误。每完成一点更新,就...…
-
手把手教你编译fabric
前言之前一直在使用fabric编译好的镜像,这次想自己去手动编译下fabric的源码,去生成peer,orderer这些二进制文件以及cryptogen这些工具和docker镜像。如果网络没有问题的话,在fabric目录下,使用makefile,直接make all即可。但是做的时候,才知道由于国内网络的原因,很多库都不能使用,造成编译失败。在网络上也没找到很好的贴子,官方的文档,也没有详细的描述,可能是因为简单吧,网络好的时候,直接就可以成功的。现把我踩坑的记录整理如下:1. 环境变量本...…
-
密码学学习总结
本项目是在学习区块链中的密码学的总结。code目录是相关算法的代码的实现,docs目录是相关算法的笔记,里面的图来自我们老师上课的PPT。github主要分为以下几个部分呢:Hash算法部分:区块链中的密码学系列之Hash算法概要(一)区块链中的密码学系列之MD5算法(二)区块链中的密码学系列之SHA256算法(三)对称加密算法:区块链中的密码学之对称密码概述(四)区块链中的密码学之对称密码的分组模式(五)区块链中的密码学系列之对称加密算法DES(六)区块链中的密码学系列之对称加密算法AE...…
-
BasicPaxos的实现
BasicPaxos实现了朴素的Paxos算法。协议过程(来源微信团队)第一阶段AProposer选择一个提议编号n,向所有的Acceptor广播Prepare(n)请求。第一阶段BAcceptor接收到Prepare(n)请求,若提议编号n比之前接收的Prepare请求都要大,则承诺将不会接收提议编号比n小的提议,并且带上之前Accept的提议(必须是Accept之后的,如果只是prepare阶段的提议,那么Acceptor会从中选择一个最大的)中编号小于n的最大的提议,否则不予理会。注...…
-
区块链中的密码学系列之前言密码学(十五)
1. 前言2. 默克尔树默克尔树( 又叫哈希树) 是一种二叉树,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。进一步的,默克尔树可以推广到多叉树的情形。默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。默克尔树的典型应用场景包括: 快速比较大量数据:当两个默克尔树根相同时,则意味着所代表的数据必然相同。 快速定位修改:例如上例中,如果 D1 ...…
-
区块链中的密码学系列之默克尔树(十五)
1. 前言2. 默克尔树默克尔树( 又叫哈希树) 是一种二叉树,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。进一步的,默克尔树可以推广到多叉树的情形。默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。默克尔树的典型应用场景包括: 快速比较大量数据:当两个默克尔树根相同时,则意味着所代表的数据必然相同。 快速定位修改:例如上例中,如果 D1 ...…
-
区块链中的密码学系列之数字证书体系(十四)
1. 前言数字证书用来证明某个公钥是谁的,并且内容是正确的。对于非对称加密算法和数字签名来说,很重要的一点就是公钥的分发。一旦公钥被人替换( 典型的如中间人攻击) ,则整个安全体系将被破坏掉。解决公钥分发的问题。怎么确保一个公钥确实是某个人的原始公钥?这就需要数字证书机制。顾名思义,数字证书就是像一个证书一样,证明信息的合法性。由证书认证机构( Certification Authority,CA) 来签发,权威的 CA 包括 verisign 等。数字证书内容可能包括版本、序列号、签名算...…