Parity 亞洲區技術總監賈瑤琪分享基於波卡生態 Substrate 框架開發的技巧和經驗。

原文標題:《密碼極客 & 波卡生態系列分享會第一期:如何基於波卡開發區塊鏈項目》
演講:賈瑤琪, Parity 亞洲區技術總監

2020 年 10 月 20 日,密碼極客發起了第一期【波卡生態系列分享會】。我們非常榮幸邀請到了 Parity 亞洲區技術總監賈瑤琪博士做客密碼極客大咖直播間,爲大家講解《如何基於波卡開發區塊鏈項目》。

賈瑤琪博士的演講觀點新穎,理論詳實,引人入勝。密碼極客爲了使小夥伴們能夠再一次回顧這場精彩的講演,特意對此進行了歸納整理。

在波卡上如何開發區塊鏈系統 ?

大家作爲不管是開發者或者是區塊鏈從業人員,應該都能感覺到從零開始構造一個區塊鏈是一個非常困難的事情,爲什麼說是很困難的事情?

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 1

大家可以看一下圖 1,其實要從頭開發一個區塊鏈,你要考慮到的就不只是數據庫公式算法,還要考慮到處理各種各樣的交易相關的一個轉換函數。與此同時,如果你想加一些比較複雜或者先進的一個邏輯在裏邊,例如零知識證明,這樣就要在開發區關聯時候額外添加這些比較複雜的算法以及功能。

那麼大家其實就會想到我們如何使用已經有的這些,不管是公鏈技術或者是聯盟鏈技術來進行二次開發。其實在過去的十幾年當中,特別是從 09 年比特幣白皮書這樣的一個上線,以及 15 年以太坊系統的上線,大家可以看到區塊鏈不止可以做支付,而且還可以在上邊部署一些智能合約。那麼的話就有很多開發者是基於比特幣做二次開發,以及一些比較有意思的這種 utxo 模型的這樣的一個區塊鏈系統,還有根據以太坊做的一些調整,然而這些基於已有的區塊鏈開進行二次開發來做一些新的鏈這樣的一個系統,他們最大的問題就是由於像比特幣或者以太坊早期的這些項目,他們也有一個比較好的開發框架,其實大家都是在源碼基礎上進行改動的,這樣就要求開發者對於源碼的理解是比較高的。與此同時的話,由於這些源碼沒有比較好的模塊化來作爲一個框架,其實開發起來的難度是很大的。

而我們 Parity 其實從 Gavin 在很早期 15 年建立 Parity 的時候,我們在最初就在幫以太坊開發它的 Rust 客戶端,之前是叫做 Parity Ethereum 現在改名叫做 Open Ethereum,我們積累了很多各種各樣的對區塊鏈的開發經驗,特別是在從 18 年開始積極的開發 Polkadot 跨鏈項目,我們吸收以及總結了很多開發供應鏈的這樣的一些經驗,然後從這些經驗裏邊,我們抽取以及進一步的深化,做出了這樣的一個區塊鏈開發框架。而這套框架我們命名爲 Substrate。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 2

因爲波卡是一個跨鏈項目,那麼我們爲了幫助開發者更快的開發自己的一個區塊鏈系統,我們就開發了 Substrate 這樣的一套框架,來方便開發者去開發相關的這樣一個區塊鏈系統,我們叫做平行鏈。大家可以看到 Substrate 其實包含了很多剛剛我提到的這種區塊鏈的核心組件,例如數據庫層、網絡層以及可插拔的共識協議。

同時 , 我在之後也會提到包含了比較有意思的鏈下工作機以及鏈上的這種可升級的功能,這樣就可以幫助開發者在開發的時候,其實大家只選用自己想使用的一個模塊,就可以很快速的開發相關的一個區塊鏈系統,可以快到哪種程度,Gavin 其實在 18 年的時候,在 Web3 峯會做了這樣的一個演講,就是拿出了嶄新的蘋果電腦,然後開始裝這樣的一個 Substrate 相關的 dependency,然後到最終編譯出一個區塊鏈只花了 15 分鐘,大家可想而知,這個是 18 年的不穩定版本,現在的話 Substrate 已經到了 2.0 版本,那麼在這個版本上進行一個開發,其實會有更好的用戶體驗,是更加快速的。回到咱們今天講的主題,在波卡上如何開發區塊鏈系統,那麼相信大家現在已經有了一個比較好的眉目,其實就是使用 Substrate 這樣的一個開發框架來進行一個開發。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 3

