十分钟部署智能合约
eos环境搭建
1.git clone源代码
git clonehttps://github.com/EOSIO/eos --recursive
2.下载编译以后,里面有三个应用程序,这三个应用程序也都是命令行的:javascript
一、Cleos;html
二、Nodeos;前端
三、Keosd。java
这三个应用程序之间有什么关系呢?咱们如今使用的前端,怎么使用EOS呢?
-Cleos,它是一个命令行程序。在前端使用EOS是经过Cleos输入命令,给EOS下达指令。
-Nodeos,其实它就是挖矿客户端。在启动Nodeos以后,它天然就会产生区块。
-Keosd,它是在后端启动。它的目的主要是管理钱包,能够建立私钥。为何分红Nodeos和Keosd?
我理解的是,Keosd能够认为是个轻客户端,由于有时候只须要进行钱包操做,不须要挖矿,就能够启动Keosd。node
节点启动
第一步下载编译完成后
cd build/programs/nodeos ./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugineosio::chain_api_plugin --plugin eosio::account_history_api_plugin
ios
整个eos是一个插件式的结构 须要有一个主程序 其余的功能拓展都是一个插件。c++
建立和管理钱包
建立钱包
Cleos wallet create
建立一组秘钥
cleos create key
私钥导入钱包
cleos wallet import
查看钱包中的秘钥
cleos wallet keysgit
建立和管理帐户
账号:一个在区块链上人类的可读标识符
$ cleos createaccount eosio ${new_account} ${owner_key} ${active_key}
备注:
eos是超级用户 用来建立其余用户 eosio后面是新用户的用户名github
除了新帐号以外 还有两个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
https://eosio.github.io/eos/group__eosiorpc.htm
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