substrate學習筆記8:ink合約開發之初體驗

linghuyichong發表於2022-03-30

本節開始,我們將開始學習ink合約開發。

  • 環境依賴

需要安裝nightly工具鏈:

rustup component add rust-src --toolchain nightly
rustup target add wasm32-unknown-unknown --toolchain nightly
  • 安裝substrate contract node

因為部署合約需要使用到pallet-contracts pallet,我們這裡使用已經配置好該pallet的模板。安裝命令如下:

cargo install contracts-node --git https://github.com/paritytech/substrate-contracts-node.git --tag v0.3.0 --force --locked
  • 安裝ink!CLI

為了方便的設定substrate智慧合約,我們需要安裝ink!CLI。

(1)安裝ink!CLI需要先安裝依賴binaryen包,命令如下:

# For Ubuntu or Debian users
sudo apt install binaryen

# For MacOS users
brew install binaryen

(2)安裝ink!CLI,命令如下:

cargo install cargo-contract --vers ^0.16 --force --locked

(3)安裝後,可以用如下命令檢視:

cargo contract --help

建立合約工程,命令如下:

cargo contract new flipper

3.1 合約原始碼

透過前面的命令,ink!CLI給我們生成了一個最簡單的智慧合約程式碼。程式碼非常簡單,有興趣的小夥伴可以看一下生成的程式碼,在flipper/lib.rs中。

3.2 測試合約程式碼

在生成的程式碼中,我們可以看到有測試程式碼,我們可以對其用鏈下測試環境進行測試,在flipper目錄下執行如下命令:

cargo +nightly test

3.3 編譯合約程式碼

編譯合約的命令如下:

cargo +nightly contract build

注意

編譯好後的合約在target目錄中,其中包含一個metadata檔案和.contract檔案。.contract檔案就是用來部署到鏈上的合約檔案,而metadata檔案則包含合約的ABI。

執行命令如下:

substrate-contracts-node --dev --tmp

部署合約需要我們在瀏覽器開啟工具Canvas UI,然後選擇點選左下角的Local Node,這樣就連線到了我們本地的節點。

substrate中部署合約主要有以下兩步:

  • 把合約程式碼放在鏈上;
  • 建立合約的例項。

5.1 上傳合約程式碼

連線上Canvas UI後,我們可以上傳我們的合約程式碼,主要步驟如下:

  • 點選Upload & Instantiate Contract;
  • 在 Instantiation account選擇一個賬戶(如alice);
  • 在descriptive Name輸入一個名字;
  • 將我們前面編譯的flipper.contract檔案拖到drag & drop 區域;
  • 最後點選Constructor Details。

5.2 在鏈上例項化合約

智慧合約作為區塊鏈上賬戶系統的擴充套件而存在。因此,建立此合約的例項將建立一個新的AccountId,它將儲存智慧合約管理的任何餘額,並允許我們與合約互動。

在上面一步我們點選後,進入的例項化介面,我們需要填上合約例項化的名字,還有初始化的相關的值,然後點選instantiate,再點選Sign & Submit

至此,我們就把合約部署完成了。

我們現在可以執行合約了,點選ABI,可以看到有getflip兩個函式,選擇後,點選execute按鈕,可以執行。

至此,我們就使用官方的例子體驗了一下ink!合約。

docs.substrate.io/tutorials/v3/ink...

github.com/anonymousGiga/substrate...

本作品採用《CC 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章