掌握最新波卡开發技能: 從 SDK 到 Core, 敏捷核心時間完全指南
作者:agile badery,Web3 Foundation 技術教育者
編譯:OneBlock+
這篇文章是一個關於波卡敏捷核心時間(Agile Coretime)的簡潔教程,將涵蓋以下內容:
Polkadot SDK 概述(具體而言是其 templates)
Coretime 的概述,以及在 Core 上部署的含義
從 template 到 Core 的开發流程是怎樣的
如何以及在哪裏獲取一個 Core
配置、編譯和使用 template
在 Core 上部署
請注意:目前只能在以下網絡上使用敏捷核心時間:
Kusama - 金絲雀網絡
Rococo - 測試網
本教程將使用 Rococo 進行測試。
建議盡快开始同步你的 Rococo 數據庫,使用 fast-unsafe 選項。你的平行鏈將需要運行一個 collator,它將數據從你的平行鏈傳遞到中繼鏈進行驗證。collator 實際上就像你的平行鏈的驗證器,只不過更像是生成塊並將狀態更改發送到中繼鏈的角色。
同步 Rococo 可能需要一些時間(12 小時-1 天),這取決於互聯網連接速度,除非你能獲得數據庫的快照。然而,在你必須同步節點之前,你還可以做一些設置。
Polkadot SDK 簡介
乍一看,Polkadot SDK 可能會讓人感到非常疑惑,某種程度上確實如此,因為它將許多技術整合到了一個地方。Polkadot SDK 曾經是三個存儲庫的總稱:
Polkadot:一度包括客戶端實現和 runtime,直到 runtime 被移動到 Polkadot Fellows 組織為止。
Substrate:用於構建區塊鏈的基礎核心原語和庫(不僅僅是 Polkadot 的區塊鏈),Polkadot 的大部分都是用 Substrate 構建的。
Cumulus:一組庫和工具,專門用於連接區塊鏈到Polkadot,稱為平行鏈。
根據我們的目的,我們實際上只對幾個特定部分感興趣:
FRAME:一個使 Substrate 易於使用的框架。使用 FRAME 和 Substrate,我們可以創建一個 runtime,該 runtime 由稱為 pallets 的 runtime 模塊組成,然後我們可以使用自定義業務邏輯構建分布式账本。
模板在 templates/ 內。
要深入了解 monorepo,建議查看 Polkadot SDK 文檔,其中解釋了所有內容。
使用這些工具,我們可以構建一個完全定制的區塊鏈,然後將其部署到 Polkadot 上。
核心時間到底是什么!?
在解釋敏捷核心時間之前,先介紹一點歷史:
在 Polkadot 上,可以通過部署平行鏈來利用 Polkadot 網絡的安全性。
然後,Polkadot 驗證每個平行鏈的狀態轉換。這意味着 Polkadot 集體代表了許多區塊鏈的狀態。其他好處,比如互操作性,使這成為了一個吸引人的選擇,想要構建 Layer1 區塊鏈的人。
然而,為了參與,每個平行鏈都必須經過一個拍賣過程來獲得一個插槽。這被證明對於想要真正开發構建的人來說是一個障礙。
平行鏈插槽也被證明是昂貴的,因為你實際上必須支付一定數量的區塊空間來使用。大多數平行鏈選擇擁有一個為期 2 年的插槽,這意味着在 2 年結束時,他們必須續訂他們的插槽。
敏捷核心時間徹底改變了這種範式。敏捷核心時間中的核心可以被認為是一種對曾經是平行鏈插槽的抽象。核心允許將代碼上傳並運行到 Polkadot 超級計算機上。這種範式完全改變了我們對運行“L1”區塊鏈的方式,因為它實際上就像上傳代碼和創世塊到中繼鏈,幾乎類似於智能合約。
以下是來自 Polkadot Wiki 的摘錄,更詳細地解釋了這一點:
敏捷核心時間使 Polkadot 網絡資源的利用更加高效,並為建設者提供了經濟上的靈活性,將 Polkadot 泛化到了白皮書中最初提出和設想的範圍之外。
在 Polkadot 1.0 中,要使平行鏈由 Polkadot 保護,唯一的方式就是通過拍賣租用,這可以保證平行鏈的區塊驗證持續兩年。這涉及鎖定大量的 DOT,導致了小型和中型區塊鏈項目的准入壁壘較高。平行鏈以 12 秒的固定間隔生成塊,與網絡活動無關。這導致資源分配效率低下和錯誤的經濟激勵,即在輕負載下生成幾乎為空的塊,並且在超過塊限制時無法容納更重的流量。敏捷核心時間解決了所有這些缺點。
——敏捷核心時間介紹,Polkadot Wiki
你也可能會在核心時間的上下文中看到“task”一詞。理論上,task 不必是一個區塊鏈/平行鏈。只要它能夠滿足 Polkadot 協議的要求,那么它就可以是一個 task。
從 SDK 到 Core
從 Polkadot SDK 到 Core 的开發流程實際上非常簡單:
1. 保留 ParaId,在這裏你將上傳你的 runtime 和創世狀態。
2. 將 runtime(用 Rust 編寫)編譯為 WebAssembly blob,從而定義了你的狀態如何從一個狀態過渡到下一個狀態。這個 runtime 是使用 Polkadot SDK 創建的。
3. 確保你的鏈規範是可行的,並且准備好部署為一個實時的、可工作的平行鏈。
4. 生成你的創世狀態和 wasm。
5. 獲得一個 Core,很可能通過核心時間市場
6. 將該核心分配給你的 ParaId。
7. 確保為你的 task 至少保證有一個誠實的、同步的 collator
通過此過程結束時,你應該有一個完全同步且工作正常的區塊鏈,該區塊鏈由運行在其上的整體安全性(Kusama 或 Rococo)保護。
以下圖表是此過程的可視化,盡管順序可能略有不同(即开始之前應該保留一個 ParaId):
獲取 ROC 並保留一個 ParaId
轉到 Polkadot.js 以保留 ParaId。我們需要一個 ParaId 來上傳我們的平行鏈的代碼:
1. 獲取 Polkadot.js Web 擴展。
2. 創建一個錢包,並用你的新地址通過 faucet 獲得一些 ROC
3. 確保你通過側邊欄上的選項卡選擇 Rococo 作為你的網絡
4. 轉到網絡 > 平行鏈 > 平行线程(選項卡)
創建鏈和生成藝術品
我們現在可以繼續真正开始我們的項目。一些重要的先決條件是:
安裝 Rust 及其關聯的工具。
安裝夜間版本。
在你的處置中具有所有命令行、git 和其他常見开發工具。
如果上述列表聽起來令人困惑,請確保訪問 Wiki 的 Build 部分,其中我們需要克隆 Polkadot SDK。本指南使用發布的 polkadot-v1.10.0 版本,我們可以通過標籤輕松地克隆它:
現在,導航到 polkadot-sdk/templates/parachain。在你選擇的代碼編輯器中打开此文件夾,然後你就可以开始开發和編譯你的鏈了。
使用平行鏈 Template
本教程不會詳細介紹模板的具體內容,也不會詳細介紹 FRAME 和 Subtrate 的具體內容。你需要知道的只有以下內容:
runtime/ - runtime 和業務邏輯。這是你的所有pallets(runtime 模塊)的配置。runtime 是作為WebAssembly blob 上傳到核心的。
node/ - 節點實現,負責網絡等。創世配置(chain_spec.rs)也位於此處。
pallets/template - 一個方便的、本地可用的 template pallet,我們可以修改並包含在我們的 runtime 中。
Pallets 本質上只是 Rust crates,作為依賴項導入,如 runtime/Cargo.toml 中所見
當我們編譯我們的 template 時,我們可以提取 runtime 代碼作為 .wasm blob,這是我們核心的關鍵工件之一。
為了本例,我們不會介紹如何添加或修改任何 pallets。不過,這是你在 Rococo 上部署你的平行鏈後的下一步!
使平行鏈准備就緒
未來需要注意的是:配置鏈規範的方式可能會改變,請關注此 PR。
在生成我們的平行鏈代碼之前,我們需要對 node/src/chain_spec.rs 中的我們的節點進行一些准備。具體來說,有幾個主要因素:
1. 確保 relay_chain 設置為目標中繼鏈(在我們的情況下是 rococo)
2. 確保 para_id(位於 relay_chain 正下方)設置為你保留的 ParaId
3. 確保我們的 ChainType 設置為 ChainType::Live
4. 刪除除了一個之外的所有 collator,即 Alice。為什么要這樣做,請參閱 FAQ
5. 還要在 testnet_genesis 中設置 para id
6. 可以選擇更改鏈的名稱和 id(我的名稱叫“SomeChain”,id 叫 “some_chain”)。默認 token 的票證符號為“SOME”。
如果你沒有執行其中的一項操作,你的鏈可能無法生成塊。隨時復制以下配置,並使用它來確保一切就緒,以便進行 Rococo 部署。此函數應替換 node/src/chain_spec.rs 中的 local_testnet_config 函數:
⚠️警告:請確保你用之前保留的 ParaId 替換現在的!
一旦就緒,你就可以編譯你的平行鏈了。
生成 Runtime 和創世狀態
請務必首先使用以下命令構建節點(假設你在 polkadot-sdk/templates/parachain 中)
开始同步 - 運行你的收集器
你現在應該开始同步你的收集器。請注意,你需要首先同步 Rococo——這可能需要一些時間(12小時到一天,取決於你的下載速度),所以最好盡快开始。為了避免存儲中繼鏈的完整狀態,請確保使用適當的 pruning 標志運行:
此命令實際上會同時啓動兩個節點:你的平行鏈的收集器節點以及嵌入式中繼鏈節點,因此通過 -- 在命令中進行了分離。
現在你應該可以看到你的中繼鏈。
創建 Parathread
生成創世狀態和創世狀態-Wasm 後,你現在可以創建 Parathread 了。回到 PolkadotJS 中的網絡 > 平行鏈 > 平行线程(選項卡),然後在右上角單擊 + Parathread:
1. 在 code 字段中上傳 genesis-wasm
2. 在 initial state 字段中上傳 genesis 狀態
支付存款,你就可以开始了!請記住,parathread 需要約 2 小時才能上线。
獲得核心時間
理想情況下,在此步驟之前,你的節點應該與中繼同步。
幸運的是,獲得一個核心很容易,因為已經有了核心市場。訪問 Polkadot Wiki 上的核心市場頁面以了解更多信息,並購买一個核心。
我們有兩個選擇:
1. 批量:預付款以使用 Rococo 的驗證來驗證我們的平行鏈。
2. 按需:為我們的塊生產按需付款。
有了批量核心時間,我們可以將一個核心分配給我們的 ParaId,只要該核心有效,我們的平行鏈就會生成塊並通過 Rococo 測試網進行最終確認。在我們必須更新核心之前,我們不應接觸。
值得注意的是,你可以輕松地使用按需外部命令進行實驗,然後稍後切換到批量核心時間模型。現在,讓我們從按需核心時間开始,以使我們的第一個塊开始。
按需核心時間
假設你的收集器已同步,你可以嘗試使用按需外部命令創建塊:
1. 轉到 PolkadotJS > Extrinsics
2. 發布 onDemandAssignmentProvider.placeOrderAllowDeath 外部命令
3. 將 max_amount 設置為至少 1000000000000,paraId 設置為你的 ParaId。
4. 只要你的收集器正在運行,你應該會看到你的塊高度從 0 增加到 1
批量核心時間:分配你的核心
如果一切正常運行,你現在可以選擇為你的平行鏈分配批量核心時間以進行持續的塊生成。對於我的分配,我將使用 RegionX 的 CoreHub,一個不錯的 UI,用於購买和分配核心。
1. 連接你的錢包(右上角的按鈕)
2. 單擊左側的 Purchase a Core
3. 在右下角單擊"Purchase Core"
4. 轉到 My Regions,並單擊選擇你的區域
5. 單擊右側的 Assign
6. 單擊 Add Task,並輸入你的 ParaId 以及你鏈的名稱
7. 選擇你的任務,然後選擇 Provisional Assignment
8. 只要一切都同步,你的收集器正在運行,你應該看到塊持續創建:
接下來做什么?
現在,你有了啓動 Layer 1 區塊鏈的能力,可能性是無限的:
創建平行鏈應用程序
在你的鏈上开發智能合約
參加聯盟鏈中的 DeFi 生態系統
建立一個 NFT 市場
或者也有很多替代方案:
Tansii Dancebox:一種在您自己的運行時中利用 Polkadot 計算的更簡單方法。
本教程不適合您?OpenZeppelin 的教程應該是最新的!
不管你選擇什么,祝你好運,並且希望你通過敏捷核心時間做出一些有趣的東西!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...
悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤
一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...
OneBlock
文章數量
28粉絲數
0