eos bios合约和token合约详解

bios 合约:

CMakeFiles           CTestTestfile.cmake  eosio.bios.abi.hpp    eosio.bios.cpp.bc  eosio.bios.wasm  eosio.bios.wast.hpp
cmake_install.cmake  eosio.bios.abi       eosio.bios.bc       eosio.bios.s       eosio.bios.wast  Makefile

bios的全称是 Basic Input/Output System (基本输入输出系统)。EOS 官方对它的定义是,通过此合约第一我们可以直接控制其它账户的资源分配,第二可以使用其它需要权限的API调用。
出于实用主义的角度我们先对此不做过多探讨——如果把 EOS 或者说 nodeos 看做一个操作系统,我们把 bios 合约看做启动计算式时按 F8 就能进入的 bios 系统就可以了。这东西必不可少,软件的运行建立在这个基础上,但我们一般情况下不用去管它,只要保证它顺利加载就行。

token 合约:

CMakeFiles           CTestTestfile.cmake  eosio.token.abi.hpp      eosio.token.cpp.bc  eosio.token.wasm  eosio.token.wast.hpp
cmake_install.cmake  eosio.token.abi      eosio.token.bc           eosio.token.s       eosio.token.wast  Makefile

token 合约提供了代币的发行与转账功能。所以我们才能实现一行代码发币,因为就是一个智能合约。

启动节点,注意这是第一步,相当于开启计算机一样

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

会出现问题:最新的eos(1.01),这个插件account_history_api_plugin过期了,account_history_api_plugin,换成history_api_plugin

./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin eosio::history_api_plugin

eos发一个币:

1,创建钱包,需要进入 cleos 文件夹,返回给你一个钱包的私钥.

如果说 nodeos 是一个操作系统,那么 cleos 就是相当于 Terminal 的「命令行工具」。
cleos 是 EOS 的命令行工具,负责在 nodeos 上 做三件事情——与区块链系统的交互、管理钱包、管理账户。

root@VM-0-7-ubuntu:/home/ubuntu/eos/build/programs/cleos# ./cleos  wallet create
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KWuky28us2Y7551zuEsp9AvqNEg9gSzkMb9tCqTqjh9dodYH2r"

2,加载 bios 合约
EOS 看做一个操作系统,那么 bios 合约就是让我们能进行最底层的操作的合约,其它合约的运行建立在 bios 合约的基础之上,所以我们先来加载 bios 合约。

./cleos set contract eosio ../../contracts/eosio.bios -p eosio

3,创建账户
在 EOS 中,一个钱包可以对应多个账户。在本例中,我们创建两个账户,一个是 currency 账户,用来执行「发币合约」的账户。另一个是hua 账户,用来测试转账操作的普通账户。
(1)生成密钥对

root@VM-0-7-ubuntu:/home/ubuntu/eos/build/programs/cleos# ./cleos create key
Private key: 5JSFLTY2d83BWuEXscn3H5W3qprbNQdbZB3dUQn5RMpRyB78Li4
Public key: EOS5oRJ73UwkCHoDFNjuwgubeUDni3wjmzyHc5n7ErbUkSvdsm5tM

(2)钱包导入私钥
有时会锁住,需要解锁:

 root@VM-0-7-ubuntu:/home/ubuntu/eos/build/programs/cleos# cleos wallet unlock --password   5JSFLTY2d83BWuEXscn3H5W3qprbNQdbZB3dUQn5RMpRyB78Li4
    Error 3120005: Invalid wallet password
  Are you sure you are using the right password?
  Error Details:
  Invalid password for wallet: "/root/eosio-wallet/./default.wallet"
  error during aes 256 cbc decrypt final
 root@VM-0-7-ubuntu:/home/ubuntu/eos/build/programs/cleos#     cleos wallet unlock --password   PW5KWuky28us2Y7551zuEsp9AvqNEg9gSzkMb9tCqTqjh9dodYH2r
  Unlocked: default

然后导入私钥:

root@VM-0-7-ubuntu:/home/ubuntu/eos/build/programs/cleos# ./cleos wallet import 5JSFLTY2d83BWuEXscn3H5W3qprbNQdbZB3dUQn5RMpRyB78Li4
imported private key for: EOS5oRJ73UwkCHoDFNjuwgubeUDni3wjmzyHc5n7ErbUkSvdsm5tM

(3)用公钥创建账户 currency 账户

./cleos create account eosio currency EOS5oRJ73UwkCHoDFNjuwgubeUDni3wjmzyHc5n7ErbUkSvdsm5tM EOS5oRJ73UwkCHoDFNjuwgubeUDni3wjmzyHc5n7ErbUkSvdsm5tM

重复创建hua账户
./cleos create key
./cleos wallet import [ 生成的私钥 ]
./cleos create account eosio hua [ 生成的公钥 ] [ 生成的公钥 ]

(4) 检查一下两个账户是否已经存在了

./cleos get account currency

发币

现在有三个账户—— eosio 账户(默认)、currency 账户和 hua 账户。用 currency 账户加载并执行「发币合约」

1,加载合约
先看一下 currency 账户的合约情况:

./cleos get code currency

2,加载系统自带的发币合约

./cleos set contract currency ../../contracts/eosio.token

3,再次运行第一步,如果发现 code hash 不是 0 了,就说明发币合约加载成功!

  ./cleos get code currency
  code hash: 641f336aa1d08526201599c3c0ddb7a646e5ac8f9fd2493f56414d0422a0f957

4,用 currency 账户执行「发币合约」,先创造货币

cleos push action currency create '["currency","1000 EOS",0,0,0]' -p currency

或者不同表达语句

cleos push action currency create '{"issuer":"currency", "maximum_supply": "10.0000 DMB", "can_freeze": 1, "can_recall": 1, "can_whitelist": 1}' -p currency@active 

5,发行货币。
但还没有账户持有币。所以,我们要给账户「发币」。
给 currency 账户发了 100 个币。

cleos push action currency issue '["currency","100 EOS","issue"]' -p currency
executed transaction: c8de7980c3cc98e97eba24249f75f1762848e019cba968bd029592dbc290d026  128 bytes  585 us
#      currency <= currency::issue                  {"to":"currency","quantity":"100 EOS","memo":"issue"}
warning: transaction executed locally, but may not be confirmed by the network yet

或者不同表达语句:
./cleos push action currency issue '{"to":"currency","quantity":"10.0000 DMB","memo":"币须小达摩"}' --permission currency@active

6,验证一下,通过以下命令查看 currency 账户余额。

./cleos get table currency currency accounts

7,转账操作
currency 账户会将 20 个币 转给 hua 账户:

./cleos push action currency transfer '["currency","hua","1 EOS",""]' -p currency

或者不同表达语句:
./cleos push action currency transfer '{"from":"currency","to":"hua","quantity":"1.0000 DMB","memo":"币须小达摩给你转了1个币"}' --permission currency@active

8,查看 currency 和 hua 两个账户的余额

./cleos get table currency hua accounts
./cleos get table currency currency accounts

你可能感兴趣的:(eos bios合约和token合约详解)