為什麼 RISC-V 不適合作為 L1 交付架構指令集架構 (ISA),以及為什麼 WASM 更勝一籌

本文為機器翻譯
展示原文

本文概要

本文檔代表 Offchain Labs 的觀點,由 Mario Alvarez、Matteo Campanelli、Tsahi Zidenberg 和 Daniel Lumi 撰寫。我們提供此指導,旨在助力以太坊社區的成功。

語境

最近,關於用 RISC-V 取代 EVM 作為以太坊 L1 層指令集架構 (ISA) 的討論甚囂塵上。Vitalik 在以太坊魔法師聯盟 (Fellowship of Ethereum Magicians) 上發表的這篇文章總結了許多支持過渡到 RISC-V的論點。

Vitalik認為,替換當前的ISA將大幅改善以太坊L1擴容的兩個主要限制因素,即:

  • 保持磚塊生產市場的競爭力

  • ZK-EVM 證明的性能

案件概要

我們支持這些目標,但對Vitalik隱含的假設——即一個ISA可以同時完美地服務於零知識證明和智能合約交付——提出質疑。由於將IS​​A寫入L1主要影響智能合約在鏈上的交付方式,我們應該基於ISA在鏈上通用交付和存儲的適用性來評估它們,而不僅僅是基於其證明功能。

我們區分了指令集架構(ISA)在區塊鏈環境中可以扮演的幾種不同角色。特別是,我們討論了交付指令集架構(dISA)的概念,以及使ISA適用於交付ISA的特性。基於這些特性,我們比較了RISC-V和WASM作為以太坊dISA的適用性,並得出結論:WASM是更佳選擇。

  • RISC-V 作為一項開放的硬件標準,是一項令人印象深刻且影響深遠的技術。RISC-V 的設計初衷是簡潔易用,便於硬件實現。然而,我們沒有理由認為基於 RISC-V 的零知識虛擬機 (ZK-VM) 將是 ZK-VM 演進的最終目標;更有可能的是,它們只是演進過程中的一個階段。

  • WASM 被設計成一個與硬件無關的抽象層,它在所有常見硬件上的運行速度幾乎與原生代碼一樣快。作為一種指令集架構 (ISA),它提供了類型安全和易於插樁等特性,這些特性在以太坊環境中尤為重要。選擇 WASM 不會犧牲當前的擴展性,並且有助於保持以太坊未來的靈活性。

組織結構:本文檔的其餘部分結構如下。首先,我們將闡明“L1 ISA”的含義,並構建一個評估不同 ISA 作為智能合約交付/執行/證明格式的框架。然後,我們將簡要介紹 RISC-V 和 WASM,並從幾個關鍵維度對它們進行系統比較:SNARK 可證明性、可執行性、工具兼容性,以及——或許最為重要的——面向未來的兼容性。最後,我們將總結這些比較結果,並解釋為什麼我們認為 WASM 是更佳選擇。

介紹

“L1 ISA”是什麼意思?

當我們談到將 WASM(或 RISC-V)用作“以太坊的指令集架構 (ISA)”時,我們需要明確其具體含義。區塊鏈執行層對指令集的使用方式各不相同,並且可能針對不同的目的使用不同的指令集架構。例如:

  • 當節點執行區塊鏈執行層的狀態轉換函數(STF)時,它們實際運行的是一系列實現該STF的機器碼或字節碼指令。我們將執行鏈狀態轉換邏輯時使用的指令集架構(ISA)稱為執行指令集架構( eISA) 。(就本次討論而言,這是最不相關的指令集架構類型。)

  • 對於支持使用零知識證明虛擬機 (ZK-VM) 的 SNARK 證明的區塊鏈,該 ZK-VM 將在特定的指令集架構 (ISA) 上運行。我們稱之為證明指令集架構( pISA)

  • 支持用戶上傳智能合約的區塊鏈要求這些合約以特定格式上傳。通常,這種格式是某種虛擬機(例如 EVM 或 MoveVM)的字節碼。當區塊鏈以這種方式使用指令集架構 (ISA)(作為交付和部署智能合約代碼的格式)時,我們稱之為交付 ISAdISA

請注意,在Vitalik上面鏈接的文章中,雖然關於RISC-V優勢的大部分論點都與零知識證明(即其作為並行智能系統架構的用途)有關,但實際的提議是將RISC-V也用作分佈式智能系統架構(即智能合約將用RISC-V編寫)。這一點我們稍後會詳細討論。

