智能合约 EOS3.0 智能合约使用指南

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

EOSIO 3.0 使用指南

运行本地节点

方法1

nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin

方法2

  • step1:运行nodeos,节点会创建nodeos的config.ini 文件,文件地址可能在两个地方: 1.eos/build/etc/node_00/ 2.~/.local/share/eosio/nodeos/config/
  • step2: 更改config文件,然后运行nodeos,就可以正常运行。

创建钱包

创建钱包的操作跟2.0一样,这里就不再多说基本的步骤:

cleos wallet create -n wallet_name //创建钱包
cleos wallet import -n wallet_name key //导入私匙
cleos wallet open -n wallet_name //
cleos wallet unlock -n wallet_name --password password
cleso wallet lock_all
cleos wallet lock -n wallet_name

使用系统默认的eosio.bios合约

现在我们有一个带有eosio加载密钥的钱包,我们可以设置默认的系统合同。 为了开发目的,可以使用默认的eosio.bios合约。 此合约使您可以直接控制其他帐户的resoruce分配并访问其他特权api调用。 在公共区块链中,该合同将管理令牌的放样和取消操作,以预留cpu和网络活动的带宽以及合同的内存。

执行结果如下:

lome@lome:~/eos/build$ cleos set contract eosio contracts/eosio.bios -p eosio
Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: 0bb7ae021dffb931200c20ed6f4cb81fefd089bebbce7346cf41c86e554f57f6  4068 bytes  10000 cycles
#         eosio <= eosio::setcode               {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001ab011960037f7e7f0060057f7e7e7e...
#         eosio <= eosio::setabi                {"account":"eosio","abi":{"types":[],"structs":[{"name":"set_account_limits","base":"","fields":[{"n...

创建账户

创建账户的代码跟2.0也是一样的:

lome@lome:~/eos/build$ cleos create account eosio lome EOS5sU4bj1UhjNNLzP4CYmmoHPm9rpUkqX74ra5FiFwBGwznHt59P EOS5sU4bj1UhjNNLzP4CYmmoHPm9rpUkqX74ra5FiFwBGwznHt59P
executed transaction: 957e5d8ff2e9d98db6ba6e1efc6dc6e2e57e1123ff81f78cadf6bf9fa11ef4ea  364 bytes  1000 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"lome","owner":{"threshold":1,"keys":[{"key":"EOS5sU4bj1UhjNNLzP4CYmmoHPm9...

通过key获取账户

1.在创建一个账户:

lome@lome:~/eos/build$ cleos create account eosio lome2 EOS5sU4bj1UhjNNLzP4CYmmoHPm9rpUkqX74ra5FiFwBGwznHt59P EOS5sU4bj1UhjNNLzP4CYmmoHPm9rpUkqX74ra5FiFwBGwznHt59P
executed transaction: deab457f2c4f4e98f7447fd87ccb92149766f809dcd3577525e03c87fa4d55c5  364 bytes  1000 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"lome2","owner":{"threshold":1,"keys":[{"key":"EOS5sU4bj1UhjNNLzP4CYmmoHPm...
  1. 获取使用该密匙的账户: shell lome@lome:~/eos/build$ cleos get accounts EOS5sU4bj1UhjNNLzP4CYmmoHPm9rpUkqX74ra5FiFwBGwznHt59P { "account_names": [ "lome", "lome2" ] } ## 创建一个token 合约
  2. 创建账户 shell lome@lome:~/eos/build$ cleos create account eosio eosio.token EOS8mvgDwRv8kiX213BN38UeTE8ga2TckKyKUaAGzE3LguCKVETzu EOS8mvgDwRv8kiX213BN38UeTE8ga2TckKyKUaAGzE3LguCKVETzu executed transaction: 2cd3d9266a5cf250c7d8900eacfa16c58791b5c442c305fe90d32743bfe11af2 364 bytes 1000 cycles # eosio <= eosio::newaccount {"creator":"eosio","name":"eosio.token","owner":{"threshold":1,"keys":[{"key":"EOS8mvgDwRv8kiX213BN3...
  3. 部署合约

    lome@lome:~/eos/build$ cleos set contract eosio.token contracts/eosio.token -p eosio.token
    Reading WAST...
    Assembling WASM...
    Publishing contract...
    executed transaction: f0f4a179c15f6655fd79a11b62c1a948c82ade13e1e44a5c35e5f79cf00af470  8708 bytes  10000 cycles
    #         eosio <= eosio::setcode               {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"0061736d0100000001ce011d60067f7e7f7f7f7f00...
    #         eosio <= eosio::setabi                {"account":"eosio.token","abi":{"types":[],"structs":[{"name":"transfer","base":"","fields":[{"name"...
    

    创建EOS token

    我们可以在eosio.token合约中看到,合约有三个方法如下所示:

    void create( account_name issuer,
                      asset        maximum_supply,
                      uint8_t      issuer_can_freeze,
                      uint8_t      issuer_can_recall,  
                      uint8_t      issuer_can_whitelist );
    
         void issue( account_name to, asset quantity, string memo );
    
         void transfer( account_name from,
                        account_name to,
                        asset        quantity,
                        string       memo );
    

    一个创建\一个发布\一个转账.

创建EOS token

lome@lome:~/eos/build$ cleos push action eosio.token create '["eosio","10000000000.0000 EOS",0,0,0]' -p eosio.token
executed transaction: a160153e605f047e67a02a330a564cdd1a5cdb53c0b4245a65c0145e80e0c19e  260 bytes  1000 cycles
#   eosio.token <= eosio.token::create          {"issuer":"eosio","maximum_supply":"10000000000.0000 EOS","can_freeze":0,"can_recall":0,"can_whiteli...

另外一种更详细的方式来调用这个方法,使用命名参数:

lome@lome:~/eos/build$ cleos push action eosio.token create '{"issuer":"eosio","maximum_supply":"10000000000.0000 EOS","can_freeze":0,"can_recall":0,"can_whitelist":0}' -p eosio.token
executed transaction: a160153e605f047e67a02a330a564cdd1a5cdb53c0b4245a65c0145e80e0c88e  260 bytes  1000 cycles
#   eosio.token <= eosio.token::create          {"issuer":"eosio","maximum_supply":"10000000000.0000 EOS","can_freeze":0,"can_recall":0,"can_whiteli...

发放token

lome@lome:~/eos/build$ cleos push action eosio.token issue '[ "lome", "100.0000 EOS", "memo" ]' -p eosio
executed transaction: fff713e1bebdd34b91e08de07e4df8e3060356ca79d902226b83f2fe9198d507  268 bytes  1000 cycles
#   eosio.token <= eosio.token::issue           {"to":"lome","quantity":"100.0000 EOS","memo":"memo"}
>> issue
#   eosio.token <= eosio.token::transfer        {"from":"eosio","to":"lome","quantity":"100.0000 EOS","memo":"memo"}
>> transfer
#         eosio <= eosio.token::transfer        {"from":"eosio","to":"lome","quantity":"100.0000 EOS","memo":"memo"}
#          lome <= eosio.token::transfer        {"from":"eosio","to":"lome","quantity":"100.0000 EOS","memo":"memo"}

从显示的日志可以看到具体的转账信息.

如果你想看到详情可以使用-d -j命令,他会以json的形式返回传账信息.

lome@lome:~/eos/build$ cleos push action eosio.token issue '[ "lome", "100.0000 EOS", "memo" ]' -p eosio -d -j
{
  "expiration": "2018-04-02T09:13:18",
  "region": 0,
  "ref_block_num": 15589,
  "ref_block_prefix": 3298773986,
  "net_usage_words": 21,
  "kcpu_usage": 1000,
  "delay_sec": 0,
  "context_free_actions": [],
  "actions": [{
      "account": "eosio.token",
      "name": "issue",
      "authorization": [{
          "actor": "eosio",
          "permission": "active"
        }
      ],
      "data": "0000000000a0248d40420f000000000004454f5300000000046d656d6f"
    }
  ],
  "signatures": [
    "EOSK3xkbqHF8aUYSm7o8KeH5tMsibgFAChiBccDh9tsnvKMsn7XQ1hq3otGapebivptwuFJBEs5Cj79yVxLsTHtBsFyw54VJ6"
  ],
  "context_free_data": []
}

转账给用户

将账户余额转给其它用户:

lome@lome:~/eos/build$ cleos push action eosio.token transfer '[ "lome", "lome2", "25.0000 EOS", "m" ]' -p lome
executed transaction: b1295caa79423f35e6710bbffc5221ab0980b959aeff052592cb1c491b09e28a  268 bytes  1000 cycles
#   eosio.token <= eosio.token::transfer        {"from":"lome","to":"lome2","quantity":"25.0000 EOS","memo":"m"}
>> transfer
#          lome <= eosio.token::transfer        {"from":"lome","to":"lome2","quantity":"25.0000 EOS","memo":"m"}
#         lome2 <= eosio.token::transfer        {"from":"lome","to":"lome2","quantity":"25.0000 EOS","memo":"m"}

在EOS3.0代币的发布及使用到这里就结束了.

共收到 61 条回复
strahe 将本帖设为了精华贴 04月02日 17:24

不错, 赞

教程很棒啊!!!

节点会创建nodeos的config.ini 文件,文件地址可能在两个地方: 1.eos/build/etc/node_00/
大佬,config.ini文件在~/Library/Application Support/eosio/nodeos/config 目录下,又改了

~/Library/Application Support/eosio/nodeos/config

这个应该是在mac下的


有谁遇到这个报错没?我试了最新代码和dawn-v3.0.0都不行呀

benyasin 回复

你钱包导入密匙了吗?另外:

cleos set contract eosio contracts/eosio.bios

就可以了,不用加-p eosio

lome 回复


导入了,中间的密钥就是config.ini中配置的,还是不行,真是奇怪了

benyasin 回复

你的本地节点日志是怎么样的?

我在部署hello world这个合约时,报这个错,请问是因为什么,那个-p代表什么?

-p是permission

lome 回复

请问下出现我这种报错可能的原因是什么呢?

这个团队不一般!前途无量!支持!!

为什么创建多个account要用同一对秘钥呢

bruce 回复

可以用多个密匙关于权限请到https://eosfans.io/topics/28

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册