2023 年10 月31 日,TON(原Telegram Open Network) 創造了新的世界紀錄,在首次公開性能直播測試中達到了每秒104,715 筆交易的驚人峰值,在25 分鐘內完成了總計107,652,545 筆交易。經Certik驗證和確認,這項性能使TON 成為世界上最快、可擴展性最強的區塊鏈,超過了所有L1 區塊鍊和PayPal、Visa 和Mastercard 等著名中心化支付網路的處理速度。
TON無疑是一個令人矚目的項目。本文將對TON白皮書進行深入解析,並揭示其獨特的技術特性與創新之處,為何TON能成為全球最快的區塊鏈。
擴容難題
在區塊鏈技術的發展過程中,可擴展性一直是個巨大的難題。區塊鏈的擴容方案主要是為了提升系統的吞吐量和降低交易費用,使得區塊鏈網路能夠處理更多的交易並更好地適應大規模應用。儘管不同的公鏈不斷嘗試新的共識和架構設計,但目前的結果仍不如人意,成為區塊鏈走向大規模應用的瓶頸,難以承載我們TG十億用戶的願景。目前主流的擴容方案可以分為以下幾類:
分片(Sharding): 將網路分割成多個較小的部分,每個分片能夠並行處理交易和智慧合約,從而顯著提高網路的吞吐量。但是分片隨之帶來了潛在的安全性問題,因為每個分片的安全性可能低於整個網路。此外,跨分片通訊也是一個技術挑戰。代表例:曾經的Ethereum 2.0和NEAR夜影協定。
側鏈(Sidechains): 側鏈是一種獨立於主鏈運行的區塊鏈,它可以有自己的共識機制和區塊參數。透過側鏈,使用者可以在兩個鏈之間轉移資產,從而卸載主鏈的負擔。代表例子:Polygon
二層方案(Layer 2 solutions): 透過在主鏈上層建構另一層結構,L2能夠提供更快的交易確認時間和更低的交易費用。拿較知名的L2來說, Optimism和Arbitrum: 這兩個都是專為以太坊設計的擴容解決方案。因此,Optimism和Arbitrum的部分架構位於Layer 1。隨著以太坊的升級,它們的每秒交易數(TPS)上限從原來的2-4k增加到了大約2w。
zkSync 2.0: 相較於zkSync 1.0的幾百TPS上限,zkSync 2.0帶來了顯著的提升。 zkSync團隊宣稱其2.0版本能達到10w TPS的上限,但多數機構預測其真實上限可能在1-2w。 Starknet: 在六月完成了Quantum Leap的升級後,其TPS目前稍微超過100TPS。
Solana: Solana 使用了一種名為Proof of History(PoH,歷史證明)的創新共識演算法作為其擴容方案的核心。雖然Solana自稱其TPS可以達到65,000,但實際上大部分TPS都是作為節點間的通訊。真正的交易量可能只有6-8k TPS上限。而且,由於其中心化的共識機制設計,Solana在面對大量請求時多次出現宕機,如在NFT鑄造時。此外,Solana也尚未成功實現中心節點的輪替。
TON區塊鏈的設計者,來自於Telegram創辦人及核心團隊。作為全球最受歡迎的社交平台之一,Telegram擁有每月活躍用戶近9億,在具備高度的安全性和隱私性的同時,也提供了穩定和流暢的用戶體驗,每天軟體內傳輸數百億條消息。 web3理念已經相對家喻戶曉,但實際上的加密原生用戶依舊是少數者,多數人依賴中心化的交易所接觸通證。世界上最受歡迎的去中心化加密錢包Metamask目前的月活僅3000萬。而TON的設計理念,從一開始基於服務數十億用戶而不僅僅只是少數web3極客。
無限分片範式
分片是一個來自資料庫設計的概念。它指的是將一個大的邏輯資料集分割,然後分散到多個互不共享的資料庫中,這些資料庫可以分佈在多個伺服器上。簡單來說,分片提供了水平擴展的能力,允許將資料分解為可以並行處理的獨立部分。
TON並非首個將分片技術引入區塊鏈中的項目,例如,以太坊2.0曾經宣布了固定的64個分片後因難度太大放棄,而NEAR的夜影協議計劃在明年實現100個分片,目前現行分片有4個。
與傳統的分片方法不同,TON採用了無限分片的策略。
然而,TON的方法之所以被視為先進,並不是因為擁有更多的分片,而是因為以下兩個獨特之處:
-
分片數量不固定:TON根據業務需求支援不斷增加的分片,最大可達2^60個工作鏈,這個數量近乎無限。
-
分片數量具有彈性:TON可以在系統負載高時自動分割分片,並在負載降低時合併它們。這是一種非常有效的應對動態擴展需求的策略。
目前,TON 由兩個工作鏈組成,用於同步和治理的主鏈(Masterchain),以及用於智能合約的工作鏈(Workchain)。在工作鏈之下是分片鏈(Shardchain)以及最底層的虛擬帳戶鏈(Accountchain)
工作鏈可以分為N 個分片(從1 到256 個分片)。每個分片都有自己的驗證器組。工作鏈小組負責在自己的分片中執行交易。同時,它不斷地從其工作鏈的所有其他分片下載區塊。一般來說,區塊鏈是一系列記錄其狀態變化的區塊。對於POS 區塊鏈,驗證者首先透過編譯包含更改清單的區塊來同意他們希望如何更改區塊鏈狀態。之後投票給這個區塊,如果收集到足夠的選票,他們就會將該區塊應用於區塊鏈狀態並移動到下一個區塊。
一個區塊線程的吞吐能力非常有限,因為驗證者必須在同意接受區塊之前檢查該區塊中的所有交易。所以TON中有很多線程,可以簡單地把它們想像成迷你微型區塊鏈。它們並行存在的同時每個都有自己的一組驗證器。
主鏈
主鏈是TON中的主要區塊線程。它用於同步所有其餘的區塊,並重新計算驗證器集。當所有執行緒就新區塊達成一致後,它們對其進行簽名並將其註冊到主鏈中。但是,主鏈驗證器不會驗證該區塊的有效性,它們僅檢查它是否由適當的驗證器簽署。所以很多執行緒可能並行共存。來自不同線程的合約透過發送訊息來相互通信。
工作鏈
工作鍊是獨立的位址空間,可以依照其規則運作。例如,他們可能有不同的虛擬機器或延長發布具有高gas限制的區塊的時間。最重要的是,工作鏈必須具有相同的訊息佇列格式,以便它們可以交換訊息。這也意味著所有工作鏈必須具有大致相同的安全保證。由於它們可以交換訊息,因此這些訊息攜帶網路通證。現在有兩個工作鏈處於活動狀態:主鍊和第一個處理工作鏈。工作鏈由地址前綴決定:-1:ax…1s2 – 主鏈中的帳戶地址。 -1是主鏈前綴。
0:zx…123 – 第一個工作鏈中的帳戶位址。 0 – 是第一個處理工作鏈的前綴。
分片鏈
處理執行緒或叫分片鍊是處理工作鏈中的獨立區塊執行緒。預設情況下,工作鏈0 只有一個執行緒和一個鏈。該線程的驗證者接受外部訊息並處理他們自己發送或從其他工作鏈發送的內部訊息。如果出現執行緒在最近N 個區塊期間過載的情況,則該執行緒將被拆分:一個執行緒被分成兩個,其中的事務並行進行。
位址以0:00.. – 0:88.. 開頭的帳戶現在位於線程1 中,帳戶0:88.. – 0:FF.. 位於線程2 中。由於所有智能合約彼此非同步通信,沒有任何故障,而吞吐量卻增加了兩倍。當負載下降時,線程會在一段時間後合併回來。如果負載持續增加,兩個執行緒可以一次又一次地拆分,以此類推。主鏈只有一個線程。
TON中的區塊不僅僅是需要完成以實現狀態變更的交易清單。相反,一個塊是:
執行事務的訊息列表,將它們從傳入隊列中刪除。訊息處理後進入傳出佇列的新訊息,然後訊息處理導致智慧合約狀態改變。也就是說,為了讓分片X 的驗證器維持分片Y 的目前狀態,它不需要執行分片Y 區塊中的所有交易。它只是下載該區塊並匯總已發生的更改。發生在訊息佇列和智能合約狀態。
從根本上改變區塊鏈世界不可能沒有代價。為了利用這種激進的方法,TON 智慧合約開發者必須以不同的方式設計他們的合約。 TON 區塊鏈的基本原子單元是智能合約。智能合約具有地址、代碼和資料單元(持久狀態)。這種單元被稱為原子單元,因為智能合約始終具有對其所有持久狀態的原子同步存取。
超立方體網路路由
TON獨創了智慧路由機制來確保任何兩個區塊鏈之間的交易始終能夠快速處理,無論系統有多大, 在TON 區塊鏈之間發送訊息所需的時間隨著鏈的數量只以對數方式增加,因此,就算擴展到數百萬條鏈也能使它們以最快速度進行通訊。
在TON區塊鏈中,快速路由(Instant Hypercube Routing)和慢速路由(Slow Routing)是兩種用於處理跨鏈交易的路由機制。
快路由(Instant Hypercube Routing):TON提出的加快訊息路由速度的想法,允許跨鏈交易在極短的時間內完成。在傳統慢立方體路由過程中,一則訊息是由一個分片鏈沿著超立方體網路路由到目的分片鏈。但在訊息路由過程中,這個訊息的目的分片鏈所屬的的驗證器(validator)可以選擇提前處理這條訊息加入區塊,然後提供一個merkel證明(收據),發送回執來銷毀掉這條正在傳輸的訊息。它允許跨鏈交易在極短的時間內完成。快路由透過建構一個高維立方體(hypercube)的路由結構,實現了高效的跨鏈互動。在這個結構中,每個鏈都被映射到立方體的一個頂點,而鏈之間的距離則表示為頂點之間的跳數。透過這種方法,交易可以在最短路徑上快速路由,從而實現跨鏈互動的高效性。快速路由可以在數秒內完成跨鏈交易,而無需等待區塊確認。
慢速路由(Slow Routing):慢路由是一種相對傳統的跨鏈交易處理方法,它透過將交易從來源鏈逐步轉移到目標鏈來實現。在這種方法中,交易首先在源鏈上被打包到一個區塊中,然後透過中繼器(relayer)將其轉移到目標鏈。目標鏈的驗證者會驗證交易的有效性,然後將其打包到目標鏈的一個區塊中。慢速路由相對於快速路由的優點在於它提供了更高的安全性和去中心化程度,因為跨鏈交易需要經過完整的區塊確認過程。類似TCP/IP網絡,透過目的IP位址尋址發送到目的地,能夠保證訊息依序可靠地傳播到目的鏈。對於一個規模為N的分片鏈超立方體網絡,需要經過的中間分片鏈hop = log16(N)-1。因此,只需要4個路由節點(中間分片鏈),就能支援百萬條的分片鏈。
為什麼要這麼設計?
分散式需要驗證節點。如果系統非常龐大要有幾萬個節點,負擔過重無法展開擴展。分片之後每一個分片有一個集合,shard0,shard1……又要做到跨shard通信。通訊是可以跨分片的,從一個到一個分片,就意味著分片和分片要有一個路由機制。連接形成一個路由,通過某些中間節點跳過去。資訊每經過一次路由,相當於傳輸時間增加一個區塊時間。
而隨著分片鏈總數成長,這將需要大量的運算能力和網路頻寬,從而限制系統的可擴展性。因此,不可能直接從任何一個分片直接傳遞訊息到其他所有分片。相反,每個分片只與在它們(w,s)分片標識符的一個十六進制數字上不同的分片“連接”。透過這種方式,所有分片鏈構成一個「超立方體」圖,訊息沿著這個超立方體的邊傳遞。
如果訊息被傳送到與目前不同的分片,則目前分片識別碼的一個十六進位數字(確定性地選擇)將被目標分片的相應數字所取代,結果標識符將作為近似目標,成為轉發訊息的接受者。
超立方路由的主要優勢在於區塊有效性條件,創建分片鏈區塊的驗證者必須收集和處理「相鄰」分片鏈的輸出隊列中的消息,否則就會失去他們的staking。透過這種方式,可以預期任何訊息遲早會到達其最終目的地;訊息既不會在傳輸過程中遺失也不會重複傳遞。
超立方路由引入了一些額外的延遲和費用,因為需要透過幾個中間分片鏈來轉送訊息。但是,這些中間分片鏈的數量增長非常緩慢,與總分片鏈數N 的對數log N相關。
通訊異步
TON 上的智能合約實行的是通訊非同步, 可以把TON 上的智能合約類比成網路微服務。每個微服務僅對其本地資料進行原子同步存取。兩個微服務之間的通訊涉及透過網路發送非同步訊息。
在系統架構中,較大的系統往往需要架構微服務。這種分散式方法需要付出一些trade off才能採用,但可以帶來使用者體驗的好處。現代系統管理依賴像Kubernetes 這樣的序列器來取得一組容器化微服務,並按需自動啟動新執行個體(自動縮放),並在機器之間有效地對其進行分區。
用Kubernetes (大規模叢集管理系統)做類比,這正是TON 所做的事。隨著特定分片鏈上的負載增加,它被分成兩個部分。由於智能合約是原子的,因此它們永遠不會被分成兩半。這意味著曾經位於同一個分片鏈上的一些智能合約有一天可能會發現自己位於不同的分片鏈上。
TON 的虛擬機器(TVM)正在將分散式微服務的概念應用到對標以太坊EVM 的整體架構中。
狀態去中心化
這是分片領域最複雜、最具挑戰性的分片機制。整個資料庫被分開,分別放在了不同的分片上。每個分片儲存自己分片中的所有數據,而不是整個區塊鏈的狀態。
TON區塊鏈分片中,所有服務都以智慧合約的方式實現,智慧合約的狀態資料也只在對應的分片網路中保存,以此來實現狀態分片。
不僅如此,在TON中,合約實現了業界絕無僅有的實現路徑,每個用戶都能在自己的合約管理通證狀態,真正實現了從區塊鏈狀態上的去中心化。我透過案例詳細探討這種設計的原理。
首先,需要先了解Wallet contract和Jetton wallet contract。 Wallet contract是用戶專屬的智慧合約,用於管理用戶在TON區塊鏈上的代幣。 Jetton(俄文:寶石) wallet contract則是一種特殊的Wallet contract,專門用於管理使用者的Jetton通證。這些通證可用於支付網路費用和執行智能合約。每個使用者都有自己的Wallet contract和Jetton wallet contract。這些合約充當用戶的數位錢包,用於儲存和管理通證。同時,這些合約還可以與其他用戶的合約進行交互,實現去中心化的資產轉移和交易。
此時假設用戶A和用戶B分別擁有自己的Wallet contract。用戶A想要向用戶B轉帳一定數量的通證。在這種情況下,使用者A的Wallet contract會與使用者B的Wallet contract進行交互,實現通證的轉移。整個過程不需要依賴一個中心化的合約,而是透過兩個去中心化的合約來實現。
TON區塊鏈的用戶都擁有自己的合約來管理資產狀態,這意味著不存在唯一中心化合約承擔管理所有資產的風險。從而提高了系統的去中心化程度,降低了單點故障的風險。所有使用者的資產狀態由一個專屬的合約管理,攻擊者無法透過攻擊單一的中心化合約來影響整個系統。用戶之間的資產交易也可以透過智慧合約自動執行,避免了人為操作的風險。還可以根據需求自訂自己的Wallet contract和Jetton wallet contract,實現更多的功能和應用場景。這為用戶提供了更大的靈活性和自主權。每個人都在自己的合約中管理資產狀態,系統的可擴展性得到了提升。隨著使用者數量的增加,合約的數量也會相應增加,但這不會對整個系統造成過大的壓力,因為每個合約都是獨立運作的。
以上是我對TON區塊鏈可擴展性以及白皮書技術架構理念的分析,感謝Dr.Awesome Doge對第一版初稿做出了編輯。感謝俄羅斯和烏克蘭開發團隊堅持不懈的深耕,最後感謝Telegram創始人Nikolai Durov先生在多年前的偉大設計,而這些都是為了人類心智的榮耀。