深入解析PolkaVM:了解Polkadot 2.0 的絕佳路徑

從波卡發布的2025 路線圖來看,PolkaVM 無疑是最重要的技術更新之一。本文將詳細介紹PolkaVM 合約的開發、部署和測試。

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

從波卡發布的2025 路線圖來看, PolkaVM無疑是最重要的技術更新之一,而最先部署和應用的一個就是對Solidity 的支持,在Westend 的Asset Hub 上。大家首先需要了解的是這個實作不是之前的Frontier,它被廣泛的應用在Moonbeam 和其他支援EVM 的平行鏈上,而是在新的基於RISC-V 的PVM 上運行Solidity 程式碼。對於許多DApp 和智能合約的開發者,這將是進入和了解Polkadot 2.0 的絕佳路徑。由於Solidity 的開發者基數大,也會為Polkadot 2.0 帶來很多的開發者,讓大家可以看到PVM 的強大和高效的執行效率。我們先看下它的基本原理和技術架構,我們的智能合約解決方案包含以下元件:

revive pallet

這是執行智能合約的區塊鏈模組。它像任何其他pallet 一樣添加了一堆外部函數和運行時API。但是,它還添加了允許區塊鏈處理以太坊風格交易的邏輯。這些特殊交易不會直接提交到鏈中。儘管這在理論上是可能的。原始碼可以在此目錄下查看:

🔗https://github.com/paritytech/polkadot-sdk/tree/master/substrate/frame/revive pallet

相反,用戶(錢包、Dapps 等)連接到與區塊鏈節點一起部署的代理伺服器。此代理程式模擬以太坊Json RPC,這意味著它將以太坊JSON RPC 介面公開為伺服器並作為網路客戶端連接到節點。它將以太坊交易重新打包成一個特殊的可調度文件,同時保持有效載荷不變。解碼以太坊交易並將其轉換為pallet-revive 可以理解的內容取決於上述邏輯。透過將以太坊交易的有效載荷逐字提交給區塊,我們可以輕鬆調整不需要處理不同交易格式的工具(例如區塊瀏覽器)。

選擇使用獨立代理是有意為之:向節點二進位檔案新增端點需要其他客戶端來實現它們。這就是我們選擇這種不需要對客戶端進行任何更改的方法的原因。

PolkaVM

這是我們與競爭技術相比做出的最明顯的改變。我們使用新的自訂虛擬機器而不是使用EVM 來執行合約。目前,我們在運行時本身包含一個PolkaVM 解釋器。稍後的更新將提供在客戶端內運行的完整PolkaVM JIT。請注意,我們仍將保持解釋器可用,以便我們可以為每個工作負載使用最合適的後端。例如,對於僅執行很少程式碼的合約調用,解釋器仍然會更快,因為它可以立即開始執行程式碼(惰性解釋)。要了解細節的可以去查看專案的原始碼:

🔗 https://github.com/paritytech/polkavm

與EVM 的兩個根本差異是:

暫存器機

EVM 是一台堆疊機。這意味著函數的參數在無限堆疊上傳遞。 PolkaVM 是基於RISC-V,這是一種暫存器機。這意味著它在一組有限的暫存器中傳遞參數。這樣做的主要好處是,由於這些都是暫存器機,因此它使轉換到底層硬體的步驟更有效率。我們仔細選擇了暫存器的數量,使它們比臭名昭著的暫存器匱乏的x86-64 指令集要小。讓我們將NP-hard 暫存器分配問題簡化為簡單的1 對1 映射是PolkaVM 快速編譯時間的秘訣。

減少字長

