什麼是Subscript?

什麼是Subscript? 這門語言第一次出現在大眾的視線,是在2020年第三季度的Web3基金會Grant計劃接收者名單里:Subscript——AssemblyScript中的Substrate智能合約API和SDK。 本文中筆者將從波卡S

什麼是Subscript?

這門語言第一次出現在大眾的視線,是在2020年第三季度的Web3基金會Grant計劃接收者名單里:Subscript——AssemblyScript中的Substrate智能合約API和SDK。

什麼是Subscript?

本文中筆者將從波卡Substrate智能合約開始梳理,幫助讀者理解Grant對Subsciript成就的定義。

一、Substrate智能合約

在 Substrate出現之前, 要造一個自定義的區塊鏈非常麻煩, 需要考慮很多因素, 比如安全, 可升級, 擴展, 跨鏈等等, 並且還需要做大量的編碼和測試。開發者需要對狀態樹 、p2p網路,、共識協議等鏈上的技術問題有足夠深入的了解,才能進行區塊鏈的編程。Gavin Wood在開發波卡的過程中,經過思考,認為其實區塊鏈發展這幾年,大家做的很多事情都是相同的。根據他以往的開發經驗,當大家發現每個人都在做相同的事情的時候,就會將這件事情進行抽象,然後造「輪子」,將這些高層次的東西做封裝,成為「開發框架」,將背後複雜的基礎設施都封裝起來,而使用這個「框架」的開發人員,就可以更加專註於自己的業務邏輯,而不必花費大量的精力去造「輪子」去完成那些每個鏈都要做的事情。Gavin Wood 將波卡及以太坊已有的成果進行抽象,命名為「Substrate」作為區塊鏈開發的基礎框架,並把全部精力都轉移到了Substrate開發中。所以「Substrate」就是區塊鏈世界的第一個「輪子」。

Substrate框架默認提供了很多功能模塊,比如 Staking,Consensus,方便框架使用者根據自己的需求進行自由組合和定製。合約模塊就是其中的一個功能模塊,FRAME 合約模塊(SEAL)為 Runtime 提供部署和執行 WebAssembly 智能合約的功能。不管是任何一條基於 Substrate 技術的獨立鏈,還是未來的平行鏈, 只要集成了合約模塊,就可以成為一個智能合約平台。

傳統的智能合約平台(如以太坊系統)允許用戶在一些核心區塊鏈邏輯的基礎上增加額外的邏輯。由於任何人都可以發布智能合約邏輯,包括惡意行為人和缺乏經驗的開發人員,因此這類智能合約平台頻繁發生DeFi合約安全漏洞。

而Subscript智能合約犧牲了這種「邏輯之上增加額外邏輯」的靈活性,避免了一些複雜的邏輯可能產生的漏洞,以獲得更多的安全性和互操作性。

二、API&SDK

API和SDK沒有什麼值得比較的區別。API(Application Programming Interface,應用程序介面)是一些預先定義的介面(如函數、HTTP介面),或指軟體系統軟體系統不同組成部分銜接的約定;SDK(Software Development Kit?)一般是指一些軟體工程師為特定的軟體包、軟體框架、硬體平台、操作系統等建立應用軟體時的開發工具的集合。

當人們的電腦需要調用手機裡面的信息,會拿一根數據線將電腦手機連接起來,電腦和手機上連接數據線的介面就相當於「API介面」;當一家公司開發出某種軟體的某一功能,把它封裝成SDK(比如數據分析SDK就是能夠實現數據分析功能的SDK),出售給其他公司做開發用,其他公司如果想要給軟體開發出某種功能,但又不想從頭開發,可以直接購買該SDK使用。

如果把SDK想象成一個虛擬的程序包,在這個程序包中有一份做好的軟體功能,這份程序包幾乎是全封閉的,只有一個小小介面可以聯通外界,這個介面就是API。

三、WebAssembly&AssemblyScript

WebAssembly(WASM位元組碼)是瀏覽器的基礎語言,為開發人員提供了除JavaScript之外的編譯目標。它使網站代碼可以在安全的沙盒環境中以接近本地機器碼的速度運行。Webassembly以二進位格式交付,這意味著與JavaScript相比,WebAssembly在大小和加在時間上都有優勢。波卡使用WASM作為全部鏈上Runtime的位元組格式,同時WASM也是波卡智能合約的主要格式。

WebAssembly被設計為對C和C++具有良好的支持,Go語言在Version 1.11中增加了實驗性支持的版本中,Rust也對其進行了大量投入。

對於Web開發人員來說,學習使用WebAssembly可能會有一個很艱難的過程,但AssemblyScript的出現解決了這一問題。AssemblyScript是一個將TypeScript 編譯成WebAssembly的編譯器。因為它與JavaScript非常相似,所以AssemblyScript使Web開發人員可以輕鬆地將WebAssembly整合到他們的網站中,而不必使用完全不同的語言。

