孤立交易:比特币节点为什么会暂存缺少父交易的交易

孤立交易是指节点收到了一笔交易,但这笔交易引用的某些输入还不知道从哪里来。节点暂时无法完整验证它,只能先把它放到一个临时区域,等待它依赖的父交易出现。

在比特币中,每笔交易都要花费已有的 UTXO。也就是说,一笔交易的输入必须引用之前某笔交易的输出。

如果节点先收到了"子交易",却还没有收到它引用的"父交易",这笔子交易就会变成孤立交易。


一、从 UTXO 说起

比特币不是账户余额模型,而是 UTXO 模型。

一笔交易通常长这样:

text 复制代码
输入:引用之前的 UTXO
输出:生成新的 UTXO

#mermaid-svg-5ahwYC9AfV5ZqFDa{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5ahwYC9AfV5ZqFDa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5ahwYC9AfV5ZqFDa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5ahwYC9AfV5ZqFDa .error-icon{fill:#552222;}#mermaid-svg-5ahwYC9AfV5ZqFDa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5ahwYC9AfV5ZqFDa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5ahwYC9AfV5ZqFDa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5ahwYC9AfV5ZqFDa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5ahwYC9AfV5ZqFDa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5ahwYC9AfV5ZqFDa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5ahwYC9AfV5ZqFDa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5ahwYC9AfV5ZqFDa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5ahwYC9AfV5ZqFDa .marker.cross{stroke:#333333;}#mermaid-svg-5ahwYC9AfV5ZqFDa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5ahwYC9AfV5ZqFDa p{margin:0;}#mermaid-svg-5ahwYC9AfV5ZqFDa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5ahwYC9AfV5ZqFDa .cluster-label text{fill:#333;}#mermaid-svg-5ahwYC9AfV5ZqFDa .cluster-label span{color:#333;}#mermaid-svg-5ahwYC9AfV5ZqFDa .cluster-label span p{background-color:transparent;}#mermaid-svg-5ahwYC9AfV5ZqFDa .label text,#mermaid-svg-5ahwYC9AfV5ZqFDa span{fill:#333;color:#333;}#mermaid-svg-5ahwYC9AfV5ZqFDa .node rect,#mermaid-svg-5ahwYC9AfV5ZqFDa .node circle,#mermaid-svg-5ahwYC9AfV5ZqFDa .node ellipse,#mermaid-svg-5ahwYC9AfV5ZqFDa .node polygon,#mermaid-svg-5ahwYC9AfV5ZqFDa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5ahwYC9AfV5ZqFDa .rough-node .label text,#mermaid-svg-5ahwYC9AfV5ZqFDa .node .label text,#mermaid-svg-5ahwYC9AfV5ZqFDa .image-shape .label,#mermaid-svg-5ahwYC9AfV5ZqFDa .icon-shape .label{text-anchor:middle;}#mermaid-svg-5ahwYC9AfV5ZqFDa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5ahwYC9AfV5ZqFDa .rough-node .label,#mermaid-svg-5ahwYC9AfV5ZqFDa .node .label,#mermaid-svg-5ahwYC9AfV5ZqFDa .image-shape .label,#mermaid-svg-5ahwYC9AfV5ZqFDa .icon-shape .label{text-align:center;}#mermaid-svg-5ahwYC9AfV5ZqFDa .node.clickable{cursor:pointer;}#mermaid-svg-5ahwYC9AfV5ZqFDa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5ahwYC9AfV5ZqFDa .arrowheadPath{fill:#333333;}#mermaid-svg-5ahwYC9AfV5ZqFDa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5ahwYC9AfV5ZqFDa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5ahwYC9AfV5ZqFDa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5ahwYC9AfV5ZqFDa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5ahwYC9AfV5ZqFDa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5ahwYC9AfV5ZqFDa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5ahwYC9AfV5ZqFDa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5ahwYC9AfV5ZqFDa .cluster text{fill:#333;}#mermaid-svg-5ahwYC9AfV5ZqFDa .cluster span{color:#333;}#mermaid-svg-5ahwYC9AfV5ZqFDa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5ahwYC9AfV5ZqFDa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5ahwYC9AfV5ZqFDa rect.text{fill:none;stroke-width:0;}#mermaid-svg-5ahwYC9AfV5ZqFDa .icon-shape,#mermaid-svg-5ahwYC9AfV5ZqFDa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5ahwYC9AfV5ZqFDa .icon-shape p,#mermaid-svg-5ahwYC9AfV5ZqFDa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5ahwYC9AfV5ZqFDa .icon-shape .label rect,#mermaid-svg-5ahwYC9AfV5ZqFDa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5ahwYC9AfV5ZqFDa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5ahwYC9AfV5ZqFDa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5ahwYC9AfV5ZqFDa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 父交易 Parent Tx
输出 UTXO
子交易 Child Tx
新的输出

子交易必须引用父交易产生的某个输出。只有当节点知道这个父交易,并确认该输出确实存在且未被花费时,才能验证子交易。


二、什么是孤立交易?

孤立交易可以简单定义为:

节点收到的交易引用了未知的输入,因此暂时无法验证。

举个例子:

text 复制代码
交易 B 想花费交易 A 的输出;
但节点还没有见过交易 A;
于是交易 B 对该节点来说就是孤立交易。