EVM 使用256 位元的字長。這意味著每個算術運算都必須對這些大數字執行。這使得任何有意義的數字運算都非常慢,因為它必須轉換為許多本機指令。 PolkaVM 使用64 位元的字長,這是底層硬體本機支援的。也就是說,當透過YUL(#Revive)轉換Solidity 合約時,我們仍然會得到256 位元算術,因為YUL 太低級,無法自動轉換整數類型。但是,完全可以用不同的語言編寫合約並從Solidity 無縫調用。我們設想一個系統,其中業務邏輯用Solidity 編寫,但底層架構用更快的語言編寫,類似於Python,其中大部分繁重的工作由C 模組完成。

Revive

為了在PolkaVM 上運行Solidity,我們需要將其編譯為RISC-V。為此,我們需要一個編譯器。它的工作原理是使用原始solc 編譯器,然後將其中間表示(YUL) 輸出重新編譯為RISC-V。與實作完整的Solidity 編譯器相比,這樣做的好處是任務要小得多。透過選擇這種方法,我們支持Solidity 及其所有不同版本的所有怪癖和怪異之處。專案的地址是https://github.com/paritytech/revive,需要了解細節的可以去查看專案的原始碼。

Remix

Remix 是開發Solidity 最受歡迎的工具,它是基於網頁的,讓我們隨時都可以開發,調試和部署合約。 Polkadot 也提供鏈一個自己的版本,https://remix.polkadot.io,可以透過這個網站來存取。我們維護REMIX 的一個分支的原因是,與原始版本相比,主要的變化是我們需要更改編譯器,因此我們將REMIX 更改為使用後端進行編譯,而不是瀏覽器內的編譯器。這是必要的,因為我們基於LLVM 的revive 對於瀏覽器來說太重了。

開發實務

了解完整個原理,我們可以動手實踐,看如何來完成合約的開發、部署和測試。我們可以參考這個文件:

🔗 https://contracts.polkadot.io/

開發測試環境

首先在westend asset hub中已經整合了revive pallet,可以直接在上面開發和測試。

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

當然你也可以搭建自己的本機測試環境,這樣更容易查看後端日誌,了解錯誤訊息。

1. 下載polkadot sdk 的程式碼並編譯Kitchensink node

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

2. 啟動node

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

3. 單獨編譯Eth RPC Proxy

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

4. 啟動RPC 服務

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

當以上服務都啟動之後,普通的substrate 的服務會在9944 端口,Eth 會使用8545 端口。

Solidity 合約

首先我們可以嘗試Solidity 合約,你可以直接使用Remix 來開發。在Environment 中,預設已經有westend 的配置了,如果使用本地環境來測試,可以增加customize 的配置。

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

這樣就可以透過和我們之前啟動的Eth RPC 服務互動。當然如果是開發一個複雜Dapp 應用,可以使用其他框架。這裡推薦大家使用Typescript 和Viem 來實驗,我們可以參考revive pallet 自帶的測試程式碼:

🔗 https://github.com/paritytech/polkadot-sdk/tree/master/substrate/frame/revive/rpc/examples/js

它也有使用Rust 語言的版本,在和它平行的目錄下。一個部署合約的簡化版程式碼如下:

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

1. 首先我們初始化一個wallet client。

2. 如何使用abibytecode來部署一個智慧合約,這裡我們選擇examples裡面的一個簡單合約, piggyBank 。要注意的是這裡的bytecode是編譯成polkavm的程式碼。

3. 呼叫一個讀取的函數。

4. 發送一個交易去更新在合約裡面的這個值。

5. 在交易完成後再次查看數值是否已更新。

Rust 直接寫合約

除了使用Solidity,我們也可以直接使用其他語言來寫合約,然後編譯成polkavm 的程式碼然後直接部署。這裡我們參考https://github.com/paritytech/rust-contract-template。

直接部署polkaVM 合約,我們就不需要使用Eth RPC 了。當合約編譯好了之後,我們可以使用revive 的upload 方法將合約上傳到鏈上。

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

在呼叫成功之後,我們可以在瀏覽器的event 裡面找到code 的hash,例如在我的例子裡面,hash 值是0x9bef6d3f29397e4994d96657375674096379ba850c31f8c7b950a6f9c13

下面一步就是對合約實例化,呼叫revive 的Instantiate 方法。

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

這裡會碰到一個account unmapped 錯誤。需要先呼叫account map 的方法,才能部署合約和呼叫。

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

然後再一次嘗試實例化,就會成功。

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

我們來記錄一些合約地址,它是一個標準的Eth 地址,在這次部署中,合約地址是0xce58c0af740d49e573998ce92c9147565604d321。

最後我們呼叫revive 的call 方法,填入先前實例化的合約位址。這樣我們就完成了一個PolkaVM 合約的開發,部署和測試。

深入解析 PolkaVM:了解 Polkadot 2.0 的絕佳路徑

持續build

當完成來基本的環境搭建,開發流程,之後就可以完成更複雜的業務邏輯。總的說來,polkaVM 還處於早期,大家碰到了問題,或者希望幫忙完成一些功能,修復bug 都可以積極向這些repo 提交PR。

相信隨著2025 年polkadot 2.0的功能逐步delivery,polkaVM 的使用場景和使用範圍會越發廣闊,新創項目也可以提前做好技術儲備,準備好在JAM 上開發出安全高效的產品。

分享至:

作者:OneBlock Community

本文為PANews入駐專欄作者的觀點,不代表PANews立場,不承擔法律責任。

文章及觀點也不構成投資意見

圖片來源:OneBlock Community如有侵權,請聯絡作者刪除。

關注PANews官方賬號,一起穿越牛熊
推薦閱讀
16小時前
19小時前
2025-12-13 08:07
2025-12-13 03:43
2025-12-13 03:01
2025-12-13 02:30

熱門文章

行業要聞
市場熱點
精選讀物

精選專題

App内阅读