跳到主要內容

術語表

本快速術語表包含許多與比特幣和閃電網路相關的術語。這些術語在整本書中都有使用,請將此頁面加入書籤以便快速參考。

地址(address)

比特幣地址緊湊地編碼了向接收者付款所需的資訊。現代地址由以 bc1 開頭的字母和數字組成,看起來像 bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4。地址是接收者鎖定腳本的簡寫,發送者可以用它來簽署資金給接收者。大多數地址要麼代表接收者的公鑰,要麼代表某種定義更複雜消費條件的腳本。前面的範例是一個 bech32 地址,將資金鎖定到公鑰雜湊的見證程式(參見 Pay-to-Witness-Public-Key-Hash)。還有以 1 或 3 開頭的較舊地址格式,使用 Base58Check 地址編碼來表示公鑰雜湊或腳本雜湊。

非對稱加密系統(asymmetric cryptographic system)

非對稱加密或公鑰加密是一種使用金鑰對的加密系統:公鑰可以廣泛傳播,而私鑰只有擁有者知道。 這類金鑰的生成依賴於基於數學問題的加密演算法,以產生單向容易計算但反向非常難以解決的函數。 有效的安全性只需要保持私鑰的私密性;公鑰可以公開分發而不會影響安全性。

自動導航(autopilot)

自動導航是閃電網路節點的推薦引擎,使用閃電網路拓撲的統計資料來建議節點應該與哪些節點開啟通道。 根據自動導航的實作,還可能推薦通道容量。 自動導航不是閃電網路協定的一部分。

餘額(balance)

支付通道的餘額是屬於每個通道夥伴的比特幣數量。 例如,Alice 可以與 Bob 開啟一個價值 1 BTC 的通道。 那麼通道餘額就是 Alice 1 BTC,Bob 0 BTC。 當使用者進行交易時,通道餘額會更新。 例如,如果 Alice 向 Bob 發送 0.2 BTC,那麼餘額現在是 Alice 0.8 BTC,Bob 0.2 BTC。 當通道關閉時,通道中的比特幣將根據承諾交易中編碼的最新餘額在兩個通道夥伴之間分配。 在閃電網路中,發送和接收支付的能力受到通道餘額的限制。 參見 容量

bech32

