BlockChain¶ Consensus¶ 1. ACID 原则与多阶段算法 1.1. ACID 原则 1.2. 两阶段提交算法(Two-phase Commit,2PC) 1.3. 三阶段提交算法(Three-phase Commit,3PC)。 2. FLP and CAP 2.1. FLP不可能原理 2.2. CAP 原理 2.2.1. 一致性 2.3. CAP应用场景 2.3.1. 弱化一致性 2.3.2. 弱化可用性 2.3.3. 弱化分区容忍性 2.4. 共识算法 2.4.1. 参考如下: 3. Raft 算法 3.1. 一、节点角色 3.1.1. 角色定义 3.1.2. 角色变化 3.2. 二、RPC 调用 3.2.1. AppendEntries RPC 3.2.1.1. 由 Leader 负责调用来复制日志指令;也会用作heartbeat 3.2.1.2. 接收服务器需实现以下处理逻辑: 3.2.2. RequestVote RPC 3.2.2.1. 由候选人负责调用用来征集选票 3.2.2.2. 接收服务器需实现以下处理逻辑: 3.2.3. 所有服务器需遵守的规则: 3.2.3.1. 所有服务器: 3.2.3.2. Follwer(5.2 节): 3.2.3.3. Candidate(5.2 节): 3.2.3.4. Leader: 3.3. 阶段操作 3.3.1. 选举阶段 3.3.2. 日志复制 3.4. 解决问题 3.4.1. 日志冲突解决 3.4.1.1. 一致性检查 3.4.1.2. 不一致, Leader 强制 Follwer 直接复制自己的日志 3.4.2. 选举约束 4. PBFT 算法 4.1. raft和pbft的最大容错节点数 4.2. 算法基本流程 4.2.1. 流程 4.2.2. 三阶段流程 4.2.2.1. 客户端 C 向主节点发起请求,主节点 0 收到客户端请求 4.2.2.2. Pre-prepare 阶段 4.2.2.3. Prepare 阶段 4.2.2.4. Commit 阶段 4.2.3. Reply 4.2.4. ViewChange(视图更改)事件 4.2.5. 高低水位(处理垃圾回收) 4.2.6. 参考如下: 5. POW 算法 5.1. 矿工节点挖矿 5.1.1. 监控网络新的区块 5.1.2. 节点同步区块后,去除交易池中的已成交交易,准备挖下一个块 5.1.3. 收集交易,准备出块 5.1.4. 创币交易 5.1.5. 构建区块头 5.1.6. 构建区块 5.2. POW 算法 6. 寻找一种易于理解的一致性算法(扩展版) 6.1. 摘要 6.2. 1 介绍 6.3. 2 复制状态机 6.4. 3 Paxos 算法的问题 6.5. 4 为了可理解性的设计 6.6. 5 Raft 一致性算法 6.6.1. 5.1 Raft 基础 6.6.2. 5.2 领导人选举 6.6.3. 5.3 日志复制 6.6.4. 5.4 安全性 6.6.4.1. 5.4.1 选举限制 6.6.4.2. 5.4.2 提交之前任期内的日志条目 6.6.4.3. 5.4.3 安全性论证 6.6.5. 5.5 跟随者和候选人崩溃 6.6.6. 5.6 时间和可用性 6.7. 6 集群成员变化 6.8. 7 日志压缩 6.9. 8 客户端交互 6.10. 9 算法实现和评估 6.10.1. 9.1 可理解性 6.10.2. 9.2 正确性 6.10.3. 9.3 性能 6.11. 10 相关工作 6.12. 11 结论 6.13. 12 感谢 6.14. 原文链接 OverView¶ 1. ETH 结构 Wallet¶ 1. 多重签名 2. 加密与签名 2.1. 加密算法 2.2. 椭圆曲线加密(ECC:Elliptic Curve Cryptography) 2.2.1. 1. 原理性质 2.2.2. 数字签名(ECDSA) 2.2.3. 数字签名如何工作 2.2.3.1. 创建签名 2.2.3.2. 验证签名 2.2.3.3. ECDSA数学 2.3. 2. 常用库 2.3.1. JavaScript : 2.3.1.1. Elliptic 2.3.1.2. Eccrypto 2.3.1.3. tiny-secp256k1 2.3.1.4. crypto-browserify 2.3.2. 参考如下: 3. 钱包常用知识 3.1. 钱包登录 3.2. 钱包密码 3.3. 助记词 3.4. KeyStore 3.4.1. Keystore 文件的产生: 3.4.2. 整体流程 3.4.2.1. 在 Keystore 中,是用的是 Scrypt 算法,用一个公式来表示的话,派生的 Key 生成方程为: 3.4.3. 校验Keystore 4. UXTO 4.1. 交易输出(创世交易先有输出) 4.2. 交易输入 4.3. 比特币交易脚本和脚本语言 4.3.1. 脚本构建(锁定与解锁) 4.3.2. P2PKH(Pay-to-Public-Key-Hash) 4.4. 余额计算 5. BIP39、BIP44、BIP32 协议 5.1. 流程 5.2. BIP39 5.2.1. 创建助记词 5.2.2. 助记词生成种子(seed) 5.3. BIP32 5.3.1. 分层路径 5.3.2. 从 Seed 创建 HDWallet 5.3.2.1. 正常衍生子密钥 5.3.2.2. 强化衍生子密钥 5.3.3. 参考如下: 5.4. BIP44 Cosmos¶ 1. Tendermint 1.1. 架构流程 1.1.1. Tendermint工作流 1.2. ABCI接口 Rust¶ 1. 基础语法 1.1. 实例声明 1.1.1. 变量 1.1.2. 常量 1.2. 数据类型 1.2.1. 标量(scalar) 1.2.2. 复合(compound) 1.2.2.1. 元组(tuple) 1.2.2.2. 数组(array) 1.3. 函数调用 1.4. 循环控制 2. 变量与数据 2.1. 所有权 2.1.1. 所有权规则 2.1.2. 内存与分配 2.1.2.1. 变量与数据交互的方式(一):移动 2.1.2.2. 变量与数据交互的方式(二):克隆 2.1.2.3. 只在栈上的数据:拷贝 2.1.2.4. 所有权转移 2.2. 引用 2.2.1. 规则 2.2.2. 实例