#mermaid-svg-dPcEkONGmXpfuSFy{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-dPcEkONGmXpfuSFy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-dPcEkONGmXpfuSFy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-dPcEkONGmXpfuSFy .error-icon{fill:#552222;}#mermaid-svg-dPcEkONGmXpfuSFy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dPcEkONGmXpfuSFy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-dPcEkONGmXpfuSFy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dPcEkONGmXpfuSFy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dPcEkONGmXpfuSFy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-dPcEkONGmXpfuSFy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dPcEkONGmXpfuSFy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dPcEkONGmXpfuSFy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dPcEkONGmXpfuSFy .marker.cross{stroke:#333333;}#mermaid-svg-dPcEkONGmXpfuSFy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dPcEkONGmXpfuSFy p{margin:0;}#mermaid-svg-dPcEkONGmXpfuSFy .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-dPcEkONGmXpfuSFy .cluster-label text{fill:#333;}#mermaid-svg-dPcEkONGmXpfuSFy .cluster-label span{color:#333;}#mermaid-svg-dPcEkONGmXpfuSFy .cluster-label span p{background-color:transparent;}#mermaid-svg-dPcEkONGmXpfuSFy .label text,#mermaid-svg-dPcEkONGmXpfuSFy span{fill:#333;color:#333;}#mermaid-svg-dPcEkONGmXpfuSFy .node rect,#mermaid-svg-dPcEkONGmXpfuSFy .node circle,#mermaid-svg-dPcEkONGmXpfuSFy .node ellipse,#mermaid-svg-dPcEkONGmXpfuSFy .node polygon,#mermaid-svg-dPcEkONGmXpfuSFy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dPcEkONGmXpfuSFy .rough-node .label text,#mermaid-svg-dPcEkONGmXpfuSFy .node .label text,#mermaid-svg-dPcEkONGmXpfuSFy .image-shape .label,#mermaid-svg-dPcEkONGmXpfuSFy .icon-shape .label{text-anchor:middle;}#mermaid-svg-dPcEkONGmXpfuSFy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-dPcEkONGmXpfuSFy .rough-node .label,#mermaid-svg-dPcEkONGmXpfuSFy .node .label,#mermaid-svg-dPcEkONGmXpfuSFy .image-shape .label,#mermaid-svg-dPcEkONGmXpfuSFy .icon-shape .label{text-align:center;}#mermaid-svg-dPcEkONGmXpfuSFy .node.clickable{cursor:pointer;}#mermaid-svg-dPcEkONGmXpfuSFy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-dPcEkONGmXpfuSFy .arrowheadPath{fill:#333333;}#mermaid-svg-dPcEkONGmXpfuSFy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dPcEkONGmXpfuSFy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dPcEkONGmXpfuSFy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dPcEkONGmXpfuSFy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-dPcEkONGmXpfuSFy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dPcEkONGmXpfuSFy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-dPcEkONGmXpfuSFy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dPcEkONGmXpfuSFy .cluster text{fill:#333;}#mermaid-svg-dPcEkONGmXpfuSFy .cluster span{color:#333;}#mermaid-svg-dPcEkONGmXpfuSFy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dPcEkONGmXpfuSFy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-dPcEkONGmXpfuSFy rect.text{fill:none;stroke-width:0;}#mermaid-svg-dPcEkONGmXpfuSFy .icon-shape,#mermaid-svg-dPcEkONGmXpfuSFy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dPcEkONGmXpfuSFy .icon-shape p,#mermaid-svg-dPcEkONGmXpfuSFy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-dPcEkONGmXpfuSFy .icon-shape .label rect,#mermaid-svg-dPcEkONGmXpfuSFy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dPcEkONGmXpfuSFy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-dPcEkONGmXpfuSFy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-dPcEkONGmXpfuSFy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 已知
未知
节点先收到交易 B
交易 B 引用的输入是否已知
正常验证并进入 mempool
暂存为孤立交易
等待父交易 A 到达

注意:孤立交易是相对于某个节点而言的。一个节点认为某笔交易是孤立交易,另一个节点可能已经知道它的父交易,因此不会把它视为孤立。


三、孤立交易为什么会出现?

孤立交易通常不是异常情况,而是 P2P 网络传播顺序不一致导致的自然现象。

常见原因包括:

原因 说明
网络传播顺序不同 子交易先传到某个节点,父交易后传到
交易链较长 钱包或服务连续创建父子交易
节点连接不同 不同节点从不同邻居收到交易
网络延迟 父交易在传播过程中慢了一步
恶意发送 攻击者故意发送缺少父交易的交易消耗资源

比特币网络不是一个中心服务器,而是由许多节点点对点传播交易。不同节点看到交易的顺序可能不同。
节点 3 节点 2 节点 1 钱包 节点 3 节点 2 节点 1 钱包 #mermaid-svg-E2lqNmrqi5kYBTkI{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-E2lqNmrqi5kYBTkI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-E2lqNmrqi5kYBTkI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-E2lqNmrqi5kYBTkI .error-icon{fill:#552222;}#mermaid-svg-E2lqNmrqi5kYBTkI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-E2lqNmrqi5kYBTkI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-E2lqNmrqi5kYBTkI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-E2lqNmrqi5kYBTkI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-E2lqNmrqi5kYBTkI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-E2lqNmrqi5kYBTkI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-E2lqNmrqi5kYBTkI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-E2lqNmrqi5kYBTkI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-E2lqNmrqi5kYBTkI .marker.cross{stroke:#333333;}#mermaid-svg-E2lqNmrqi5kYBTkI svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-E2lqNmrqi5kYBTkI p{margin:0;}#mermaid-svg-E2lqNmrqi5kYBTkI .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-E2lqNmrqi5kYBTkI text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-E2lqNmrqi5kYBTkI .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-E2lqNmrqi5kYBTkI .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-E2lqNmrqi5kYBTkI .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-E2lqNmrqi5kYBTkI .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-E2lqNmrqi5kYBTkI #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-E2lqNmrqi5kYBTkI .sequenceNumber{fill:white;}#mermaid-svg-E2lqNmrqi5kYBTkI #sequencenumber{fill:#333;}#mermaid-svg-E2lqNmrqi5kYBTkI #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-E2lqNmrqi5kYBTkI .messageText{fill:#333;stroke:none;}#mermaid-svg-E2lqNmrqi5kYBTkI .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-E2lqNmrqi5kYBTkI .labelText,#mermaid-svg-E2lqNmrqi5kYBTkI .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-E2lqNmrqi5kYBTkI .loopText,#mermaid-svg-E2lqNmrqi5kYBTkI .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-E2lqNmrqi5kYBTkI .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-E2lqNmrqi5kYBTkI .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-E2lqNmrqi5kYBTkI .noteText,#mermaid-svg-E2lqNmrqi5kYBTkI .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-E2lqNmrqi5kYBTkI .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-E2lqNmrqi5kYBTkI .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-E2lqNmrqi5kYBTkI .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-E2lqNmrqi5kYBTkI .actorPopupMenu{position:absolute;}#mermaid-svg-E2lqNmrqi5kYBTkI .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-E2lqNmrqi5kYBTkI .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-E2lqNmrqi5kYBTkI .actor-man circle,#mermaid-svg-E2lqNmrqi5kYBTkI line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-E2lqNmrqi5kYBTkI :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 广播父交易 A广播子交易 B转发子交易 B未见过父交易 A将 B 视为孤立交易