本文將更具體地論證 RISC-V 並不適合作為以太坊的交付指令集架構 (ISA ),而 WASM 更適合此用途(即用於部署智能合約的 ISA)。在本文的其餘部分,當使用術語“ISA”時,我們將盡量明確所討論的 ISA 的具體作用(例如,eISA、pISA 和 dISA)。

理想的L1 dISA應具備的素質

為了更好地展開討論,我們將首先提出一個框架,用於思考理想的以太坊 L1 層分佈式信息存儲架構 (dISA) 應具備哪些特性。然後,我們將從多個維度比較 RISC-V 和 WASM 的性能;通過比較,我們希望能夠具體地論證為什麼 WASM 在此方面比 RISC-V 具有更好的權衡性。

  1. 高效的SNARK可證明性

    SNARKs 將在以太坊的未來發展中扮演重要角色,因此任何 L1 dISA 都必須支持高效的證明生成。但這並不意味著 dISA 應該與 ZK-VM 使用的 ISA 相同。ZK 證明領域正在快速變化——RISC-V 目前被廣泛使用,但並不能保證它始終是最佳的長期選擇;與此同時,基於 WASM 的新型 ISA 和定製的 ZK 優化 ISA 已經展現出良好的前景。更佳的策略是選擇一個能夠可靠高效地編譯成未來任何最優證明 ISA 的 dISA。

  2. 高效可執行性

    即使在未來EVM能夠通過SNARK驗證的情況下,許多節點(包括硬件資源受限的節點)仍然希望執行完整的區塊鏈或合約的特定部分。因此,任何新的dISA都應該允許在通用硬件上實現良好的執行速度;也就是說,為了實現去中心化,硬件不應過於專業或昂貴。

  3. 與現有工具的兼容性

    構建高效的優化編譯器棧是一項艱鉅的任務——尤其是在構建一個我們必須信任不會向智能合約引入漏洞的編譯器時。因此,為以太坊 L1 層選擇合適的分佈式信息架構 (dISA) 需要一個現有的、值得信賴的編譯器及相關工具生態系統供其使用。

  4. 面向未來和長期適用性

    替換(甚至大幅更改!)以太坊 L1 的 dISA 絕非易事。此前曾多次嘗試,包括最近的 EOF。儘管這些嘗試均以失敗告終,但其中投入的時間和精力足以說明從 EVM 切換到任何其他 dISA 所需的巨大努力。既然社區要投入如此多的精力遷移到新的 dISA,我們就必須確保新的目標不僅在當下是明智之選,而且在未來數年內也能保持其優勢——否則,切換的成本很可能得不償失。

還有一些其他特性值得一提。雖然本文不會重點介紹它們,但它們也很重要,並且代表了 WASM 相對於 RISC-V 的優勢所在:

  • 可讀性

    對於大多數指令集架構 (ISA) 設計者而言,可讀性並非首要考慮因素。然而,對於區塊鏈指令集架構 (dISA) 而言,可讀性卻至關重要。出於安全考慮和 gas 優化,區塊鏈工程師閱讀和操作編譯後的 ISA 代碼的頻率遠高於大多數軟件工程師。如今,許多重要的合約代碼都是直接在 EVM 中編寫或驗證的。由於其結構化的控制流和基於函數的局部變量,WASM 比基於硬件的 ISA 更容易理解和推理。

  • 安全與隔離

    公共 L1 層是一個高度對抗性的環境。一般來說,智能合約作者之間不應該互相信任,節點運營商不應該信任智能合約作者,也不應該信任他們的輸入。使用內置隔離支持的 dISA 架構,可以更容易地保持合約之間的隔離,避免數據和代碼之間的干擾。WASM 架構本身就具備這種能力;RISC-V 架構則不具備。( WASM 文檔的此頁面提供了更多關於 WASM 如何構建安全性和隔離支持的信息。)

RISC-V 和 WASM 的一些背景知識

