智能合约 我的第一个智能合约--Hello Eosfans

lome · 2018年02月04日 · 最后由 lome 回复于 2018年02月04日 · 928 次阅读
本帖已被设为精华帖!

EOS智能合约--Hello EosFans!


目录


  1. 智能合约文件的介绍
  2. 智能合约Hello EosFans!的编写
    1. .hpp文件
    2. .cpp文件
  3. 智能合约.wast .abi 文件自动生成
  4. 智能合约的发布
  5. 智能合约的使用测试

智能合约文件的介绍


.hpp 这个头文件当中是你的智能合约的声明和结构 .cpp 智能合约的逻辑和实现 .abi 定义了与用户交互的接口

⚠️.abi, .wast 文件都是可以通过eoscpp自动生成

智能合约的编写


.hpp文件

.hpp 文件中是智能合约的声明 由于我们只是打印一个hello name数据是不需要存储的用默认的数据结构就可以。所以就默认的据结构。

Hello.hpp
#include <eoslib/eos.hpp>
#include <eoslib/db.hpp>

.cpp文件

.cpp 文件是智能合约的逻辑和实现,里面是一些处理函数

Hello.cpp
#include <Hello.hpp>
//为了区块链能够调用init() 和 apply()函数,需要c语言。
extern "C" {
   // 初始化函数
    void init() {
        eosio::print( "Init Hello!\n" );
    }
   //apply实现了事务的调度
    void apply( uint64_t code, uint64_t action){
    //函数打印Hello name
        eosio::print( "Hello EosFans, My name is " , eosio::name(action), "!", "\n");
    }
}

智能合约.wast .abi 文件自动生成


  1. .abi文件生成 利用eoscpp生成.abi文件
eoscpp -g Hello.abi Hello.hpp
  1. .wast文件生成 利用eoscpp生成.wast文件
eoscpp -o Hello.wast Hello.cpp

智能合约的发布


发布智能合约 之前你要有自己的账户

eosc set constract eosfans Hello.wast Hello.abi

合约成功会返回一个交易数据:

{
  "transaction_id": "eaa6b2b711b6dfed02ff1e5602c1d51d41f2c65fe09ccc40634d99347acad8e5",
  "processed": {
    "ref_block_num": 31822,
    "ref_block_prefix": 2469205600,
    "expiration": "2018-02-04T09:13:58",
    "scope": [
      "eos",
      "eosfans"
    ],
    "signatures": [
      "207fe0208a779daf2be8ef8cea2f5feddd59bb0820e115b5accb6f27b3814a73e24a3f09d9fb32edf5f5e37e8b18c7eb7d37fb9032ab22eadcd8fef3d7c965dd56"
    ],
    "messages": [{
        "code": "eos",
        "type": "setcode",
        "authorization": [{
            "account": "eosfans",
            "permission": "active"
          }
        ],
        "data": {
          "account": "${account}",
          "vm_type": 0,
          "vm_version": 0,
          "code": "0061736d0100000001110460017f0060017e0060000060027e7e00021b0203656e76067072696e746e000103656e76067072696e7473000003030202030404017000000503010001071903066d656d6f7279020004696e69740002056170706c7900030a1c020600411010010b130041201001200010004130100141c00010010b0b37050041040b04504000000041100b0d496e69742048656c6c6f210a000041200b0748656c6c6f20000041300b0221000041c0000b020a000029046e616d6504067072696e746e0100067072696e7473010004696e697400056170706c790201300131",
          "code_abi": {
            "types": [],
            "structs": [],
            "actions": [],
            "tables": []
          }
        },
        "hex_data": "0000000000009e670000e5010061736d0100000001110460017f0060017e0060000060027e7e00021b0203656e76067072696e746e000103656e76067072696e7473000003030202030404017000000503010001071903066d656d6f7279020004696e69740002056170706c7900030a1c020600411010010b130041201001200010004130100141c00010010b0b37050041040b04504000000041100b0d496e69742048656c6c6f210a000041200b0748656c6c6f20000041300b0221000041c0000b020a000029046e616d6504067072696e746e0100067072696e7473010004696e697400056170706c79020130013100000000"
      }
    ],
    "output": [{
        "notify": [],
        "deferred_trxs": []
      }
    ]
  }
}

如果合约部署成功会看到:

808468ms            wasm_interface.cpp:1023       load                 ] wasm_interface::load name = eosfans times llvm:2 ms, init:0 ms, abi:0 ms
Init Hello!
Init Hello!
Init Hello!

智能合约的使用测试


eosc push message eosfans eosfans '""' --scope eosfans

测试成功会有交易生成:

{
  "transaction_id": "021b97c70ca422937e6e6876395eda6f07cb17f630d56d55cbf9f025d5debdbb",
  "processed": {
    "ref_block_num": 32314,
    "ref_block_prefix": 3899359429,
    "expiration": "2018-02-04T09:22:10",
    "scope": [
      "eosfans"
    ],
    "signatures": [],
    "messages": [{
        "code": "eosfans",
        "type": "eosfans",
        "authorization": [],
        "data": ""
      }
    ],
    "output": [{
        "notify": [],
        "deferred_trxs": []
      }
    ]
  }
}

你可以看到区块链日至里面如下显示:

1300008ms            producer_plugin.cpp:246       block_production_loo ] inits generated block #32314 @ 2018-02-04T09:21:40 with 0 trxs  0 pending
Hello EosFans: My name is eosfans!!
Hello EosFans: My name is eosfans!!
Hello EosFans: My name is eosfans!!

⚠️这里打印3次是,合约被第三次执行完以后确认了块

共收到 2 条回复
strahe 将本帖设为了精华贴 03月26日 03:40
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册