JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

多鏈,一個問題:區塊鏈為何無法互相溝通

你在以太坊上的 USDC,和朋友在另一條鏈上的錢包,簡直像在不同星球。本篇說明為何這道牆是「區塊鏈之所以為區塊鏈」的本質——並勾勒出我們穿越它的整個解法光譜。

同樣的美元,兩座孤島

想像一下。你在 以太坊 上持有 1,000 USDC。朋友請你轉一些 USDC 給他,但他的錢包只存在於另一條鏈上——比方說某個 Layer 2,或是 Solana。你大概會以為直接「轉過去」就行了。但你做不到。你以太坊錢包裡的 USDC,只是某個特定合約帳本中、某一條特定鏈上的一個數字。另一條鏈上的「USDC」則是完全不同的代幣,由不同的程式發行——即使兩者都顯示 USDC、都值一美元。從以太坊的角度看,另一條鏈根本不存在。你簽不出任何一筆能把餘額從一條鏈的狀態搬進另一條鏈狀態的交易。

這並不是哪個人忘了交付的功能,而是「區塊鏈之所以為區塊鏈」的本質。在前面幾階中,你已經把 區塊鏈 理解為一份由成千上萬台獨立機器共同認可的 分散式帳本。正是這份「共同認可」——讓一條鏈值得信任的關鍵——使它對其他每一條鏈都視而不見。這一階談的就是互通性:我們如何仍舊跨越這道鴻溝,以及為何安全地做到這件事,是整個領域裡最困難、也最危險的問題之一。

區塊鏈是一間密室

先回想一下節點到底「為什麼」會達成一致。一條鏈的 共識機制 之所以行得通,是因為每個節點從相同的先前狀態出發、重播相同順序的交易清單,都會算出完全一樣的下一個狀態。如果兩個誠實節點竟能合理地得出不同狀態,那就根本沒有東西可以「達成共識」。所以這條規則是絕對的:狀態轉換函式必須是確定性的、且自我封閉的

這就築起一道硬牆。一份 EVM 合約唯一被允許讀取的輸入,只有呼叫它那筆交易的 calldata,以及鏈本身 狀態 裡已經存在的資料。沒有任何操作碼能打開網路連線、發出 HTTPS 請求、從硬碟讀檔——更別說(這正是本階的重點)去查詢另一條區塊鏈。每一項輸入都必須是世界上每個節點都能一模一樣地重現的東西。

// Why the EVM has no "fetch from the internet" opcode
contract PriceFeed {
    function getPrice() public returns (uint) {
        // IMAGINARY opcode -- it does NOT exist in the EVM:
        return HTTP_GET("https://api.exchange.com/eth-usd");
    }
}

// Validator A executes this at 12:00:00  -> returns 2500
// Validator B executes this at 12:00:01  -> returns 2501
// The two now disagree on the resulting state. Consensus breaks.
//
// So the opcode simply does not exist. The ONLY inputs a contract
// can read are: (1) the transaction's calldata, and
//               (2) data already in this chain's own state.
一份能呼叫外部世界的合約,會讓誠實節點彼此不一致——所以 EVM 徹底禁止它。而另一條鏈,正屬於那個被禁止的「外部世界」。

其實沒有任何東西真的「過橋」

正因為這道牆,日常用語其實有誤導性。當你「把 ETH 送到某個 L2」或「把 USDC 跨橋到另一條鏈」時,沒有任何代幣真的瞬移到別處。一個代幣,不過是某條鏈上某份 合約 儲存空間裡的一個數字——而一個數字沒辦法離開它所棲身的那條鏈,就像資料庫裡的一列資料無法自己跳到另一個資料庫一樣。

實際發生的事(下一篇談 跨鏈橋 會完整剖析)是在兩條各自獨立的鏈上、協調進行的一對動作。最典型的 鎖定—鑄造 模式是:你真正的資產在來源鏈的某份合約裡被鎖定,同時在目標鏈上鑄造出一個全新的 包裝代幣 作為代表。那個包裝代幣是一張借據(IOU)。唯有當原始資產確實被鎖好、且確實能被它贖回時,它才值那一美元。

每座橋都必須回答的那一個問題

撕掉行銷話術,每一套跨鏈系統都可以化約成同一個問題。鏈 A 被某個外部角色遞來一則主張——「事件 E 在鏈 B 上發生了」(某筆存款被鎖定了;某則訊息被送出了)——因為 A 沒辦法自己去查 B。那麼 A 該如何判斷這則主張是真是假?其餘的一切都只是細節。

在光譜的一端,A 乾脆信任一個指定的群體。一組 橋驗證者集合 或多重簽章去盯著 B 並背書,A 的合約便相信這個群體簽過的任何東西。這很便宜,而且任兩條鏈之間都能用——但你已經重新引入了一個受信任的第三方,一旦他們的金鑰被竊,整座橋就會被掏空。這正是加密史上最大那幾起駭客事件背後的 外部驗證 模型。

