Fabric 文档拾遗
基本名词解释 ledger 账本上一系列由事务驱动的状态迁移的记录。状态迁移是链码调用(调用即事务)的结果。这些记录是不可修改顺序的,因此也上抗篡改的。 每个channel有一个账本,但恐怕不只一个账本。 理论上账本是由产生它的链码的命名空间隔离开来的,不能直接被其他链码访问到。 chain 由包含一系列 transaction 的 block 通过hash-link(由散列值作为前驱指针的一种连接方式)组成的数据结构。 state database 记录各种 key 的 latest value。可以被认为上chain的indexed view,可以随时被从链上重建出来。 所以 Fabric 自己就有双层数据结构。 读写集语义 读集和写集搞不好是同一个事务里的数据结构(待查)。 12345678910111213<TxReadWriteSet> <NsReadWriteSet name="chaincode1"> <read-set> <read key="K1", versio...
Fabric 中的 peer
每个 peer 可以拥有若干个 chaincode,也可以拥有若干个 ledger,但并不是一开始就拥有的,而是逐渐被创建出来的。chaincode 一定会定义一个 asset,也就生成了 ledger。一个peer 可以拥有 ledger 而无 chaincode,可见也并不是必然由 chaincode 生成 ledger。比如同一个组织里面多个 peer,只有一个安装了 chaincode(只有这个 peer 可以当作 endorser),其它的peer一样可以拿到 ledger。 peer 的流程架构图大致上是: 为了预防有 peer 的数据不一致,有可能需要 client application 向多个 peer 进行查询。 channel 可以认为是一系列 peers 的逻辑组合,orderer 可以被认为是跨channel的。同一个 channel 的 peers 共享完全一样的账本。 不同的组织完全可以基于同样的账本copy,产生不同的 application。 Fabric 有 identity,identity 有 principal。 transactio...
Hyperledger Fabric 各个容器内环境
peer 容器 /opt/gopath/src/github.com/hyperledger/fabric/peer 虽然是WORKING_DIR,什么都没有。这个目录是/bin/bash永远的进入路径,不管在哪个目录退出,重新进入还是会进入这个路径。 /etc/hyperledger/fabric 12345678910# 原生的三个配置文件。所以修改peer的行为要通过环境变量来修改,让docker用COMMAND启动peer进程的时候吸收这几个配置文件和环境变量core.yaml# 这两个文件似乎不关peer的事情configtx.yamlorderer.yaml# 这两个文件夹要被外部的数据卷映射修改过来,实际上只能依赖于外部# 这个文件夹本质上还是 core.yaml 默认的 mspConfigPath 的值msptls /var/hyperledger/production 这个文件夹存放unix系统里面的动态程序数据。 123456# 它下面有打包好的CIP(chaincode install package)格式的链码 chaincodes/mycc.1.0。ch...
一个滚动重启的状态保存问题
很多时候滚动重启,都会导致状态丢失。比较好的设计方法是把服务本身设计成无状态的,然后在上游的服务上做好 failover,然后增加 standby server,让 sticky 数据 transmit 到 standby 机器上,让 request 失败以后可以自己由上游重传到 standby server。然后就可以滚动重启了。 这大部分场景下还要考虑幂等的问题。 这就看得出热配置热替换的重要性了。在大多数情况下,除了发布新的 feature 升级以外,都应该尽量用热配置来避免重启。
重读 Martin Fowler 的微服务论文原文
背景 Martin Fowler 和 James Lewis 于 2014 年发表的 “Microservices: a definition of this new architectural term” 是微服务架构领域最具影响力的文章之一。这篇文章并非提出微服务的概念(Netflix、Amazon 等公司早已在实践),而是对这一架构风格进行了系统性的定义和特征总结。 文章的核心论点是:微服务架构是一种将应用程序构建为 一组小型服务 的方法,每个服务运行在自己的进程中,通过轻量级机制(通常是 HTTP RESTful API)进行通信。 微服务也是面向服务的(Service-Oriented),但与传统 SOA 有本质区别。传统 SOA 倾向于将集成复杂度集中在 ESB(Enterprise Service Bus)中,试图用一个庞然大物来隐藏分布式系统的复杂性;而微服务则主张将智能放在端点(endpoint),保持通信管道的简单。 以下是对原文九个核心特征的重读和展开。 组件化(Componentization)与服务(Services) Fowler 在文中区分了两种组件...
Hyperledger Fabric MSP 相关问题
Fabric要求所有的 paticipant 有相关的 identity。identity是由x509证书认证的(大致上也就是各种signcert),每个 identity 有自己的 principal,包含了大量的 property,包括但不仅限于组织名。 PKI 生成 identity,而 MSP 表达治理组织的规则,包括哪些 identity 属于哪些组织,且参与网络中。 PKI PKI 是一种标准,一般由四个元素组成: Digital Certificates Public and Private Keys Certificate Authorities Certificate Revocation Lists 数字证书 一个持有一个组织的系列属性的数字文件。常见的数字证书是X509标准的,很像一个国家发放的身份证(有名称,省份,国家,还有组织的名字)。 For example, John Doe of Accounting division in FOO Corporation in Detroit, Michigan might have a digital c...
Hyperledger Fabric 的配置文件解读
Crypto Generator x.509 相关的文件主要包含两个东西:证书和 signing keys。 cryptogen 使用的配置文件是crypto-config.yaml。 x.509 的根证书是ca-cert。它把 peers 和 orderers 绑定到一个 Org 里面。在这个网络里,每个组织都有签发自己的证书的能力,可以用这个 ca 来签发其他证书给节点和 client。 签发交易用的是私钥(keystore),验证交易用的是公钥(signcerts)。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293# Copyright IBM Corp. All Rights Reserved.## SPDX-License-Identifier: Apache-2.0...
X.509证书问题
X.509证书里有一段属性主题,大概是这样: 12 C=US, ST=Maryland, L=Pasadena, O=Brent Baccala, OU=FreeSoft,CN=www.freesoft.org/emailAddress=baccala@freesoft.org 这些 attribute 的含义是: country (countryName, C), organization (organizationName, O), organizational unit (organizationalUnitName, OU), distinguished name qualifier (dnQualifier), state or province name (stateOrProvinceName, ST), common name (commonName, CN) and serial number (serialNumber). locality (locality, L), title (title), surname (surName, SN), given...
谢灵点在以太坊中的应用
Focal point 或者 Schelling point 是博弈论中的一个概念,指的是人们在缺乏沟通的情况下,倾向于使用的解。因为人们拥有一样的常识,所以这些解对他们而言显得特殊、自然或者与他们有关系。这个观点最早是由美国诺贝尔经济学奖得主Thomas Schelling提出的。 警察系统在这几个世纪中已经不自觉地使用这个理论很久了。他们经常把犯人分开审问某件事的具体细节,囚犯想要说得一致以得到释放,唯一的可能就是说真话。 在以太坊中,也有利用谢灵点理论的变种谢灵币来达到一个公允的 data feeds 的实践,其简要的工作过程大致是: 所有人在第一个区块提交一个 value hash。 所有人在接下来的一个区块提交 value。 对 value 进行排序,在25分位和75分位之间的数给予奖励。 这种机制可以做到一个类似预言机的机制:所有人都会尽量提供一个真实值,比如某地的温度,某天的物价。 这个机制要正确运行,防女巫攻击(sybil attack ),要运用 PoW 和 PoS 机制才行。当然,这始终不是百分之百可靠的,还是可能有串谋机制。
以太坊中的事务和消息调用
综合What is the difference between a “call” , “message call” and a “message”下的回复,得出此文。 Call 是一个在不同的上下文下含义很混乱的词汇。 Message 是带有数据载荷或价值,在合约到合约之间传递的东西(合约可能有独立账户,也可能没有!)。Message 到达目标账户后,如果目标账户含有代码,则目标账户会产生状态迁移,这时候 Message 就产生了 Message Call。Message 不会因为挖矿延迟,他们本身就是 transaction 执行的一部分。 Transaction 一定是由外部账户签署的,账户到账户之间发送的 Message ,要么它产生了一个合约,要么它是一个 Message Call,而且它可以激发合约之间越来越多的 Message Call。 再引用 Solidity 官方文档原文: A transaction is a message that is sent from one account to another account (which might be t...