Substrate 開發出來的系統有哪幾種方式可以進行部署 ?

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 4

其實除了作爲波卡的平行鏈或者平行線程之外,也可以直接部署成爲獨立的鏈。特別是在國內這種特有的環境下,大家也可以使用 Substrate 搭建自己對應的這種商業邏輯的聯盟鏈或者私有鏈,以及一些對於吞吐量要求比較高的,可以針對某一個應用,例如遊戲單獨搭一條鏈並部署在自己相對應的環境下邊,當然了目前大家在 Substrate 進行開發的時候,比較有利的一點是經過三年,從這個圖可以看到,整個波卡生態的壯大以及開發者持續的開發,Substrate 的開發生態以及工具是有很多的,大家可以用 Polkadot-js,當然內置的話也是有一個比較好的這種區塊瀏覽器,大家也可以使用 Parity Signer 這樣的一個離線的硬件錢包。

怎麼使用 Substrate 進行 Rust 開發?

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 5

與此同時,除了圖 5 上面提到的這種 ink! 智能合約。這種 ink!.Rust 類型的智能合約,我們目前也兼容了 evm 其實大家可以使用這些去編寫智能合約,然後在自己對應的消費鏈上面進行一個運行。接下來我就大致跟大家分享一下怎麼使用 Substrate 進行這種 Rust 開發。因爲 Substrate 是跟其他的智能合約開發比較不太一樣,因爲你是相當於開發一個區塊鏈,雖然區塊鏈底層,像數據庫、網絡、控制協議都搭好了,但是針對你自己特殊的這種需求,例如你要做遊戲的一個區塊鏈,或者是偏支付的這樣一個鏈,這種核心的商業邏輯還是需要你進行開發的。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 6

那麼進行開發的話需要這種 Substrate Runtime 的。圖 6 裏邊大家可以看到,由於 Substrate 跟我們平時開發智能合約不太一樣,那麼的話它是有一些這種開發上面的一些這種 policy 需要大家去記住的。例如第一點,在 Substrate Runtime 你如果發了一個我們叫做 extrinsic,或者你就把它當做交易,發交易的時候,如果這個交易進行時發生了問題的,那麼交易對狀態的改變是不會回滾的。

然後在以太坊上面進行 solidity 的開發的話,如果交易執行不成功,那麼其實它的狀態是會回滾的。這就要求了我們在開發 Substrate runtime 的時候,最好是我們先自己驗證一下他這樣的一個邏輯對不對?然後再寫。

接下來這幾頁的圖片,大家可以看一下,在寫這種 runtime 或者相對應的這種邏輯的時候,需要大家在裏邊填充自己的這種代碼的,大家可以看模塊定義通常是包含怎麼定義存儲事件以及錯誤,還有就是一些相關的這樣的一個函數。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 7

對於這種如果大家想引用其他的相關的這樣的一些 trait 的話,因爲整個 Substrate 都用 Rust 寫,所以這也會用到一些 trait,如果大家想知道更多這種 Rust 相關的信息的話,再可以在網上查一下 Rust 的相關課程,或者加入我們 Substrate 的課程,我們會介紹一些 Rust 的相關的這種基礎。然後像存儲的話,大家可以看到其實裏邊有一些比較簡單的類型、最簡單的方法,大家就可以學習已經有的這些簡單的類型或者這種例子,然後根據自己的實際情況,然後去改一下相關的這種變量名字,進行這樣的一個操作。與此同時的話類似於我們寫智能合約,在做一些操作的時候都要觸發事件或者發出事件,那麼這裏邊你也可以去定義一個事件。

當然了這裏面還有一個地方就是 decl_module,其實就是要定義自己相對應的這種 runtime 的函數,我在最後會提到的叫做 Substrate.dev 這樣的一個網站上面有很多各種各樣的教程,大家可以跟隨教程去學習,以及做一些比較簡單的例子去深入學習,怎麼去根據這幾個模塊定義對應的這樣的一個事件存儲和函數,來完成自己對應的這樣的一個 Runtime,以及相對應的邏輯的定義以及操作。

Substrate 應用鏈跟智能合約的差異性在哪?

在這裏簡單類比下 Substrate 應用鏈或者 Runtime 跟智能合約的差異性。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 8

大家都知道寫智能合約,特別是以太坊上面的 solidity 這樣的一個智能合約,很多時候由於 solidity 以及以太坊本身的限制——比如它存儲量較低、手續費較高,同時像 solidity 它本身的限制也是比較多,可能更多時候是隻能操作整數這種類型。