四、孤立交易和 Mempool 的区别

孤立交易常常容易和 mempool 里的未确认交易混淆。

类型 含义 是否已通过基本验证
Mempool 交易 已验证但尚未被打包进区块的交易
孤立交易 缺少父交易,暂时无法完整验证的交易
已确认交易 已经进入区块的交易
无效交易 违反规则,直接拒绝

mempool 里的交易通常是节点已经确认其输入存在、签名有效、金额正确、没有双花冲突的交易。

孤立交易则不同:它连输入是否存在都无法确定。
#mermaid-svg-SnwlxjhHE0Zs5dtl{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SnwlxjhHE0Zs5dtl .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SnwlxjhHE0Zs5dtl .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SnwlxjhHE0Zs5dtl .error-icon{fill:#552222;}#mermaid-svg-SnwlxjhHE0Zs5dtl .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SnwlxjhHE0Zs5dtl .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SnwlxjhHE0Zs5dtl .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SnwlxjhHE0Zs5dtl .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SnwlxjhHE0Zs5dtl .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SnwlxjhHE0Zs5dtl .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SnwlxjhHE0Zs5dtl .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SnwlxjhHE0Zs5dtl .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SnwlxjhHE0Zs5dtl .marker.cross{stroke:#333333;}#mermaid-svg-SnwlxjhHE0Zs5dtl svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SnwlxjhHE0Zs5dtl p{margin:0;}#mermaid-svg-SnwlxjhHE0Zs5dtl .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SnwlxjhHE0Zs5dtl .cluster-label text{fill:#333;}#mermaid-svg-SnwlxjhHE0Zs5dtl .cluster-label span{color:#333;}#mermaid-svg-SnwlxjhHE0Zs5dtl .cluster-label span p{background-color:transparent;}#mermaid-svg-SnwlxjhHE0Zs5dtl .label text,#mermaid-svg-SnwlxjhHE0Zs5dtl span{fill:#333;color:#333;}#mermaid-svg-SnwlxjhHE0Zs5dtl .node rect,#mermaid-svg-SnwlxjhHE0Zs5dtl .node circle,#mermaid-svg-SnwlxjhHE0Zs5dtl .node ellipse,#mermaid-svg-SnwlxjhHE0Zs5dtl .node polygon,#mermaid-svg-SnwlxjhHE0Zs5dtl .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SnwlxjhHE0Zs5dtl .rough-node .label text,#mermaid-svg-SnwlxjhHE0Zs5dtl .node .label text,#mermaid-svg-SnwlxjhHE0Zs5dtl .image-shape .label,#mermaid-svg-SnwlxjhHE0Zs5dtl .icon-shape .label{text-anchor:middle;}#mermaid-svg-SnwlxjhHE0Zs5dtl .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SnwlxjhHE0Zs5dtl .rough-node .label,#mermaid-svg-SnwlxjhHE0Zs5dtl .node .label,#mermaid-svg-SnwlxjhHE0Zs5dtl .image-shape .label,#mermaid-svg-SnwlxjhHE0Zs5dtl .icon-shape .label{text-align:center;}#mermaid-svg-SnwlxjhHE0Zs5dtl .node.clickable{cursor:pointer;}#mermaid-svg-SnwlxjhHE0Zs5dtl .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SnwlxjhHE0Zs5dtl .arrowheadPath{fill:#333333;}#mermaid-svg-SnwlxjhHE0Zs5dtl .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SnwlxjhHE0Zs5dtl .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SnwlxjhHE0Zs5dtl .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SnwlxjhHE0Zs5dtl .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SnwlxjhHE0Zs5dtl .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SnwlxjhHE0Zs5dtl .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SnwlxjhHE0Zs5dtl .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SnwlxjhHE0Zs5dtl .cluster text{fill:#333;}#mermaid-svg-SnwlxjhHE0Zs5dtl .cluster span{color:#333;}#mermaid-svg-SnwlxjhHE0Zs5dtl div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SnwlxjhHE0Zs5dtl .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SnwlxjhHE0Zs5dtl rect.text{fill:none;stroke-width:0;}#mermaid-svg-SnwlxjhHE0Zs5dtl .icon-shape,#mermaid-svg-SnwlxjhHE0Zs5dtl .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SnwlxjhHE0Zs5dtl .icon-shape p,#mermaid-svg-SnwlxjhHE0Zs5dtl .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SnwlxjhHE0Zs5dtl .icon-shape .label rect,#mermaid-svg-SnwlxjhHE0Zs5dtl .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SnwlxjhHE0Zs5dtl .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SnwlxjhHE0Zs5dtl .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SnwlxjhHE0Zs5dtl :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否



收到新交易
输入是否已知
孤立交易池
交易是否有效
拒绝
Mempool


五、父交易到达后会发生什么?

