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