這個系列面向的是智能合約開發者,或者是在智能合約和自己定制區塊鏈之間搖擺不定的從業者。希望讀完這個系列之后,可以幫助大家更好地了解Substrate與智能合約的異同,面對不同的業務需求時,可以更加高效進行技術選型。同時,也希望可以給大家提供一些有趣的視角來看待Substrate,歡迎任何反饋。
簡單來說,Substrate是一個構造區塊鏈的“輪子”。在Substrate之前,如果大家想要快速構造一條鏈,選擇是非常少,而且可定制化程度也很低。基本上公鏈會fork Bitcoin,聯盟鏈會直接使用Hyperledger。Substrate是一個開箱即用的構造區塊鏈的SDK,從簡單的智能合約,到中層的鏈上邏輯,或者底層的p2p網絡、數據庫、共識,都可以自由定制。關于Substrate入門介紹文章已經很多了,這里就不贅述了。想入門的同學可以看看下面的資料:(注:由于微信訂閱號無法跳轉外部鏈接,下面幾篇文章請移步 “閱讀原文” 后點開)
Substrate初次亮相視頻, 15分鐘速成搭鏈, 什么是Substrate - from boka.network
, 什么是Substrate - from Ethfans
想要了解更多的童鞋也可以自行google。
智能合約是部署在區塊鏈之上的一段代碼,可以按照合約里預先設定的不可篡改的規則執行功能。因目前主流的智能合約指的都是以太坊上的智能合約,下文中的智能合約指的都是以太坊網絡中的智能合約。
在這里,會從最宏觀的角度去理解Substrate和智能合約的異同,不會涉及到具體的功能性demo和細節。更加詳細的主題我們會在后續的文章中提及。
bool
integers
address (``accountId` in Subtrate)
SubDAO公布Middleware 2.0版本,將支持在Twitter上創建和管理多簽與DAO組織:據官方消息,SubDAO將發布2.0版本Twitter中間件,新版本將迭代DApp Solidity版本的最新功能,主要用于在Twitter上創建Multi-sig多簽和管理DAO組織,發起人可發行1155協議NFT作為DAO token進行DAO募集,并自定義DAO token的釋放與流通規則。
SubDAO 是一個 DAO 基礎設施協議,通過中間件、Multi-sig和其他去中心化功能幫助管理數字資產,已在Ethereum、BSC、Polygon、Moonbeam等多個主網上部署。據悉,SubDAO獲得Messari創始人Ryan Selkis及Hypersphere、CMS Holdings、OKX Ventures、Huobi Ventures等多家機構融資。[2022/12/2 21:18:06]
array
map
enum
string:雖然存在string類型,但是沒有完善的string處理方法
linked_map:可以遍歷的map
per_things:可以認為定點數
double_map:雙鍵map
enum:這里單獨列出來,是因為solidity中的enum只是數字的枚舉,而substrate中的enum包含類型信息
Substrate中沒有string
Substrate中沒有string類型,與string對應的,只有Vec。這就要涉及到Substrate或者是區塊鏈的設計哲學。鏈上存儲是很寶貴的,并且string和Vec是相互可轉換的,因此Substrate決定不用string.
Substrate中的enum
區塊鏈查詢節點框架Subsquid宣布與去中心化存儲網絡Crust Network達成合作:3月2日消息,區塊鏈查詢節點框架 Subsquid 宣布與去中心化存儲網絡 Crust Network 達成合作。針對本次合作,Subsquid 團隊表示,Crust 是一個高流量的網絡,自半年前主網推出以來,已經產生超過 160,000 個存儲項目,而 Subsquid 將為 Crust 提供一個高吞吐量和高可用性的區塊鏈索引系統,并完全支持實時升級。[2022/3/2 13:31:38]
Solidity和Substrate中都有enum,但是兩者存在的意義對整個系統來說是完全不同的。
Solidity中的enum更像是一個數字的文字化表述,例如下面的定義:enum trafficLight { Red, Yellow, Green}
這里的Red, Yellow和Green 其實只是 0, 1, 2而已。
而Substrate中的enum(其實就是rust中的enum,繼續學習請參考:Rust中的枚舉)則可以攜帶類型信息,功能強大。
例如Substrate中的Error,
enum Error<AccountId> { WrongAddress(AccountId), WrongIndex(u32), // ...}Substrate中的linked_map與Solidity中的map
區塊鏈數據索引項目The Graph推出Graph Explorer和Subgraph Studio:區塊鏈數據索引項目TheGraph推出Graph Explorer和Subgraph Studio,二者由與The Graph社區密切合作的Edge&Node團隊開發。其中Graph Explorer可以讓策展人發出最佳子圖的信號來策展子圖,并賺取部分查詢費用,Subgraph Studio可以讓開發人員測試和部署子圖,并將其直接部署到The Graph Network。也即現在任何人都可以無權限地部署子圖(開放API),并在子圖上進行策展以賺取查詢費。[2021/7/9 0:39:06]
struct Student { string name, uint32 number, uint8 age, }mapping(uint8 => Student) students; uint[] class;并且對array進行元素刪除并且是一件O(n)的操作,這意味著我們無法支付的起昂貴的gas費用,并且涉及到多個存儲的更改,稍不留神可能就會出現邏輯錯誤。
Substrate中提供了多種map,包括map, linked_map, double_map。其中linked_map即是對map提供了iterate的功能。這使得存儲和邏輯變得更加貼近真實。
波卡生態Moons:將于9月參與插槽競拍,聯合Substrate將信息孤島連在一起:Moons運營團隊表示,將在9月籌備參與插槽競拍,加入波卡生態。Moons與Polkadot一樣,都是基于Substrate,并且將跨鏈技術走出錢包,將會運用到更多的生態當中。Moons具有完善的治理系統,所有利益相關者都有發言權。網絡升級在鏈上進行協調并自主制定,以確保Moons的發展能夠反映社區的價值并避免停滯。目前Moons已獲得Web3基金會認可,同時也是Substrate成員。在Moons平臺上,可以體驗到區塊鏈給人們帶來最明顯幫助。聚合鏈簡單來說,即是“聯盟鏈+跨鏈+公有鏈”三鏈合一,未來會有千千萬萬不同的聯盟鏈和私有鏈,但是每個鏈都是獨立分開的,而Moons將會把這些千千萬萬的信息孤島連在一起,信息互通,產生價值。并且通過大數據風險測評,與社區自治理機制,彌補傳統的區塊鏈無監管泛濫,同是又擁有強大隱蔽性。[2020/8/31]
想要深入學習Substrate中存儲類型的童鞋,請移步Substratec存儲類型概覽
作為一個前智能合約er,深知dapp的痛:
gas費用太高,用戶玩不起;
出塊時間長,用戶等不起;
一般dapp都會有自己的token,但是用戶必須現有eth才可以玩,這對不習慣區塊鏈的用戶來說是一大門檻;
新用戶經常弄丟私鑰,資產都沒了;
這當然不是智能合約的錯。站在昨天,智能合約是劃時代的產物;站在現在,智能合約的不足需要新的技術來彌補。
有些dapp開發者選擇不在eth公鏈上部署dapp,而是自己使用eth開發私鏈來部署自己的dapp,確實可以解決上述的部分問題,但是類似私鑰、多種token對用戶門檻的提高,仍然是無法避免的。
而Substrate作為區塊鏈開發的“輪子”,因為優秀的框架設計和抽象分層,給開發者提供了多階定制選擇:
現場 | Phala創始人尹航:在Substrate鏈上驗證英特爾SGX證書是一個龐大工程:金色財經現場報道,12月21日,在北京舉辦的Substrate Workshop上,Phala聯合創始人尹航講解了利用TEE和區塊鏈結合的解決方案。尹航表示,區塊鏈上的代碼執行是可信的,TEE的執行也是可信的,因此重要的是鏈上和鏈下模塊互信,可以讓TEE讀取鏈上的數據,也可以讓TEE證明在鏈上驗證。TEE可以驗證Substrate鏈上區塊中的Justification,英特爾SGX(TEE環境)可以產生一個數據執行后的可信證明,因為Substrate的Wasm環境以no-std模式編譯,功能受限,則需要移植完整的密碼學庫以驗證TEE證書。這一部分會是一個龐大的開發工程。[2019/12/21]
Substrate分層
這里簡單介紹一下Substrate的分層,想要深入了解的童鞋可以自己搜索一下,
Substrate Node: 節點層。在這一層基本上不做什么改動。就是編譯一下就可以運行一個節點了。如果想要做一些改動,就重寫一下創世配置文件就好了。重新定義鏈中的參數,但是無法修改鏈的運行邏輯。
Substrate FRAME: runtime層。基本上絕大部分的定制化都發生在這一層。在這一層大家可以做的事情很多,概括起來就是修改區塊鏈的運行邏輯。比如轉賬、治理、鏈上升級邏輯、staking等都發生在這一層。是智能合約開發者最需要關注的一部分。
Substrate Core: 核心層。整個FRAME/runtime層在Core面前都可以被忽略。可以用任何語言從0開始搭建一個runtime,只要它最終可以被編譯成WebAssembly. 這一層主要包括區塊鏈的一些底層組件,包括共識、數據庫、p2p網絡等。
對于智能合約開發者而言,我們把大部分目光放在FRAME層就可以了。
在這一層中,大家可以實現任何可以用智能合約實現的功能,以及用智能合約辦不到的事情。比如:
自定義token system,除了轉賬,還實現鏈邏輯層面上的鎖倉、自定義釋放規則等;
自定義區塊間隔時間和手續費:這里,所有原先區塊鏈的出快慢、手續費高的煩惱都可以丟掉,開發者可以自定義出塊時長,以及操作手續費多少;
實現鏈邏輯的整體升級;
實現鏈的治理;
實現多種賬戶支持,例如在用戶丟失私鑰的情況下,如果保證用戶的資產不受損失;
....
所有對區塊鏈操作門檻、用戶友好、響應速度的抱怨,都可以在runtime層通過巧妙地設計來化解。接下來會詳細聊到其中的一些部分。
solidity智能合約開發者,還有一層痛苦就是,需要不停地ctrl+C和ctrl+V。因為solidity是獨立于現有編程語言系統的,沒有任何可以直接調用的依賴;solidity里自帶的library,與其說是library,更像是一段“不配擁有地址的”代碼引用。即使有import,前提也是依賴必須自己寫。哪怕復制粘貼。
這使得大家在寫solidity代碼的時候,無法直接找到現有輪子,然后下載引入;而是復制粘貼+改寫,某種程度上,分散了dapp開發者的注意力,進一步阻礙了dapp的生態進步。畢竟,除了注意復雜的業務邏輯和防不勝防的安全漏洞之外,還要自己寫輪子。
對此dapp開發者有一段心酸地自嘲,“只要能用solidity寫出log(n)就足以創建一個項目了”。
Substrate的FRAME,目前parity自己使用Rust語言進行開發,但任何可以編譯成WebAssembly的語言都可以用來寫FRAME。終于,開發區塊鏈邏輯也可以像正常寫程序一樣正常進行了。(這里的痛可能只有dapp開發者能體會了)
這里舉個例子,比如著名的BTC-Relay項目,實現了BTC -> ETH的跨鏈,方法是用solidity在智能合約中實現了一個BTC的SPV(Simplified Payment Verification),其中最關鍵的一步就是驗證比特幣網絡中的交易的有效性。
驗證交易有效性在solidity中的實現,也得益于solidity中提供的precompile的hash function和在BTC中使用的一樣(SHA256),否則可以想見,這樣著名的項目,可能就不會出現。
所以,自由地使用各種現有的基礎設施,不僅幫助開發者節省時間和精力,更是鼓勵整個應用生態層層推進,向水更深、更未知的方向去探索。如果說之前dapp開發者是帶著鐐銬在跳舞,那現在substrate就是在幫助他們卸下枷鎖,更自由地舞蹈。
ETH是沒有延后執行或者自動執行功能的,所有的交易必須手動觸發。有一些區塊鏈平臺已經實現了延后執行的功能,但是不能精準控制執行的時間和條件。
在Substrate中有一個很棒的自定義功能,on_initialize和on_finalize兩個功能會在validator構造區塊的開始和結束時自動執行,也就是如果有一些很重要的功能,需要根據是否達到時間點或者條件閾值而觸發時,這是一個不錯的選擇。
不建議大規模使用,因為如果需要消耗太多算力的話,會影響到validator的打包出塊5. Off-chain worker在寫智能合約時,如果想要獲取鏈下數據比如隨機數,第一可以自己手動寫進去,這樣缺乏公信力;或者也可以去請求oracle服務,貴且數據源選擇不多。
Substrate有一個功能叫做off-chain worker, 用來執行一些計算密集并且計算周期長的操作。例如在獲取鏈下數據時,可以把http請求操作寫在offchain worker中,可以在runtime中被觸發執行,獲取鏈下數據并在請求成功之后把結果返回給鏈上進行相關計算操作。
這不僅給了dapp開發者帶來了很多便利,例如隨機數請求;更給區塊鏈開發者帶來了全新的想象空間。比如在聯盟鏈領域,之前通常的做法就是往左走區塊鏈架構,往右走傳統存儲服務,因為區塊鏈天然和鏈下世界隔離的特點,好像很難把兩件事情融合在一起。
有了off-chain worker,是不是可以發現一些新的交叉地帶?請大家此處放飛想象力。
說了這么多不同,個人感覺,在開發Substrate runtime時,和開發智能合約在思路上,還是很類似的。
無論寫智能合約還是runtime,首先都會進行填空題操作:
以上部分在Solidity中直接按照寫代碼的方式聲明變量和方法就可以了,在Susbtrate中則是在相應的宏內聲明,詳見上表。
所以對于智能合約開發者來說,所需要的只是學習Rust相關的語法,在邏輯構造環節,無縫遷移。
Substrate runtime相關資料,請參考:Substrate Runtime
當然Substrate也不是全都是好處,最大的缺點,就是上手開發確實比智能合約要難。這里的難不僅體現在Rust語法上,還體現在Substrate runtime中的方法不像智能合約一樣可以原子調用。即在智能合約中,如果其中一個邏輯失敗,那么整個交易執行失敗,所有存儲更改全部回滾(不會發生)。但是在Substrate中,即使一筆交易在某一處邏輯判斷失敗,但是在這之前的執行,還是會發生。所以強烈提醒Substrate runtime開發者在開發runtime時,一定要 Verify first, Write Last。
作為系列開篇,簡單地總結一下Substrate和合約開發的異同。在接下來的系列文章中,會從具體的例子出發,希望可以幫助大家在實操層面,感受到Substrate開發的自由。
歡迎任何反饋和問題。
本文經作者王大錘授權,轉載自「Substrate 區塊鏈開發」知乎專欄,原文鏈接:https://zhuanlan.zhihu.com/p/108000025
歡迎學習 Substrate:
https://substrate.dev/
關注 Substrate 進展:
https://github.com/paritytech/substrate
關注 Polkadot 進展:
https://github.com/paritytech/polkadot
申請 Bootcamp:
https://bootcamp.web3.foundation/
多項數據顯示,短期內市場將持續處于低迷狀態。期權市場不確定性巨大,期貨市場多數投資者被迫平倉。市場恐慌情緒蔓延,流動性仍未恢復至正常水平,合理的風控機制是生存必要條件.
1900/1/1 0:00:00俄羅斯的加密貨幣法規一直不明確,雖然討論不斷但都沒有進一步行動。2020年3月16日,俄羅斯中央銀行法務部主管Alexey Guznoy在接受當地新聞社Interfax的采訪時稱,該國主要但尚未.
1900/1/1 0:00:00文章系行情分析師 區塊掘金者 煙雨 供稿,發表言論僅代表其個人觀點,僅供學習交流!金色盤面不會主動提供任何交易指導,亦不會收取任何費用指導交易,請讀者仔細甄別,謹防上當.
1900/1/1 0:00:00迪拜國際金融中心(DIFC)和Mashreq 銀行于3月1日宣布推出新的區塊鏈數據共享平臺。這一平臺將允許持牌企業和公司通過內部區塊鏈平臺驗證其身份,即時開設數字銀行賬戶.
1900/1/1 0:00:00由于比特幣現貨交易全年無休,而CME的比特幣期貨只在工作日交易,這使得如果周末比特幣現貨市場的價格變化較大,在周一CME開盤時,比特幣期貨和現貨價格就會存在較大差異,這會推動現貨市場價格的變動.
1900/1/1 0:00:00金色財經訊 3月16日14:06,火幣全球站數據顯示,BTC持續下跌,跌破5000美元,日內跌幅接超7%.
1900/1/1 0:00:00