這就是爲什麼大家看到的目前以太坊上面比較火熱的應用都是跟通證相關,而不是跟更廣泛的 Web3.0 相關的原因。

而大家使用 Substrate 進行開發的時候,就不存在這樣的問題。

因爲大家使用 Substrate 開發的時候,整個鏈都是爲開發者所控制的。所以當大家在進行開發的時候,不管是鏈上鍊下數據,或是對應的一些 solidity 沒有的接口,Substrate 都可以進行一個提供。

並且大家也可以看到,Substrate 本身的吞吐量也是比較高的,所以可以給應用提供更多的處理交易與邏輯的空間。

與此同時,Substrate 本身也會提供一個 off-chain worker 鏈下工作機,可以幫助做 Substrate 應用開發的開發者能夠更快的處理相關的鏈下數據,實現鏈上處理鏈下數據,這樣就打通了鏈上與鏈下。

無縫無分叉的鏈上升級

熟悉區塊鏈行業的朋友都知道,在過去,所有的公鏈項目包括一些聯盟鏈項目,如果想要做升級的話,都需要進行一個硬分叉。像比特幣,特別是以太坊。大家都知道在 16 年由於“The DAO”事件,由於礦工意見不同,最終從以太坊分出了經典以太。

我們爲什麼要做鏈相關的升級?這其實涉及到了一個計算機或者編程行業。

大家其實默認這樣一個現象:沒有任何一個程序員可以寫出沒有漏洞的代碼。

不管是寫傳統的應用,還是寫區塊鏈得應用,或者智能合約。通常情況下你寫的代碼越多,那麼你可能產生的安全漏洞就越多。

回顧過去的幾年,不管是 DEFI 還是鏈本身,大家都會發現很多各種各樣的漏洞,導致很多用戶有各種各樣的財產損失。

這就使得區塊鏈本身需要一個比較好的升級——不管是智能合約升級還是鏈本身的升級。

但如果我們頻頻地去使用這種硬分叉進行升級,首先時間趕不上,因爲升級需要「各個礦工在很短的時間內,把自己的軟件升級到最新的版本,然後在某一個特定時間內大家共同去升級到這樣的版本,最後從舊鏈切入到新鏈上面」的這樣的一個邏輯。

然而,由於硬分叉,這種升級模式成本極高,而且很多時候可能會導致你本身的鏈又分叉出其它的鏈。

那麼像 Substrate 就有一個無縫的鏈上升級。

其實就是將開發者相對應的一個 Runtime 提交到鏈上面,然後進行一個驗證者鏈上投票,大家可以看到這其實是跟鏈上治理相關的。

鏈上投票完成以後,如果絕大多數人同意進行對應的一個升級,那麼開發者提交的一個 Runtime 就會被寫入到整個鏈的 Runtime 裏邊,進行對應的升級。

有了這樣一個無分叉鏈上升級,就可以保證區塊鏈開發者可以更安心的運行自己的區塊鏈。

即使出現一些問題,也可以很快的去進行修復或改正。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 9

鏈下工作機(off-chain worker)

大家都知道,在以太坊上面我們有各種各樣的預言機,例如 chainlink 。

在過去的半年,預言機是很受到各種各樣的人的關注的。

因爲以太坊本身無法打通鏈上鍊下的渠道,所以鏈上如果想要獲得鏈下數據——例如各種各樣的通證價格,就需要這種預言機將數據發送到鏈上。

而 Substrate 本身就是鏈下工作機的運行原理——其實就是鏈上的這些節點,它們會通過鏈下工作機去取得鏈下的相對應的數據。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 10

那麼這些鏈上的驗證節點,就可以對鏈條數據直接進行處理。

未來的話可以對處理結果——例如在鏈上形成共識,來保證可以更快、更方便的拿到鏈下信息,並進行相關的計算。

像在波卡或 Substrate 對應的生態裏,就不太需要這種單獨的預言機。因爲對應的這種鏈下工作機的接口已經寫的比較好了。

與此同時,大家也可以看到對應的這樣一個場景:除了我剛剛提到的想去拿一些鏈下數據;還有就是使用鏈下工作機的一些場景。

例如某些比較龐大的計算,我們就可以使用鏈下工作機來完成,結果完成後再返回給對應的一個鏈上驗證者。

這裏有一些鏈下工作機的相關學習資源,大家可以進行一個參考。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 11

如何更好的接入到波卡里面?