在另一端,A 親自驗證 B 的 共識,過程中沒有任何人類委員會。A 上的一份合約會運行一個 B 的 輕用戶端:在相信任何事之前,它會檢查 B 的驗證者簽章,或是一份證明所宣稱狀態確實為真的 有效性證明。這就是 輕用戶端 /信任最小化的路線,它繼承了 B 的安全性,而非新增一道信任假設。代價是成本與難度:在一份合約裡驗證另一條鏈的簽章與 最終性 規則所費不貲,而且每一對異質鏈——不同的曲線、不同的共識——都需要量身打造自己的驗證器。

// The cross-chain question, distilled into one function.
// Chain A is told: "message M happened on Chain B." Believe it?

function receiveMessage(bytes M, bytes proof) external {
    // --- Option 1: TRUSTED (cheap, universal, but you trust a committee)
    require(committee.hasQuorumSigned(M), "not enough signatures");

    // --- Option 2: TRUST-MINIMIZED (verify B's consensus yourself)
    // require(lightClientOfB.verify(M, proof), "invalid proof of B's state");

    execute(M);   // e.g. mint the wrapped token, call the target contract
}

// The entire field of interoperability is the design space between
// these two require() lines: how little must A trust, and at what cost?
判斷是否相信「關於另一條鏈的主張」的兩種方式。這兩行之間的取捨,正是整個鞍階的核心。

這道光譜——從「信任一個委員會」到「驗證數學」——是整個鞍階裡最重要的一條軸線。下一篇談信任模型的指南,會把真實世界的橋放上這條軸線,並具體指出每一起十億美元級駭客事件中,究竟是哪一道假設破了功。

解法的光譜

互通性不是單一一種技術,而是一整族解法,大致可從「最狹窄」排到「最通用」:

  1. 原子交換。 最古老的信任最小化技巧。一份 雜湊時間鎖合約 讓比特幣上的 Alice 與萊特幣上的 Bob 交換硬幣,保證兩條腿都完成、或是兩邊都退款——全程沒有任何託管方持有資金。原子交換 在信任上極其純粹,但它只能交換資產(無法傳遞通用資料),而且需要一個剛好想做相反方向交易的對手方。
  2. 代幣橋。 用「鎖定—鑄造」或「銷毀—鑄造」的管線,在鏈與鏈之間搬動價值。這是當今多鏈世界的主力——而且,我們將會看到,它也是整個加密領域裡單一最大宗的被竊資金來源。
  3. 通用訊息傳遞。 不只是代幣,而是任意呼叫——「帶著這些參數,在鏈 B 上執行函式 f」。像 IBC(鏈之間互跑輕用戶端)這類原生設計,以及第三方訊息層,都負責傳遞這些訊息。這是本階稍後一篇指南的主題。
  4. 共享安全/統一生態系。 乾脆不在陌生的鏈之間架橋——而是打造一群共用同一套安全與結算基礎的鏈。建立在共享 結算層 上的 Polkadot 平行鏈、Cosmos 區域與 Rollup「超級鏈」,讓互通性成為與生俱來的特性,而非事後加裝的零件。這正是本階的終點。

請留意貫穿這份清單的取捨,有時被稱為互通性三難困境:一套跨鏈協定很難同時做到信任最小化(不新增信任假設)、可擴及性(能用於差異極大的各種鏈),以及通用性(能傳遞任意資料,而不只是代幣轉帳)。你可以輕鬆地兼得其二;第三者必然要妥協。IBC 信任最小化又通用,但只容易擴及那些具備快速、適合輕用戶端的最終性的鏈。一座多簽代幣橋可擴及又通用,卻並非信任最小化。天下沒有白吃的午餐——只有一個「該放棄什麼」的明智抉擇。

多鏈是好事,跨鏈要當心

這道警告還有一個更尖銳的版本,由以太坊的 Vitalik Buterin 在 2022 年初提出而廣為人知:他對多鏈世界(許多鏈並存)抱持樂觀,卻對深度跨鏈的世界(資產四處流暢互橋)抱持懷疑。理由是系統性風險。如果你的資產原生地存在於它的母鏈上,那麼對該鏈的 51% 攻擊 雖然糟糕,卻是被侷限的——它頂多只能重排那條鏈自己的歷史。但一旦資產被橋接到許多鏈上,對其中任何一條的攻擊都可能擴散:攻擊者鑄出偽造的包裝代幣、掏空那些原本支撐所有人持倉的抵押品,傷害便沿著橋的網絡向外蕩漾開來。更多的連結,可能意味著更多的脆弱,而非更少。

這股張力——多鏈世界真實存在、也確實有用,但要把它安全地縫合起來卻著實困難——正是本階的脊樑。誠實的當前技術現況,是一份「取捨的菜單」,而非單一的贏家;認真的開發者會有意識地選擇,而不是隨手抓那座手續費最低的橋。

以下是本階接下來的路線。下一篇,你會剖析真正讓代幣越過一座 鎖定—鑄造 機制;接著是信任模型,以及 Ronin、Wormhole 與 Nomad 駭客事件的解剖;然後是超越代幣的通用 跨鏈訊息傳遞;最後則是試圖讓互通性原生化的應用鏈與 共享安全 生態系——Cosmos、Polkadot 與 Rollup 超級鏈——一如 模組化 設計與 全鏈 協定所構想的統一多鏈世界。請全程把一個問題揣在口袋裡:為了讓這筆資產安全,我究竟在信任「誰」——或「什麼」?