在上一篇文章《EOS开发环境搭建》中,咱们已经完成了EOS开发环境的搭建,本次为你们带来的是EOS开发入门的相关内容。html
智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约容许在没有第三方的状况下进行可信交易,这些交易可追踪且不可逆转。c++
require_auth
——require_auth(name user)
: 验证用户是否有签名[[eosio::action]]
action
声明的特殊标记asset
是eos官方提供的一个结构体,内部主要有2个元素:amount
,symbol
eosio_assert( expr, "errmsg" )
验证表达式是否位置,相似于以太坊的assert
[[eosio::table]]
table
声明的特殊标记,在结构体声明中使用multi_index
是eos提供的一个数据库存储结构,能够支持多个索引,一样有增删改查接口struct [[eosio::table]] task { uint64_t taskID; name creator; name worker; asset bonus; uint8_t status = 0; string remark; string comment; uint64_t primary_key()const { return taskID; } }; typedef eosio::multi_index< "tasks"_n, task > tasks; //tasks 是最终的表名字,task是结构体名字
multi_index
可使用 find
,emplace
,modify
,earse
四个接口,使用时须要先用tasks
定义变量tasks tk( _code, _code.value ); tk.emplace( creator, [&](auto &t){ t.creator = creator; t.worker = worker; t.taskID = tk.available_primary_key();//主键自动增加 t.bonus = taskBonus; t.remark = memo; });
这是一个空的abi文件数据库
{ "version": "eosio::abi/1.0", "types": [], "structs": [], "actions": [], "tables": [], "ricardian_clauses": [], "abi_extensions": [], "___comment" : "" }
types
新类型定义structs
合约内结构体定义actions
合约内动做定义,注意在合约中须要使用特殊的标记才能在abi中获得tables
合约内表结构定义,注意在合约中须要使用特殊的标记才能在abi中获得ricardian_clauses
李嘉图条款abi_extensions
扩展 其中structs
,actions
,tables
能够认为是abi文件的三要素,每一个合约内能够有多个action
,每一个action
会执行这样那样的逻辑,须要借助结构体的结构将信息存储或变动保存在区块链中,这个保存的数据咱们类比为传统数据库中的表,也就是tables
。咱们学习智能合约编写主要要写什么?其实就是写一个一个action
,相似于rpc中的微服务。与传统数据库编程同样,咱们一样也是围绕着table作增删改查操做。编程
#include <eosiolib/eosio.hpp> #include <eosiolib/print.hpp> using namespace eosio; class hello : public contract { public: using contract::contract; [[eosio::action]] void hi( name user ) { print( "Hello, ", user); } }; EOSIO_DISPATCH( hello, (hi))
上例中hello是咱们的类名,须要继承eos为咱们提供的基类contract,[[eosio::action]]是一个特殊用法,定义一个action必须在函数声明前加上此标记。hi这个函数就是一个 action,本例实现的就是一个打招呼的action,根据输入的不一样用户进行打招呼。json
EOSIO_DISPATCH( hello, (hi)) 是生成action的关键,EOSIO_DISPATCH是eos提供的宏,hello显然就是类名,(hi)就是要生成的action,若是多个action,采用相同格式在后面添加。函数
eosio-cpp -o hello.wasm hello.cpp --abigen
cleos create account eosio hello YOUR_PUBLIC_KEY -p eosio@active
cleos set contract hello ./hello -p hello@active
//先建立一个普通帐户bob cleos create account eosio bob YOUR_PUBLIC_KEY -p eosio@active //bob调用hello合约的hi动做 cleos push action hello hi '["bob"]' -p bob@active
到这一步,一个简单的hello智能合约就部署并调用完成了,快来试试吧。下次将为你们分享关于EOS开发实战的内容,敬请关注。微服务