当节点后来收到孤立交易所依赖的父交易时,会重新检查相关孤立交易。
#mermaid-svg-aDYeNdXsxoR5Cqp2{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .error-icon{fill:#552222;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .marker.cross{stroke:#333333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aDYeNdXsxoR5Cqp2 p{margin:0;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .cluster-label text{fill:#333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .cluster-label span{color:#333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .cluster-label span p{background-color:transparent;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .label text,#mermaid-svg-aDYeNdXsxoR5Cqp2 span{fill:#333;color:#333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .node rect,#mermaid-svg-aDYeNdXsxoR5Cqp2 .node circle,#mermaid-svg-aDYeNdXsxoR5Cqp2 .node ellipse,#mermaid-svg-aDYeNdXsxoR5Cqp2 .node polygon,#mermaid-svg-aDYeNdXsxoR5Cqp2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .rough-node .label text,#mermaid-svg-aDYeNdXsxoR5Cqp2 .node .label text,#mermaid-svg-aDYeNdXsxoR5Cqp2 .image-shape .label,#mermaid-svg-aDYeNdXsxoR5Cqp2 .icon-shape .label{text-anchor:middle;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .rough-node .label,#mermaid-svg-aDYeNdXsxoR5Cqp2 .node .label,#mermaid-svg-aDYeNdXsxoR5Cqp2 .image-shape .label,#mermaid-svg-aDYeNdXsxoR5Cqp2 .icon-shape .label{text-align:center;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .node.clickable{cursor:pointer;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .arrowheadPath{fill:#333333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aDYeNdXsxoR5Cqp2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aDYeNdXsxoR5Cqp2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aDYeNdXsxoR5Cqp2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .cluster text{fill:#333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .cluster span{color:#333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aDYeNdXsxoR5Cqp2 rect.text{fill:none;stroke-width:0;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .icon-shape,#mermaid-svg-aDYeNdXsxoR5Cqp2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .icon-shape p,#mermaid-svg-aDYeNdXsxoR5Cqp2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .icon-shape .label rect,#mermaid-svg-aDYeNdXsxoR5Cqp2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aDYeNdXsxoR5Cqp2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aDYeNdXsxoR5Cqp2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aDYeNdXsxoR5Cqp2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否



收到父交易 A
验证父交易 A
父交易是否有效
丢弃相关孤立交易
查找依赖 A 的孤立交易
重新验证子交易 B
子交易是否有效
拒绝子交易
加入 mempool

如果父交易有效,且子交易也满足所有规则,子交易就可以从孤立池转入 mempool。


六、一个完整例子:连续支付造成孤立交易

假设 Alice 收到 1 BTC 后,立刻把其中 0.4 BTC 转给 Bob。

交易 A:

text 复制代码
外部输入 -> Alice 收到 1 BTC

交易 B:

text 复制代码
花费交易 A 的输出 -> Bob 收到 0.4 BTC,Alice 找零

如果某个节点先收到交易 B,但还没有收到交易 A:
#mermaid-svg-sEkttFrCtNA8RtrZ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sEkttFrCtNA8RtrZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sEkttFrCtNA8RtrZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sEkttFrCtNA8RtrZ .error-icon{fill:#552222;}#mermaid-svg-sEkttFrCtNA8RtrZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sEkttFrCtNA8RtrZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sEkttFrCtNA8RtrZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sEkttFrCtNA8RtrZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sEkttFrCtNA8RtrZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sEkttFrCtNA8RtrZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sEkttFrCtNA8RtrZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sEkttFrCtNA8RtrZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sEkttFrCtNA8RtrZ .marker.cross{stroke:#333333;}#mermaid-svg-sEkttFrCtNA8RtrZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sEkttFrCtNA8RtrZ p{margin:0;}#mermaid-svg-sEkttFrCtNA8RtrZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sEkttFrCtNA8RtrZ .cluster-label text{fill:#333;}#mermaid-svg-sEkttFrCtNA8RtrZ .cluster-label span{color:#333;}#mermaid-svg-sEkttFrCtNA8RtrZ .cluster-label span p{background-color:transparent;}#mermaid-svg-sEkttFrCtNA8RtrZ .label text,#mermaid-svg-sEkttFrCtNA8RtrZ span{fill:#333;color:#333;}#mermaid-svg-sEkttFrCtNA8RtrZ .node rect,#mermaid-svg-sEkttFrCtNA8RtrZ .node circle,#mermaid-svg-sEkttFrCtNA8RtrZ .node ellipse,#mermaid-svg-sEkttFrCtNA8RtrZ .node polygon,#mermaid-svg-sEkttFrCtNA8RtrZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sEkttFrCtNA8RtrZ .rough-node .label text,#mermaid-svg-sEkttFrCtNA8RtrZ .node .label text,#mermaid-svg-sEkttFrCtNA8RtrZ .image-shape .label,#mermaid-svg-sEkttFrCtNA8RtrZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-sEkttFrCtNA8RtrZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-sEkttFrCtNA8RtrZ .rough-node .label,#mermaid-svg-sEkttFrCtNA8RtrZ .node .label,#mermaid-svg-sEkttFrCtNA8RtrZ .image-shape .label,#mermaid-svg-sEkttFrCtNA8RtrZ .icon-shape .label{text-align:center;}#mermaid-svg-sEkttFrCtNA8RtrZ .node.clickable{cursor:pointer;}#mermaid-svg-sEkttFrCtNA8RtrZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-sEkttFrCtNA8RtrZ .arrowheadPath{fill:#333333;}#mermaid-svg-sEkttFrCtNA8RtrZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sEkttFrCtNA8RtrZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sEkttFrCtNA8RtrZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sEkttFrCtNA8RtrZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-sEkttFrCtNA8RtrZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sEkttFrCtNA8RtrZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-sEkttFrCtNA8RtrZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sEkttFrCtNA8RtrZ .cluster text{fill:#333;}#mermaid-svg-sEkttFrCtNA8RtrZ .cluster span{color:#333;}#mermaid-svg-sEkttFrCtNA8RtrZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sEkttFrCtNA8RtrZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-sEkttFrCtNA8RtrZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-sEkttFrCtNA8RtrZ .icon-shape,#mermaid-svg-sEkttFrCtNA8RtrZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sEkttFrCtNA8RtrZ .icon-shape p,#mermaid-svg-sEkttFrCtNA8RtrZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-sEkttFrCtNA8RtrZ .icon-shape .label rect,#mermaid-svg-sEkttFrCtNA8RtrZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sEkttFrCtNA8RtrZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-sEkttFrCtNA8RtrZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-sEkttFrCtNA8RtrZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 交易 A 生成 Alice 的 1 BTC UTXO
交易 B 花费该 UTXO
某节点
先收到交易 B
因为不知道交易 A 所以暂存 B
稍后收到交易 A
重新验证 B
B 进入 mempool

对这个节点来说,交易 B 曾经是孤立交易。


七、孤立交易是不是无效交易?

不一定。

孤立交易的状态是:

text 复制代码
暂时无法验证

而不是:

text 复制代码
已经确定无效

区别如下:

类型 节点判断
有效交易 已知输入存在,规则检查通过
无效交易 明确违反共识或策略规则
孤立交易 缺少依赖数据,暂时无法判断

如果父交易后来出现并有效,孤立交易可能变成有效交易;如果父交易一直不出现,或父交易无效,孤立交易最终会被丢弃。


八、孤立交易池:为什么不能无限保存?

如果节点把所有孤立交易都无限保存,攻击者就可以发送大量缺少父交易的垃圾交易,占用节点内存。

因此节点通常会限制孤立交易池的大小,并设置淘汰策略。
#mermaid-svg-HEt70oGucUUGMupZ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HEt70oGucUUGMupZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HEt70oGucUUGMupZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HEt70oGucUUGMupZ .error-icon{fill:#552222;}#mermaid-svg-HEt70oGucUUGMupZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HEt70oGucUUGMupZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HEt70oGucUUGMupZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HEt70oGucUUGMupZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HEt70oGucUUGMupZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HEt70oGucUUGMupZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HEt70oGucUUGMupZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HEt70oGucUUGMupZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HEt70oGucUUGMupZ .marker.cross{stroke:#333333;}#mermaid-svg-HEt70oGucUUGMupZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HEt70oGucUUGMupZ p{margin:0;}#mermaid-svg-HEt70oGucUUGMupZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-HEt70oGucUUGMupZ .cluster-label text{fill:#333;}#mermaid-svg-HEt70oGucUUGMupZ .cluster-label span{color:#333;}#mermaid-svg-HEt70oGucUUGMupZ .cluster-label span p{background-color:transparent;}#mermaid-svg-HEt70oGucUUGMupZ .label text,#mermaid-svg-HEt70oGucUUGMupZ span{fill:#333;color:#333;}#mermaid-svg-HEt70oGucUUGMupZ .node rect,#mermaid-svg-HEt70oGucUUGMupZ .node circle,#mermaid-svg-HEt70oGucUUGMupZ .node ellipse,#mermaid-svg-HEt70oGucUUGMupZ .node polygon,#mermaid-svg-HEt70oGucUUGMupZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HEt70oGucUUGMupZ .rough-node .label text,#mermaid-svg-HEt70oGucUUGMupZ .node .label text,#mermaid-svg-HEt70oGucUUGMupZ .image-shape .label,#mermaid-svg-HEt70oGucUUGMupZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-HEt70oGucUUGMupZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-HEt70oGucUUGMupZ .rough-node .label,#mermaid-svg-HEt70oGucUUGMupZ .node .label,#mermaid-svg-HEt70oGucUUGMupZ .image-shape .label,#mermaid-svg-HEt70oGucUUGMupZ .icon-shape .label{text-align:center;}#mermaid-svg-HEt70oGucUUGMupZ .node.clickable{cursor:pointer;}#mermaid-svg-HEt70oGucUUGMupZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-HEt70oGucUUGMupZ .arrowheadPath{fill:#333333;}#mermaid-svg-HEt70oGucUUGMupZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HEt70oGucUUGMupZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HEt70oGucUUGMupZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HEt70oGucUUGMupZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-HEt70oGucUUGMupZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HEt70oGucUUGMupZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-HEt70oGucUUGMupZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HEt70oGucUUGMupZ .cluster text{fill:#333;}#mermaid-svg-HEt70oGucUUGMupZ .cluster span{color:#333;}#mermaid-svg-HEt70oGucUUGMupZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HEt70oGucUUGMupZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-HEt70oGucUUGMupZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-HEt70oGucUUGMupZ .icon-shape,#mermaid-svg-HEt70oGucUUGMupZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HEt70oGucUUGMupZ .icon-shape p,#mermaid-svg-HEt70oGucUUGMupZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-HEt70oGucUUGMupZ .icon-shape .label rect,#mermaid-svg-HEt70oGucUUGMupZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HEt70oGucUUGMupZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-HEt70oGucUUGMupZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-HEt70oGucUUGMupZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 未满
已满
收到孤立交易
孤立池是否已满
暂存
淘汰部分旧孤立交易

孤立池是一种折中设计:

目标 做法
提高网络容错 暂存可能稍后变有效的交易
降低重复请求 等父交易到达后直接重试
防止内存攻击 限制数量和生命周期
保持验证严谨 不把未验证交易放入 mempool

九、孤立交易和孤块不是一回事

"孤立交易"和"孤块"名字相似,但不是同一个概念。

概念 英文 含义
孤立交易 Orphan Transaction 缺少父交易,暂时无法验证的交易
孤块 Orphan Block 或 Stale Block 没有成为主链一部分的区块

