進階
SCID Alias 短通道ID別名
了解閃電網路的 SCID 別名機制,如何提升隱私保護和支援零確認通道。
8 分鐘
什麼是 SCID?
短通道 ID(Short Channel ID,SCID)是閃電網路中識別通道的 8 字節標識符。 傳統上,SCID 直接編碼了通道注資交易在區塊鏈上的位置(區塊高度、交易索引、輸出索引), 這會洩露通道的鏈上資訊。SCID 別名允許使用任意值作為通道識別符,提升隱私。
功能位 46/47: option_scid_alias 允許節點協商使用別名而非真實的區塊位置。
傳統 SCID 結構
傳統 SCID 格式(8 字節 = 64 位): ┌─────────────────┬─────────────────┬─────────────────┐ │ Block Height │ TX Index │ Output Index │ │ (24 bits) │ (24 bits) │ (16 bits) │ └─────────────────┴─────────────────┴─────────────────┘ 範例:SCID 700000x1234x0 • Block Height: 700000 • TX Index: 1234 • Output Index: 0 • Hex: 0x000AB2800004D200 隱私問題: 1. 任何人都可以從 SCID 找到注資交易 2. 可以確定通道容量 3. 可以追蹤節點的鏈上活動 4. 路由節點可以關聯支付和通道 5. 私有通道的 SCID 也會洩露資訊
SCID 別名
SCID 別名機制: 別名生成: • 節點可以為通道分配任意 SCID 別名 • 隨機生成 8 字節值 • 確保唯一性(本地不衝突) • 無需對應真實區塊位置 範例: 真實 SCID: 700000x1234x0 別名 SCID: 0x0123456789ABCDEF 使用場景: 1. 私有通道 發票路由提示使用別名,隱藏真實的注資交易位置 2. 零確認通道 在確認前就有可用的 SCID,不需等待區塊確認 3. Splicing 地址變更後保持相同識別符,通道容量變更不影響路由
協商流程
SCID 別名協商: 開通道時的協商: Alice Bob | | |---- open_channel ----------------->| | option_scid_alias: 1 | Alice 支援別名 | | |<--- accept_channel ----------------| | option_scid_alias: 1 | Bob 也支援 | | | [通道開設完成] | | | |<--- channel_ready -----------------| | scid: real, alias: 0xABCD... | Bob 分配別名 | | |---- channel_ready ---------------->| | scid: real, alias: 0x1234... | Alice 分配別名 channel_ready 訊息擴展: • channel_id: 32 bytes • next_per_commitment_point: 33 bytes • short_channel_id: 8 bytes (optional) • alias: 8 bytes
與零確認通道
零確認通道需要 SCID 別名: 問題: • 傳統 SCID 編碼區塊位置 • 零確認通道的注資交易還未進入區塊 • 無法計算真實 SCID,通道無法被識別和使用 解決方案: 1. 雙方生成並交換 SCID 別名 2. 使用別名進行支付路由 3. 確認後可繼續用別名或切換到真實 SCID 流程: 注資交易廣播 -> 交換別名 -> 立即路由 -> 背景等待確認 配合 option_zeroconf: ┌─────────────────────────────────────────────────────┐ │ option_zeroconf (50/51) + option_scid_alias (46/47) │ │ │ │ • zeroconf: 允許未確認通道 │ │ • scid_alias: 提供可用的通道識別符 │ └─────────────────────────────────────────────────────┘
隱私保護
私有通道隱私
私有通道不公告到網路,但發票需要提供路由提示。 使用別名可以避免在發票中洩露注資交易位置。
UTXO 關聯
真實 SCID 可以關聯到鏈上 UTXO。別名打破這種關聯, 增加鏈上分析難度。
容量隱藏
無法從別名推斷通道容量。觀察者無法確定通道的資金規模。
節點關聯
別名減少了將閃電網路活動與特定鏈上地址關聯的可能性。
發票中的使用
發票路由提示中的 SCID 別名: 私有通道發票 (lnbc10u1p...) 路由提示(r tag): • pubkey: 對方節點公鑰 • short_channel_id: 別名(不是真實 SCID) • fee_base_msat: 基礎費用 • fee_proportional_millionths: 比例費用 • cltv_expiry_delta: 時間鎖差值 發送者流程: 1. 解碼發票獲取路由提示 2. 使用別名 SCID 構建洋蔥路由 3. 接收節點識別別名並轉發 接收節點處理: 1. 收到使用別名的 HTLC 2. 查找本地別名對應表 3. 找到對應的通道 4. 正常處理 HTLC
配置與使用
啟用 SCID 別名: LND(lnd.conf): [protocol] # 啟用 SCID 別名支援(默認啟用) protocol.option-scid-alias=true # 零確認通道也需要 protocol.zero-conf=true # 查看通道別名 lncli listchannels | jq '.channels[].alias_scids' CLN(config): # 預設支援 SCID 別名 # 無需額外配置 # 查看通道 lightning-cli listpeerchannels 開設使用別名的通道: # LND lncli openchannel --node_key <pubkey> \ --local_amt 1000000 \ --private \ # 私有通道 --zero_conf # 零確認(需要別名) # CLN lightning-cli fundchannel <node_id> 1000000sat \ announce=false
注意: 公開通道仍然使用真實 SCID 進行網路公告(channel_announcement), 因為其他節點需要驗證通道的鏈上存在。別名主要用於私有通道和零確認通道。
相關資源
下一步: 了解 原子多路徑支付(AMP) 的高級多路徑機制。
已複製連結