以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > 幣贏 > Info

BST:區塊鏈研究實驗室 | 基于substrate創建Ink智能合約

Author:

Time:1900/1/1 0:00:00

Parity的Substrate區塊鏈框架,在最終版本開發中取得不錯的進展。Ink是Parity為基于Substrate的區塊鏈編寫智能合約的解決方案。

與Substrate一樣,Ink建立在Rust之上,因此遵循Rust語言規則和語法。本文將介紹一個示例在智能合約中復制一個ERC721令牌,通常稱為以太坊區塊鏈上的ERC721令牌。

這是系列文章的第1部分,將介紹創建和部署此Ink智能合約的過程,具體來說,我們將介紹:

如何安裝Substrate和Ink及其依賴項;

編寫支持3個主要功能的簡單不可替代令牌合同:創造令牌,轉移令牌,以及批準另一個帳戶代表發送令牌;

如何在Substrate區塊鏈上構建和部署智能合約,并使用PolkadotJS應用程序在鏈上測試功能;

注意:PolkadotJS應用程序不僅設計用于管理Polkadot本身,還管理任何Substrate鏈。接口是動態的,因為可用的管理選項取決于Substrate鏈支持的功能。

在本文中,我們將介紹Ink的安裝過程及其所需的依賴關系,并介紹本系列附帶的ERC721令牌示例合同,討論Ink合同的結構以及它與基于Solidity的合同的區別,以及兩者之間的相似性。

非同質化令牌

非同質化令牌NFT與ERC20型令牌不同,每個令牌都是獨一無二的。在我們的合同中,每個令牌都有一個用于表示令牌的唯一ID。從這里開始,每個令牌都可以擁有自己的值,自己的元數據,或者在應用程序或價值系統中具有特定用途。

歐洲多家央行高管:央行數字貨幣無需區塊鏈技術:瑞士央行副主席托馬斯·摩澤(Thomas Moser)和德意志聯邦銀行(Deutsche Bundesbank)的馬丁·迪爾(Martin Diehl)在9月21日舉辦的“歐洲區塊鏈公約虛擬2020大會”上討論了央行數字貨幣問題,他們似乎都認為包括中國人民銀行擬發行“數字人民幣”在內的央行數字貨幣并不需要使用區塊鏈技術。托馬斯·摩澤表示,當項目沒有中心化參與者的時候,區塊鏈可以扮演“信任方”的角色,而這也是區塊鏈技術的主要用例,這位高管表示:“舉個例子,比特幣,我認為就是一個很好的區塊鏈技術用例。”但是在央行數字貨幣情況下,中央銀行提供了“信任”,因此當中央銀行介入之后就沒有使用區塊鏈技術的必要了。(Cointelegraph)[2020/9/22]

批準轉移或管理令牌的非所有者帳戶也是不同的,并且必須在每個令牌的基礎上使用NFT完成。加密貓是最著名的例子,其中實現了非同質化令牌?-每個令牌代表平臺上的小貓。

NFT對標準令牌提出了不同的挑戰,因此我們可以根據Ink語法和功能進行更多探討。讓我們下一步安裝Substrate,Ink和所需的軟件包來編寫我們的智能合約。

系統安裝

開始編寫Ink合約需要一些依賴包。安裝后,我們可以在終端窗口-中運行一個Substrate鏈,我們將使用此鏈作為部署智能合約的方法。

rust

掌柜調查署 | Artem Kalikhov:Waves業務的發展需要區塊鏈技術提供高吞吐量等功能:在今日舉行的掌柜調查署中,針對“Waves Enterprise與其他區塊鏈平臺有何不同”的問題,Waves Enterprise CEO Artem Kalikhov表示,我們的平臺并不是一個框架,而是由許多不同的部分組成的。我們平臺的所有組成部分都是現成可用的或與現有IT系統集成的,Waves Enterprise只關注實際業務案例和現有企業客戶所需的功能,這也是我們所有研究和開發的基礎,目標是如何在商業領域中實際應用這項技術。事實上,業務的發展需要區塊鏈技術提供以下功能: 1.高吞吐量 2.無gas或其他費用的圖靈完備智能合約 3.數據隱私 4.具備集成至公司IT場景能力 5.法律和安全合規。所有的這些產品特征Waves Enterprise都具備。[2020/7/17]

