Nervos 從項目誕生之初,就一直秉持着本身的設計理念,堅持分層的設計方案,底層去解決安全和去中心化的問題,上層去解決效率、擴容、多功能的問題,但願能夠經過這樣的方式去解決區塊鏈世界的不可能三角問題。Nervos 是一套完整的解決方案,經濟模型、共識、虛擬機、Cell 模型、Layer 2 等等,相互之間環環相扣,造成一個完整又緊密的系統。 編程
回到一個開發者所關心的問題,如今已經誕生這麼多公鏈平臺,那麼在 Nervos CKB 上進行編程,究竟會有什麼不同凡響的體驗?在 CKB 上編程,又有什麼樣的優點呢? 後端
本文試着從 CKB 中資產是一等公民、編程上的靈活性,以及狀態的肯定性這三個角度進行闡述。安全
在 Nervos CKB 的設計哲學中,若是要將智能合約的風險降到最低,那麼必需要將這些智能合約的「狀態」去中心化。由於狀態決定了資產的全部權,惟有將其去中心化,才能避免因狀態的中心化而致使的智能合約漏洞,進而產生系統性風險,最終形成所有人的資產損失。 工具
回顧過去,咱們能夠看到ERC20 的 Token 存在着許多系統的脆弱性,例如著名的 The DAO 事件,以及 2018 年美鏈的合約漏洞,它們都由於智能合約中有 bug,進而形成無數資產全部者的損失。區塊鏈
爲何單個合約漏洞就能形成如此大的傷害呢?由於 ERC20 發行的 Token 本質上是將全部用戶的資產都存在一個合約地址中,所以當這些 dApp 產生漏洞時,全部該資產的狀態均可能發生變更,從而形成經濟損失。在 ERC20 這樣的模型下發行的資產,就像將該種資產所有都鎖進大金庫中。可想而知,只要金庫的任何一個地方發生了漏洞,那麼外來的人就能夠進入金庫,並將全部的資產都搬走。 spa
發行資產是區塊鏈開發者的一項重要的需求,原生代幣和其它發行的資產,都應該是一等公民(First-class Asset),也就是任何一個資產的全部者能夠擁有本身的狀態全部權,而不是像 ERC20 Token 那樣,全部持有者的同類型資產都必須共用一把鑰匙。所以,在 Nervos CKB 中,不管是持有 CKByte 這樣的原生代幣,仍是持有其餘用戶自定義的 Token(User Defined Token,UDT),用戶都是將這些資產分別鎖在本身獨自全部的小格子之中,而且只有用戶本身才有解鎖的鑰匙。 設計
爲何可以讓資產成爲一等公民?這是由於在 Nervos CKB 中,全部的資產都儲存在泛化的 UTXO 模型——Cell 之中,而且能夠經過 Cell 中的 lock script 驗證全部權,以及經過 type script 驗證新 cell 的生成,這樣的狀態儲存與驗證規則同時適用於 CKByte 和 UDT,所以下降了任何資產發行時,因合約漏洞而形成資產損失的風險。3d
Nervos CKB?哦,這是條公鏈啊?那他們的智能合約用啥語言寫啊?
這樣的問題在 CKB 上是不存在的,由於 CKB VM 是基於開源的 RISC-V 指令集開發的,使用了普遍實現的 ELF 格式,也就是說,任何能夠編譯成 RISC-V 程序的語言都可以直接用來爲 CKB 開發智能合約;同時結合 Cell 模型這樣的編程模型,咱們能夠將待驗證的合約放在 type script 中,並將全部權的驗證放在 lock script 中,這兩大設計可讓在 CKB 上的編程擁有很是大的靈活性。 blog
咱們簡單列舉了一些優點來告訴你 Nervos CKB 究竟靈活在哪裏: 事件
1.任何語言都有可能在 CKB 上開發:
CKB 核心只定義了底層的虛擬機模型,理論上任何提供了 RISC-V 後端的語言都可以用來開發 CKB 合約,而不須要侷限在特定語言纔可以進行編程,所以這樣的設計在將來能夠下降更多開發者的進入門檻,而且更可以捕獲使用各類語言的開發者進入 CKB 生態之中。
2.你能夠用各類密碼學原語來做爲資產的鑰匙:
在 CKB 虛擬機上沒有寫死的密碼學原語,所以任何密碼學原語理論上均可以像普通的腳本同樣被部署在 cell 中。這讓 Nervos 的生態能夠在不須要分叉的狀況下,有了使用各類密碼學技術的可能性。
這種特性的威力是巨大的,舉例來講,你能夠用以太坊和其餘公鏈的地址和私鑰去簽署和收發 CKB 上的交易,所以如 MetaMask 等,這類在其餘鏈上擁有成千上萬用戶的工具,能夠在開發者開發好一款 CKB 上的產品以後直接爲他所用,目前 Lay2 團隊 的 ckb.pw 正在作這個方向的努力;另外,像各類先進的密碼學技術如 Schnorr 簽名、BLS 簽名,和 zkSNARKs/zkSTARKs 等,均可以在 CKB 上使用。這也讓安全性相關的簽名機制、異構跨鏈、zk rollup 或 BLS rollup 等分層的實驗性技術將來更有機會在 Nervos 上實現。
3.CKB 上能夠實現可更新合約
合約部署後沒法更新一直是區塊鏈開發者的心頭之痛,然而由於 CKB 交易中,能夠驗證 input cell 中 lock script 中的全部權,以及驗證 type script 中的生成規則,而且還能經過 cell dep 引用其餘的 cell,因此咱們可以在 CKB 上產生像是 Type ID 這樣的利器。所謂 Type ID 是指某個 Cell 在肯定只有某個獨一無二的 Type ID 的條件下,持續更新合約,兼顧可升級與肯定性,讓開發者更靈活地部署並升級本身的合約腳本。
4.能夠更靈活的支付手續費
對於 CKB 而言,其實交易的手續費支付具備很是大的靈活性,咱們能夠經過 Open Transaction 的方式,將各個交易進行構造,這樣的狀況下咱們不但能夠更靈活的用各類非原生的代幣支付手續費,繞開因原生代幣不足而沒法支付手續費 ,交易沒法成功的窘境,甚至在構造交易時,咱們還能夠選擇讓交易的另外一方幫你支付手續費。
5.Cell dep 調用的靈活性
若是您曾經在以太坊上進行開發,就會知道在以太坊上沒法經過一個交易調用兩個先前的合約,由於本質上咱們須要調用的是兩個合約帳戶,這時候就必須得到兩次的合約受權(Approved),但在 CKB 中,咱們能夠將許多的合約經過 cell dep 與 type script 被調用,能夠在使用更少的資源下實現更高的組合性。
除了上面提到了靈活性以外,在 CKB 上的開發者還能夠在擁抱靈活編程模型的同時,享有肯定性。由於作爲 Layer 1 的 Nervos CKB,它只負責執行狀態的驗證,狀態的生成發生在鏈下,所以它並不會像以太坊那樣,開發者的合約須要通過計算才能獲得成果。在 CKB 中,咱們在鏈下就可以預期交易的輸出狀態,讓總體交易的執行能夠知足「肯定性」這個去中心化應用的核心要求。因此,在狀態具備肯定性的特性下,開發者的合約能夠避免被挪做它用,或是受到惡意攻擊。這樣一來,咱們就可以最大程度的確保總體系統的穩定性。
最後,CKB 爲你們提供了極大的靈活性和安全性,而對於它的探索還只是剛剛開始,它的不少功能和潛力還遠遠沒有被你們發現。你是否也想進入 CKB 的世界遨遊一番?正好,咱們爲開發者們精心準備了一個 CKB 編程體驗課 😜
課程中,除了深刻淺出的實操技能外,咱們還爲你們安排了多位可愛的助教。有興趣的夥伴們趁着如今趕忙一塊兒加入吧,歡迎掃碼報名,或者點擊閱讀原文了解這門「CKB 編程體驗課」。
👇👇👇
👆👆👆開發者們,快來掃碼報名!