十分钟部署智能合约
eos环境搭建
1.git clone源代码
git clonehttps://github.com/EOSIO/eos --recursive
2.下载编译之后,里面有三个应用程序,这三个应用程序也都是命令行的:
1、Cleos;
2、Nodeos;
3、Keosd。
这三个应用程序之间有什么关系呢?我们现在使用的前端,怎么使用EOS呢?
-Cleos,它是一个命令行程序。在前端使用EOS是通过Cleos输入命令,给EOS下达指令。
-Nodeos,其实它就是挖矿客户端。在启动Nodeos之后,它自然就会产生区块。
-Keosd,它是在后端启动。它的目的主要是管理钱包,可以创建私钥。为什么分成Nodeos和Keosd?
我理解的是,Keosd可以认为是个轻客户端,因为有时候只需要进行钱包操作,不需要挖矿,就可以启动Keosd。
节点启动
第一步下载编译完成后
cd build/programs/nodeos ./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugineosio::chain_api_plugin --plugin eosio::account_history_api_plugin
整个eos是一个插件式的结构 需要有一个主程序 其他的功能拓展都是一个插件。
创建和管理钱包
创建钱包
Cleos wallet create
创建一组秘钥
cleos create key
私钥导入钱包
cleos wallet import
查看钱包中的秘钥
cleos wallet keys
创建和管理账户
帐号:一个在区块链上人类的可读标识符
$ cleos createaccount eosio ${new_account} ${owner_key} ${active_key}
备注:
eos是超级用户 用来创建其他用户 eosio后面是新用户的用户名
除了新账号之外 还有两个Key 一个是公钥(超级权限) 一个是active激活用的。(仅有转账权限)
帐号命名规则 小个字符 仅包含这些字符 数字和字母小写
eos权限许可
Threshold是某个许可需要的阈值。比如你要做一件事儿,它可能有个阈值,这个阈值是一个量化,你必须要达到这个阈值才可以进行相应的操作。Weight表示权重。账号必须对应某个许可拥有的权重,就是你的权重要大于你的阈值,然后这件事儿你就可以做。
两张有关的图说明权重:
https://mp.weixin.qq.com/s/OniYBJ6zbjxPrQYlZMhRWQ
publish就是一个定制化许可。我们每个用户也可以定义自己某些允许的一些操作。publish这里面的阈值是2,bob账号是2,stracy账号是2,这两个账号也可以单独做publish许可相关的操作。而publish的权限可能是比如发布一些消息、发布一些微博的操作。
eos智能合约
action trancaction
对于EOS,它多了一个action的概念,action其实它也是对一个智能合约中的某个函数的调用。transaction是由一个或者多个action组合而成的关系,就是在一个transaction里,可以包含多个action,这样你可以在一个transaction里签一次名,就可以调多个函数,做一组操作。
部署智能合约
部署
cleos set contract eosio build/contracts/eosio.bios -p eosio
运行
cleos set contracteosio.token build/contracts/eosio.token -p eosio.token
调用create函数
$ cleos push actioneosio.token create ‘[ “eosio”, “1000000000.0000 EOS”, 0, 0, 0]’ -p eosio.token
转移100个pdf币到user用户 代码如下
$cleos push actioneosio.token issue '[ "user", "100.0000 EOS","memo" ]' -p eosio
Issue这个操作是用来发币,它后面跟了3个参数:
一个是user,表示这个币发给谁;
数字表示要给这个用户转多少钱,我这里转了100多个user的token;
最后一个参数是是一个备注,相当于转账留言。
调试智能合约
官方推荐本地搭建节点 或者将信息pringt出来。 如果没有,那么你根本看不到打印信息。搭建本地节点后 能看到打印结果。
eos的rpc接口
前端:javascript html
RPC的接口我们除了用C++或者用编程的方法去调用一些接口,我们可以用curl这种最简单的方法去调用这个接口。
常用的api
获取信息 版本
获取区块信息
获取账号信息
eos编程示范: c++版
` // hello.cpp源代码
include<eosiolib/eosio.hpp>
include <eosiolib/print.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) )`
测试部署合约
编译
$ eosiocpp -o hello.wasthello.cpp
$ eosiocpp -g hello.abihello.cpp
创建账号
$cleos create account eosio hello.codeEOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 ...
部署
cleos set contract hello.code../hello -p hello.code
合约
cleos push action hello.codehi '["user"]' -p user