Substrate和Ink依賴于rust。使用以下命令安裝Rust。下面還包含兩個命令,以確保您的NightlyRust版本是最新的,以及Webassembly構建對NightlyRust的支持:Ink合同編譯為.wasm文件,因此作為Webassembly部署到Substrate鏈。

注意1:Cargo是Rust的包管理器,其包裝稱為Crates。

注意2:參考最后一個命令,target指的是rust項目目錄中包含程序構建的目標文件夾。我們將在這里構建智能合約文件。

行情 | 美股區塊鏈概念股普遍收跌:今日美股收盤,美股區塊鏈概念股普遍收跌。柯達收跌2.43%, 埃森哲收跌0.23%,Overstock.com收漲4.83%,Riot Blockchain收跌4.49%;Marathon Patent收跌3.03%,Square收跌2.01%。[2019/10/17]

Substrate

使用以下命令安裝Substrate:

Wasmutilities

Ink智能合約在上傳到Substrate鏈之前會編譯到WebAssembly中。為此,我們需要安裝一些實用程序:

Ink

我們現在可以通過箱子安裝Ink,運行以下命令:

本地運行substrate鏈

我們將在您的機器上運行的本地Substrate區塊鏈上進行測試。現在安裝了Substrate,運行以下命令來初始化鏈:

--dev標志為您初始化開發區塊鏈,僅在您的計算機本地化并初始化一些用戶帳戶。

此設置純粹是為了測試目的;您可以將其視為與Truffle的Ganache程序,該程序運行本地基于以太坊的鏈,為測試目的進行了調整。

現在,您將注意到正在運行的節點正在驗證新區塊。按CTRLC或關閉終端窗口將停止節點執行,但鏈狀態將持續存在,直到您下一次運行鏈。在此注釋中,如果您想要開始一個新鏈,請運行以下操作來清除您的鏈:

聲音 | 哥倫比亞總統杜克:哥倫比亞正在積極發展區塊鏈等:據財新網8月2日報道,7月30日,哥倫比亞總統杜克(Iván Duque Márquez)在北京接受了財新記者專訪,對財新記者提問“對于那些有意到哥倫比亞旅游,想到哥倫比亞投資的中國人,你想傳遞怎樣的信息?”,其表示,我們是拉美人口第三大國,擁有重要的消費市場。我們也是“工業革命4.0”的中心之一,正在積極發展物聯網、人工智能、區塊鏈。因此我會告訴中國投資者:你必須來哥倫比亞,我們希望你來。[2019/8/3]

隨著我們的Substrate鏈運行和Ink的準備,我們可以編寫合同。在這樣做之前,還需要提到編輯器支持。我個人發現VisualStudioCode是最好的編輯工作,不僅是Ink開發,還有Rust開發。快速設置方法:

如果您還沒有安裝編輯器,請從此處安裝VSCode安裝RLS擴展和WebAssembly擴展。這可以直接在Extensions選項卡下的編輯器中完成,或按ShiftCMDX直接跳轉到它。

設置Ink項目

在安裝了所有依賴項之后,現在讓我們設置項目。

目前最簡單的方法是安裝Ink的“HelloWorld”合同,名為Flipper。安裝Flipper后,我們可以構建已經包含的內容,而不必擔心配置和編譯腳本-這些都在Flipper中提供。

注意:Substrate和Ink都處于快速發展階段并且尚未完成全部功能,因此智能合約環境和智能合約代碼本身很可能隨著Parity越來越接近框架的最終版本而改變。

前華為區塊鏈專家黃連金加入NULS顧問團隊:今日,NULS官方Twitter發布推文稱,美國 ACM Practitioner Board 委員,美國分布式商業應用公司CEO和創始人,中國電子學會區塊鏈專家委員,前華為區塊鏈專家黃連金出任NULS項目顧問,未來將為NULS項目發展做出戰略指導,并用其豐富的技術和國際從業經驗,為NULS建設技術社區,廣泛整合資源,促成NULS項目多方合作。據了解,NULS項目于昨天主網開啟公測,目前,已建立的共識節點遍布全球,而黃連金的加入,有利于NULS技術的完善和創新,并加快NULS應用落地及生態建設進程。[2018/4/28]