孤块通常是因为两个矿工几乎同时挖出区块,网络短暂分叉,最后其中一个区块所在分支被更多工作量链超越。
#mermaid-svg-wljNhIx7q66kHqQW{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wljNhIx7q66kHqQW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wljNhIx7q66kHqQW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wljNhIx7q66kHqQW .error-icon{fill:#552222;}#mermaid-svg-wljNhIx7q66kHqQW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wljNhIx7q66kHqQW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wljNhIx7q66kHqQW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wljNhIx7q66kHqQW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wljNhIx7q66kHqQW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wljNhIx7q66kHqQW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wljNhIx7q66kHqQW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wljNhIx7q66kHqQW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wljNhIx7q66kHqQW .marker.cross{stroke:#333333;}#mermaid-svg-wljNhIx7q66kHqQW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wljNhIx7q66kHqQW p{margin:0;}#mermaid-svg-wljNhIx7q66kHqQW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wljNhIx7q66kHqQW .cluster-label text{fill:#333;}#mermaid-svg-wljNhIx7q66kHqQW .cluster-label span{color:#333;}#mermaid-svg-wljNhIx7q66kHqQW .cluster-label span p{background-color:transparent;}#mermaid-svg-wljNhIx7q66kHqQW .label text,#mermaid-svg-wljNhIx7q66kHqQW span{fill:#333;color:#333;}#mermaid-svg-wljNhIx7q66kHqQW .node rect,#mermaid-svg-wljNhIx7q66kHqQW .node circle,#mermaid-svg-wljNhIx7q66kHqQW .node ellipse,#mermaid-svg-wljNhIx7q66kHqQW .node polygon,#mermaid-svg-wljNhIx7q66kHqQW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wljNhIx7q66kHqQW .rough-node .label text,#mermaid-svg-wljNhIx7q66kHqQW .node .label text,#mermaid-svg-wljNhIx7q66kHqQW .image-shape .label,#mermaid-svg-wljNhIx7q66kHqQW .icon-shape .label{text-anchor:middle;}#mermaid-svg-wljNhIx7q66kHqQW .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wljNhIx7q66kHqQW .rough-node .label,#mermaid-svg-wljNhIx7q66kHqQW .node .label,#mermaid-svg-wljNhIx7q66kHqQW .image-shape .label,#mermaid-svg-wljNhIx7q66kHqQW .icon-shape .label{text-align:center;}#mermaid-svg-wljNhIx7q66kHqQW .node.clickable{cursor:pointer;}#mermaid-svg-wljNhIx7q66kHqQW .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wljNhIx7q66kHqQW .arrowheadPath{fill:#333333;}#mermaid-svg-wljNhIx7q66kHqQW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wljNhIx7q66kHqQW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wljNhIx7q66kHqQW .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wljNhIx7q66kHqQW .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wljNhIx7q66kHqQW .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wljNhIx7q66kHqQW .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wljNhIx7q66kHqQW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wljNhIx7q66kHqQW .cluster text{fill:#333;}#mermaid-svg-wljNhIx7q66kHqQW .cluster span{color:#333;}#mermaid-svg-wljNhIx7q66kHqQW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wljNhIx7q66kHqQW .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wljNhIx7q66kHqQW rect.text{fill:none;stroke-width:0;}#mermaid-svg-wljNhIx7q66kHqQW .icon-shape,#mermaid-svg-wljNhIx7q66kHqQW .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wljNhIx7q66kHqQW .icon-shape p,#mermaid-svg-wljNhIx7q66kHqQW .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wljNhIx7q66kHqQW .icon-shape .label rect,#mermaid-svg-wljNhIx7q66kHqQW .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wljNhIx7q66kHqQW .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wljNhIx7q66kHqQW .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wljNhIx7q66kHqQW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 被主链放弃
区块 N
区块 N 加 1 A
区块 N 加 1 B
区块 N 加 2 A
孤块或陈旧块

孤立交易关注的是交易依赖缺失;孤块关注的是区块链分叉竞争。


十、孤立交易和 CPFP 的关系

CPFP 全称是 Child Pays For Parent,意思是"子交易替父交易付费"。

它的思路是:

  1. 父交易手续费较低,矿工不愿打包;
  2. 子交易花费父交易的输出,并支付较高手续费;
  3. 矿工为了获得子交易手续费,会把父交易和子交易一起打包。

#mermaid-svg-UKMpuCDPKpJqL1Qp{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UKMpuCDPKpJqL1Qp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UKMpuCDPKpJqL1Qp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UKMpuCDPKpJqL1Qp .error-icon{fill:#552222;}#mermaid-svg-UKMpuCDPKpJqL1Qp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UKMpuCDPKpJqL1Qp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UKMpuCDPKpJqL1Qp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UKMpuCDPKpJqL1Qp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UKMpuCDPKpJqL1Qp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UKMpuCDPKpJqL1Qp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UKMpuCDPKpJqL1Qp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UKMpuCDPKpJqL1Qp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UKMpuCDPKpJqL1Qp .marker.cross{stroke:#333333;}#mermaid-svg-UKMpuCDPKpJqL1Qp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UKMpuCDPKpJqL1Qp p{margin:0;}#mermaid-svg-UKMpuCDPKpJqL1Qp .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UKMpuCDPKpJqL1Qp .cluster-label text{fill:#333;}#mermaid-svg-UKMpuCDPKpJqL1Qp .cluster-label span{color:#333;}#mermaid-svg-UKMpuCDPKpJqL1Qp .cluster-label span p{background-color:transparent;}#mermaid-svg-UKMpuCDPKpJqL1Qp .label text,#mermaid-svg-UKMpuCDPKpJqL1Qp span{fill:#333;color:#333;}#mermaid-svg-UKMpuCDPKpJqL1Qp .node rect,#mermaid-svg-UKMpuCDPKpJqL1Qp .node circle,#mermaid-svg-UKMpuCDPKpJqL1Qp .node ellipse,#mermaid-svg-UKMpuCDPKpJqL1Qp .node polygon,#mermaid-svg-UKMpuCDPKpJqL1Qp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UKMpuCDPKpJqL1Qp .rough-node .label text,#mermaid-svg-UKMpuCDPKpJqL1Qp .node .label text,#mermaid-svg-UKMpuCDPKpJqL1Qp .image-shape .label,#mermaid-svg-UKMpuCDPKpJqL1Qp .icon-shape .label{text-anchor:middle;}#mermaid-svg-UKMpuCDPKpJqL1Qp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UKMpuCDPKpJqL1Qp .rough-node .label,#mermaid-svg-UKMpuCDPKpJqL1Qp .node .label,#mermaid-svg-UKMpuCDPKpJqL1Qp .image-shape .label,#mermaid-svg-UKMpuCDPKpJqL1Qp .icon-shape .label{text-align:center;}#mermaid-svg-UKMpuCDPKpJqL1Qp .node.clickable{cursor:pointer;}#mermaid-svg-UKMpuCDPKpJqL1Qp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UKMpuCDPKpJqL1Qp .arrowheadPath{fill:#333333;}#mermaid-svg-UKMpuCDPKpJqL1Qp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UKMpuCDPKpJqL1Qp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UKMpuCDPKpJqL1Qp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UKMpuCDPKpJqL1Qp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UKMpuCDPKpJqL1Qp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UKMpuCDPKpJqL1Qp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UKMpuCDPKpJqL1Qp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UKMpuCDPKpJqL1Qp .cluster text{fill:#333;}#mermaid-svg-UKMpuCDPKpJqL1Qp .cluster span{color:#333;}#mermaid-svg-UKMpuCDPKpJqL1Qp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UKMpuCDPKpJqL1Qp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UKMpuCDPKpJqL1Qp rect.text{fill:none;stroke-width:0;}#mermaid-svg-UKMpuCDPKpJqL1Qp .icon-shape,#mermaid-svg-UKMpuCDPKpJqL1Qp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UKMpuCDPKpJqL1Qp .icon-shape p,#mermaid-svg-UKMpuCDPKpJqL1Qp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UKMpuCDPKpJqL1Qp .icon-shape .label rect,#mermaid-svg-UKMpuCDPKpJqL1Qp .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UKMpuCDPKpJqL1Qp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UKMpuCDPKpJqL1Qp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UKMpuCDPKpJqL1Qp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 父交易 低手续费
子交易 高手续费
矿工打包父子交易包

