正如之前在論壇上討論的,我們團隊目前正在探索一種基於PolkaVM的替代合約運行時(runtime)。由於我們希望新的運行時與Solidity高度兼容,因此已經开始着手开發新的Solidity編譯器。
此前,我主要致力於Hyperledger Solang3的工作,並且實現了一個針對PolkaVM的實驗性目標。
什么Solang?
你現在可能會問,爲什么要啓動這個新項目呢?原因主要有以下幾點:
- Solidity是一個持續發展的目標;
- 开發一個與以太坊Solidity完全兼容的編譯器是一項龐大的任務;
- Solidity本身也存在一些不足(下面會詳細解釋)。
與最初开發Solang時相比,我們現在可以利用YUL,這是solc使用的中間表示(IR)。我們不是直接將Solidity編譯爲LLVM IR,而是讓solc生成YUL IR,然後再將其編譯爲LLVM IR。作爲IR,YUL比Solidity簡單得多,也不像Solidity那樣頻繁變動;構建一個將YUL IR轉換爲LLVM IR的編譯器所需的工作要少得多。
ZKSync在他們的zksolc1Solidity編譯器中採用的相同方法。通過重用他們代碼庫的一些部分,我們能夠迅速地將一個重新編譯的flipper合約作爲pallet合約運行的原型證明(PoC)拼湊起來。
簡而言之:
- 使用solc處理Solidity源代碼爲我們節省了很多工作。
- 重新編譯YUL(如果需要的話,還可以回退到EVM字節碼)顯著提高了PolkaVM上的Solidity兼容性。
- 使我們的運行時得到工具和錢包的支持變得更加簡單。
新的RIS-V合約運行時:全面的基准測試
理想情況下,我們的RISC-V運行時在執行性能上要比Wasm和EVM運行時好得多,同時還能保持非常有競爭力的啓動和編譯時間。
初步基准測試顯示,對於計算密集型代碼,RISC-V可能比Wasm合約快一個數量級以上——無論如何,EVM在這方面的表現更差。這使得一些迄今爲止無法直接在智能合約中實現的令人興奮的新應用成爲可能(例如,驗證STARK證明而不依賴於任何特定的宿主函數(host functions)——是的,這仍然會比使用宿主函數慢,但我們獲得了更多的靈活性)。
然而,傳統的合約工作負載並不計算密集;它們每筆交易執行的代碼很少。在這裏,快速的啓動和編譯時間是關鍵:即使一個合約運行時在編譯合約代碼方面做了大量優化,但如果其執行性能接近原生代碼,那么在平均情況下,它仍然可能輸給就地解釋器(in-place interpreters)。
我們期望我們的合約運行時在這兩個維度上都表現出色!爲了實現這一目標,我們正在建立一個全面的基准測試套件,用以比較不同的Solidity兼容合約平台,如pallet-contracts和pallet-evm。
我們將測量運行時和設置部分所消耗的實際時間(wall clock times)。我們計劃使用多樣化的合約集合進行測量:
- 合成的(例如,執行計算密集型工作的小型代碼,執行非常少計算工作的大量代碼等);
- 經典的合約用例,如ERC20通證的轉移或ERC721NFT鑄造;
- ETH主網上最受歡迎的合約;
- RISC-V的新用例(例如,目前在EVM甚至Wasm上不可行的密碼學計算)。
基於Wasm的運行時將能夠運行ink!以及Solidity案例;與其他Wasm和EVM解釋器甚至eBPF的交叉驗證也是可能的。
如果您認爲有任何特定的合約或算法應該包含在這個基准測試套件中,請在這裏告訴我們!
總結
這篇文章涵蓋了我在Parity的衍生合約團隊積極工作的新技術進展。我們希望在今年晚些時候交付第一個工作版本的編譯器以及一個確定性的智能合約基准報告。請繼續關注未來的更新!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。