重读 Martin Fowler 的微服务论文原文
微服务也是面向服务的,但 SOA 意味着 ESB。试图把复杂度隐藏在一个庞然大物里面。 几个小标题 组件化(Componentization )与服务(Services)组件化的好处就是可以独立部署和升级,把变化隔离在组件之内。 缺点就是会引入大量的进程间交互,引入系统交叉点,引入性能下降的瓶颈以及失败的交互。 围绕业务功能的组织不要被 conway 定律左右,按照 feature 组织 team。每个 project 都应该能够独立拥有自己的全部功能—UI、数据库。 产品不是项目产品要有 ownership,要对这个产品的全部生命周期负责。 强化终端及弱化通道弱化 ESB 的复杂协议、集中式的框架。强化各个 end,或者是 client。 两种做法:基于 RESTful 通信,像 Unix 过滤器一样。基于轻量级消息总线。 分散治理这一条的意思大概是,不要考虑用一个技术方案 rule them all。 分散数据管理就是每个服务拥有自己的数据库。 基础设施自动化持续集成都全自动化。 容错性设计监控错误指标,引入断路器和仪表盘。总之提高各种...
Hyperledger Fabric MSP 相关问题
Fabric要求所有的 paticipant 有相关的 identity。identity是由x509证书认证的(大致上也就是各种signcert),每个 identity 有自己的 principal,包含了大量的 property,包括但不仅限于组织名。 PKI 生成 identity,而 MSP 表达治理组织的规则,包括哪些 identity 属于哪些组织,且参与网络中。 PKIPKI 是一种标准,一般由四个元素组成: 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...
Hyperledger Fabric 的配置文件解读
Crypto Generatorx.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:...
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 anotheraccount (which might be...
精通比特币读书笔记
第一章 介绍传统货币的防止双花,必须在一个中心化(centralized)的清算所(clearing house)里清算。比特币则用全局选举的机制达到共识,来清算双花问题。本质上来讲,就是把一个固定的中心化的清算过程,用选举的方式转化为无数个去中心化的局部清算过程。这就弥补了在比特币之前出现的数字货币的缺点。 clearing 在比特币网络里就被称作 mining 。 钱包是保存地址和管理密钥的地方。不要害怕公开自己的钱包地址。 全节点可以获取全部的交易信息,也因此可以验证交易,发出交易。硬件钱包是运转在专有硬件上的节点(树莓派?),冷钱包就是纸一类的东西。离线钱包是非常安全的。 第二章 比特币原理比特币最多可以分割到一亿分之一的大小。 Transaction就像是复式记账法账簿上的行,即每行都有输入和输出。 简单来说,每一笔交易包含一个或多个“输入”,输入是针对一个比特币账号的提款(而不是债务)。...
重放攻击问题
比特币靠不同的地址前缀可以规避重放攻击问题。以太坊可以靠 EIP155 钱包来规避重放攻击问题。 何为重放攻击问题? 一个区块链有若干个测试网络。如果一套公私钥可以在不同的网络上通用,则可以恶意地把在测试网络中出现的 transaction 播放到主网上。如果在测试网络上有人从账户 A 转了一笔钱到账户 B,而账户 B 是一个傻瓜测试账户,私钥是由类似123456之类的种子生成的话。那么只要账户 A 在主网中的余额大于这笔钱,心怀恶意者就能把主网中 A 的钱财转走,从主网中的账户 B 里把钱取出来。即使心怀恶意者没有 B 的取款方法,也能让账户 A 蒙受资金损失。 所以不要跨网使用相同的公私钥对。
UTXO 与 account balance 模型
UTXO 简介 UTXO 的全称的 unspent transaction output,就是没有被人用过的可用资金。 这个模型是比特币首创的,被其他货币所模仿。以太坊天然的模型不是 UTXO 而是 account balance。 UTXO 必须配平,UTXO 的输入者必须上一个 UTXO 的输出者: 这就把一个一个账户型数据库,转成了链式的交易数据库,交易要靠 merge 整个数据库的相关节点。 UTXO 的好处是: 更加好的隐私模型 更加强的并发范型(因为不会触发间隙锁了吗?) ZCash 的 UTXO ZCash 也一样有 UTXO,但它的 UTXO 是加密过的,而且每个矿工那里还有一个专门的 UTXO 作废数据库。具体情况见《不是程序员也能看懂的ZCash零知识证明》。 以太坊中的 account 模型 以太坊没有使用 UTXO 模型,而使用 account balance 模型,他们把 account...
重新学习 Solidity
以下内容还是从 Solidity 文档里摘出来的。 智能合约入门/介绍第一个基本的例子12345678910111213pragma solidity ^0.4.0;contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public constant returns (uint) { return storedData; }} 一个 contract 可以被认为是一个类型。默认的 unint 就是256位的。storedData 可以被认为是 state variable,状态变量。在 Solidity 的概念里面,这个东西可以被认为是数据库里面的一个槽,可以被函数查询和修改。注意看它不是 public 的,所以没有合成方法。 访问状态变量不需要用 this前缀(在什么 scope...