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 的微服务论文原文
微服务也是面向服务的,但 SOA 意味着 ESB。试图把复杂度隐藏在一个庞然大物里面。 几个小标题 组件化(Componentization )与服务(Services) 组件化的好处就是可以独立部署和升级,把变化隔离在组件之内。 缺点就是会引入大量的进程间交互,引入系统交叉点,引入性能下降的瓶颈以及失败的交互。 围绕业务功能的组织 不要被 conway 定律左右,按照 feature 组织 team。每个 project 都应该能够独立拥有自己的全部功能–UI、数据库。 产品不是项目 产品要有 ownership,要对这个产品的全部生命周期负责。 强化终端及弱化通道 弱化 ESB 的复杂协议、集中式的框架。强化各个 end,或者是 client。 两种做法:基于 RESTful 通信,像 Unix 过滤器一样。基于轻量级消息总线。 分散治理 这一条的意思大概是,不要考虑用一个技术方案 rule them all。 分散数据管理 就是每个服务拥有自己的数据库。 基础设施自动化 持续集成都全自动化。 容错性设计 监控错误指标,引入断路器和仪表盘。总之提高各种 resilience(...
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...
精通比特币读书笔记
第一章 介绍 传统货币的防止双花,必须在一个中心化(centralized)的清算所(clearing house)里清算。比特币则用全局选举的机制达到共识,来清算双花问题。本质上来讲,就是把一个固定的中心化的清算过程,用选举的方式转化为无数个去中心化的局部清算过程。这就弥补了在比特币之前出现的数字货币的缺点。 clearing 在比特币网络里就被称作 mining 。 钱包是保存地址和管理密钥的地方。不要害怕公开自己的钱包地址。 全节点可以获取全部的交易信息,也因此可以验证交易,发出交易。硬件钱包是运转在专有硬件上的节点(树莓派?),冷钱包就是纸一类的东西。离线钱包是非常安全的。 第二章 比特币原理 比特币最多可以分割到一亿分之一的大小。 Transaction就像是复式记账法账簿上的行,即每行都有输入和输出。 简单来说,每一笔交易包含一个或多个“输入”,输入是针对一个比特币账号的提款(而不是债务)。 这笔交易的另一面,有一个或多个“输出”,被当成信用点数记入到比特币账户中。这些输入和输出的总额(负债和信用)不需要相等。相反,当输出累加略少于输入量时,两者的差额就代表了一笔隐含...