Gopher China Introduction
BlockChain & Microservice
19 July 2018
fengzhide
fengzhide
25 key words 代码简洁
interface与实现无实际关联 垂直&水平组合
goroutine + channel
区块链是用分布式数据库识别、传播和记载信息的智能化对等网络,也称为价值互联网
区块链不是泡沫,但是今天的比特币可能是泡沫,区块链不是金矿,
区块链是打开数字金融的一个金矿的巨大的工具和应用,是一个数据时代,隐私和安全的解决方案。
-- 马云1. hash sha256 2. merkle tree 3. 非对称加密
1. 比特币 2. 以太坊 3. IPFS
1. 区块链(prev hash + merkle root + timestamp + nonce) 2. 账本数据存储
Merkle Tree 可以为二叉树或多叉树 叶子节点记录文件信息,非叶子节点记录其子节点的hash 如图,hash( file1 ) = 1, 2, 3
hash( file2 ) = 1, 2, 3, 2
1. 一致性 2. 正确性 3. 可结束性
1. pow(工作量证明及最长链机制) 2. pos/dpos(股份授权证明机制)
prev hash: 上一个区块的hash值
merkle root: 当前交易树的根hash值
ts: 当前时间戳
nonce: 随机数
blockchain = prev hash + merkle root + ts // 组成当前区块链信息
for:
nonce = rand() // 产生随机数
hashcode = SHA256( blockchain + nonce ) // 进行sha256运算
pattern = "^0{6}" // 匹配前6位都是0
b = pattern.match( hashcode ) // 检查结果是否匹配
if b == true:
succ
nonce 为工作量证明,矿工挖矿大部分算力就是进行这个1. 生成铸币交易,更新Merkle树,获取其根哈希 2. 组装区块头blockchain 3. 根据工作量证明函数,不断进行nonce的哈希碰撞
通过控制pattern来控制难度值,一般按时间来提升难度值
1. 符合工作量证明函数 2. 区块包含的所有交易都合法 3. 最长链机制(防止分叉)
前提是算力均匀 算力浪费,哈希碰撞除了防篡改,是无意义的
难度不按时间来提升,而是与交易币龄成反比(首富账户有可能支配记账权) 随机下个区块选择(洗牌算法得出一个固定的出块代理)
1. 见证人可以生产区块 2. 每个持股的人都可以投票选举见证人,由公民民主共识 3. 见证人个数满足:至少一半的参与投票者相信N已经充分去中心化了 4. 另一种方式是竞选,通过交易费用、区块大小等条件参与
每次代理出块需要2/3通过 降低分叉可能性,网络封区后主动同步出块节点
智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议
1. 执行(执行交易) 2. 验证(验证收到的交易,防篡改)
共识机制的作用:验证区块(链)是否有效 智能合约:执行(交易)/ 验证(交易)
1. 区块链上的用户进行交易 2. 调用智能合约接口验证交易 3. 验证成功后发布到其他节点
1. 为了确保智能合约不被恶意破坏,每次交易会收取一定手续费(按照交易笔数、交易数据的字节数收取费用) 2. 用户通过私钥自证身份,调用合约
1. 软分叉,新节点会拒绝某些交易记账,旧节点认可,当新节点占多数时,区块按照新规则,旧节点由于算力少小,短链被抛弃。软分叉不会产生永久性分叉 2. 硬分叉,新区块只有新节点认可,旧节点不会认为新区块合法,因此会产生两条链
压榨单台机器的最高性能,但不是分布式集群
达到51%算力,就有可能修改账本、阻止别人挖矿
无法真正的匿名、ip地址
支持目前所有的网络层传输协议
分布式哈希寻址
1. 交换have_list和want_list 2. 获取数据:产生债务;发送数据:偿还债务(避免‘自私’节点) 3. 节点间交换账本防止恶意节点
1. 每个节点都存储信息,但最大256k 2. 根据hash可以找到文件的其他节点位置 3. merkle tree可以防篡改 4. 重复内容只会存1份(类似git的hash原理) 5. 类似git,支持version地存储
XOR(异或运算),寻找距离最近的节点 如:hash 110 若本地无法确认最终地址,通过与目标最近的节点继续进行路由寻址
每个节点都存储信息,但最大256k 支持version地存储(类似git)
DLTag -> 标记日志的功能(sauth/notify) TraceId/SpanId -> 跨进程requestid
1. 流量标识,对压测流量 req header 添加 hitcode 2. 快cache+影子表 3. 写agent模拟操作,系统黑盒(非函数式状态,司机、乘客、天气等)
评估线上压力,适度压测
fengzhide