硬分叉让同一笔币在两条链上同时存在,而签名并不承诺链身份,于是有了重放攻击。本文以 2017 年 Bitcoin Cash 分叉为例,拆解 SIGHASH_FORKID 如何把链身份写进签名,并给出自托管与托管两种场景下的认领与防重放核对清单。
硬分叉让同一笔币在两条链上同时存在,而签名并不承诺链身份,于是有了重放攻击。本文以 2017 年 Bitcoin Cash 分叉为例,拆解 SIGHASH_FORKID 如何把链身份写进签名,并给出自托管与托管两种场景下的认领与防重放核对清单。
两个以太坊节点建立一条加密连接要跑几步ECIES加密的认证握手,随后所有流量被切成带序号和校验的帧,多路子协议共用一条管道。RLPx的名字来自RLP序列化,规范版本目前是5。
2017年的EIP-706给以太坊节点网络DEVp2p整体装上snappy压缩:握手后在加密前压包、解密后解压,初始同步下载量从三十三吉字节降到十三吉字节。它放弃的方案和它防的解压炸弹同样值得讲。
一条闪电通道开好后默认只在两人之间,想出现在全网图谱里,需要双方用announcement_signatures消息互换两份签名。开不公开在开通道那一刻就由一个标志位埋下伏笔,签名交换与六条确认共同构成最后门槛。
闪电通道合作关闭时,关闭交易的手续费没有默认答案:出资方先按自己的估计报一个价,对方再报自己认可的价,反复互换直到一致才共同签名。消息里还藏着一个min与max的费率区间字段。
非零费通道里,承诺交易的手续费由出资方支付,链上费率变了就靠update_fee消息调整:类型号134、每千字重单位、单向发送、永不关闭只被替换。这条消息还带一个规范明文写下的时序竞态。
闪电开通道流程的最后一站:双方资金签名交换后,各自等资金交易攒够确认,再互发一条带别名别名的channel_ready消息,通道才进入正常运行。这条消息的前身叫funding_locked,改名背后是别名机制的加入。
闪电节点断线重连后不知道错过了哪些通道更新,靠query_channel_range按区块区间盘点邻居、回带时间戳或校验和、缺什么补什么。这套对账机制决定了图谱同步的速度与流量。
隔离见证生效后,每个含见证数据的区块都要在coinbase交易里写一条至少38字节的承诺:六字节前缀加一个双重SHA256哈希。这条承诺把全区块的见证哈希钉进区块里,也顺手给未来软分叉留了扩展位。
闪电网络的消息用TLV结构携带字段,type和length都用BigSize编码:小于253只占一字节,最大也只用九字节,而且必须用最省字的写法。这套从比特币CompactSize借来的整数格式如何支撑协议的向后兼容。