这里的子交易依赖父交易,但它不一定是孤立交易。

如果节点已经知道父交易,子交易可以进入 mempool,并和父交易形成交易包关系。如果节点不知道父交易,子交易才会成为孤立交易。


十一、孤立交易和交易包传播

在复杂交易场景下,交易之间可能形成依赖链:
#mermaid-svg-H0b3eeL6jyBSQwgM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-H0b3eeL6jyBSQwgM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-H0b3eeL6jyBSQwgM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-H0b3eeL6jyBSQwgM .error-icon{fill:#552222;}#mermaid-svg-H0b3eeL6jyBSQwgM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-H0b3eeL6jyBSQwgM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-H0b3eeL6jyBSQwgM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-H0b3eeL6jyBSQwgM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-H0b3eeL6jyBSQwgM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-H0b3eeL6jyBSQwgM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-H0b3eeL6jyBSQwgM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-H0b3eeL6jyBSQwgM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-H0b3eeL6jyBSQwgM .marker.cross{stroke:#333333;}#mermaid-svg-H0b3eeL6jyBSQwgM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-H0b3eeL6jyBSQwgM p{margin:0;}#mermaid-svg-H0b3eeL6jyBSQwgM .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-H0b3eeL6jyBSQwgM .cluster-label text{fill:#333;}#mermaid-svg-H0b3eeL6jyBSQwgM .cluster-label span{color:#333;}#mermaid-svg-H0b3eeL6jyBSQwgM .cluster-label span p{background-color:transparent;}#mermaid-svg-H0b3eeL6jyBSQwgM .label text,#mermaid-svg-H0b3eeL6jyBSQwgM span{fill:#333;color:#333;}#mermaid-svg-H0b3eeL6jyBSQwgM .node rect,#mermaid-svg-H0b3eeL6jyBSQwgM .node circle,#mermaid-svg-H0b3eeL6jyBSQwgM .node ellipse,#mermaid-svg-H0b3eeL6jyBSQwgM .node polygon,#mermaid-svg-H0b3eeL6jyBSQwgM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-H0b3eeL6jyBSQwgM .rough-node .label text,#mermaid-svg-H0b3eeL6jyBSQwgM .node .label text,#mermaid-svg-H0b3eeL6jyBSQwgM .image-shape .label,#mermaid-svg-H0b3eeL6jyBSQwgM .icon-shape .label{text-anchor:middle;}#mermaid-svg-H0b3eeL6jyBSQwgM .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-H0b3eeL6jyBSQwgM .rough-node .label,#mermaid-svg-H0b3eeL6jyBSQwgM .node .label,#mermaid-svg-H0b3eeL6jyBSQwgM .image-shape .label,#mermaid-svg-H0b3eeL6jyBSQwgM .icon-shape .label{text-align:center;}#mermaid-svg-H0b3eeL6jyBSQwgM .node.clickable{cursor:pointer;}#mermaid-svg-H0b3eeL6jyBSQwgM .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-H0b3eeL6jyBSQwgM .arrowheadPath{fill:#333333;}#mermaid-svg-H0b3eeL6jyBSQwgM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-H0b3eeL6jyBSQwgM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-H0b3eeL6jyBSQwgM .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-H0b3eeL6jyBSQwgM .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-H0b3eeL6jyBSQwgM .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-H0b3eeL6jyBSQwgM .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-H0b3eeL6jyBSQwgM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-H0b3eeL6jyBSQwgM .cluster text{fill:#333;}#mermaid-svg-H0b3eeL6jyBSQwgM .cluster span{color:#333;}#mermaid-svg-H0b3eeL6jyBSQwgM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-H0b3eeL6jyBSQwgM .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-H0b3eeL6jyBSQwgM rect.text{fill:none;stroke-width:0;}#mermaid-svg-H0b3eeL6jyBSQwgM .icon-shape,#mermaid-svg-H0b3eeL6jyBSQwgM .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-H0b3eeL6jyBSQwgM .icon-shape p,#mermaid-svg-H0b3eeL6jyBSQwgM .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-H0b3eeL6jyBSQwgM .icon-shape .label rect,#mermaid-svg-H0b3eeL6jyBSQwgM .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-H0b3eeL6jyBSQwgM .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-H0b3eeL6jyBSQwgM .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-H0b3eeL6jyBSQwgM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 交易 A
交易 B
交易 C
交易 D

如果节点先收到 C 或 D,但还不知道 A 或 B,就可能出现孤立交易。

为了让网络更好处理这类情况,比特币生态中一直有关于交易包传播、包验证和手续费聚合的改进讨论。其目标是让节点和矿工更好地理解一组相互依赖交易的整体价值,而不是孤立地看每一笔交易。


十二、节点如何处理孤立交易:简化流程