前面我講了一些關於例如波卡是如何使用 Substrate 進行開發的,以及 Substrate 寫出來的 Runtime 大概是什麼樣的,同時還有 Substrate 進行開發的優點的話題。

那麼大家可能也更想知道:如果用 Substrate 去開發出一套區塊鏈系統,我是如何更好的接入到波卡里面的?

大家可以看一下圖 12,其實就是關於波卡整個的一個框架。

熟悉波卡都知道,Polkadot 最中間、最核心的是叫做 Relay Chain 或者叫做中繼鏈。中繼鏈裏面跑了很多對應的驗證節點,叫做區塊驗證節點(Validators)。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 12

不同的鏈如果接入到中繼鏈裏邊,它們就會作爲一個平行鏈接入到中繼鏈裏邊。

很多比較大的區塊鏈系統,例如比特幣或者以太坊,它們如果想接入到波卡里面,就需要通過橋首先調節到一個平行鏈上面,再通過平行鏈與其他的平行鏈溝通。

作爲平行鏈,它們對於內容的或者區塊的驗證要通過中繼鏈相關的驗證節點來完成。

那麼的話大家就會問,平行鏈本身需要什麼節點?這就像圖裏面提到的一樣,需要叫做 collator 的這樣一個類型的節點。

這些節點就負責採集每個平行鏈對應的區塊,然後提交給中繼鏈隨機選擇的一些區塊驗證節點。這些區塊驗證節點就會去驗證平行鏈裏對應的區塊。

與此同時,使用 Substrate 寫出來的區塊鏈,還需要另外一個模塊叫做 Cumulus。大家可以在用 Substrate 寫完這個 Cumulus 後,再進行稍微的改進,就可以用 Cumulus 連入到平行鏈裏面。

當然,不是每一個 Substrate 鏈都可以連入到平行鏈和中繼鏈,或者波卡里面——這就涉及到一個平行鏈插槽的拍賣。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 13

Web3 基金會如何支持波卡生態發展?

波卡生態裏面的項目特別活躍。大家可以看一下,不管是基金會還是 Parity,我們對波卡生態項目的支持,都是很高的。

例如我們在大概 3 月的時候,就已經發放了超過 100 個項目對應的 Web3 項目,與 Web3 基金市場 grant 的支持。

與此同時,我們也會有叫做 builder program 去幫助社區一些相對成熟的團隊,給他們提供技術及商務市場的一個服務。

當然,作爲一個不太熟悉技術的社區成員,你也可以參加我們的大使計劃,去幫忙推廣波卡相關的技術及理念。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 14

在亞洲或者國內,大家可以看到從今年 5 月份開始,我們跟萬向合作做了 Web3 訓練營,孵化了 15 支團隊。

這 15 支團隊大部分已經上了相關的測試網和主網。然後像做融資等也都是非常受歡迎的。

未來,我們也希望有更多、更好的團隊可以加入到我們的 Web3 訓練營裏。我們會提供技術、商務以及市場相關的支持。

全球已經有超過 100 個團隊基於 Substrate 進行開發區塊鏈。

我們作爲亞洲團隊或者說中國團隊,大家可以看到,在過去的一段時間裏,我們已經爲大家提供了各種各樣的 Substrate 開發的相關中文資料。

不管是知乎專欄、Polkadot 公衆號,還是線上、線下活動,包括嗶哩嗶哩直播,都歡迎大家去搜索 Substrate,或搜索我們的社區,積極加入到我們的活動裏面。

與此同時,我們也有一些最新的活動——例如在月底我們要舉辦國內首次 web3 大會,主題就是開放、開源、互聯。

我們會邀請海內外——不只是區塊鏈行業或波卡生態項目及嘉賓,我們還會邀請海內外比較出名的、對 Web3 整個領域貢獻比較大的嘉賓,去分享他們對 Web3 的理解,以及對 Web3 生態的貢獻。

Parity 賈瑤琪技術詳解如何基於波卡開發區塊鏈項目圖 15

大家如果感興趣,可以去學習這樣的一個教程,去體驗一下 Substrate 新的開發框架——不管是鏈上升級,還是鏈下工作機。以及我們提供的各種各樣的模塊,來搭建自己的區塊鏈。

很高興今天能收到密碼極客的邀請,今天爲大家分享了這麼多,也希望大家未來不管是在波卡生態,還是在區塊鏈生態,都能夠更好的開發、融入到我們的區塊鏈行業,謝謝大家!

問答環節