啟動我們的Ink項目,請使用cargo獲取Flipper:

Flipper為我們提供了開始編寫智能合約所需的項目樣板,包括:

src/lib.rs中的一個簡單的Flipper契約,它通過flip方法簡單地“翻轉”true和false之間的布爾值,并使用get方法在鏈上獲取此值。我們將用NFT合同替換此文件。

Rust特定的Cargo.toml文件,概述項目依賴項和模塊元數據,.gitignore文件和build.sh文件。build.sh文件是我們運行以編譯我們的智能合約,導致合同的已編譯.wasm文件,合同的JSON抽象等等。我們將進一步探討建成合約。

讓我們把flipper改成一個更合適的名字:nftoken。修改以下內容:

/flipper文件夾名稱為/nftoken

Cargo.toml:將name和name更改為nftoken

build.sh:修改PROJNAME=nftoken

另外,確保我們有權運行nftoken/build.sh:

最后,將/nftoken文件夾添加到vs代碼工作區,我們就可以開始編寫了。

關于Ink

Ink具有多個抽象級別,其中較高級別抽象較低級別。我們將使用最高級別,即語言級別或lang級別。這些級別也被分成了可以在這里探索的模塊。

lang模塊下面是模型和核心模塊,分別側重于中級抽象和核心實用程序。在核心模塊下方,我們還可以期望專門用于創建和管理Ink智能合約的CLI。

雖然在撰寫本文時幾乎沒有關于如何使用這些模塊的內容,但我們確實有原始API文檔可供瀏覽,包括核心模塊和模型模塊。如果您正在閱讀本文,那么現在可以瀏覽這些文檔,盡管我們下面的合同將利用其中一些API來展示如何通過不可互換的令牌合同在lang級別的上下文中使用它們。

考慮到這一點,接下來讓我們來看看我們的lang派生合約的結構是什么樣的,并將它與我們對基于Solidity的智能合約的期望進行比較。

智能合約架構

構造一個ink智能合約類似于solidity智能合約,其中我們期望的solidity的主要組成部分在ink中也是一致的:合同變量、事件、公共函數和私有函數,以及獲取調用方地址的環境變量等等。

下面是NFoTek契約是如何構造的抽象:

讓我們簡要地訪問這些部分,以及它們與我們對Solidity合同的期望有何不同。Ink是基于Rust構建的,因此這里的所有語法都是有效的Rust語法。

我們的模塊聲明部分是我們將外部功能引入合同的地方,它與Solidity使用聲明的性質類似。

事件在Event枚舉中聲明,而使用Solidity我們分別定義事件,將每個事件鍵入事件:

如果solidity合同嵌入到接口塊中,那么ink合同嵌入到合同中!宏。我們的事件在這個宏之外聲明,而事件在solidity接口內聲明。如下所述。

注意:rust中的宏是一個聲明,表示包裝表達式將被包圍的語法塊。宏在句法層面抽象,所以智能合約!宏正在用更多的語法包裝其內容。

使用Ink,我們的契約變量寫在我們合同名稱的結構中。從Rust的HashMap類型派生的哈希映射代替Solidity的映射類型,提供key=>值列表。

Substrate如何存儲值

在Substrate鏈上持久存儲的任何數據稱為外在數據,而Ink為我們提供了通過存儲模塊在鏈上存儲外部數據的方法,存儲模塊位于語言的核心模塊中。換句話說,您計劃在鏈上保留的所有合約變量都將使用存儲中的類型。相反,存儲器模塊也可用于在存儲器上操作的數據結構。

另一方面,Solidity對此采用了不同的方法。從Solidity0.5開始,存儲和內存引用類型被引入到函數參數或函數變量中,因此契約知道在哪里引用這些變量。但是,對于Solidity中的合同變量,這不是必需的。

原始類型也可用,并且在兩種語言中都是一致的;Rust使用u64,Solidity采用更詳細的uint64類型聲明。總的來說,在兩種語言之間實現相同的契約變量結構非常簡單。

