跳到主要內容

BEAM 完美適合區塊鏈的四個理由

ArcBlock
ArcBlockBlockchainErlangSDK

本文原由 Tyr Chen 與 Riley Shu 撰寫並發表於 Erlang Solutions Blog

我最初是透過 Joe Armstrong 的一次分享認識 Erlang/OTP;他將世界拆解為能像人類一樣彼此溝通的程序。加入 ArcBlock 後,我們負責建構區塊鏈平台,並決定在後端服務及區塊鏈框架 Forge 中廣泛採用 Erlang/OTP。本文將說明原因。藉由 OTP 的功能,我們得以建構高度實用且可正式營運的區塊鏈框架,不僅提供執行區塊鏈網路的關鍵服務,也大幅簡化下一代應用程式與服務所需的工作。

區塊鏈框架入門

Forge 是一項能大幅簡化框架建構流程的工具,可支援多鏈網路或 Build Your Own Chain(BYOC)概念。在 Forge 出現以前,建構一條鏈非常困難。若想啟動自己的區塊鏈,必須先設定共識演算法、P2P 網路及其他許多元件。讓它們協同運作後,還要決定代幣總供應量與分配、特定交易設定、管理員存取控制等參數。即使終於成功啟動,只要發現一點小問題,也必須停止所有執行中的節點並重新設定。

Forge 運用 Erlang/OTP 現有的功能與優勢,替開發者完成所有艱難工作。以 Forge 啟動區塊鏈時,只需在設定或執行階段啟用或停用相應行為。鏈啟動後若要更新,也能對系統個別部分進行熱升級,無須重新啟動整個節點;這是任何產品級應用程式或服務的關鍵功能。

在框架的設計與規劃階段,我們也評估了 Golang 等區塊鏈社群中的熱門語言。Golang 擁有一些相當先進的程式庫等優點,但為了打造我們希望交付給客戶的穩健平台,有三項因素真正促使我們選擇 Elixir。

程序讓問題變簡單

第一,需要將複雜問題拆解為程序。區塊鏈本身是許多問題解決方案的組合,而 OTP 讓我們能逐一拆解並處理。將不同程序靈活組合為應用程式,也有助於維護程式碼庫。

建構區塊鏈節點與建構作業系統十分相似。我們必須協調一系列「應用程式」交換事件(例如區塊鏈交易)、執行事件,再儲存更新後的狀態。這個結構很容易拆解為幾個核心應用程式:

  • 共識應用程式:管理共識相關工作的程序
  • 儲存應用程式:管理檔案系統相關工作的程序
  • Forge 應用程式:執行智慧合約並支援 RPC 介面的程序
  • 事件應用程式:管理事件訂閱的程序
  • 索引器應用程式:持續從狀態資料庫取得資料,並將其索引至關聯式資料庫的程序

在這些應用程式內,Forge 還有其他程序協同處理區塊鏈交易活動。例如:

  • 使用者傳送交易時,由 gRPC 伺服器處理並推送至 mempool 佇列
  • 交易有效便插入 mempool 並傳播至整個網路,否則予以捨棄
  • 新區塊同步後,逐一取出交易,由智慧合約引擎執行

協調這些活動並不容易,但 OTP 讓我們透過持續的分而治之方式輕鬆管理程序複雜性:功能組成應用程式,每個應用程式組成監督樹,每棵樹又包含許多小程序。需要並行處理時建立程序池;需要穩健的循序處理時則使用單一程序,其收件匣本身就是訊息佇列,確保工作依正確順序執行。

輕鬆處理當機

第二是「Let it crash」思維。區塊鏈系統由許多透過網路連接並執行的實體組成,因此必須有適當的錯誤處理系統,才能在網路不穩或發生其他意外中斷時維持整體運作。

例如,某個程序為處理 RPC 請求而讀取鏈上資訊,卻因網路不穩而當機,但只需重試幾次即可解決時,OTP 的監督器會讓程序恢復。這完美呈現 Joe Armstrong 所說的「編寫一次,永久執行」。

為區塊鏈預備的內建能力

選擇 Erlang/OTP 的第三個重要理由,是它內建許多適合區塊鏈系統的優秀功能,例如熱升級、並行處理與高可用性。

區塊鏈框架的職責之一,是以混合方式執行框架本身和客戶的程式碼,因此需要安全隔離才能正常運作。

例如,使用者定義的智慧合約可能使用與框架合約相同的變數名稱;客戶也可能以自己的實作替換共識引擎等系統元件,或在不影響可用性與穩定性的情況下,於執行階段加入新功能。因此,Forge 建構於歷經實戰考驗的成熟系統之上,擁有我們所需的功能。

開放的彈性

Erlang/OTP 為區塊鏈框架帶來一項勝過其他語言的重要優勢:彈性。Forge 在設計上開放擴充,你可以加入更多應用程式,實作更複雜的功能,例如使用不同的共識引擎。

在 Erlang/OTP 框架中建立的區塊鏈網路,讓使用者能依需要熱升級智慧合約,無須關閉整個系統。如果為了升級部分程式碼而停止一個節點,通常必須同時升級所有節點,確保它們使用相同邏輯並產生相同結果。OTP 則能將部分升級包含在一筆交易中,讓所有節點執行該交易並同時升級程式碼。

總結

如果未來再次選擇技術來建構區塊鏈框架,我們的團隊百分之百會使用 Erlang/OTP。其他人仍在為複雜系統的建構與維護苦戰時,Erlang/OTP 已歷經時間考驗,並在高壓環境中證明自身價值。今日的 Erlang/OTP 已替我們解決大部分挑戰,讓團隊能更專注於打造高階功能並提升易用性。

本頁涉及

術語

  • SDK

    一個平台隨附的函式庫和工具,讓開發者不必手寫協定本身。它涵蓋了什麼、把什麼留給你,相當準確地概括了這個平台實際承擔了多少責任。

  • 區塊鏈

    透過密碼學連接記錄,並按共同的驗證與共識規則確定交易歷史的分散式帳本。