問題一,來自網易區塊鏈創新業務負責人胡志敏。

胡志敏:如果作爲一個開發者,想在波卡生態中和基於 Substrate 上進行區塊鏈創業的話,一定會需要一些啓動資金,我想了解 polkadot 官方基金對於區塊鏈應用的扶持策略,比如對於什麼樣的項目會啓用官方投資?

賈瑤琪博士:關於波卡生態和機器設備進行開發的相關項目和團隊,我剛剛已經講過,不管是基金會還是 parity,都會提供比較大的支持。

關於資金方面,基金會會根據項目相關的資質來進行評估。

大家可以去申請一個叫做 Web3 grant 這樣的一個項目。對於一些相對比較好的項目,基金會會提供大概 3 萬美金的一個支持。

當然,對於比較複雜的項目也會提供更高資金的支持,但是需要花費更長的時間進行審覈。

對於一些相對成熟的、有產品或者有測試網的項目,可以申請我們比較成熟的、相關的一些 program。例如 builder program 或者我們的 web3 bootcamp,web3 訓練營。我們會對這些項目提供技術市場以及商務相關的指導與幫助。

與此同時,我們也會聯繫波卡生態裏比較積極,支持我們的相關投資人或者海內外投資人,去幫忙觀察一下這些項目,並且進行一些相關的投資。

問題二和問題三來自 Coinversation 代碼貢獻者,北大畢業,有 12 年程序開發經驗的清歡。

問題二

清歡:如果開發平行鏈,後續平行鏈接入卡槽的成本會是多少?

賈瑤琪博士:針對第一個問題,如果開發平行鏈,那麼插槽的成本會是多少?目前來講,我們還沒有一個很明確的計算。例如大概多少的 dot 你可以拿到插槽。但就目前來看——因爲我們的插槽不是直接去買賣的,而是需要用戶去鎖自己對應的一個 dot——那麼的話,其實我們還是鼓勵不同的團隊去更好的發展自己的社區,在未來可以通過衆籌的方式或去發展自己平行鏈這樣的一個盈利能力,然後就可以用自己盈利獲得的資金去進行插槽拍賣。

問題三

清歡:Coinversation 使用 ink! 智能合約開發項目,目前從開發工具到智能合約測試再到部署都相對比較煩瑣,後續如何能降低這些開發的門檻?

賈瑤琪博士:ink! 現在已經出到第三個版本,具體情況大家可以去看一下。

關於 ink! 相關的開發、開發的模塊以及相關的組件,我們也在逐步進行開發完善,從而方便更多的開發者去更好的使用 ink! 科技來進行開發。

目前你講得也很對,可能有些開發工具確實不是那麼地到位。但我們的 Web3 基金會已經給了一些開發工具的團隊在做類似於 remix 的一個 Ide,來幫助開發者使用 ink! 進行開發。

問題四

Polkadot 社區 1 羣成員:波卡或 Substrate 的應用開發必須要作爲平行鏈嗎?這樣每個應用都開發鏈,平行鏈的插槽不夠了怎麼辦?

賈瑤琪博士:除了平行鏈,其實還是有其他的方法。

第一個方法就是我剛剛提到的,可以去通過平行線程,然後接入到系統裏面。

平行線程不需要一個平行鏈團隊獨佔一個插槽超過半年或兩年。它只按需競拍不同的區塊,然後把自己的區塊寫入到波卡系統裏面。

當然,還有一些方式。如果你只是搭建一個比較簡單的應用,那麼可以嘗試使用 ink! 或 Solidity 編寫智能合約,然後可以將自己的智能合約或者相關的應用部署在智能合約平行鏈上面。通過智能合約平行鏈去調用以及提供數據給其他的平行鏈,還可以利用到波卡對應的跨鏈優勢。

還有,也可以搭建一個單獨的 Substrate 的鏈。未來通過某種方式橋接到一些平行鏈上面,那麼通過平行鏈就可以將自己鏈的數據與其他平行鏈進行溝通。

大致的話通過以上三種方式,再加上拍賣平行鏈插槽,然後接入波卡。一共四種方式來接入到波卡的系統裏面。

此次活動由密碼極客與星球日報、parity 主辦;TokenClub、Crypdot capital、patract 聯合主辦;媒體支持包括金色財經、火星財經、鏈聞、碳鏈價值、Blocklike、巴韭特等。此外,鏈節點、幣乎、頭等倉、Doter 等也爲我們提供了社區支持。

來源鏈接:mp.weixin.qq.com