RISC 代表精簡指令集計算機(Reduced Instruction Set Computer)。RISC-V 是一種專為小型硬件微處理器設計的指令集架構(ISA)。RISC-V 非常精簡,操作碼數量少,並且是免費開源的。它受到常見的嵌入式編譯器(尤其是 Rust、LLVM 和 GCC)的支持。由於 RISC-V 的開源許可,它成為眾多研究項目的熱門目標,包括新的擴展、變體和實現。這些特性使其成為當今通用零知識證明(ZK 證明)的事實標準 ISA。然而,需要注意的是,RISC-V 的設計初衷並非為了高效地進行零知識證明,而是為了在小型硬件微處理器上實現。

WASM 代表 WebAssembly。它最初被設計為一種在 Web 瀏覽器中運行的軟件虛擬機,作為高性能的 JavaScript 替代方案。WebAssembly 的設計目標是在安全封裝的環境中,以接近原生速度實現跨平臺執行。它對底層硬件的具體細節幾乎沒有任何要求。

通常情況下,WASM 代碼不會直接在硬件上執行或解釋。相反,它會被進一步編譯(轉譯)成目標機器硬件支持的指令集架構 (ISA),而第二次編譯會確保代碼能夠合理利用機器的硬件資源。WASM 的設計目標是儘可能降低從源代碼→WASM→本地編譯的開銷,使其低於更直接的源代碼→本地編譯。WASM 力求將所有硬件相關的優化機會保留給後續的編譯階段,因為這些階段能夠感知目標系統硬件的具體情況。

WASM 使用棧來傳遞操作和函數之間的值,但它並非真正意義上的基於棧的機器。這是因為 WASM 還可以訪問局部變量,這些變量用於存儲與多個表達式相關的數據。局部變量使得 WASM 能夠輕鬆地編譯成基於寄存器的機器,而無需考慮寄存器的數量等硬件細節。

高效的SNARK可證明性

如上所述,Vitalik 之所以支持使用 RISC-V 作為以太坊 L1 的指令集架構 (dISA),主要依據是存在一些高效的零知識虛擬機 (ZK-VM),它們都使用 RISC-V 作為指令集架構(例如 Succinct SP1、RISC0ETC)。使用直接支持高效 SNARK 證明的 dISA 具有天然的吸引力,因為此類證明的可用性為在該 dISA 中實現的智能合約的零知識證明提供了一條自然的途徑。不過,目前我們將重點關注以下兩點:

  1. 基於 RISC-V 的 ZK-VM 並不能保證從長遠來看是最佳選擇。

  2. 無論 ZK-VM pISA 的長期解決方案是什麼,只要 dISA 能夠高效地編譯成所需的 pISA,我們就不需要 dISA 與 pISA 完全匹配。

RISC-V 和零知識虛擬機的未來

儘管當前基於 RISC-V 的 ZK-VM 架構表現出色,但 RISC-V 能否長期保持領先地位仍遠未可知。RISC-V 的確為 ZK 證明提供了一些優勢,例如指令集有限,但歸根結底,RISC-V 的設計初衷是針對硬件相關的指標進行優化。因此,我們沒有理由期望一個圍繞這些指標優化的架構也能成為 SNARK 證明的最佳選擇——尤其是在長期發展的情況下。

雖然 RISC-V 目前看似勝出,但基於 RISC-V 的零知識虛擬機 (ZK-VM) 是否就代表了支持高效零知識證明的指令集架構 (ISA) 的“終結”還不得而知。值得注意的是,零知識虛擬機領域尚處於起步階段:RISC Zero直到 2022 年才發佈了首個生產級零知識虛擬機,而Succinct 也只是在今年早些時候才實現了商業上可行的實時主網EVM 證明。

ZK-VM領域持續發生重大變化。例如,最近一些ZK-VM已經從32位RISC-V架構遷移到64位RISC-V架構。假設我們一年前在L1緩存中嵌入了32位RISC-V架構,那麼我們將面臨兩種局面:要麼需要再次修改以太坊的dISA(分佈式信息架構),要麼(更有可能)嵌入32位版本會阻礙基於64位RISC-V架構的ZK-VM的開發和應用,儘管它們具有諸多優勢。這正體現了保持向前兼容性的重要性,以及WASM如何支持可移植性。

也有理由認真考慮這樣一種觀點:非RISC-V指令集架構(ISA),例如WASM,用作並行指令集架構(pISA),在零知識證明方面可能比RISC-V具有固有優勢。例如,Ligero公司的Ligetron(一種基於WASM的零知識虛擬機)能夠利用WASM的結構化特性來提高內存效率。這種結構在轉譯成RISC-V等底層硬件優化指令集架構時會丟失;這表明基於RISC-V的零知識虛擬機可能無法利用這類極具前景的技術。