四、Subscript

至此,我們可以來解讀Subscript了。

Subscript是整體為WASM設計的原生合約語言, 並提供了對WASM底層的訪問指令。Subscript使用Web開發者熟悉的TypeScript語法,通過AssemblyScript項目將一部分TypeScript編譯為WASM。Subscript可以支持任何和Substrate架構兼容的智能合約開發平台,並支持開發波卡原生智能合約。

Subscript相比Parity官方基於Rust的ink!語言,提供了更加易用的特性:

A、無需Rust開發基礎,Web開發者可以快速入門;

B、與JavaScript良好的互操作特性,便於與Dapp的集成;

C、易用的開發環境支持,可以基於現有的js IDE運行部署和測試。

4.1 Subscript合約編譯

Subscript使用久經驗證的Binaryen編譯框架編譯智能合約,在編譯時著重減少生成代碼的體積。在處理WASM底層代碼時,Subscript能夠提供比C++和Rust更快的執行速度。

Subscript對Binaryen編譯框架加入了語言擴展,使其能夠直接支持對象結構體到合約狀態樹的映射。Subscript的狀態裝飾器內置了狀態的序列化和反序列化功能。開發者對結構體添加狀態裝飾器后,語言能夠自動把結構體序列化為狀態樹中的字元串,反序列化時同理。

什麼是Subscript?

Subscript合約編譯

4.2Subscript合約調試與開發環境

Subscript使用SourceMap進行一系列的調試動作,使用Subscript Workbench作為IDE開發環境。

Subscript使用SourceMap機制生成編譯代碼到源代碼的映射。SourceMap是一個有關源代碼信息的文件,通過SourceMap可以知道編譯后的代碼在源代碼中的位置和標識符。在調試的時候,調試工具在斷點位置能夠給出對應的源代碼位置,這會給開發者帶來極大的方便。

Subscript能夠提供調試支持的智能合約虛擬機正在開發當中,虛擬機能夠提供WASM的單步執行功能,並顯示所有的堆棧信息。在源代碼中加入斷點后,虛擬機能夠暫停當前的執行邏輯,列印出詳細的堆棧信息和內存數據。

Subscript Workbench是一個基於瀏覽器的智能合約集成開發環境(IDE)。Subscript Workbench與以太坊開發環境Remix相似,自帶了WASM智能合約開發所需的編譯工具。Dapp開發者可以在Subscript Workbench中同步Github中的代碼、創建智能合約項目、編譯WASM、發布到測試網路。

在智能合約虛擬機開發完成後,Subscript Workbench還可以提供類似Remix的智能合約的在線調試功能,開發者可以選擇在瀏覽器源代碼中加入斷點,單步調試編譯后的WASM代碼。

五、Subscript的價值成就

目前,使用WASM運行智能合約環境是Polkadot、ETH、EOS等公鏈的主流趨勢。如果以太坊基礎設施的虛擬機(EVM)正準備進行一次徹底的重寫。重寫后,目前的EVM將被一個名為 EWASM的新虛擬機所取代,這也是WASM虛擬機的以太坊版本。

EVM雖然有較高的兼容性,但需要預編譯,同時需要付出Gas作為代價,有著很高的編程成本。這種程序本質上是腳本程序,即由程序翻譯指令並執行,而不是由本地機器CPU讀取指令並執行,因此效率低下。而Java的操作相對重複繁瑣,在執行過程中耗時較長。由於EVM需要預編譯,同時需要付出Gas作為代價,實際上在EVM上編程成本很高。同時對於EVM的臃腫毫無幫助。最後,Solidity相比其語言基礎C比較難學。而WASM是內存安全、平台獨立的,並且可以有效地映射到所有類型的CPU架構。作為Web誕生以來首個Java原生替代方案,其指令集效率高,同時保有足夠的可移植性。此外,WASM指令集可以很容易地通過移除浮點指令來確定化,這使它適合於替換EVM語言。

Subscript語言實現了基於波卡Substrate框架的WASM虛擬機兼容。不同於Solidity的EVM兼容,WASM與波卡分片多鏈結構有著更好的向後兼容能力。開發者使用Subscript語言開發波卡智能合約,不會產生類似以太坊智能合約平台的歷史包袱,隨著未來波卡Polkadot平行鏈生態的豐富,這一點將變得至關重要。

—-

編譯者/作者:TrustBase

玩幣族申明:玩幣族作為開放的資訊翻譯/分享平台,所提供的所有資訊僅代表作者個人觀點,與玩幣族平台立場無關,且不構成任何投資理財建議。文章版權歸原作者所有。

0

發表迴響