可以把节点处理交易的逻辑简化为:
#mermaid-svg-aFuBzJDkElrSPblL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aFuBzJDkElrSPblL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aFuBzJDkElrSPblL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aFuBzJDkElrSPblL .error-icon{fill:#552222;}#mermaid-svg-aFuBzJDkElrSPblL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aFuBzJDkElrSPblL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aFuBzJDkElrSPblL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aFuBzJDkElrSPblL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aFuBzJDkElrSPblL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aFuBzJDkElrSPblL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aFuBzJDkElrSPblL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aFuBzJDkElrSPblL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aFuBzJDkElrSPblL .marker.cross{stroke:#333333;}#mermaid-svg-aFuBzJDkElrSPblL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aFuBzJDkElrSPblL p{margin:0;}#mermaid-svg-aFuBzJDkElrSPblL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-aFuBzJDkElrSPblL .cluster-label text{fill:#333;}#mermaid-svg-aFuBzJDkElrSPblL .cluster-label span{color:#333;}#mermaid-svg-aFuBzJDkElrSPblL .cluster-label span p{background-color:transparent;}#mermaid-svg-aFuBzJDkElrSPblL .label text,#mermaid-svg-aFuBzJDkElrSPblL span{fill:#333;color:#333;}#mermaid-svg-aFuBzJDkElrSPblL .node rect,#mermaid-svg-aFuBzJDkElrSPblL .node circle,#mermaid-svg-aFuBzJDkElrSPblL .node ellipse,#mermaid-svg-aFuBzJDkElrSPblL .node polygon,#mermaid-svg-aFuBzJDkElrSPblL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aFuBzJDkElrSPblL .rough-node .label text,#mermaid-svg-aFuBzJDkElrSPblL .node .label text,#mermaid-svg-aFuBzJDkElrSPblL .image-shape .label,#mermaid-svg-aFuBzJDkElrSPblL .icon-shape .label{text-anchor:middle;}#mermaid-svg-aFuBzJDkElrSPblL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aFuBzJDkElrSPblL .rough-node .label,#mermaid-svg-aFuBzJDkElrSPblL .node .label,#mermaid-svg-aFuBzJDkElrSPblL .image-shape .label,#mermaid-svg-aFuBzJDkElrSPblL .icon-shape .label{text-align:center;}#mermaid-svg-aFuBzJDkElrSPblL .node.clickable{cursor:pointer;}#mermaid-svg-aFuBzJDkElrSPblL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aFuBzJDkElrSPblL .arrowheadPath{fill:#333333;}#mermaid-svg-aFuBzJDkElrSPblL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aFuBzJDkElrSPblL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aFuBzJDkElrSPblL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aFuBzJDkElrSPblL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aFuBzJDkElrSPblL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aFuBzJDkElrSPblL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aFuBzJDkElrSPblL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aFuBzJDkElrSPblL .cluster text{fill:#333;}#mermaid-svg-aFuBzJDkElrSPblL .cluster span{color:#333;}#mermaid-svg-aFuBzJDkElrSPblL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aFuBzJDkElrSPblL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aFuBzJDkElrSPblL rect.text{fill:none;stroke-width:0;}#mermaid-svg-aFuBzJDkElrSPblL .icon-shape,#mermaid-svg-aFuBzJDkElrSPblL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aFuBzJDkElrSPblL .icon-shape p,#mermaid-svg-aFuBzJDkElrSPblL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aFuBzJDkElrSPblL .icon-shape .label rect,#mermaid-svg-aFuBzJDkElrSPblL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aFuBzJDkElrSPblL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aFuBzJDkElrSPblL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aFuBzJDkElrSPblL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否







收到交易
格式是否正确
拒绝
输入是否已知
放入孤立交易池
签名和规则是否有效
是否与已有交易双花
加入 mempool 并转发

这个流程体现了一个原则:

节点不会信任一笔缺少依赖的交易,但也不会立刻把它视为永久无效。


十三、孤立交易对用户有什么影响?

普通用户通常不会直接感知孤立交易,因为钱包和节点会自动处理。

但在某些情况下,你可能看到类似现象:

现象 可能原因
钱包显示交易等待中 父交易尚未确认或传播不充分
区块浏览器查不到交易 交易还没被广泛传播
子交易迟迟不确认 父交易手续费低或未被矿工接受
钱包余额暂时异常 钱包正在等待依赖交易状态稳定

如果你遇到这类问题,通常可以检查:

  1. 父交易是否已经广播;
  2. 父交易是否在 mempool 中;
  3. 父交易手续费是否过低;
  4. 子交易是否依赖未确认输出;
  5. 钱包是否连接到可靠节点。

十四、孤立交易的安全意义

孤立交易机制虽然看起来只是网络细节,但它对比特币系统有实际意义:

意义 说明
提升传播容错 允许交易乱序到达
减少误拒绝 不因短暂缺少父交易就永久丢弃
支持复杂交易链 允许父子交易逐步传播
保护节点资源 通过孤立池限制防止滥用
维持验证严谨性 未知输入交易不能进入 mempool

它体现了比特币节点的工程哲学:

可以暂存不完整信息,但不能把未验证信息当成有效账本的一部分。


十五、总结

孤立交易是比特币 P2P 网络中一种常见的临时状态。

它的本质是:

text 复制代码
交易本身可能有效,但节点暂时缺少它依赖的父交易,所以无法完成验证。

它和 mempool 交易不同:

text 复制代码
mempool 交易已经通过基本验证;
孤立交易还没有通过完整验证。

它和孤块也不同:

text 复制代码
孤立交易是交易依赖问题;
孤块是区块链分叉问题。

一句话概括:

孤立交易是比特币节点在面对交易乱序传播时采用的缓冲机制:先暂存、等依赖、再验证,既提高网络容错,又避免未验证

相关推荐
拼尽全力前进11 小时前
加密算法分类
区块链
酿情师18 小时前
比特币系统中是如何解决货币的发行与验证两大问题
区块链·比特币
酿情师18 小时前
SPV:比特币轻客户端如何在不下载完整区块链的情况下验证交易
区块链
liudanzhengxi18 小时前
ImToken智能合约交互避坑全攻略
区块链
拼尽全力前进19 小时前
比特币和以太坊的底层正是使用了 ECC(椭圆曲线加密)算法来生成钱包地址(公钥衍生)和签署交易(私钥签名) 解释说明
区块链
Cvmax21 小时前
接入 Hyperliquid API:从入门到下单
区块链
拼尽全力前进1 天前
区块链知识
区块链
2501_927283581 天前
堆垛机立体库:告别人工翻找与货物堆压
大数据·人工智能·低代码·自动化·区块链
MicroTech20251 天前
微算法科技(NASDAQ :MLGO)推出量子零知识证明共识机制,筑牢区块链安全防线
科技·区块链·零知识证明