dISA 可以彙編成 pISA。

這裡更相關的一點是,在為以太坊 L1 選擇 dISA 時,我們不必過分關注是否存在直接支持該 dISA 的 ZK-VM 。畢竟,這只是為用該 dISA 編寫的智能合約生成 SNARK 證明的一種方法。另一種方法是將 dISA 編譯(或轉譯)成一種支持高效 SNARK 證明生成的 ISA(即與 dISA 不同的 pISA)。

這並非僅僅是理論上的可能性,而是 Offchain Labs 與 Succinct 合作中正在積極構建的目標。通過將 WASM 代碼編譯成 RISC-V 代碼,我們不僅能夠對核心Arbitrum STF 進行零知識證明,還能對用戶提供的用 WASM 編寫的Stylus智能合約(作為 dISA)進行零知識證明。雖然目前仍處於原型階段,但我們已經將風險降低到足以確定其可行性的程度(包括證明合約從 dISA 編譯為 pISA,以及證明合約在 pISA 上的執行)。重申一下,我們現在就可以在以 WASM 作為 dISA 的區塊鏈(Arbitrum)上,通過使用基於 RISC-V 的零知識虛擬機 (ZK-VM) 作為後端,對真實世界的區塊進行零知識證明。這具體表明,我們區分 dISA 和 pISA 的觀點,以及我們堅持認為它們不必是同一 ISA 的觀點,對區塊鏈的 SNARK 證明系統的設計具有切實的意義。

圍繞單一中間抽象層進行標準化的理念,即使用一個接口連接系統中各種高層和低層組件,有時被稱為“沙漏模型” 。互聯網網絡協議棧或許是這種架構的最佳例證:各種應用程序構建於互聯網之上,使用不同的傳輸協議(TCP、UDPETC),所有這些最終都以互聯網協議 (IP) 數據包的形式呈現。反過來,這些數據包又通過各種物理鏈路協議(例如以太網)進行傳輸。應用程序無需瞭解鏈路協議的細節,鏈路協議也無需瞭解應用程序的細節:這種關係由 IP 協議協調實現。

我們認為 WASM 可以成為智能合約的互聯網協議,作為智能合約編寫所使用的各種源語言與用於執行和驗證智能合約的各種後端之間的理想中間層。通過分離這些職責,WASM 作為分佈式信息系統架構 (dISA) 可以使智能合約的編程、驗證和執行自由演進,而不是相互制約。

高效可執行性

基於當前(或被認為)最佳的零知識證明指令集架構 (ISA) 來選擇 dISA,可能優化的是錯誤的指標,原因還在於:證明並非一切。如今,節點執行鏈上事務是為了跟上所有必要的狀態和鏈上事件。即使可以通過其他方式(例如使用零知識證明和狀態更新)來跟上鍊上事務,鏈用戶發出的eth_call和 gas 估算請求也遠多於鏈上交易。因此,響應用戶的eth_call和 gas 估算請求是 RPC 節點工作的重要組成部分,並且(根據定義)需要執行用以太坊 dISA 編寫的智能合約。雖然這些工作流程可以橫向擴展,但響應這些請求的成本仍然需要有人承擔,並且應該被視為運行以太坊總成本的一部分。

零知識證明的性能固然重要。然而,我們預計在中長期內,證明成本不會成為以太坊的瓶頸。在當前的 gas 上限下,實時證明的成本平均每個區塊僅約為 0.025 美元。即使 L1 認證需要每個區塊生成多個零知識證明,與構建者從區塊中獲得的 gas 費用和 MEV 相比,這部分成本也微不足道。生成零知識證明的成本在短短几年內已經下降了幾個數量級,而且預計不會出現阻礙其持續改進的重大因素。換句話說,僅僅優化證明者的效率可能適得其反。執行成本是運行以太坊的另一項重要成本,不容忽視。

RISC-V 的設計目標是在硬件上高效執行。然而,目前只有極少數以太坊節點運行在支持 RISC-V 的 CPU 上。為了讓這些非 RISC-V 節點能夠執行用 RISC-V 編寫的智能合約,它們需要模擬 RISC-V 的運行環境,或者將其編譯成機器原生支持的 eISA 指令集。