bech32 指的是一種通用的帶校驗和的 base32 編碼格式,具有強大的錯誤檢測保證。雖然 bech32 最初是為原生 SegWit 輸出的地址格式而開發的(BIP-173),但它也用於編碼閃電發票(BOLT #11)。原生 SegWit 版本 0 輸出(P2WPKH 和 P2WSH)使用 bech32,而更高版本的原生 SegWit 輸出(例如 Pay-to-Taproot 或 P2TR)使用改進的變體 bech32m(BIP-350)。bech32m 地址有時被稱為「bc1」地址,反映了這類地址的前綴。原生 SegWit 輸出比舊地址更節省區塊空間,因此可能為這類地址的擁有者減少交易費用。

比特幣改進提案(Bitcoin Improvement Proposal,BIP)

比特幣社群成員提交的改進比特幣的提案。例如,BIP-21 是一個改進比特幣統一資源識別符(URI)方案的提案。BIP 可以在 GitHub 找到。

bitcoin(比特幣)、Bitcoin(比特幣)

根據上下文,可能指貨幣單位(硬幣)、網路或底層支援協定的名稱。以小寫「b」書寫的 bitcoin 通常指貨幣單位。以大寫「B」書寫的 Bitcoin 通常指協定或系統。

比特幣挖礦(Bitcoin mining)

比特幣挖礦是從最近的比特幣交易構建區塊,然後解決作為工作量證明所需的計算問題的過程。 這是更新共享比特幣帳本(即比特幣區塊鏈)以及將新交易納入帳本的過程。 這也是發行新比特幣的過程。 每當創建新區塊時,挖礦節點將收到在該區塊的 coinbase 交易中創建的新比特幣。

區塊(block)

區塊是比特幣區塊鏈中的資料結構,由標頭和比特幣交易主體組成。 區塊帶有時間戳,並承諾特定的前驅(父)區塊。 當對區塊標頭進行雜湊時,提供使區塊鏈在機率上不可變的工作量證明。 區塊必須遵守網路共識強制執行的規則才能擴展區塊鏈。 當區塊附加到區塊鏈時,包含的交易被認為有了第一次確認。

區塊鏈(blockchain)

區塊鏈是所有比特幣交易的分散式日誌或資料庫。 交易被分組到稱為區塊的離散更新中,限制為最多 400 萬權重單位。 區塊大約每 10 分鐘透過稱為挖礦的隨機過程產生。 每個區塊都包含計算密集型的「工作量證明」。 工作量證明要求用於調節區塊間隔並保護區塊鏈免受重寫歷史的攻擊: 攻擊者需要超越現有的工作量證明才能替換已發布的區塊,使每個區塊隨著被後續區塊埋藏而在機率上變得不可變。

BOLT

BOLT,即閃電技術基礎(Basis of Lightning Technology),是閃電網路的正式規範。與比特幣不同(比特幣有一個參考實作同時也作為協定規範),各種閃電網路實作遵循 BOLT 以便它們可以相互協作形成同一個網路。可在 GitHub 獲取。

容量(capacity)

支付通道的容量等於資金交易提供的比特幣數量。 因為資金交易在區塊鏈上公開可見,且通道透過八卦協定宣告,所以容量是公開資訊。 它不會透露通道中每個通道夥伴擁有多少比特幣的任何資訊,即餘額。 高容量並不保證通道可以在兩個 方向 上都用於路由。

c-lightning

由位於維多利亞的公司 Blockstream 實作的閃電網路協定。以 C 語言編寫。原始碼在 GitHub

關閉交易(closing transaction)

如果兩個通道夥伴同意關閉通道,他們將創建一個反映最新承諾交易的結算交易。 在交換關閉交易的簽名後,不應再進行進一步的通道更新。 透過關閉交易相互關閉通道的優點是,與透過發布承諾交易單方面強制關閉通道相比,需要較少的區塊鏈交易來索取所有資金。此外,雙方的資金可以從關閉交易中立即使用。

CLTV

CLTV 是比特幣腳本運算子 OP_CHECKLOCKTIMEVERIFY 的縮寫。這定義了在輸出可以被花費之前的絕對區塊高度。路由過程的原子性在很大程度上取決於 HTLC 中的 CLTV 值。路由節點透過八卦協定宣告它們希望任何傳入和傳出 HTLC 的預期 CLTV 到期延遲。

coinbase

coinbase 是一個特殊欄位,只允許在 coinbase 交易的唯一輸入中使用。 coinbase 允許最多 100 位元組的任意資料,但自 BIP-34 以來,它必須首先包含當前區塊高度以確保 coinbase 交易是唯一的。 不要與 coinbase 交易混淆。

coinbase 交易(coinbase transaction)

區塊中的第一筆交易,總是由礦工創建,包含一個 coinbase。 coinbase 交易可以索取區塊獎勵並將其分配給一個或多個輸出。 區塊獎勵由區塊補貼(新創建的比特幣)和區塊中包含的所有交易費用的總和組成。 coinbase 輸出只能在成熟 100 個區塊後才能使用。 如果區塊包含任何 SegWit 交易,coinbase 交易必須在額外的輸出中包含對見證交易識別符的承諾。

冷儲存(cold storage)

指將一定數量的比特幣保持離線。當比特幣私鑰在安全的離線環境中創建和儲存時,就實現了冷儲存。冷儲存對於保護比特幣持有量很重要。線上電腦容易受到駭客攻擊,不應用於儲存大量比特幣。

承諾交易(commitment transaction)

承諾交易是由兩個通道夥伴簽署的比特幣交易,編碼了通道的最新餘額。 每當使用通道進行新的支付或轉發時,通道餘額會更新,雙方會簽署新的承諾交易。 重要的是,在 Alice 和 Bob 之間的通道中,Alice 和 Bob 都保留自己版本的承諾交易,該交易也由對方簽署。 在任何時候,通道 可以由 Alice 或 Bob 關閉,如果他們將自己的承諾交易提交到比特幣區塊鏈。 在閃電網路中,提交較舊(過時)的承諾交易被視為 作弊(即協定違規),可能會被對方懲罰,透過懲罰交易索取通道中的所有資金。

確認(confirmations)

一旦交易被包含在區塊中,它就有一次確認。一旦在區塊鏈上挖出 另一個 區塊,該交易就有兩次確認,依此類推。六次或更多確認被認為是交易無法被逆轉的充分證明。

合約(contract)

合約是一組比特幣交易,它們一起產生某種期望的行為。 範例包括用於創建無需信任的雙向支付通道的 RSMC,或用於創建允許透過第三方無需信任地轉發支付的機制的 HTLC。

迪菲-赫爾曼金鑰交換(Diffie–Hellman Key Exchange,DHKE)

在閃電網路中,使用橢圓曲線迪菲-赫爾曼(ECDH)方法。 這是一種匿名金鑰協議協定,允許兩方各自擁有橢圓曲線公私鑰對,在不安全的通訊通道上建立共享秘密。 這個共享秘密可以直接用作金鑰,或用於派生另一個金鑰。 金鑰或派生金鑰然後可用於使用對稱金鑰密碼加密後續通訊。 派生金鑰的一個範例是洋蔥發送者的臨時會話金鑰與洋蔥某一跳的節點公鑰之間的共享秘密,如 SPHINX Mix Format 所描述和使用的。

數位簽章(digital signature)

數位簽章是一種用於驗證數位訊息或文件的真實性和完整性的數學方案。 它可以被視為一種加密承諾,其中訊息不被隱藏。

雙重支付(double-spending)

雙重支付是成功地多次花費某些金錢的結果。 比特幣透過驗證添加到區塊鏈的每筆交易都遵守共識規則來防止雙重支付;這意味著檢查交易的輸入之前沒有被花費過。

橢圓曲線數位簽章演算法(Elliptic Curve Digital Signature Algorithm,ECDSA)

橢圓曲線數位簽章演算法或 ECDSA 是比特幣使用的一種加密演算法,以確保資金只能由正確私鑰的持有者使用。

Eclair

由位於巴黎的公司 ACINQ 實作的閃電網路協定。以 Scala 語言編寫。原始碼在 GitHub

編碼(encoding)

編碼是將訊息轉換為不同形式的過程。例如,將數字從十進位轉換為十六進位。

Electrum 伺服器(Electrum server)

Electrum 伺服器是帶有額外介面(API)的比特幣節點。不運行完整節點的比特幣錢包通常需要它。例如,這些錢包使用 Electrum 伺服器 API 檢查特定交易的狀態或將交易廣播到記憶池。一些閃電錢包也使用 Electrum 伺服器。

臨時金鑰(ephemeral key)

臨時金鑰是僅短時間使用且使用後不保留的金鑰。它們通常從另一個長期持有的金鑰派生,用於一個會話。臨時金鑰主要用於閃電網路上的 SPHINX Mix Format 和洋蔥路由。 這增加了傳輸訊息或支付的安全性。 即使臨時金鑰洩露,也只有關於單個會話的資訊會公開。

功能位元(feature bits)

閃電節點用來相互通訊它們支援哪些功能的二進位字串。 功能位元包含在許多閃電訊息以及 BOLT #11 中。 它們可以使用 BOLT #9 解碼,並會告訴節點該節點啟用了哪些功能,以及這些功能是否向後相容。 也稱為功能旗標。

費用(fees)

在閃電網路的上下文中,節點會為轉發其他使用者的支付收取路由費用。 各個節點可以設定自己的費用政策,計算方式為固定 base_fee 和取決於支付金額的 fee_rate 的總和。 在比特幣的上下文中,交易的發送者向礦工支付交易費用以將交易包含在區塊中。 比特幣交易費用不包括基本費用,並且線性地取決於交易的權重,而不是金額。

資金交易(funding transaction)

資金交易用於開啟支付通道。資金交易的價值(以比特幣計)恰好是支付通道的容量。 資金交易的輸出是 2-of-2 多重簽名腳本(多重簽名),其中每個通道夥伴控制一個金鑰。由於其多重簽名性質,它只能透過通道夥伴之間的相互同意來花費。 它最終將被承諾交易之一或關閉交易花費。

全域功能(global features,globalfeatures 欄位)

閃電節點的全域功能是所有其他節點感興趣的功能。 它們最常與支援的路由格式相關。 它們在對等協定的 init 訊息以及八卦協定的 channel_announcementnode_announcement 訊息中宣告。

八卦協定(gossip protocol)

閃電網路節點透過與對等節點交換的八卦訊息發送和接收有關閃電網路拓撲的資訊。 八卦協定主要在 BOLT #7 中定義,並定義了 node_announcementchannel_announcementchannel_update 訊息的格式。 為防止垃圾訊息,節點公告訊息只有在節點已有通道時才會被轉發,通道公告訊息只有在通道的資金交易被比特幣網路確認時才會被轉發。 通常,閃電節點與其通道夥伴連接,但也可以與任何其他閃電節點連接以處理八卦訊息。

硬體錢包(hardware wallet)

硬體錢包是一種特殊類型的比特幣錢包,將使用者的私鑰儲存在安全的硬體設備中。 截至本書撰寫時,閃電網路節點沒有可用的硬體錢包,因為閃電網路使用的金鑰需要保持線上才能參與協定。

雜湊(hash)

某些任意長度二進位輸入的固定大小數位指紋。也稱為 摘要

基於雜湊的訊息認證碼(hash-based message authentication code,HMAC)

HMAC 是一種基於雜湊函數和加密金鑰來驗證訊息完整性和真實性的演算法。 它用於洋蔥路由以確保每一跳封包的完整性,以及用於訊息加密的 Noise 協定變體中。

雜湊函數(hash function)

加密雜湊函數是一種數學演算法,將任意大小的資料映射到固定大小的位元字串(雜湊),並被設計為單向函數,即反向計算是不可行的。 從理想的加密雜湊函數的輸出重建輸入資料的唯一方法是嘗試對可能的輸入進行暴力搜尋以查看它們是否產生匹配。

雜湊鎖(hashlock)

雜湊鎖是一種比特幣腳本消費條件,在指定的資料被揭示之前限制輸出的消費。雜湊鎖有一個有用的特性,即一旦任何雜湊鎖透過消費被揭示,任何使用相同金鑰保護的其他雜湊鎖也可以被消費。這使得可以創建多個都受相同雜湊鎖約束的輸出,並且它們都在同一時間變得可消費。

雜湊時間鎖定合約(hash time-locked contract,HTLC)

雜湊時間鎖定合約(HTLC)是一種比特幣腳本,由雜湊鎖和時間鎖組成,要求支付的接收者要麼在截止日期前透過呈現雜湊原像來消費支付,要麼發送者可以在時間鎖到期後索取退款。 在閃電網路中,HTLC 是支付通道承諾交易中的輸出,用於實現無需信任的支付路由。

發票(invoice)

閃電網路上的支付流程由接收者(收款人)發起,發起時會開具發票,也稱為 支付請求。 發票包括支付雜湊、金額、描述和到期時間。閃電發票在 BOLT #11 中定義。 發票還可以包含一個備用比特幣地址,在找不到路由的情況下可以向該地址付款,以及透過私有通道路由支付的提示。

即時路由(just-in-time routing,JIT routing)

即時(JIT)路由是源路由的替代方案,最初由共同作者 René Pickhardt 提出。 使用 JIT 路由,路徑上的中間節點可以暫停進行中的支付以在繼續支付之前重新平衡其通道。 這可能允許它們成功轉發因缺乏傳出容量而可能失敗的支付。

閃電訊息(Lightning message)

閃電訊息是可以在閃電網路上兩個對等節點之間發送的加密資料字串。與其他通訊協定類似,閃電訊息由標頭和主體組成。標頭和主體都有自己的 HMAC。閃電訊息是訊息層的主要構建區塊。

閃電網路(Lightning Network)、閃電網路協定(Lightning Network Protocol)、閃電協定(Lightning Protocol)

閃電網路是建立在比特幣(或其他加密貨幣)之上的協定。 它創建了一個支付通道網路,透過 HTLC 和洋蔥路由實現無需信任的支付轉發。 閃電網路的其他組成部分是八卦協定、傳輸層和支付請求。

閃電網路協定套件(Lightning Network protocol suite)

閃電網路協定套件由五層組成,負責協定的各個部分。 從底層(第一層)到頂層(第五層),這些層分別稱為網路通訊層、訊息層、對等層、路由層和支付層。 各種 BOLT 定義了一層或多層的部分。

閃電網路節點(Lightning Network node)、閃電節點(Lightning node)

透過閃電對等協定參與閃電網路的電腦。 閃電節點能夠與其他節點開啟通道、發送和接收支付、以及路由其他使用者的支付。 通常,閃電節點使用者也會運行比特幣節點。

lnd

由位於舊金山的公司 Lightning Labs 實作的閃電網路協定。 以 Go 語言編寫。原始碼在 GitHub

本地功能(local features,欄位:localfeatures)

閃電網路節點的本地功能是其對等節點直接感興趣的可配置功能。 它們在對等協定的 init 訊息以及八卦協定的 channel_announcementnode_announcement 訊息中宣告。

鎖定時間(locktime)

鎖定時間,或更技術性地說 nLockTime,是比特幣交易的一部分,指示該交易可以添加到區塊鏈的最早時間或最早區塊。

訊息層(messaging layer)

訊息層建立在閃電網路協定套件的網路連接層之上。 它負責確保透過所選網路連接層協定進行加密和安全的通訊和資訊交換。 訊息層定義了 BOLT #1 中定義的閃電訊息的框架和格式。 BOLT #9 中定義的功能位元也是這一層的一部分。

毫聰(millisatoshi)

閃電網路上最小的記帳單位。一毫聰是單個比特幣的千億分之一。一毫聰是一聰的千分之一。毫聰不存在於比特幣網路上,也不能在比特幣網路上結算。

多部分支付(multipart payments,MPP)

多部分支付(MPP),通常也稱為多路徑支付,是一種將支付金額分成多個較小部分並透過一條或多條路徑傳送的方法。由於 MPP 可以透過單一路徑發送許多或所有部分,因此多部分支付這個術語比多路徑支付更準確。在電腦科學中,多部分支付被建模為網路流。

多重簽名(multisignature)

多重簽名(多簽)指的是需要多個簽名才能授權消費的腳本。 支付通道總是編碼為需要支付通道每個夥伴各一個簽名的多重簽名地址。 在兩方支付通道的標準情況下,使用 2-of-2 多重簽名地址。

節點(node)

參見 閃電網路節點

網路容量(network capacity)

閃電網路容量是鎖定在閃電網路內部並在其中流通的比特幣總量。 它是每個公共通道容量的總和。 它在某種程度上反映了閃電網路的使用情況,因為我們預期人們將比特幣放入閃電通道以消費或轉發其他使用者的支付。 因此,閃電通道中的比特幣數量越多,閃電網路的預期使用量就越高。 請注意,由於只能觀察到公共通道容量,真正的網路容量是未知的。此外,由於通道的容量可以支援無限次的來回支付,網路容量並不意味著閃電網路上傳輸價值的限制。

網路連接層(network connection layer)

閃電網路協定套件的最底層。 其職責是支援網際網路協定如 IPv4、IPv6、TOR2 和 TOR3,並使用它們建立如 BOLT #8 中定義的安全加密通訊通道,或使用 DNS 進行如 BOLT #10 中定義的網路引導。

Noise_XK

Noise 協定框架的模板,用於在閃電網路的兩個對等節點之間建立經過認證和加密的通訊通道。 X 表示不需要預先知道連接發起者的公鑰。 K 表示需要預先知道接收者的公鑰。

洋蔥路由(onion routing)

洋蔥路由是一種在電腦網路上進行匿名通訊的技術。 在洋蔥網路中,訊息被封裝在多層加密中,類似於洋蔥的層次。 加密的資料透過一系列稱為洋蔥路由器的網路節點傳輸,每個節點剝去一層,揭示資料的下一個目的地。 當最後一層被解密時,訊息到達其目的地。 發送者保持匿名,因為每個中間節點只知道緊鄰的前一個和後一個節點的位置。

輸出(output)

比特幣交易的輸出,也稱為未花費交易輸出(UTXO)。 輸出是可以被花費的不可分割的比特幣數量,以及定義需要滿足什麼條件才能花費該比特幣的腳本。 每筆比特幣交易都消費一些先前記錄的交易的輸出,並創建可由後續交易花費的新輸出。 典型的比特幣輸出需要簽名才能花費,但輸出可以要求滿足更複雜的腳本。 例如,多重簽名腳本要求兩個或更多金鑰持有者簽名才能花費輸出,這是閃電網路的基本構建區塊。

付款至公鑰雜湊(Pay-to-Public-Key-Hash,P2PKH)

P2PKH 是一種將比特幣鎖定到公鑰雜湊的輸出類型。被 P2PKH 腳本鎖定的輸出可以透過呈現與雜湊匹配的公鑰和由相應私鑰創建的數位簽章來解鎖(花費)。

付款至腳本雜湊(Pay-to-Script-Hash,P2SH)

P2SH 是一種多功能的輸出類型,允許使用複雜的比特幣腳本。使用 P2SH,詳細說明花費輸出條件的複雜腳本(贖回腳本)不會出現在鎖定腳本中。相反,價值被鎖定到腳本的雜湊,必須呈現並滿足該腳本才能花費輸出。

P2SH 地址(P2SH address)

P2SH 地址是腳本 20 位元組雜湊的 Base58Check 編碼。P2SH 地址以「3」開頭。P2SH 地址隱藏了所有複雜性,因此支付的發送者看不到腳本。

付款至見證公鑰雜湊(Pay-to-Witness-Public-Key-Hash,P2WPKH)

P2WPKH 是 P2PKH 的 SegWit 等價物,使用隔離見證。花費 P2WPKH 輸出的簽名放在見證樹中而不是 ScriptSig 欄位中。參見 SegWit

P2WPKH 地址(P2WPKH address)

「原生 SegWit v0」地址格式,P2WPKH 地址是 bech32 編碼的,以「bc1q」開頭。

付款至見證腳本雜湊(Pay-to-Witness-Script-Hash,P2WSH)

P2WSH 是 P2SH 的 SegWit 等價物,使用隔離見證。花費 P2WSH 輸出的簽名和腳本放在見證樹中而不是 ScriptSig 欄位中。參見 SegWit

P2WSH 地址(P2WSH address)

「原生 SegWit v0」腳本地址格式,P2WSH 地址是 bech32 編碼的,以「bc1q」開頭。

付款至 Taproot(Pay-to-Taproot,P2TR)

於 2021 年 11 月啟用,Taproot 是一種新的輸出類型,將比特幣鎖定到消費條件樹或單一根條件。

P2TR 地址(P2TR address)

Taproot 地址格式,代表 SegWit v1,是 bech32m 編碼的地址,以「bc1p」開頭。

支付(payment)

當比特幣在閃電網路內轉移時,就會發生閃電支付。支付通常不會出現在比特幣區塊鏈上。

支付通道(payment channel)

支付通道是閃電網路上兩個節點之間的金融關係,使用支付給多重簽名地址的比特幣交易創建。 通道夥伴可以使用通道在彼此之間來回發送比特幣,而無需將所有交易提交到比特幣區塊鏈。 在典型的支付通道中,只有兩筆交易——資金交易和承諾交易——被添加到區塊鏈。 透過通道發送的支付不會記錄在區塊鏈上,據說是「鏈下」發生的。

支付層(payment layer)

閃電網路協定套件的頂層和第五層,運作在路由層之上。 其職責是透過 BOLT #11 發票實現支付流程。 雖然它大量使用 BOLT #7 中定義的八卦協定的通道圖,但實際的支付傳遞策略不是協定規範的一部分,留給各實作自行決定。 由於這個主題對確保支付傳遞過程的可靠性非常重要,我們在本書中包含了它。

對等節點(peer)

對等網路的參與者。在閃電網路中,對等節點透過 TCP 套接字、IP 或 Tor 上的加密認證通訊相互連接。

對等層(peer-to-peer layer)

對等層是閃電網路協定套件的第三層,運作在訊息層之上。 它負責定義透過閃電訊息在對等節點之間交換的資訊的語法和語義。 這包括 BOLT #9 中定義的控制訊息;BOLT #2 中定義的通道建立、操作和關閉訊息;以及 BOLT #7 中定義的八卦和路由訊息。

私有通道(private channel)

不向網路其餘部分宣告的通道。 技術上,「私有」是一個誤稱,因為這些通道仍然可以透過路由提示和承諾交易識別。 更好的描述是「未宣告」通道。 使用未宣告的通道,通道夥伴可以正常地在彼此之間發送和接收支付。 然而,網路的其餘部分不會知道該通道,因此通常無法使用它來路由支付。 由於未宣告通道的數量和容量是未知的,公共通道計數和容量總數只佔閃電網路總量的一部分。

原像(preimage)

在密碼學的上下文中,特別是在閃電網路中,原像指的是產生特定雜湊的雜湊函數的輸入。從雜湊計算原像是不可行的(雜湊函數只能單向運算)。透過選擇一個秘密隨機值作為原像並計算其雜湊,我們可以承諾該原像,之後再揭示它。任何人都可以確認揭示的原像正確產生該雜湊。

工作量證明(Proof of Work,PoW)

需要大量計算才能找到的資料,任何人都可以輕鬆驗證以證明產生它所需的工作量。 在比特幣中,礦工必須找到 SHA-256 演算法的數字解,以達到全網目標,稱為難度目標。 更多資訊參見 比特幣挖礦

點時間鎖定合約(Point Time-Locked Contract,PTLC)

點時間鎖定合約(PTLC)是一種比特幣腳本,允許在呈現秘密或經過某個區塊高度後有條件地消費,類似於 HTLC。與 HTLC 不同,PTLC 不依賴雜湊函數的原像,而是依賴橢圓曲線點的私鑰。因此安全假設基於離散對數。PTLC 尚未在閃電網路上實作。

相對時間鎖(relative timelock)

相對時間鎖是一種時間鎖類型,允許輸入指定可以將輸入添加到區塊的最早時間。時間是相對的,基於該輸入引用的輸出何時被記錄在區塊中。相對時間鎖由 nSequence 交易欄位和 CHECKSEQUENCEVERIFY(CSV)比特幣腳本操作碼設定,由 BIP-68/112/113 引入。

可撤銷序列成熟度合約(Revocable Sequence Maturity Contract,RSMC)

該合約用於在兩個不需要相互信任的比特幣或閃電網路使用者之間構建支付通道。 名稱來自一系列編碼為承諾交易的狀態,如果被錯誤地發布並被比特幣網路挖礦,可以被撤銷。

撤銷金鑰(revocation key)

每個 RSMC 包含兩個撤銷金鑰。每個通道夥伴知道一個撤銷金鑰。知道兩個撤銷金鑰,RSMC 的輸出可以在預定義的時間鎖內被花費。在協商新的通道狀態時,舊的撤銷金鑰被分享,從而「撤銷」舊狀態。撤銷金鑰用於阻止通道夥伴廣播舊的通道狀態。

RIPEMD-160

RIPEMD-160 是一種產生 160 位元(20 位元組)雜湊的加密雜湊函數。

路由層(routing layer)

閃電網路協定套件的第四層,運作在對等層之上。 其職責是定義加密原語和必要的通訊協定,以允許比特幣從發送節點到接收節點的安全原子傳輸。 BOLT #4 定義了用於向沒有直接連接的遠端對等節點傳達傳輸資訊的洋蔥格式,而洋蔥的實際傳輸和加密原語在 BOLT #2 中定義。

拓撲(topology)

閃電網路的拓撲描述了閃電網路作為數學圖形的形狀。圖的節點是閃電節點(網路參與者/對等節點)。圖的邊是支付通道。 閃電網路的拓撲透過八卦協定公開廣播,但未宣告的通道除外。 這意味著閃電網路可能比宣告的通道和節點數量大得多。 了解拓撲對於支付的源路由過程特別重要,在該過程中發送者發現路由。

聰(satoshi)

聰是可以在區塊鏈上記錄的比特幣最小單位(面額)。一聰是一個比特幣的億分之一(0.00000001),以比特幣的創造者中本聰命名。

中本聰(Satoshi Nakamoto)

中本聰是設計比特幣並創建其原始參考實作的人或團體所使用的名字。作為實作的一部分,他們還設計了第一個區塊鏈資料庫。在這個過程中,他們首次解決了數位貨幣的雙重支付問題。他們的真實身份仍然未知。

Schnorr 簽章(Schnorr signature)

一種新的數位簽章方案,於 2021 年 11 月在比特幣中啟用。它在閃電網路上實現創新,例如高效的 PTLC(HTLC 的改進)。

腳本(script)、比特幣腳本(Bitcoin Script)

比特幣使用稱為比特幣腳本的腳本系統進行交易。類似於 Forth 程式語言,它是簡單的、基於堆疊的,從左到右處理。它故意不是圖靈完備的,沒有循環或遞歸。

ScriptPubKey(又名 pubkey script)

ScriptPubKey 或 pubkey script 是包含在輸出中的腳本,設定必須滿足才能花費這些輸出的條件。滿足條件的資料可以在簽名腳本中提供。另參見 ScriptSig

ScriptSig(又名 signature script)

ScriptSig 或簽名腳本是由消費者生成的資料,幾乎總是用作變數來滿足 pubkey script。

秘密金鑰(secret key,又名私鑰)

解鎖發送到相應地址的比特幣的秘密數字。秘密 金鑰看起來像這樣:5J76sF8L5j​TtzE96r66Sf8cka9y44wdpJjMwCxR3tzLh3i​bVPxh。

隔離見證(Segregated Witness,SegWit)

隔離見證(SegWit)是 2017 年引入的比特幣協定升級,為簽名和其他交易授權證明添加了新的見證。這個新的見證欄位免於交易 ID 的計算,解決了大多數第三方交易可塑性問題。隔離見證作為軟分叉部署,是一個技術上使比特幣協定規則更加嚴格的變更。

安全雜湊演算法(Secure Hash Algorithm,SHA)

安全雜湊演算法或 SHA 是由美國國家標準與技術研究院(NIST)發布的一系列加密雜湊函數。比特幣協定目前使用 SHA-256,產生 256 位元雜湊。

短通道 ID(short channel ID,scid)

一旦通道建立,區塊鏈上資金交易的索引被用作短通道 ID 來唯一識別通道。 短通道 ID 由八個位元組組成,指向三個數字。 在其序列化形式中,它將這三個數字描繪為由字母「x」分隔的十進位值(例如 600123x01x00)。 第一個數字(4 位元組)是區塊高度。 第二個數字(2 位元組)是區塊內資金交易的索引。 最後一個數字(2 位元組)是交易輸出。

簡化支付驗證(simplified payment verification,SPV)

SPV 或簡化支付驗證是一種驗證特定交易是否包含在區塊中而無需下載整個區塊的方法。該方法被一些輕量級比特幣和閃電錢包使用。

源路由(source-based routing)

在閃電網路上,支付的發送者決定支付的路由。 雖然這降低了路由過程的成功率,但增加了支付的隱私性。 由於洋蔥路由使用的 SPHINX Mix Format,所有路由節點都不知道支付的發起者或最終接收者。 源路由與網際網路協定上的路由工作方式根本不同。

軟分叉(soft fork)

軟分叉或軟分叉變更是一種向前和向後相容的協定升級,因此它允許舊節點和新節點繼續使用同一條鏈。

SPHINX Mix Format

閃電網路中使用的一種特定洋蔥路由技術,由 George Danezis 和 Ian Goldberg 於 2009 年 發明。 使用 SPHINX Mix Format,洋蔥封包的每條訊息都用一些隨機資料填充,這樣沒有任何一跳可以估計它沿路由行進了多遠。 雖然發送者和接收者的隱私得到保護,每個節點仍然能夠沿路徑向訊息的發起者返回錯誤訊息。

潛艇交換(submarine swap)

潛艇交換是鏈上比特幣地址和鏈下閃電網路支付之間的無需信任的原子交換。就像閃電網路支付使用 HTLC 使資金的最終索取取決於接收者揭示秘密(雜湊原像),潛艇交換使用相同的機制以最小的信任跨越鏈上/鏈下障礙轉移資金。反向潛艇交換允許反方向的交換,從鏈下閃電網路支付到鏈上比特幣地址。

時間鎖(timelock)

時間鎖是一種限制某些比特幣在指定的未來時間或區塊高度之前不能花費的約束。時間鎖在許多比特幣合約中都很突出,包括支付通道和 HTLC。

交易(transaction)

交易是比特幣用來將比特幣從一個地址轉移到另一個地址的資料結構。 數千筆交易被聚合在一個區塊中,然後記錄(挖礦)在區塊鏈上。 每個區塊中的第一筆交易,稱為 coinbase 交易,生成新的比特幣。

交易可塑性(transaction malleability)

交易可塑性是指交易的雜湊可以在不改變交易語義的情況下改變的特性。 例如,更改簽名可以改變交易的雜湊。 承諾交易需要資金交易的雜湊,如果資金交易的雜湊改變,依賴它的交易將變得無效。這將使使用者無法索取退款(如果有的話)。 隔離見證軟分叉解決了這個問題,因此是支援閃電網路的重要升級。

傳輸層(transport layer)

在電腦網路中,傳輸層是電腦(最終是應用程式)相互通訊所使用方法的概念劃分。 傳輸層提供電腦之間的通訊服務,如流量控制、驗證和多工(允許多個應用程式同時在一台電腦上工作)。

未花費交易輸出(unspent transaction output,UTXO)

參見 輸出

錢包(wallet)

錢包是一種持有比特幣私鑰的軟體。它用於創建和簽署比特幣交易。在閃電網路的上下文中,它還持有舊通道狀態的撤銷秘密和最新的預簽署承諾交易。

瞭望塔(watchtower)

瞭望塔是閃電網路上的安全服務,監控支付通道是否有潛在的協定違規。 如果其中一個通道夥伴離線或丟失備份,瞭望塔會保留備份並可以恢復其通道資訊。

瞭望塔還監控比特幣區塊鏈,如果其中一個夥伴試圖透過廣播過時狀態來「作弊」,可以提交懲罰交易。瞭望塔可以由通道夥伴自己運行,或作為第三方提供的付費服務。瞭望塔對通道中的資金本身沒有控制權。

一些貢獻的定義來自 Bitcoin Wiki、https://en.wikipedia.org[Wikipedia]、https://github.com/bitcoinbook/bitcoinbook[Mastering Bitcoin] 或其他開源出版物,並在 CC-BY 授權下使用。


1. 維基百科 賽局理論條目 提供了更多資訊。
2. Joseph Poon and Thaddeus Dryja. "The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments." DRAFT Version 0.5.9.2. January 14, 2016. https://lightning.network/lightning-network-paper.pdf.
1. Andreas M. Antonopoulos, Mastering Bitcoin, 2nd Edition, Chapter 1 (O’Reilly)
2. ACINQ:Eclair Mobile 閃電網路錢包的開發者。
3. 通常不建議為多筆付款重複使用同一個比特幣地址,因為所有比特幣交易都是公開的。 經過的好奇者可能會掃描 Alice 的 QR 碼,並在比特幣區塊鏈上看到 Alice 已經收到了多少小費到這個地址。 幸運的是,閃電網路為此提供了更私密的解決方案,將在本書後面討論!
4. Eclair 錢包不提供自動計算必要費用並將最大資金分配給通道的選項,所以 Alice 必須自己計算。
1. 雖然原始閃電網路白皮書描述了由兩個通道夥伴注資的通道,但截至 2020 年的當前規範假設只有一個夥伴向通道承諾資金。截至 2021 年 5 月,雙重注資閃電網路通道在 c-lightning 閃電網路實現中處於實驗階段。
2. George Danezis and Ian Goldberg, "Sphinx: A Compact and Provably Secure Mix Format," in IEEE Symposium on Security and Privacy (New York: IEEE, 2009), 269–282.
3. 「洋蔥」一詞最初由 Tor 專案使用。此外,Tor 網路也被稱為洋蔥網路,該專案使用洋蔥作為其標誌。Tor 服務在網際網路上使用的頂級域名是 onion
1. George Danezis and Ian Goldberg, "Sphinx: A Compact and Provably Secure Mix Format," in IEEE Symposium on Security and Privacy (New York: IEEE, 2009), 269–282.
1. HODL 這個詞來自論壇中一個興奮的拼寫錯誤,將 "HOLD"(持有)誤拼,用來鼓勵人們不要在恐慌中出售比特幣。