为什么一个区块不能装无限交易?见证隔离(SegWit)原理
见证隔离(SegWit)是比特币2017年的一次大升级,它的核心目标就是解决“签名数据占空间太大,导致区块塞不下更多交易”的问题,升级后区块能装的交易笔数从平均2000-2500笔提升到3000-4500笔,甚至更多,费用也降了很多。

升级前签名为什么占大头
一笔比特币转账交易长这样(简化版),版本号、输入(引用之前的UTXO +解锁脚本ScriptSig,里面包含签名)、输出(收款地址+金额)、锁定时间。
签名(witness数据)通常占交易总大小的30-70%,因为签名是证明“我有权花这笔钱”的关键证据,多签交易签名更多,占得更夸张。
问题
签名算进交易总大小,区块限重只有1 MB(1,000,000字节),签名占空间多,能装的交易就少。
一笔普通转账
1、主体(版本+输入输出+锁定时间):250字节
2、签名数据:200字节
3、总大小:450字节
4、1 MB区块最多装约2200笔这种交易。
升级后,怎么“隔离”签名
SegWit把签名从交易主体里挪走,放到交易末尾一个新字段(witness section),然后用一个新规则“打折”计算签名的大小。
具体步骤
1、加一个标记:交易开头加2字节flag(固定值0001),告诉节点“这是SegWit交易,签名在后面”。
2、主体部分(base transaction):去掉签名,只剩版本号、输入(但输入的ScriptSig变空或只剩占位符)、输出、锁定时间,大小还是约250字节。
3、witness部分:签名数据挪到末尾,一个输入对应一个witness子字段,大小还是200字节。
4、总真实大小:250 + 200 +几字节flag ≈ 460字节(比原来450字节还多一点!)
真实数据没省,甚至略增,磁盘、网络传输大小基本不变。
省空间的秘密!引入“重量单位”(Weight Units, WU)
升级后比特币不再用原来的“字节”限重,而是用4,000,000 WU作为区块新上限。
WU的计算规则超级关键
1、主体数据(版本、输入输出等):1字节 = 4 WU(原价,不打折)
2、witness数据(签名):1字节 = 1 WU(只算1/4重量,打75%折扣)
例子计算
1、主体250字节 × 4 WU/字节 =1000 WU
2、witness 200字节 × 1 WU/字节 =200 WU
3、总重量 =1200 WU(相当于300 vBytes,vByte是虚拟字节,1 vByte = 4 WU)
对比升级前
1、原来450字节全算450字节(相当于1800 WU,如果按老规则)。
2、现在总重量只1200 WU,省了33%重量!
结果:同一个4,000,000 WU的区块,能多装33%的这种交易!从2200笔变成约3000笔,甚至更多。
用最形象的比喻彻底搞懂
把区块想象成飞机货舱,限重4000吨(4M WU)。
1、升级前:每件行李(交易)包括衣服(主体)100kg +鞋子(签名)100kg,总重200kg,货舱能装20,000件。
2、升级后:鞋子(签名)被挪到“经济舱”,只算25kg(1/4重量),衣服还是100kg,总重125kg,现在能装32,000件!
行李真实重量!(磁盘、网络传输大小)还是200kg左右(甚至多几kg),但飞机限重规则改了,鞋子只算1/4重,故而能带更多行李。
区块头怎么保证签名没丢?
1、区块头的Merkle Root只承诺“主体交易”(不含签名)。
2、但矿工在coinbase交易(区块里的第一笔)加一个witness commitment(签名数据的Merkle根哈希),再让签名也上链、可验证。
3、节点验证时,先查主体,再查witness commitment确认签名完整。
SegWit的“隔离”真相
1、隔离:把签名从交易主体挪到末尾witness字段。
2、省空间:不是删数据,而是给签名打折(1字节只算1 WU),让区块在4M WU限制下装更多交易。
3、真实大小:基本没省,甚至略增。
4、本质:用“虚拟重量”规则,让签名从“贵重行李”变成“廉价行李”,飞机就能多载货。
这就是SegWit为什么让比特币主链从3-4 TPS提升到7-10 TPS,费用大幅下降,也为闪电网络铺路。