將執行和證明過程分離,並使用像 WASM 這樣的可移植指令集架構 (ISA),可以兼顧兩者的優勢Arbitrum就是這麼做的,它部署的WASM 代碼作為原生 ARM 或 AMD 代碼執行,這使得 Stylus 的計算成本非常低,而無需高性能 CPU 來執行。

與現有工具的兼容性

RISC-V 的一大優勢在於其對主流編譯器工具鏈的強大支持。LLVM 和 GCC 等主流編譯器都擁有成熟的 RISC-V 後端,這使得開發者能夠將 C、C++ 和 Rust 等語言編寫的代碼直接編譯成 RISC-V 代碼。這種廣泛的編譯器支持是 ZK-VM 項目迅速採用 RISC-V 的重要因素——團隊可以利用現有的、經過實戰檢驗的編譯基礎設施,而無需從頭開始構建一切。

然而,WASM 擁有同樣強大(甚至更強)的編譯器支持。支持 RISC-V 的主流編譯器工具鏈也擁有成熟且維護良好的 WASM 後端。特別是 LLVM,其對 WASM 的支持非常出色,並且一直在積極維護和優化。除了傳統的編譯器基礎設施之外,WASM 還受益於幾乎所有現代 Web 瀏覽器和 JavaScript 運行時的原生支持,這代表著數十億個已部署的執行環境。這種普遍性意味著 WASM 工具已經過測試、強化和優化,其規模之大,其他指令集架構 (ISA) 鮮有匹敵。對於區塊鏈開發者而言,這意味著他們可以訪問一個豐富的調試器、分析器、優化器和其他開發工具生態系統,這些工具經過多年在無數應用程序中的生產使用而不斷完善。

成熟的編譯器生態系統顯然是一項理想的特性,但並非必要條件。以太坊社區或許願意為了其他特性而做出取捨——例如,選擇一個經過零知識庫優化的自定義指令集架構(ISA),從而在證明方面提供更優的性能。但這並不會改變討論的核心:我們為優秀的指令集架構(dISA)概述的基本特性(面向未來、安全性、隔離性、可插拔性以及在各種硬件上的高效執行性)仍然是至關重要的標準。WASM 在這些方面依然表現出色,同時還具備成熟工具帶來的額外優勢。

面向未來與安全性

鑑於替換以太坊的 dISA 需要付出巨大的努力,任何過渡都應該面向未來,也就是說,應該牢記長期可持續性。

前面已經討論過第一層面向未來的保障措施,其實現方式是通過區分 pISA 和 dISA。我們設想以太坊的未來是這樣的:多個相互競爭的證明者使用多個相互競爭的 pISA,每個 pISA 都具有不同的屬性和設計選擇,但所有 pISA 都證明同一個唯一的規範 dISA。

WASM 結構化且經過驗證,因此能夠支持更多未來的應用場景。例如,假設某個 pISA 為“將uint64乘以5 ”這一操作提供了一個特殊的電路,並且希望修改代碼中所有使用常量5的“乘以常量”操作,將其改為調用這個新的特定操作碼。

使用 RISC-V 等面向機器的指令集架構 (ISA)(或大多數其他面向機器的指令集架構)來處理部署為智能合約的任意代碼,可能相當具有挑戰性。RISC-V 中的跳轉要麼指向精確的目標位置,要麼指向代碼中的偏移量(相對於當前程序計數器)。無論哪種情況,跳轉都本質上依賴於正在執行的程序的精確編碼和代碼大小。如果任何靜態工具想要用編碼長度不同的代碼替換函數中的任何部分,則需要找到代碼中所有相關的跳轉並修改它們的跳轉偏移量。事實上,情況甚至更糟,因為 RISC-V 的跳轉目標位置可能是任意計算的結果。

現在考慮用 WASM 編寫的相同場景。這裡沒有任意的jumpgoto語句;只有條件語句、循環語句和函數。所有跳轉要麼是通過索引調用函數,要麼是在不同的變體之間進行選擇(if-else 語句),要麼是在循環內部進行跳轉,要麼是在循環外部進行跳轉。跳轉不會因為代碼編碼或大小的改變而改變。