在上面的示例中,存儲對象處理的值的類型通過尖括號傳入,而不是通過類型的泛型。

初始化函數的概念存在于Ink和Solidity中,盡管以不同的方式實現。使用Ink,我們在Deploy{}實現塊中顯式定義deploy方法。我們為此方法定義的參數代表了我們在初始化合同時發送的數據。例如。對于我們的不可替代的令牌,我們將提供初始數量的令牌:

公共和私有方法也在impl塊中定義,其中公共方法使用pub顯式定義。同樣,在將此語法與Solidity的語法進行比較時,內部和外部用于定義私有或公共資源。

注意:在Rust中,函數,模塊,特征和結構在默認情況下是私有的,并且必須使用pub關鍵字定義,以便它們可以從外部訪問。這里pub的擴展是特定于Ink的,并且必須包含公共Ink功能。

同樣,我們將私有函數和公共函數分開放在單獨的impl塊中,并為已定義的公共函數包含pub。

作為合同的最后一個構建塊,定義了一個測試模塊,在測試我們的函數時斷言各種條件。在測試模塊中,我們可以測試我們的合同邏輯,而無需編譯并將其部署到Substrate鏈,從而可以快速解決錯誤并驗證合同是否按預期工作。

接下來

我們現在已經討論了Ink智能合約的構建模塊。在本系列的下一部分中,我們將更深入地探討非可替代令牌智能合約的功能,理解所使用的Rust設計模式以及它們如何與我們的智能合約邏輯相結合。然后我們將介紹構建智能合約并將其部署到本地Substrate鏈的過程,并使用PolkadotJS測試其功能。

本文轉載公眾號:區塊鏈研究實驗室,專注區塊鏈技術,產品社群,經濟模型等全方位的知識體系輸出,為大家帶來不一樣的社群學習體驗。歡迎聯系作者微信加入社群:csschan1120??

Tags:INK區塊鏈RATBSTDAppLinks區塊鏈專業學什么PIRATECOINBST幣

幣贏
BOO:Facebook前高級研究科學家蔣長浩:Facebook與現有公鏈會出現差異化的發展趨勢

巴比特現場報道,6月20日,在Facebook元老獨家解讀Libra會上,Cobo聯合創始人、Facebook前高級研究科學家蔣長浩表示,對于比特幣、區塊鏈行業都是巨大利好和正向推動.

1900/1/1 0:00:00
數字貨幣:陳云:如何解釋“百年巨象”區塊鏈?

與“先行者”同行 陳云|《區塊鏈關鍵詞》第一任主編??WBF通證研究院院長、巨象資本創始人區塊鏈技術自2008年誕生至今,已經過去了10年時間,而在這10年間,人們經歷了加密貨幣的暴漲和暴跌.

1900/1/1 0:00:00
SIM:同樣是9000美元,今天的比特幣和兩年前有何不同?

上周末,比特幣一路狂飆猛擊,終于再度站穩9000美元重大關口,市場看漲情緒空前高漲。2017年11月,BTC首次突破9千美元.

1900/1/1 0:00:00
比特幣:Facebook發幣的奧秘竟是這些 比特幣何去何從?

本著負責,專注,誠懇的態度用心寫每一篇分析文章,特點鮮明,不做作,不浮夸!本內容中的信息及數據來源于公開可獲得資料,力求準確可靠,但對信息的準確性及完整性不做任何保證,本內容不構成投資建議.

1900/1/1 0:00:00
LIBRA:K網國際站即將上線LIBRA(Facebook穩定幣)的公告

尊敬的用戶: K網國際站即將上線Facebook加密項目穩定幣LIBRA,具體上線時間請留意K網國際站公告,敬請期待.

1900/1/1 0:00:00
穩定幣:區塊鏈的帕累托最優解

昨天下午Facebook發布了自己的天秤座代幣的白皮書。據官方內容顯示,Libra穩定幣的出現,將作為一種簡單的全球貨幣和金融基礎架構,惠及數十億人。也就是說天秤座穩定幣的目標是做普惠金融.

1900/1/1 0:00:00
ads