区块链(15):PoS 权重、普通惩罚与可罚没行为
区块链(14):PBFT 的法定集合为何需要换主证明的成员集合由参与方事先确立。PoS 引入以质押及协议规则确定验证者参与资格和权重的机制,并不凭这三个字母给出唯一的排序协议或最终性。攻击者不能靠复制网络身份自动增加权重,却可能控制多个验证者、串谋、长期离线或使用被盗密钥双签;系统分别规定奖励、普通罚分和可罚没行为。 flowchart TD D[存入并成为候选] --> A[激活: 权重按协议计算] A --> V[提议/投票与获得奖励] V -->|短暂离线| P[普通惩罚或漏奖] V -->|可罚没冲突证据| S[slashing 与退出后果] V --> E[自愿退出: 等待协议约束] S --> E 不能把任何未按时出块都叫 slashing;离线处罚、持续不活跃导致的 leak、双签或冲突投票的可罚没条件针对不同故障。处罚是否发生还取决于证据能否及时进入链,应用端仅发现两条签名消息不等于协议已执行罚没。退出与取回资产有生效时间、排队、风险保留期等版本相关规则,不能从“停止运行验证者”直接推断即时无风险。安全性...
区块链(14):PBFT 的法定集合为何需要换主证明
先修区块链(01):两份签名都正确,账本仍会冲突的成员问题,以及旧文分布式系统(33):PBFT、恶意节点与信任边界的认证副本。经典 PBFT 把服务限制在已知成员的确定性复制状态机中:n=3f+1,最多 f 个 Byzantine 副本;正确副本的密钥不泄露,网络可延迟与分区。任意两个大小 2f+1 的证书至少相交 f+1 个成员,交集中至少一个正确副本。这个算术只给同槽不双投提供基础,不是完整的换主安全证明。 flowchart LR C[客户端请求] --> P[primary: 分配 view 和序号] P --> PP[PRE-PREPARE] PP --> PR[PREPARE: 检查是否矛盾提议] PR --> CO[COMMIT: 传播锁定证据] CO --> EX[按序执行并回复] P -->|失联或作恶| VC[换主: 携带已准备证据] VC --> PP 恶意 primary 可对两个副本发不同请求摘要;副本通过准备阶段互核 (view, sequence, digest),不能把普通多数...
区块链(13):沿交易和候选块追踪 Bitcoin 总体架构
把钱包、节点、矿工、矿池和链外支付网络画成同一个“区块链服务”,会在故障时找不到责任主体。沿合成订单的支付意图追踪:钱包选币、检查卖家与找零、签署交易;RPC 接收原始字节;网络与本地交易池处理传播和策略;候选块生产者选择交易;独立全节点按共识规则验证块并更新持久化状态。这个顺序不意味着每次提交都成功走到最后一步。 先修区块链(06):Bitcoin 原始交易如何花费、找零和付费到区块链(12):全节点、裁剪节点与轻客户端查的不是同一件事。钱包可与节点同机,也可以只连接远端 RPC;系统部署关系不改变职责分界。开发 RPC 不应默认开放给公网,钱包密钥不应仅因想查询区块而进入节点进程。 flowchart LR W[钱包: 密钥/描述符、选币/PSBT] -->|原始交易| R[RPC 边界] R --> M[P2P + mempool: 接收策略/临时视图] M --> T[挖矿模板: 候选交易和 coinbase] P[矿池: 协调工作分配及结算] --> K[矿工: 搜索有效 PoW] T --> K K --> ...
区块链(12):全节点、裁剪节点与轻客户端查的不是同一件事
04 篇的 Merkle 包含证明只说明叶与某个根相符。让一个轻客户端把这条证明当作支付完成依据,还要回答:根对应哪个区块、区块头链从哪里来、哪条链被选择、交易是否违反当前规则。全节点从可信软件规则与初始化起点出发,自行接收和验证区块;依赖他人提供头与路径的客户端缩小了下载范围,也扩大了必须明示的信任边界。 先修区块链(11):重组时撤销的不是一个确认数字。完整验证需要按规则执行区块及 UTXO 状态变化;裁剪节点完成验证后可删除部分旧块体以节省本地空间,仍不等于停止验证新块。裁剪对历史重新提供、任意旧交易查询、重新扫描钱包和索引可用性有额外约束;不能承诺“开裁剪就有全部链上索引”。SPV 风格检查头链与包含路径,不运行所有交易脚本,因此其安全含义与完整节点检查不同。 flowchart TD P[网络提供头和块体] --> F[全节点: 规则执行与 chainstate] F --> K[裁剪: 已验部分旧块体可移除] P --> L[轻观察端: 头链与包含路径] L --> Q[条件: 根可信、链选择假设、重组策略] K -->...
区块链(11):重组时撤销的不是一个确认数字
一份订单支付曾在 A 分支入块,后台将它标为“可交付”;恢复连接后节点改选另一条有效分支,支付离开当前规范链。旧区块头与旧交易的历史存在没有消失,但按当前链计算的 UTXO 集合已改变。区块链(10):交易池与 P2P 为什么不能当共识账本提到的传播差异只是起点:真正危险的是应用不撤回旧链衍生出的业务决策。 设共同祖先高度 h,A 后继块消费买家输入并支付卖家,B 后继块把同一输入付给攻击者。节点不能简单把两条分支的 UTXO 结果取并集;必须断开被替换区块,撤销旧输出产生与旧输入消费,再按新分支顺序接入块。若旧交易与新分支冲突,它无法自动重新纳入;若仍有效,可能重新进入池等待未来纳入。具体再接收与否还依赖节点政策。 flowchart LR H[共同祖先 h] --> A[分支 A: 卖家收款] --> A2[订单暂记已付] H --> B[分支 B: 冲突支出] --> B2[累计工作胜出] B2 --> U[撤销 A 的 UTXO 效果并应用 B] U --> X[索引与业务账本撤销/补偿] A2 -.不能只留旧状态....
区块链(10):交易池与 P2P 为什么不能当共识账本
一笔合法但费用不足以符合某节点转发策略的交易,可以不出现在它的交易池里;另一节点可能有不同策略或不同视角。区块有效性与交易池接纳不是同一个谓词。区块链(09):为何最长链未必有最多累计工作选候选链时必须先检查区块有效,不能把“曾出现在某个节点的池里”当作验证证据。 P2P 节点发现、连接、传输清单或请求原始字节以后,本地检查区分语法/共识约束、已经花费的输入、节点政策和依赖未确认祖先的交易。网络可以延迟、隔离、重复或丢弃消息,诚实节点之间的交易池也不要求逐秒一致。广播 RPC 返还交易标识只能说明受请求节点的当时处理结果;其他节点能否接收、矿工是否选入候选块、候选块能否成为规范链,都需要额外检查。 sequenceDiagram participant W as 钱包 participant N1 as 节点 A participant N2 as 节点 B participant M as 候选区块生产者 W->>N1: 原始交易 N1->>N1: 共识前置与本地池策略 N1-->>W: 接收标识或拒绝 N1-...
区块链(09):为何最长链未必有最多累计工作
两条有效历史竞争同一个后继位置时,“哪条包含更多块”不是足够的选择依据。工作量证明先要求头部摘要满足目标,区块还须符合交易和上下文规则;对通过验证的候选链,比较所累积的工作。区块链(08):钱包、描述符与 PSBT 的签名边界 的钱包只负责本地支出,不决定其他节点应当选择哪条历史。 模型假设是共同的合成创世哈希、可验证的前哈希连接和人为定义的“相邻时间间隔为 1 则目标除以 4”规则。Python SHA-256 穷举 nonce 得到两条分支:三块较易分支的 toy 工作量为 2+2+2=6,两块分支的 toy 工作量为 2+8=10。两分支共享第一块,短分支在第二块的目标变严。test_pow.py 还验证篡改目标、父哈希、头摘要、非满足目标的 nonce、时间戳都不能伪造更强候选。 flowchart LR G[合成创世] --> C[共同块: 工作2] C --> A1[慢分支块2: 工作2] --> A2[慢分支块3: 工作2] C --> B1[快分支块2: 工作8] A2 --> RA[总工作6] B1 -->...
区块链(08):钱包、描述符与 PSBT 的签名边界
有地址列表但没有私钥的钱包能观察合成订单收款,不能签署支出。相反,仅有一组私钥却不知道派生路径、脚本类型和扫描范围,恢复者也可能找不到过去的找零。钱包管理密钥、构造支出、跟踪属于自己的输出;全节点验证所有有效规则,钱包既不是全网共识者,也不替对方证明实际交付。 先修区块链(07):Script、时间锁和见证不是一件事的可花费条件。HD(分层确定性)派生把种子、路径、子密钥联系起来;watch-only 允许观察一组预期脚本,却不意味着远程观察端拥有花费权限。描述符则显式表达如何由密钥材料与脚本规则导出被观察的输出,恢复时要核对校验和、来源与派生范围。私钥备份不能放在博客附件,合成临时密钥清除并不等于可恢复钱包演练。 sequenceDiagram participant O as 观察钱包/watch-only participant F as 出资协调端 participant S as 隔离签名方 O->>F: 输出、金额、脚本信息 F->>S: PSBT: 待签交易及输入上下文 S->>S: 核对输入、收款、找零与...
区块链(07):Script、时间锁和见证不是一件事
06 篇解释输入引用哪个输出,尚未回答“拿什么条件花它”。锁定条件与花费时提供的材料一起由验证规则求值;支付给同一控制者的两笔输出也可能使用不同脚本版本。对教学托管订单,不能把业务里的“超时自动退款”写成“到时间节点主动替用户广播”:时间锁只限制过早花费,不提供自动执行器。 先修区块链(06):Bitcoin 原始交易如何花费、找零和付费。脚本验证依赖被花费输出、交易上下文、版本和激活规则;不可信网络节点可以传任意待验字节,但不能让校验方接受一条未满足锁定条件的有效花费。Script 的限制与策略接收又是两层:一种交易即便按共识可进入区块,也可能未满足某节点交易池的中继策略。 flowchart TD O[旧输出: 金额 + 锁定条件] --> V{花费时验证} I[新交易: 引用、序号、解锁材料] --> V H[当前高度/时间与脚本规则] --> V V -->|满足| S[更新未花费集合] V -->|不满足或未到期| X[拒绝当前花费] 绝对锁定时间限制交易最早可纳入的条件,相对锁定时间围绕输入所引用的...
区块链(06):Bitcoin 原始交易如何花费、找零和付费
05 篇用合成 outpoint 完成了 100 = 70 + 29 + 1。在 Bitcoin 中,发送方并非从一个余额格子扣 70;钱包挑选若干尚未消费的输出,以 (txid, vout) 引用它们,再给卖家和自己的找零锁定新输出。原始交易携带版本、输入、输出和锁定时间;输入的解锁材料如何放置还取决于花费的输出类型。这些字节必须由协议序列化规则决定,不能用 Python str(dict) 代替。 先修区块链(05):同一笔支付在 UTXO 与账户账本里的两种状态迁移的守恒和区块链(03):签名证明授权了哪条消息的签名边界。信任模型是用户控制签名密钥,全节点独立检查交易和待花输出;节点看到一笔有效、已广播的交易,不承诺它会进入候选块。 flowchart LR W[钱包: 选币、找零、构造与签名] --> R[RPC: 提交原始字节] R --> N[全节点: 输入是否存在、脚本与守恒] N --> M[交易池: 本地接收策略] M --> B[候选块: 再按共识验证] B --> U[chainstate: 删除旧输出、写入...










