EOS笔记四 合约工具eosio.cdt使用

作者: cowkeys | 来源:发表于2018-10-09 13:25 被阅读0次

    Intro:

    使用eosio进行合约编译时,发现一些问题,然后在找答案的时候 这里, 发现有人说eosio的合约contract/工具已经没有进行维护了,而是单独拆分出一个eosio.cdt
    (EOSIO Contract Development Toolkit 即eos合约开发工具集)
    因此记录一下使用cdt来进行合约开发编译的过程。

    安装

    安装完之后 会产生 eosio-cpp_, eosio-cc, eosio-ld, eosio-pp, and _eosio_abigen (These are the C++ compiler, C compiler, linker, postpass tool and ABI generator.) 这些交互工具

    // step 1
    $ git clone --recursive https://github.com/eosio/eosio.cdt
    
    // step 2
    // ./build.sh <CORE_SYMBOL> coresymbol可以理解为链名称 这里用eos
    $ ./build.sh EOS
    

    build完成之后会出现以下界面:

          ___           ___           ___                       ___
         /  /\         /  /\         /  /\        ___          /  /\
        /  /:/_       /  /::\       /  /:/_      /  /\        /  /::\
       /  /:/ /\     /  /:/\:\     /  /:/ /\    /  /:/       /  /:/\:\
      /  /:/ /:/_   /  /:/  \:\   /  /:/ /::\  /__/::\      /  /:/  \:\
     /__/:/ /:/ /\ /__/:/ \__\:\ /__/:/ /:/\:\ \__\/\:\__  /__/:/ \__\:\
     \  \:\/:/ /:/ \  \:\ /  /:/ \  \:\/:/~/:/    \  \:\/\ \  \:\ /  /:/
      \  \::/ /:/   \  \:\  /:/   \  \::/ /:/      \__\::/  \  \:\  /:/
       \  \:\/:/     \  \:\/:/     \__\/ /:/       /__/:/    \  \:\/:/
        \  \::/       \  \::/        /__/:/        \__\/      \  \::/
         \__\/         \__\/         \__\/                     \__\/
    For more information:
    EOSIO website: https://eos.io
    
    // step 3
    sudo ./install.sh
    

    安装完后 同样会出现安装成功画面, 这一步install会将下列可执行工具连接到 bin目录下

    llvm-ranlib
    llvm-ar
    llvm-objdump
    llvm-readelf
    eosio-cc
    eosio-cpp
    eosio-ld
    eosio-pp
    eosio-abigen
    wasm2wat
    wat2wasm

    区别

    1 我们可以看到 编译工具支持c11的语法 abi标记位的写法不一样了。

    // 新版本hello示例
    #include <eosiolib/eosio.hpp>
    using namespace eosio;
    class hello : public eosio::contract {
      public:
          using contract::contract;
    
          [[eosio::action]]
          void hi( account_name user ) {
             print( "Hello, ", name{user} );
          }
    };
    EOSIO_ABI( hello, (hi) )
    
    // 旧版示例
    #include <eosiolib/eosio.hpp>
    using namespace eosio;
    
    class hello : public eosio::contract {
      public:
          using contract::contract;
          /// @abi action 
          void hi( account_name user ) {
             print( "Hello, ", name{user} );
          }
    };
    EOSIO_ABI( hello, (hi) )
    

    2 其他可以看 new version difference

    编译

    在路径eosio.cdt/examples 有hello合约的示例

    cd eosio.cdt/examples/hello
    

    1 编译wasm文件(两种方式)

    // 1 手动编译
    $ eosio-cpp hello.cpp -o hello.wasm
    
    // 2 cmake编译 编译后在build目录下有hello.wasm文件
    $ mkdir build
    $ cd build
    $ cmake ../
    $ make
    

    2 编译abi文件

    // 1 在手动变异wasm文件的同时加上--abigen flag可以同时编译abi文件
    $ eosio-cpp hello.cpp -o hello.wasm --abigen
    
    // 2 直接使用eosio-abigen 编译
    $ eosio-abigen hello.cpp --output=hello.abi
    

    相关文章

      网友评论

        本文标题:EOS笔记四 合约工具eosio.cdt使用

        本文链接:https://www.haomeiwen.com/subject/xekeaftx.html