中移鏈合約常用開發介紹(三)工程化開發智慧合約

BSN研習社發表於2023-04-21

一、目的

本檔案基於中移鏈合約常用開發,介紹了工程化開發智慧合約的方法。本檔案將從自動生成專案展開,適合剛接觸合約開發的開發人員入門工程化開發。

二、智慧合約介紹

區塊鏈作為一種分散式可信計算平臺,去中心化是其最本質的特徵。每筆交易的記錄不可篡改地儲存在區塊鏈上。智慧合約中定義可以在區塊鏈上執行的動作action和交易transaction的程式碼。可以在區塊鏈上執行,並將合約執行狀態作為該區塊鏈例項不可變歷史的一部分。

因此,開發人員可以依賴該區塊鏈作為可信計算環境,其中智慧合約的輸入、執行和結果都是獨立的,不受外部影響。

三、術語解釋

CMake

CMake是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程)。它能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的C++特性,組態檔取名為CMakeLists.txt。熟悉某個整合開發環境(IDE)的開發者可以透過CMake用標準的方式建構軟體。

工程化開發

工程化是提高程式開發效率與質量的必由之路。工程化的開發專案主要體現在讓專案檔案以規範清晰的架構排布。

四、環境準備

(一)完全配置的本地開發環境

建立智慧合約專案並編譯部署需要完全配置的本地開發環境,確保系統可以執行eosio系列工具指令,如eosio-cpp。

可使用的環境有:

  • Linux Distributions

  • Amazon Linux 2

  • CentOS Linux 8.x

  • CentOS Linux 7.x

  • Ubuntu 20.04

  • Ubuntu 18.04

  • macOS

  • macOS 10.14 (Mojave)

  • macOS 10.15 (Catalina)

具體搭建過程可參考 [ 中移鏈(基於EOS)測試環境搭建]

(二)CMake及相關依賴

如果環境中未安裝CMake、Make等工具包,可以使用命令列語句進行安裝:

Mac OS

下載cmake提供的安裝包並安裝,開啟cmake點選選單欄的Tools->How to Install For Command Line Use,可以在介面中找到安裝該命令列工具所需的語句,例如:

    sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install

    Ubuntu

    在終端中使用以下語句下載並安裝cmake:

      sudo apt install -y gcc g++ make cmake

      CentOS

        sudo yum install -y gcc gcc-c++ make cmake

        五、開始建立工程

        (一)自動建立

        1、使用eosio-init指令初始化專案

        要用CMake編譯EOSIO智慧合約,你需要一個CMake檔案。要使用新的eosio-init工具生成目錄結構存根,.hpp、.cpp檔案和CMake配置檔案。

        執行以下步驟自動建立一個架構分明的專案檔案:

          cd ~/biosboot/genesis
          eosio-init --path=. --project=test_contract

          • --path=專案資料夾建立的位置,.表示就在當前路徑下建立

          • --project=專案名,本例中命名為test_contract

          2、檢查專案檔案

          指令執行成功後可以在指定路徑下得到test_contract資料夾,其中存放著專案預設的資料夾和檔案:

          • 資料夾

          • build

          • include

          • ricardian

          • src

          • 檔案

          • CMakeLists.txt

          • README.txt

          (二)初始化檔案簡介

          自動生成的初始化專案中存在一些預設生成的樣例檔案,主要內容為一個hi動作的實現,會在呼叫時列印出打招呼的賬戶名。

          .hpp檔案中的內容如下:

            
            #include <eosio/eosio.hpp>
            
            using namespace eosio;
            
            
            
            CONTRACT test_contract : public contract {   public:      using contract::contract;
                 ACTION hi( name nm );
                 using hi_action = action_wrapper<"hi"_n, &test_contract::hi>; };

            .cpp檔案中的內容如下:

            #include <test_contract.hpp> ACTION test_contract::hi( name nm ) {   /* fill in action body */   print_f("Name : %\n",nm); }

            不難看出該初始化專案中的兩個C++程式檔案僅作為樣例展示該智慧合約工程中的檔案存放位置和編寫格式。開發人員可以根據自己的需要按照此框架編寫自己的智慧合約檔案。

            (三)專案編譯

            執行以下指令編譯專案:

              cd build
              cmake ..
              make

              得到編譯成功的結果後,會在build資料夾中生成用於部署合約的.wasm和.abi檔案。

              六、常見問題

              由於版本問題cmake命令失敗

              使用cmake編譯專案時失敗,返回提示為:

              CMake Error in CMakeLists.txt:  No cmake_minimum_required command is present.  A line of code such as    cmake_minimum_required(VERSION 3.25)  should be added at the top of the file.  The version specified may be lower  if you wish to support older CMake versions for this project.  For more  information run "cmake --help-policy CMP0000".

              需要再test_contract/CMakelist.txt檔案中新增如下語句,指明cmake版本:

              cmake_minimum_required(VERSION 3.25)

              電腦訪問DDC網路門戶

              ddc.bsnbase.com

              -END-



              來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70012206/viewspace-2947445/,如需轉載,請註明出處,否則將追究法律責任。

              相關文章