此外,WASM 代碼可以進行驗證。有效的 WASM 代碼具有以下幾個理想的特性:

  • 它只能從棧中讀取被調用時位於棧頂的參數,並且只能讀取它應該讀取的參數數量。

  • 它無法訪問未聲明的局部變量或全局變量。同樣,它也無法訪問任何其他函數的局部變量。

  • 它是類型安全的,確保每個函數的輸入和輸出類型與預期相符。

至關重要的是,驗證(檢查這些屬性)所需的時間與被驗證的WASM代碼的長度呈線性關係。這完全得益於WASM的設計;以自動化、高效的方式檢查RISC-V機器代碼(或任何其他傳統指令集架構的機器代碼)的這些屬性將非常困難。

WASM 代碼的結構和有效性相結合,使得我們可以對代碼進行分析,甚至進行高度自由的修改。在上面的例子中,我們可以在 WASM 代碼中找到任何 ` i64.const 5操作碼後緊跟 ` i64.mult操作碼的地方,刪除這兩個操作碼,並用新的特殊操作碼取而代之。新的操作碼可以比之前的兩個操作碼更短或更長,甚至可以調用特殊函數而不影響周圍的任何代碼。

為了展示結構化ISA在區塊鏈環境中的價值,我們可以考察Arbitrum如何利用WASM的結構化特性:

  • 我們的樂觀框架 Arbitrator 使用 WAVM 作為其 pISA(是的,即使是樂觀證明器也可以有 pISA!)。WAVM 與 WASM 非常相似(兩者之間存在一些差異,但在這裡並不重要)。Arbitrator 接受 WASM 代碼作為輸入,並對其進行一系列轉換。WAVM 的指令編碼方式與 WASM 不同,並且某些 WASM 指令由多個 WAVM 操作碼實現。然而,由於 WASM 不依賴於任何代碼片段的位置、編碼或大小,因此從 WASM 到 WAVM 的轉換簡單、快速且確定。

  • WASM 的結構化特性是我們如何安全地為用戶提供的 WASM 智能合約(Stylus)添加 gas 計費功能,使其能夠在鏈上安全運行的核心部分(參見“與現有工具的兼容性”)。

WASM之所以能夠面向未來,其特性也使其更易於審計,無論是人工審計還是機器審計。WASM的結構和有效性意味著,例如,任何輸入都不會被轉換為可執行代碼,讀取局部變量的代碼也永遠不會被修改為從內存或其他函數讀取數據。這將提高智能合約和整個系統的安全性,同時仍然允許我們利用未來零知識證明方面的創新(如上所述)。

結論

本文闡述了區塊鏈可能使用多種不同的指令集架構(ISA)來實現不同目的(例如證明、交付、執行)的觀點。當 Vitalik 等人討論將 RISC-V 作為以太坊 L1 的新 ISA 時,他們(用我們的話說)認為,RISC-V 作為通用的 pISA,也是 dISA 的理想選擇。然而,正如我們前面討論過的, pISA 和 dISA 並非必須相同。我們討論了這一點如何從根本上改變了討論的框架。

對於指令集架構 (ISA) 的證明而言,零知識虛擬機 (ZK-VM) 領域發展迅速,現在判斷哪種 pISA 最適合在以太坊 L1 層執行證明可能還為時尚早。以太坊社區應該選擇一個靈活的分佈式指令集架構 (dISA),使其能夠兼容多種 pISA。WASM 正是理想之選。

我們認為,正如上文所述,在諸多相關方面,WASM 比 RISC-V 更適合用於交付智能合約。WASM 具備強大的安全性、隔離性和檢測功能;強大的編譯器和工具鏈支持;高效的執行(證明);而且,或許最重要的是,它足夠靈活,能夠適應區塊鏈執行和證明領域未來充滿不確定性和快速變化的環境。對於 SNARK 證明而言,它絕不會成為負擔。

我們很高興看到社區如此熱衷於 L1 執行層的演進。正如 RISC-V 的支持者們所認為的那樣,如果以太坊要兌現其實現新型信任關係和構建更易於訪問的金融基礎架構的承諾,就必須超越 EVM 作為以太坊唯一支持的指令集架構 (ISA)。在以太坊演進的這個重要節點,我們希望本文提出的觀點能夠幫助大家做出更具前瞻性的決策,從而在未來幾年內構建一個更完善的 L1 執行層。


來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論